module Hippo::Extensions
Constants
- ALL
Public Class Methods
_maybe_fail(should_raise)
click to toggle source
# File lib/hippo/extension.rb, line 92 def _maybe_fail(should_raise) raise Thor::Error.new("Unable to locate Hippo environment.\nDoes ./lib/*/extension.rb exist?") if should_raise return nil end
add(klass)
click to toggle source
# File lib/hippo/extension.rb, line 19 def add(klass) @cached_instances = nil ALL << klass end
all()
click to toggle source
# File lib/hippo/extension.rb, line 24 def all ALL end
bootstrap(raise_on_fail:false)
click to toggle source
Loads the code for the extension that the user is currently working inside. The `hippo` command uses this to detect what actions should be taken.
Will silently swallow any exceptions that are raised when the file is required and return nil
@return [Extension] extension that was loaded, nil if none was found
# File lib/hippo/extension.rb, line 77 def bootstrap(raise_on_fail:false) ext = Dir.glob("./lib/*/extension.rb").first if ext begin require(ext) rescue =>e stack = e.backtrace[0..4].join("\n") raise Thor::Error.new("Loading ./lib/*/extension.rb failed with: #{e}\n#{stack}") end Extensions.controlling else return _maybe_fail(raise_on_fail) end end
client_module_paths()
click to toggle source
# File lib/hippo/extension.rb, line 134 def client_module_paths map { |e| e.root_path.join('client').to_s }.reverse + [ controlling.root_path.join('node_modules').to_s ] end
controlling()
click to toggle source
# File lib/hippo/extension.rb, line 64 def controlling last = ALL.last each{|ext| return ext if ext.is_a?(last) } Hippo.logger.error "Unable to find controlling extension. #{sorted} are loaded" end
each(reversed: false) { |ext| ... }
click to toggle source
# File lib/hippo/extension.rb, line 57 def each(reversed: false) @cached_instances ||= sorted.map{ |klass| klass.new } (reversed ? @cached_instances.reverse : @cached_instances).each do |ext| yield ext end end
for_identifier(identifier)
click to toggle source
# File lib/hippo/extension.rb, line 28 def for_identifier(identifier) each{|ext| return ext if ext.identifier == identifier } nil end
load_controlling_config()
click to toggle source
# File lib/hippo/extension.rb, line 127 def load_controlling_config config_file = self.controlling.root_path.join('config','initialize.rb') if config_file.exist? require config_file end end
load_screens()
click to toggle source
# File lib/hippo/extension.rb, line 10 def load_screens each do | ext | screens_config = ext.root_path.join('config','screens.rb') if screens_config.exist? require screens_config end end end
sorted()
click to toggle source
# File lib/hippo/extension.rb, line 33 def sorted unmapped = all mapped = [] while unmapped.any? mapped_count = mapped.length unmapped.each do | ext | if !ext.before && !ext.after mapped.push(ext) end if ext.before && (position = mapped.find_index(ext.before)) mapped.insert(position, ext) end if ext.after && (position = mapped.find_index(ext.after)) mapped.insert(position+1, ext) end end if mapped_count == mapped.length # we failed to add any extensions Hippo.logger.info "Conflicting load directives. Some extensions will not be available" end unmapped -= mapped end mapped end
static_bootstrap_data()
click to toggle source
Data returned will be included in the JS build; it should not be Tenant
specific
# File lib/hippo/extension.rb, line 99 def static_bootstrap_data data = {} %w{ api_path print_path_prefix environment assets_path_prefix website_domain product_name support_email }.each do |config| data[config.to_sym] = Hippo.config.send(config) end data.merge!( controlling_extension: controlling.identifier, ) each do | ext | ext_data = ext.static_bootstrap_data data[ext.identifier] = ext_data unless ext_data.nil? end data[:subscription_plans] = Subscription.all.as_json return data end
tenant_bootstrap_data(tenant)
click to toggle source
# File lib/hippo/extension.rb, line 118 def tenant_bootstrap_data(tenant) data = {} each do | ext | tenant_data = ext.tenant_bootstrap_data(tenant) data[ext.identifier] = tenant_data unless tenant_data.nil? end data end