Module: Themeable::GeneratorConcern
- Defined in:
- lib/themeable/generator_concern.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#find_in_source_paths(file) ⇒ Object
Support theme and template.
- #resolve_themeable_value(key) ⇒ Object
- #theme_scaffold_mapping ⇒ Object
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. =~ /^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 [key] if [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_mapping ⇒ Object
26 27 28 |
# File 'lib/themeable/generator_concern.rb', line 26 def theme_scaffold_mapping Rails.application.config.generators.theme_scaffold_mapping end |