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
Attributes included from Language::AuxiliarLogger
Instance Method Summary collapse
-
#live_tree(id: 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. -
#live_tree_get(id: nil, include_archived: false, **kargs, &block) ⇒ Eco::API::Organization::TagTree, NilClass
Gets a single locations structure.
-
#live_trees(include_archived: false, **kargs, &block) ⇒ Array<Eco::API::Organization::TagTree>
Retrieves all the location structures of the organisation.
-
#node_classifications(active: true) ⇒ Eco::API::Organization::NodeClassifications
The location node classifications of the organization.
- #scope_tree(include_archived: true, recache: false, raise_on_missing: true) ⇒ Eco::API::Organization::TagTree
Methods inherited from BaseConfig
#apis, attr_key, #clone, #file_manager, #initialize
Methods included from Language::AuxiliarLogger
Methods inherited from Hash
Constructor Details
This class inherits a constructor from Eco::API::Session::Config::BaseConfig
Instance Method Details
#live_tree(id: 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.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/eco/api/session/config/tagtree.rb', line 56 def live_tree( # rubocop:disable Metrics/AbcSize id: nil, include_archived: false, **kargs, &block ) existing_cache = !@live_tree.nil? first_load = !existing_cache switching_target = existing_cache && id && @live_tree.id != id kargs = { includeArchivedNodes: include_archived }.merge(kargs) if id args = { id: id }.merge(kargs) @live_tree = live_tree_get(**args, &block) else trees = live_trees(**kargs, &block) if trees.count > 1 @live_tree = trees.reject(&:empty?).max do |a, b| a.count <=> b.count end else @live_tree = trees.first end end.tap do |tree| if tree msg = "LIVE LOCATIONS Structure (#{tree.id}): '#{tree.name}' (#{tree.count} nodes)" if first_load log(:info) { "Using #{msg}" } elsif switching_target log(:info) { "Switched to #{msg}" } else # refresh_cache log(:debug) { "Reloading #{msg}" } end else log(:info) { "Could not retrive live tree (#{id})" } end end end |
#live_tree_get(id: nil, include_archived: false, **kargs, &block) ⇒ Eco::API::Organization::TagTree, NilClass
it does not memoize
Gets a single locations structure
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/eco/api/session/config/tagtree.rb', line 102 def live_tree_get(id: nil, include_archived: false, **kargs, &block) return nil unless (graphql = graphql_api) kargs = { id: id, includeArchivedNodes: include_archived }.merge(kargs) start = Time.now tree = graphql.currentOrganization.locationStructure(**kargs, &block) return nil unless tree end_time = Time.now secs = (end_time - start).round(3) Eco::API::Organization::TagTree.new(tree.treeify, id: tree.id, name: tree.name).tap do |eco_tree| cnt = eco_tree.count per_sec = (cnt.to_f / secs).round(2) log(:info) { "Loaded #{cnt} location nodes in #{secs} seconds (#{per_sec} nodes/sec)" } end end |
#live_trees(include_archived: false, **kargs, &block) ⇒ Array<Eco::API::Organization::TagTree>
Retrieves all the location structures of the organisation
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/eco/api/session/config/tagtree.rb', line 129 def live_trees(include_archived: false, **kargs, &block) [].tap do |eco_trees| next unless (graphql = graphql_api) kargs = { includeArchivedNodes: include_archived }.merge(kargs) start = Time.now trees = graphql.currentOrganization.locationStructures(**kargs, &block) next unless trees end_time = Time.now secs = (end_time - start).round(3) cnt = 0 trees.each do |tree| eco_tree = Eco::API::Organization::TagTree.new(tree.treeify, id: tree.id, name: tree.name) cnt += eco_tree.count eco_trees.push(eco_tree) end per_sec = (cnt.to_f / secs).round(2) log(:info) { "Loaded #{cnt} location nodes in #{secs} seconds (#{per_sec} nodes/sec)" } end end |
#node_classifications(active: true) ⇒ Eco::API::Organization::NodeClassifications
The location node classifications of the organization
13 14 15 16 17 18 |
# File 'lib/eco/api/session/config/tagtree.rb', line 13 def node_classifications(active: true) return [] unless (graphql = graphql_api) node_types = graphql.locationStructure.nodeClassifications(active: active) Eco::API::Organization::NodeClassifications.new(node_types) end |
#scope_tree(include_archived: true, recache: false, raise_on_missing: true) ⇒ Eco::API::Organization::TagTree
it retrieves the tree this way:
- If there's a file tagtree.json file, it uses it
- If no file, retrieves
structure_id
(config)
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/eco/api/session/config/tagtree.rb', line 26 def scope_tree( include_archived: true, recache: false, raise_on_missing: true # rubocop:disable Lint/UnusedMethodArgument ) return @tagtree if instance_variable_defined?(:@tagtree) && !recache kargs = { includeArchivedNodes: include_archived } if (tree_file = file) if (tree = file_manager.load_json(tree_file)) && !tree.empty? @tagtree = Eco::API::Organization::TagTree.new(tree) end elsif structure_id kargs.merge(id: structure_id) end @tagtree ||= live_tree(**kargs).tap do |tr| # rubocop:disable Naming/MemoizedInstanceVariableName next if tr && !tr.empty? msg = "Could not find a local or live locations structure." raise MissingTagtree, msg end end |