Module: Ditty::Components

Defined in:
lib/ditty.rb

Overview

Ripped off from Roda - github.com/jeremyevans/roda

Defined Under Namespace

Modules: Base

Class Method Summary collapse

Class Method Details

.component?(name) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/ditty.rb', line 70

def self.component?(name)
  @components.key? name
end

.componentsObject



83
84
85
# File 'lib/ditty.rb', line 83

def self.components
  @components
end

.load_component(name) ⇒ Object

If the registered component already exists, use it. Otherwise, require it and return it. This raises a LoadError if such a component doesn’t exist, or a Component if it exists but it does not register itself correctly.



61
62
63
64
65
66
67
68
# File 'lib/ditty.rb', line 61

def self.load_component(name)
  h = @components
  unless (component = h[name])
    require "ditty/components/#{name}"
    raise ComponentError, "Component #{name} did not register itself correctly in Ditty::Components" unless (component = h[name])
  end
  component
end

.migrationsObject



104
105
106
107
108
# File 'lib/ditty.rb', line 104

def self.migrations
  components.map do |_name, comp|
    comp.migrations if comp.respond_to?(:migrations)
  end.compact
end

Return an ordered list of navigation items: ‘[’/users/‘, text:’Users’, ‘/roles/’, text:‘Roles’]



97
98
99
100
101
102
# File 'lib/ditty.rb', line 97

def self.navigation
  nav = components.each_with_object([]) do |comp, memo|
    memo.concat comp[1].navigation if comp[1].respond_to?(:navigation)
  end
  nav.sort_by { |v| v[:order] }
end

.public_folderObject



110
111
112
113
114
# File 'lib/ditty.rb', line 110

def self.public_folder
  components.map do |_name, comp|
    comp.public_folder if comp.respond_to?(:public_folder)
  end.compact
end

.register_component(name, mod) ⇒ Object

Register the given component with Component, so that it can be loaded using #component with a symbol. Should be used by component files. Example:

Ditty::Components.register_component(:component_name, ComponentModule)


78
79
80
81
# File 'lib/ditty.rb', line 78

def self.register_component(name, mod)
  Ditty::Services::Logger.instance.info "Registering #{mod} as #{name}"
  @components[name] = mod
end

.routesObject

Return a hash of controllers with their routes as keys: ‘{ ’/users’ => Ditty::Controllers::Users }‘



88
89
90
91
92
93
# File 'lib/ditty.rb', line 88

def self.routes
  rts = components.each_with_object({}) do |comp, memo|
    memo.merge! comp[1].routes if comp[1].respond_to?(:routes)
  end
  rts.compact
end

.seedersObject



116
117
118
119
120
# File 'lib/ditty.rb', line 116

def self.seeders
  components.map do |_name, comp|
    comp.seeder if comp.respond_to?(:seeder)
  end.compact
end

.tasksObject



128
129
130
131
132
133
134
135
# File 'lib/ditty.rb', line 128

def self.tasks
  require 'rake'
  require 'rake/tasklib'
  require 'ditty/db' unless defined? DB
  components.each do |_name, comp|
    comp.tasks if comp.respond_to?(:tasks)
  end
end

.workersObject



122
123
124
125
126
# File 'lib/ditty.rb', line 122

def self.workers
  components.each_with_object([]) do |comp, memo|
    memo.concat comp[1].workers if comp[1].respond_to?(:workers)
  end
end