Class: RubyCms::Manifest

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_cms/manifest.rb

Defined Under Namespace

Classes: Builder, Module

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeManifest

Returns a new instance of Manifest.



53
54
55
# File 'lib/ruby_cms/manifest.rb', line 53

def initialize
  @modules = {}
end

Instance Attribute Details

#modulesObject (readonly)

Returns the value of attribute modules.



51
52
53
# File 'lib/ruby_cms/manifest.rb', line 51

def modules
  @modules
end

Class Method Details

.buildObject



45
46
47
48
49
# File 'lib/ruby_cms/manifest.rb', line 45

def self.build(&)
  manifest = new
  manifest.instance_eval(&)
  manifest
end

Instance Method Details

#[](key) ⇒ Object



65
# File 'lib/ruby_cms/manifest.rb', line 65

def [](key) = @modules[key]

#all_filesObject



84
85
86
# File 'lib/ruby_cms/manifest.rb', line 84

def all_files
  @modules.values.flat_map(&:files).uniq
end

#base_modulesObject



66
# File 'lib/ruby_cms/manifest.rb', line 66

def base_modules = @modules.values.select(&:base?)

#module_def(key, base: false, depends_on: [], &block) ⇒ Object

Raises:

  • (ArgumentError)


57
58
59
60
61
62
63
# File 'lib/ruby_cms/manifest.rb', line 57

def module_def(key, base: false, depends_on: [], &block)
  raise ArgumentError, "duplicate module #{key}" if @modules.key?(key)

  builder = Builder.new(key, base, depends_on)
  builder.instance_eval(&block) if block
  @modules[key] = builder.to_module
end

#optional_modulesObject



67
# File 'lib/ruby_cms/manifest.rb', line 67

def optional_modules = @modules.values.reject(&:base?)

#resolve(selected_keys) ⇒ Object

Expand selected optional keys into the full ordered set incl. base + deps.



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/ruby_cms/manifest.rb', line 70

def resolve(selected_keys)
  result = base_modules.map(&:key)
  queue = Array(selected_keys).dup
  until queue.empty?
    key = queue.shift
    next if result.include?(key)

    mod = @modules.fetch(key)
    result << key
    queue.concat(mod.depends_on)
  end
  result.uniq.map {|k| @modules.fetch(k) }
end