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



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

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

.source_rootObject



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

def self.source_root; __dir__; end

Instance Method Details

#setup_componentsObject

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



27
28
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
# File 'padrino-gen/lib/padrino-gen/generators/component.rb', line 27

def setup_components
  self.destination_root = options[:root]
  if in_app_root?
    @_components = options.class.new(options.slice(*self.class.component_types))
    @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)
      ask = existing != 'none' && existing != choice
      next if ask && !yes?("Switch #{comp} to '#{choice}' from '#{existing}' ?[yes/no]:")

      @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