Class: Padrino::Generators::Component

Inherits:
Thor::Group
  • Object
show all
Includes:
Actions, Padrino::Generators::Components::Actions, Thor::Actions
Defined in:
padrino-gen/lib/padrino-gen/generators/component.rb

Overview

Responsible for add components within a Padrino project.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Actions

#already_exists?, #app_skeleton, #apply_component_for, #apply_default_fields, #check_app_existence, #destination_root, #empty_directory_with_keep_file, #execute_component_setup, #fetch_app_name, #fetch_component_choice, #fetch_project_name, #in_app_root?, #include_component_module_for, #initializer, #inject_into_file, #insert_hook, #insert_into_gemfile, #insert_middleware, #invalid_fields, #keep_file, #middleware, #recognize_path, #require_contrib, #require_dependencies, #resolve_valid_choice, #retrieve_component_config, #run_bundler, #store_component_choice, #store_component_config, #test?, #tiny?, #valid_choice?, #valid_constant?, #validate_namespace

Class Method Details



12
# File 'padrino-gen/lib/padrino-gen/generators/component.rb', line 12

def self.banner; "padrino-gen component [options]"; end

.source_rootObject



11
# File 'padrino-gen/lib/padrino-gen/generators/component.rb', line 11

def self.source_root; File.expand_path(File.dirname(__FILE__)); end

Instance Method Details

#setup_componentsObject

For each component, retrieve a valid choice and then execute the associated generator.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'padrino-gen/lib/padrino-gen/generators/component.rb', line 29

def setup_components
  self.destination_root = options[:root]
  if in_app_root?
    @_components = options.class.new options.select{ |key,_| self.class.component_types.include?(key.to_sym) }
    @app_name = (options[:app] || "App").gsub(/\W/, '_').camelize
    if @_components.values.delete_if(&:empty?).empty?
      self.class.start(["-h"])
      say
      say "Current Selected Components:"
      list = []
      self.class.component_types.each do |comp|
        list << [comp, fetch_component_choice(comp)]
      end
      print_table(list, :indent => 2)
      exit
    end

    self.class.component_types.each do |comp|
      next if @_components[comp].empty?

      choice = @_components[comp] = resolve_valid_choice(comp)
      existing = fetch_component_choice(comp)
      if existing != 'none' && existing != choice
        next unless yes?("Switch #{comp} to '#{choice}' from '#{existing}' ?[yes/no]:")
      end
      @project_name = fetch_component_choice(:namespace)
      if comp.to_s == 'test' && !already_exists?(@app_name, @project_name)
        say "#{@project_name}::#{@app_name} does not exist."
        say "Please, change app name."
        next
      end
      execute_component_setup(comp, choice)
      store_component_choice(comp, choice)
      if comp.to_s == 'orm' && choice.to_s != 'none'
        inject_into_file destination_root('Rakefile'), "PadrinoTasks.use(:database)\n", :before => "PadrinoTasks.init"
        inject_into_file destination_root('Rakefile'), "PadrinoTasks.use(#{choice.to_sym.inspect})\n", :before => "PadrinoTasks.init"
      end
    end
  else
    say 'You are not at the root of a Padrino application! (config/boot.rb not found)'
  end
end