Module: Themeable::GeneratorConcern

Defined in:
lib/themeable/generator_concern.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



3
4
5
6
7
8
# File 'lib/themeable/generator_concern.rb', line 3

def self.included(klass)
  klass.instance_eval do
    class_option :theme, type: :string, desc: "Choose theme to generate files", default: nil
    class_option :theme_scaffold, type: :string, desc: "Choose a templete to scaffold", default: nil
  end
end

Instance Method Details

#find_in_source_paths(file) ⇒ Object

Support theme and template



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/themeable/generator_concern.rb', line 31

def find_in_source_paths(file)
  theme = resolve_themeable_value(:theme)
  theme_scaffold = resolve_themeable_value(:theme_scaffold)
  theme_scaffold ||= 'default' if theme
  themed_file = [theme, theme_scaffold, file].compact.join('/')
  super(themed_file)
rescue Thor::Error => e
  if e.message =~ /^Could not find /
    say "Can't find themed file #{themed_file}, use default template", :yellow unless @behavior == :revoke
    return super(file)
  else
    raise
  end
end

#resolve_themeable_value(key) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/themeable/generator_concern.rb', line 10

def resolve_themeable_value(key)
  return options[key] if options[key].present?
  if theme_scaffold_mapping.size > 0
    folders = name.split('/')
    folders.pop
    loop do
      break if folders.size == 0
      path = folders.join('/')
      v = theme_scaffold_mapping.fetch(path.intern) { theme_scaffold_mapping.fetch(path.to_s, nil) }
      vv = v && (v[key.intern] || v[key.to_s])
      return vv if vv.present?
      folders.pop
    end
  end
end

#theme_scaffold_mappingObject



26
27
28
# File 'lib/themeable/generator_concern.rb', line 26

def theme_scaffold_mapping
  Rails.application.config.generators.theme_scaffold_mapping
end