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