Class: RailsWizard::Template

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_wizard/template.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(recipes, gems = [], args = [], defaults = {}) ⇒ Template

Returns a new instance of Template.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/rails_wizard/template.rb', line 5

def initialize(recipes, gems=[], args=[], defaults={})
  @recipes = recipes.map{|r| RailsWizard::Recipe.from_mongo(r)}
  @args = args
  @defaults = defaults
  unless defaults['prefs'].nil?
    @prefs = defaults['prefs']
  else
    @prefs = {}
  end
  unless defaults['gems'].nil?
    @gems = gems | defaults['gems']
  else
    @gems = gems
  end
end

Instance Attribute Details

#argsObject (readonly)

Returns the value of attribute args.



3
4
5
# File 'lib/rails_wizard/template.rb', line 3

def args
  @args
end

#defaultsObject (readonly)

Returns the value of attribute defaults.



3
4
5
# File 'lib/rails_wizard/template.rb', line 3

def defaults
  @defaults
end

#gemsObject (readonly)

Returns the value of attribute gems.



3
4
5
# File 'lib/rails_wizard/template.rb', line 3

def gems
  @gems
end

#recipesObject (readonly)

Returns the value of attribute recipes.



3
4
5
# File 'lib/rails_wizard/template.rb', line 3

def recipes
  @recipes
end

Class Method Details

.render(template_name, binding = nil) ⇒ Object



29
30
31
32
# File 'lib/rails_wizard/template.rb', line 29

def self.render(template_name, binding = nil)
  erb = ERB.new(File.open(template_root + '/' + template_name + '.erb').read)
  erb.result(binding)
end

.template_rootObject



21
22
23
# File 'lib/rails_wizard/template.rb', line 21

def self.template_root
  @template_root ||= File.dirname(__FILE__) + '/../../templates'
end

.template_root=(root) ⇒ Object



25
26
27
# File 'lib/rails_wizard/template.rb', line 25

def self.template_root=(root)
  @template_root = root
end

Instance Method Details

#compileObject



100
101
102
# File 'lib/rails_wizard/template.rb', line 100

def compile
  render 'layout', binding
end

#custom_codeObject



109
# File 'lib/rails_wizard/template.rb', line 109

def custom_code; nil end

#custom_code?Boolean

Returns:

  • (Boolean)


108
# File 'lib/rails_wizard/template.rb', line 108

def custom_code?; false end

#recipe_classesObject



78
79
80
# File 'lib/rails_wizard/template.rb', line 78

def recipe_classes
  @recipe_classes ||= recipes.map{|r| RailsWizard::Recipe.from_mongo(r)}
end

#recipes_with_dependenciesObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/rails_wizard/template.rb', line 82

def recipes_with_dependencies
  @recipes_with_dependencies ||= recipe_classes

  added_more = false
  for recipe in recipe_classes
    recipe.requires.each do |requirement|
      requirement = RailsWizard::Recipe.from_mongo(requirement)
      count = @recipes_with_dependencies.size
      (@recipes_with_dependencies << requirement).uniq!
      unless @recipes_with_dependencies.size == count
        added_more = true
      end
    end
  end

  added_more ? recipes_with_dependencies : @recipes_with_dependencies
end

#render(template_name, binding = nil) ⇒ Object



33
# File 'lib/rails_wizard/template.rb', line 33

def render(template_name, binding = nil); self.class.render(template_name, binding) end

#resolve_diagnostics_prefsObject



53
54
55
56
57
# File 'lib/rails_wizard/template.rb', line 53

def resolve_diagnostics_prefs
  @resolve_diagnostics_prefs ||= begin
    RailsWizard::Diagnostics.prefs.inspect
  end
end

#resolve_diagnostics_recipesObject



47
48
49
50
51
# File 'lib/rails_wizard/template.rb', line 47

def resolve_diagnostics_recipes
  @resolve_diagnostics_recipes ||= begin
    RailsWizard::Diagnostics.recipes.inspect
  end
end

#resolve_gemsObject



41
42
43
44
45
# File 'lib/rails_wizard/template.rb', line 41

def resolve_gems
  @resolve_gems ||= begin
    @gems.uniq.inspect
  end
end

#resolve_preferencesObject



35
36
37
38
39
# File 'lib/rails_wizard/template.rb', line 35

def resolve_preferences
  @resolve_preferences ||= begin
    @prefs.inspect
  end
end

#resolve_recipesObject

Sort the recipes list taking ‘run_after’ directives into account.



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/rails_wizard/template.rb', line 60

def resolve_recipes
  @resolve_recipes ||= begin
    list = recipes_with_dependencies

    for i in 0...list.size
      after_keys = list[i+1..-1].map { |r| r.key }

      if (list[i].run_after & after_keys).any?
        list.push list.slice!(i)
        redo
      end
    end

    list.each {|recipe| recipe.defaults = defaults[recipe.key] }
    list
  end
end