Class: LcpRuby::Services::Registry
- Inherits:
-
Object
- Object
- LcpRuby::Services::Registry
- Defined in:
- lib/lcp_ruby/services/registry.rb
Constant Summary collapse
- VALID_CATEGORIES =
%w[transforms validators conditions defaults computed data_providers accessors aggregates virtual_columns menu_items].freeze
Class Method Summary collapse
- .available_keys(category) ⇒ Object
- .clear! ⇒ Object
- .discover!(base_path) ⇒ Object
- .lookup(category, key) ⇒ Object
-
.lookup_vc_service(key) ⇒ Object
Look up a virtual column service, trying “virtual_columns” first then “aggregates”.
- .register(category, key, service) ⇒ Object
- .registered?(category, key) ⇒ Boolean
-
.vc_service_registered?(key) ⇒ Boolean
Check if a virtual column service is registered in either category.
Class Method Details
.available_keys(category) ⇒ Object
22 23 24 25 |
# File 'lib/lcp_ruby/services/registry.rb', line 22 def available_keys(category) validate_category!(category) registries[category.to_s].keys.sort end |
.clear! ⇒ Object
65 66 67 |
# File 'lib/lcp_ruby/services/registry.rb', line 65 def clear! @registries = nil end |
.discover!(base_path) ⇒ Object
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 62 63 |
# File 'lib/lcp_ruby/services/registry.rb', line 37 def discover!(base_path) services_path = File.join(base_path.to_s, "lcp_services") return unless File.directory?(services_path) VALID_CATEGORIES.each do |category| category_path = File.join(services_path, category) next unless File.directory?(category_path) Dir[File.join(category_path, "**", "*.rb")].sort.each do |file| # Files under app/lcp_services/ are developer-authored application code, # the same trust level as any other code in app/. require file relative = file.sub("#{category_path}/", "").sub(/\.rb$/, "") class_name = "LcpRuby::HostServices::#{category.camelize}::#{relative.split('/').map(&:camelize).join('::')}" begin service_class = class_name.constantize # Transforms use instance methods (def call), others use class methods (def self.call) service = category == "transforms" ? service_class.new : service_class register(category, relative, service) rescue NameError => e Rails.logger.warn("[LcpRuby] Could not register service #{class_name}: #{e.}") if defined?(Rails) end end end end |
.lookup(category, key) ⇒ Object
12 13 14 15 |
# File 'lib/lcp_ruby/services/registry.rb', line 12 def lookup(category, key) validate_category!(category) registries[category.to_s][key.to_s] end |
.lookup_vc_service(key) ⇒ Object
Look up a virtual column service, trying “virtual_columns” first then “aggregates”.
28 29 30 |
# File 'lib/lcp_ruby/services/registry.rb', line 28 def lookup_vc_service(key) lookup("virtual_columns", key) || lookup("aggregates", key) end |
.register(category, key, service) ⇒ Object
7 8 9 10 |
# File 'lib/lcp_ruby/services/registry.rb', line 7 def register(category, key, service) validate_category!(category) registries[category.to_s][key.to_s] = service end |
.registered?(category, key) ⇒ Boolean
17 18 19 20 |
# File 'lib/lcp_ruby/services/registry.rb', line 17 def registered?(category, key) validate_category!(category) registries[category.to_s].key?(key.to_s) end |
.vc_service_registered?(key) ⇒ Boolean
Check if a virtual column service is registered in either category.
33 34 35 |
# File 'lib/lcp_ruby/services/registry.rb', line 33 def vc_service_registered?(key) registered?("virtual_columns", key) || registered?("aggregates", key) end |