Module: Geminus

Defined in:
lib/geminus.rb,
lib/geminus/dsl.rb,
lib/geminus/version.rb,
lib/geminus/registry.rb,
lib/geminus/container.rb

Defined Under Namespace

Modules: DSL Classes: Container, Registry

Constant Summary collapse

PREAMBLE =
File.read("#{__dir__}/geminus/preamble.js").freeze
VERSION =
"0.1.0".freeze

Class Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



12
13
14
15
16
17
# File 'lib/geminus.rb', line 12

def extended(base)
  Registry.instance << base

  base.instance_variable_set(:@geminus, {})
  base.send(:extend, DSL)
end

.generate_jsObject



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/geminus.rb', line 19

def generate_js
  parts = [PREAMBLE]

  Registry.instance.each do |geminus|
    data = geminus.name.split("::".freeze).reverse
      .inject(geminus.generate_js) { |a, e| "{#{JSON.dump e}:#{a}}" }
    parts << "geminus(#{data});"
  end

  "(function(world){\n#{parts.join "\n;\n".freeze}\n}(this));"
end