mirror of
https://github.com/mistergibson/gxg-framework.git
synced 2026-08-15 03:46:00 -07:00
added object_map to collections
This commit is contained in:
parent
e4798df810
commit
29d9266ca3
3 changed files with 159 additions and 100 deletions
|
|
@ -3545,13 +3545,25 @@ class Hash
|
||||||
search_results
|
search_results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
|
def object_map()
|
||||||
|
result = {}
|
||||||
|
#
|
||||||
|
self.search do |the_value, the_selector, the_container|
|
||||||
|
self.paths_to(the_value).each do |the_subpath|
|
||||||
|
result[(the_subpath.to_s.to_sym)] = the_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
def get_at_path(the_path="/")
|
def get_at_path(the_path="/")
|
||||||
result = nil
|
result = nil
|
||||||
if the_path == "/"
|
if the_path == "/"
|
||||||
result = self
|
result = self
|
||||||
else
|
else
|
||||||
object_stack = [(self)]
|
object_stack = [(self)]
|
||||||
path_stack = the_path.split("/")
|
path_stack = the_path.to_s.split("/")
|
||||||
path_stack.to_enum.each do |path_element|
|
path_stack.to_enum.each do |path_element|
|
||||||
element = nil
|
element = nil
|
||||||
if path_element.size > 0
|
if path_element.size > 0
|
||||||
|
|
@ -3559,7 +3571,7 @@ class Hash
|
||||||
element = path_element.to_i
|
element = path_element.to_i
|
||||||
else
|
else
|
||||||
element = path_element
|
element = path_element
|
||||||
element.gsub!("%2f","/")
|
element = element.gsub("%2f","/")
|
||||||
element = element.to_sym
|
element = element.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -3582,16 +3594,16 @@ class Hash
|
||||||
def set_at_path(the_path="/",the_value=nil)
|
def set_at_path(the_path="/",the_value=nil)
|
||||||
result = nil
|
result = nil
|
||||||
if the_path != "/"
|
if the_path != "/"
|
||||||
container = self.get_at_path(::File::dirname(the_path))
|
container = self.get_at_path(::File::dirname(the_path.to_s))
|
||||||
if container
|
if container
|
||||||
raw_selector = ::File::basename(the_path)
|
raw_selector = ::File::basename(the_path.to_s)
|
||||||
selector = nil
|
selector = nil
|
||||||
if raw_selector.size > 0
|
if raw_selector.size > 0
|
||||||
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
selector = raw_selector.to_i
|
selector = raw_selector.to_i
|
||||||
else
|
else
|
||||||
selector = raw_selector
|
selector = raw_selector
|
||||||
selector.gsub!("%2f","/")
|
selector = selector.gsub("%2f","/")
|
||||||
selector = selector.to_sym
|
selector = selector.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -3886,6 +3898,80 @@ class Array
|
||||||
results
|
results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
|
def object_map()
|
||||||
|
result = {}
|
||||||
|
#
|
||||||
|
self.search do |the_value, the_selector, the_container|
|
||||||
|
self.paths_to(the_value).each do |the_subpath|
|
||||||
|
result[(the_subpath.to_s.to_sym)] = the_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
|
def get_at_path(the_path="/")
|
||||||
|
result = nil
|
||||||
|
if the_path == "/"
|
||||||
|
result = self
|
||||||
|
else
|
||||||
|
object_stack = [(self)]
|
||||||
|
path_stack = the_path.to_s.split("/")
|
||||||
|
path_stack.to_enum.each do |path_element|
|
||||||
|
element = nil
|
||||||
|
if path_element.size > 0
|
||||||
|
if (path_element =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
|
element = path_element.to_i
|
||||||
|
else
|
||||||
|
element = path_element
|
||||||
|
element = element.gsub("%2f","/")
|
||||||
|
element = element.to_sym
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if element
|
||||||
|
result = object_stack.first[(element)]
|
||||||
|
if result.is_a?(NilClass)
|
||||||
|
break
|
||||||
|
else
|
||||||
|
object_stack.unshift(result)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
# ignore double slashes? '//'
|
||||||
|
# break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
|
def set_at_path(the_path="/",the_value=nil)
|
||||||
|
result = nil
|
||||||
|
if the_path != "/"
|
||||||
|
container = self.get_at_path(::File::dirname(the_path.to_s))
|
||||||
|
if container
|
||||||
|
raw_selector = ::File::basename(the_path.to_s)
|
||||||
|
selector = nil
|
||||||
|
if raw_selector.size > 0
|
||||||
|
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
|
selector = raw_selector.to_i
|
||||||
|
else
|
||||||
|
selector = raw_selector
|
||||||
|
selector = selector.gsub("%2f","/")
|
||||||
|
selector = selector.to_sym
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if selector
|
||||||
|
container[(selector)] = the_value
|
||||||
|
result = container[(selector)]
|
||||||
|
else
|
||||||
|
# ignore double slashes? '//'
|
||||||
|
# break
|
||||||
|
end
|
||||||
|
#
|
||||||
|
end
|
||||||
|
end
|
||||||
|
result
|
||||||
|
end
|
||||||
#
|
#
|
||||||
def paths_to(the_object=nil,base_path="")
|
def paths_to(the_object=nil,base_path="")
|
||||||
# new idea here:
|
# new idea here:
|
||||||
|
|
@ -3957,73 +4043,6 @@ class Array
|
||||||
search_results
|
search_results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
def get_at_path(the_path="/")
|
|
||||||
# /^(?:[0-9])*[0-9](?:[0-9])*$/ = nil if an alpha present there, else 0 only numeric
|
|
||||||
# Attribution : http://stackoverflow.com/questions/1240674/regex-match-a-string-containing-numbers-and-letters-but-not-a-string-of-just-nu
|
|
||||||
#
|
|
||||||
# if ":" detected do: (str.gsub("%2f","/").to_sym) as key else (str.gsub("%2f","/"))
|
|
||||||
result = nil
|
|
||||||
if the_path == "/"
|
|
||||||
result = self
|
|
||||||
else
|
|
||||||
object_stack = [(self)]
|
|
||||||
path_stack = the_path.split("/")
|
|
||||||
path_stack.to_enum.each do |path_element|
|
|
||||||
element = nil
|
|
||||||
if path_element.size > 0
|
|
||||||
if (path_element =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
|
||||||
element = path_element.to_i
|
|
||||||
else
|
|
||||||
element = path_element
|
|
||||||
element.gsub!("%2f","/")
|
|
||||||
element = element.to_sym
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if element
|
|
||||||
result = object_stack.first[(element)]
|
|
||||||
if result.is_a?(NilClass)
|
|
||||||
break
|
|
||||||
else
|
|
||||||
object_stack.unshift(result)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
# ignore double slashes? '//'
|
|
||||||
# break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
result
|
|
||||||
end
|
|
||||||
#
|
|
||||||
def set_at_path(the_path="/",the_value=nil)
|
|
||||||
result = nil
|
|
||||||
if the_path != "/"
|
|
||||||
container = self.get_at_path(::File::dirname(the_path))
|
|
||||||
if container
|
|
||||||
raw_selector = ::File::basename(the_path)
|
|
||||||
selector = nil
|
|
||||||
if raw_selector.size > 0
|
|
||||||
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
|
||||||
selector = raw_selector.to_i
|
|
||||||
else
|
|
||||||
selector = raw_selector
|
|
||||||
selector.gsub!("%2f","/")
|
|
||||||
selector = selector.to_sym
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if selector
|
|
||||||
container[(selector)] = the_value
|
|
||||||
result = container[(selector)]
|
|
||||||
else
|
|
||||||
# ignore double slashes? '//'
|
|
||||||
# break
|
|
||||||
end
|
|
||||||
#
|
|
||||||
end
|
|
||||||
end
|
|
||||||
result
|
|
||||||
end
|
|
||||||
#
|
|
||||||
def gxg_export()
|
def gxg_export()
|
||||||
result = {:type => "Array", :content => []}
|
result = {:type => "Array", :content => []}
|
||||||
export_db = [{:parent => nil, :parent_selector => nil, :object => self, :record => result}]
|
export_db = [{:parent => nil, :parent_selector => nil, :object => self, :record => result}]
|
||||||
|
|
|
||||||
|
|
@ -1051,17 +1051,25 @@ module GxG
|
||||||
search_results
|
search_results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
def get_at_path(the_path="/")
|
def object_map()
|
||||||
# /^(?:[0-9])*[0-9](?:[0-9])*$/ = nil if an alpha present there, else 0 only numeric
|
result = {}
|
||||||
# Attribution : http://stackoverflow.com/questions/1240674/regex-match-a-string-containing-numbers-and-letters-but-not-a-string-of-just-nu
|
|
||||||
#
|
#
|
||||||
# if ":" detected do: (str.gsub("%2f","/").to_sym) as key else (str.gsub("%2f","/"))
|
self.search do |the_value, the_selector, the_container|
|
||||||
|
self.paths_to(the_value).each do |the_subpath|
|
||||||
|
result[(the_subpath.to_s.to_sym)] = the_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
|
def get_at_path(the_path="/")
|
||||||
result = nil
|
result = nil
|
||||||
if the_path == "/"
|
if the_path == "/"
|
||||||
result = self
|
result = self
|
||||||
else
|
else
|
||||||
object_stack = [(self)]
|
object_stack = [(self)]
|
||||||
path_stack = the_path.split("/")
|
path_stack = the_path.to_s.split("/")
|
||||||
path_stack.to_enum.each do |path_element|
|
path_stack.to_enum.each do |path_element|
|
||||||
element = nil
|
element = nil
|
||||||
if path_element.size > 0
|
if path_element.size > 0
|
||||||
|
|
@ -1069,7 +1077,7 @@ module GxG
|
||||||
element = path_element.to_i
|
element = path_element.to_i
|
||||||
else
|
else
|
||||||
element = path_element
|
element = path_element
|
||||||
element.gsub!("%2f","/")
|
element = element.gsub("%2f","/")
|
||||||
element = element.to_sym
|
element = element.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -1092,16 +1100,16 @@ module GxG
|
||||||
def set_at_path(the_path="/",the_value=nil)
|
def set_at_path(the_path="/",the_value=nil)
|
||||||
result = nil
|
result = nil
|
||||||
if the_path != "/"
|
if the_path != "/"
|
||||||
container = self.get_at_path(::File::dirname(the_path))
|
container = self.get_at_path(::File::dirname(the_path.to_s))
|
||||||
if container
|
if container
|
||||||
raw_selector = ::File::basename(the_path)
|
raw_selector = ::File::basename(the_path.to_s)
|
||||||
selector = nil
|
selector = nil
|
||||||
if raw_selector.size > 0
|
if raw_selector.size > 0
|
||||||
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
selector = raw_selector.to_i
|
selector = raw_selector.to_i
|
||||||
else
|
else
|
||||||
selector = raw_selector
|
selector = raw_selector
|
||||||
selector.gsub!("%2f","/")
|
selector = selector.gsub("%2f","/")
|
||||||
selector = selector.to_sym
|
selector = selector.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -2976,17 +2984,25 @@ module GxG
|
||||||
search_results
|
search_results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
def get_at_path(the_path="/")
|
def object_map()
|
||||||
# /^(?:[0-9])*[0-9](?:[0-9])*$/ = nil if an alpha present there, else 0 only numeric
|
result = {}
|
||||||
# Attribution : http://stackoverflow.com/questions/1240674/regex-match-a-string-containing-numbers-and-letters-but-not-a-string-of-just-nu
|
|
||||||
#
|
#
|
||||||
# if ":" detected do: (str.gsub("%2f","/").to_sym) as key else (str.gsub("%2f","/"))
|
self.search do |the_value, the_selector, the_container|
|
||||||
|
self.paths_to(the_value).each do |the_subpath|
|
||||||
|
result[(the_subpath.to_s.to_sym)] = the_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
|
def get_at_path(the_path="/")
|
||||||
result = nil
|
result = nil
|
||||||
if the_path == "/"
|
if the_path == "/"
|
||||||
result = self
|
result = self
|
||||||
else
|
else
|
||||||
object_stack = [(self)]
|
object_stack = [(self)]
|
||||||
path_stack = the_path.split("/")
|
path_stack = the_path.to_s.split("/")
|
||||||
path_stack.to_enum.each do |path_element|
|
path_stack.to_enum.each do |path_element|
|
||||||
element = nil
|
element = nil
|
||||||
if path_element.size > 0
|
if path_element.size > 0
|
||||||
|
|
@ -2994,7 +3010,7 @@ module GxG
|
||||||
element = path_element.to_i
|
element = path_element.to_i
|
||||||
else
|
else
|
||||||
element = path_element
|
element = path_element
|
||||||
element.gsub!("%2f","/")
|
element = element.gsub("%2f","/")
|
||||||
element = element.to_sym
|
element = element.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -3017,16 +3033,16 @@ module GxG
|
||||||
def set_at_path(the_path="/",the_value=nil)
|
def set_at_path(the_path="/",the_value=nil)
|
||||||
result = nil
|
result = nil
|
||||||
if the_path != "/"
|
if the_path != "/"
|
||||||
container = self.get_at_path(::File::dirname(the_path))
|
container = self.get_at_path(::File::dirname(the_path.to_s))
|
||||||
if container
|
if container
|
||||||
raw_selector = ::File::basename(the_path)
|
raw_selector = ::File::basename(the_path.to_s)
|
||||||
selector = nil
|
selector = nil
|
||||||
if raw_selector.size > 0
|
if raw_selector.size > 0
|
||||||
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
selector = raw_selector.to_i
|
selector = raw_selector.to_i
|
||||||
else
|
else
|
||||||
selector = raw_selector
|
selector = raw_selector
|
||||||
selector.gsub!("%2f","/")
|
selector = selector.gsub("%2f","/")
|
||||||
selector = selector.to_sym
|
selector = selector.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -901,13 +901,25 @@ module GxG
|
||||||
search_results
|
search_results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
|
def object_map()
|
||||||
|
result = {}
|
||||||
|
#
|
||||||
|
self.search do |the_value, the_selector, the_container|
|
||||||
|
self.paths_to(the_value).each do |the_subpath|
|
||||||
|
result[(the_subpath.to_s.to_sym)] = the_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
def get_at_path(the_path="/")
|
def get_at_path(the_path="/")
|
||||||
result = nil
|
result = nil
|
||||||
if the_path == "/"
|
if the_path == "/"
|
||||||
result = self
|
result = self
|
||||||
else
|
else
|
||||||
object_stack = [(self)]
|
object_stack = [(self)]
|
||||||
path_stack = the_path.split("/")
|
path_stack = the_path.to_s.split("/")
|
||||||
path_stack.to_enum.each do |path_element|
|
path_stack.to_enum.each do |path_element|
|
||||||
element = nil
|
element = nil
|
||||||
if path_element.size > 0
|
if path_element.size > 0
|
||||||
|
|
@ -915,7 +927,7 @@ module GxG
|
||||||
element = path_element.to_i
|
element = path_element.to_i
|
||||||
else
|
else
|
||||||
element = path_element
|
element = path_element
|
||||||
element.gsub!("%2f","/")
|
element = element.gsub("%2f","/")
|
||||||
element = element.to_sym
|
element = element.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -938,16 +950,16 @@ module GxG
|
||||||
def set_at_path(the_path="/",the_value=nil)
|
def set_at_path(the_path="/",the_value=nil)
|
||||||
result = nil
|
result = nil
|
||||||
if the_path != "/"
|
if the_path != "/"
|
||||||
container = self.get_at_path(::File::dirname(the_path))
|
container = self.get_at_path(::File::dirname(the_path.to_s))
|
||||||
if container
|
if container
|
||||||
raw_selector = ::File::basename(the_path)
|
raw_selector = ::File::basename(the_path.to_s)
|
||||||
selector = nil
|
selector = nil
|
||||||
if raw_selector.size > 0
|
if raw_selector.size > 0
|
||||||
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
selector = raw_selector.to_i
|
selector = raw_selector.to_i
|
||||||
else
|
else
|
||||||
selector = raw_selector
|
selector = raw_selector
|
||||||
selector.gsub!("%2f","/")
|
selector = selector.gsub("%2f","/")
|
||||||
selector = selector.to_sym
|
selector = selector.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -2856,13 +2868,25 @@ module GxG
|
||||||
search_results
|
search_results
|
||||||
end
|
end
|
||||||
#
|
#
|
||||||
|
def object_map()
|
||||||
|
result = {}
|
||||||
|
#
|
||||||
|
self.search do |the_value, the_selector, the_container|
|
||||||
|
self.paths_to(the_value).each do |the_subpath|
|
||||||
|
result[(the_subpath.to_s.to_sym)] = the_value
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#
|
||||||
|
result
|
||||||
|
end
|
||||||
|
#
|
||||||
def get_at_path(the_path="/")
|
def get_at_path(the_path="/")
|
||||||
result = nil
|
result = nil
|
||||||
if the_path == "/"
|
if the_path == "/"
|
||||||
result = self
|
result = self
|
||||||
else
|
else
|
||||||
object_stack = [(self)]
|
object_stack = [(self)]
|
||||||
path_stack = the_path.split("/")
|
path_stack = the_path.to_s.split("/")
|
||||||
path_stack.to_enum.each do |path_element|
|
path_stack.to_enum.each do |path_element|
|
||||||
element = nil
|
element = nil
|
||||||
if path_element.size > 0
|
if path_element.size > 0
|
||||||
|
|
@ -2870,7 +2894,7 @@ module GxG
|
||||||
element = path_element.to_i
|
element = path_element.to_i
|
||||||
else
|
else
|
||||||
element = path_element
|
element = path_element
|
||||||
element.gsub!("%2f","/")
|
element = element.gsub("%2f","/")
|
||||||
element = element.to_sym
|
element = element.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -2893,16 +2917,16 @@ module GxG
|
||||||
def set_at_path(the_path="/",the_value=nil)
|
def set_at_path(the_path="/",the_value=nil)
|
||||||
result = nil
|
result = nil
|
||||||
if the_path != "/"
|
if the_path != "/"
|
||||||
container = self.get_at_path(::File::dirname(the_path))
|
container = self.get_at_path(::File::dirname(the_path.to_s))
|
||||||
if container
|
if container
|
||||||
raw_selector = ::File::basename(the_path)
|
raw_selector = ::File::basename(the_path.to_s)
|
||||||
selector = nil
|
selector = nil
|
||||||
if raw_selector.size > 0
|
if raw_selector.size > 0
|
||||||
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
if (raw_selector =~ /^(?:[0-9])*[0-9](?:[0-9])*$/) == 0
|
||||||
selector = raw_selector.to_i
|
selector = raw_selector.to_i
|
||||||
else
|
else
|
||||||
selector = raw_selector
|
selector = raw_selector
|
||||||
selector.gsub!("%2f","/")
|
selector = selector.gsub("%2f","/")
|
||||||
selector = selector.to_sym
|
selector = selector.to_sym
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue