Class: Eco::API::Session::Config::TagTree
- Inherits:
-
BaseConfig
- Object
- Hash
- BaseConfig
- Eco::API::Session::Config::TagTree
- Defined in:
- lib/eco/api/session/config/tagtree.rb
Defined Under Namespace
Classes: MissingTagtree
Instance Attribute Summary
Attributes inherited from BaseConfig
Instance Method Summary collapse
-
#live_tree(id: nil, enviro: nil, include_archived: false, **kargs, &block) ⇒ Object
Among all the locations structures it selects the one with more location nodes If
idis provided, it only retrieves this locations structure. -
#live_tree_get(id: nil, enviro: nil, include_archived: false, **kargs, &block) ⇒ Eco::API::Organization::TagTree, NilClass
Gets a single locations structure.
-
#live_trees(enviro: nil, include_archived: false, **kargs, &block) ⇒ Array<Eco::API::Organization::TagTree>
Retrieves all the location structures of the organisation.
- #scope_tree(enviro: nil, include_archived: true, raise_on_missing: true) ⇒ Eco::API::Organization::TagTree
Methods inherited from BaseConfig
#apis, attr_key, #clone, #file_manager, #initialize
Methods inherited from Hash
Constructor Details
This class inherits a constructor from Eco::API::Session::Config::BaseConfig
Instance Method Details
#live_tree(id: nil, enviro: nil, include_archived: false, **kargs, &block) ⇒ Object
Among all the locations structures it selects the one with more location nodes
If id is provided, it only retrieves this locations structure.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/eco/api/session/config/tagtree.rb', line 36 def live_tree(id: nil, enviro: nil, include_archived: false, **kargs, &block) return @live_tree if instance_variable_defined?(:@live_tree) && @live_tree.enviro == enviro kargs = { enviro: enviro, includeArchivedNodes: include_archived }.merge(kargs) if id args = { id: id }.merge(kargs) @live_tree = live_tree_get(**args, &block) else kargs trees = live_trees(**kargs, &block) @live_tree = trees.reject do |tree| tree.empty? end.max do |a,b| a.count <=> b.count end end.tap do |tree| if tree msg = "Using LIVE LOCATIONS Structure: '#{tree.name}' (#{tree.count} nodes)" session_logger.info(msg) end end end |
#live_tree_get(id: nil, enviro: nil, include_archived: false, **kargs, &block) ⇒ Eco::API::Organization::TagTree, NilClass
Note:
it does not memoize
Gets a single locations structure
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/eco/api/session/config/tagtree.rb', line 67 def live_tree_get(id: nil, enviro: nil, include_archived: false, **kargs, &block) return nil unless apis.active_api.version_available?(:graphql) return nil unless graphql = apis.api(version: :graphql) kargs = { id: id, includeArchivedNodes: include_archived }.merge(kargs) return nil unless tree = graphql.currentOrganization.locationStructure(**kargs, &block) args = { enviro: enviro, id: tree.id, name: tree.name } Eco::API::Organization::TagTree.new(tree.treeify, **args) end |
#live_trees(enviro: nil, include_archived: false, **kargs, &block) ⇒ Array<Eco::API::Organization::TagTree>
Retrieves all the location structures of the organisation
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/eco/api/session/config/tagtree.rb', line 84 def live_trees(enviro: nil, include_archived: false, **kargs, &block) [].tap do |eco_trees| next unless apis.active_api.version_available?(:graphql) next unless graphql = apis.api(version: :graphql) kargs = { includeArchivedNodes: include_archived }.merge(kargs) next unless trees = graphql.currentOrganization.locationStructures(**kargs, &block) trees.each do |tree| args = { enviro: enviro, id: tree.id, name: tree.name } eco_tree = Eco::API::Organization::TagTree.new(tree.treeify, **args) eco_trees.push(eco_tree) end end end |
#scope_tree(enviro: nil, include_archived: true, raise_on_missing: true) ⇒ Eco::API::Organization::TagTree
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/eco/api/session/config/tagtree.rb', line 13 def scope_tree(enviro: nil, include_archived: true, raise_on_missing: true) return @tagtree if instance_variable_defined?(:@tagtree) && @tagtree.enviro == enviro if tree_file = self.file if (tree = file_manager.load_json(tree_file)) && !tree.empty? @tagtree = Eco::API::Organization::TagTree.new(tree, enviro: enviro) end end kargs = { enviro: enviro, includeArchivedNodes: include_archived } @tagtree ||= live_tree(**kargs).tap do |tree| unless tree && !tree.empty? msg = "Could not find a local or live locations structure." raise MissingTagtree, msg end end end |