Class: ShouldaMatchmakers::ControllerGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/support/controller_generator.rb

Instance Method Summary collapse

Instance Method Details

#create_controller_matchmakersObject



44
45
46
47
48
# File 'lib/support/controller_generator.rb', line 44

def create_controller_matchmakers
  generator_options = options.to_hash
  load_application
  generate_controller_matchmakers(generator_options)
end

#generate_controller_matchmakers(generator_options) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/support/controller_generator.rb', line 54

def generate_controller_matchmakers(generator_options)
  app_action_controller_descendants_names = load_action_controller_controller_names
  if app_action_controller_descendants_names.present?
    selected_action_controller_controller_names = select_action_controller_controller_names(app_action_controller_descendants_names, generator_options)
    selected_action_controller_controller_names.each do |controller_name|
      save_generate(controller_name) do
        @action_controller_controller_sm_model = ::ShouldaMatchmakers::Controller::ActionController::ActionControllerController.new(controller_name)
        template_filename = File.expand_path('vendor/shoulda_matchmakers/lib/templates/controller/action_controller/controller_spec_template.haml')
        template = File.read(template_filename)
        create_file "#{ ShouldaMatchmakers.configuration.controllers_test_path }/#{ controller_name.underscore }_spec.rb",
          Haml::Engine.new(template, filename: template_filename, format: :html5).to_html(binding)
      end
    end
  end
end

#load_action_controller_controller_namesObject



70
71
72
73
74
75
76
# File 'lib/support/controller_generator.rb', line 70

def load_action_controller_controller_names
  if defined?(::ActionController::Base)
    ActionController::Base.descendants.map(&:name)
  else
    []
  end
end

#load_applicationObject



50
51
52
# File 'lib/support/controller_generator.rb', line 50

def load_application
  Rails.application.try(:eager_load!)
end

#save_generate(controller_name) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/support/controller_generator.rb', line 78

def save_generate(controller_name)
  begin
    yield
  rescue => e
    puts "Cannot create controller spec for #{ controller_name }. Reason #{ e.message }"
  end
end

#select_action_controller_controller_names(app_action_controller_descendants_names, generator_options) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/support/controller_generator.rb', line 86

def select_action_controller_controller_names(app_action_controller_descendants_names, generator_options)
  generator_options_include = generator_options.fetch('include')
  generator_options_exclude = generator_options.fetch('exclude')
  generator_options_include_with_config = generator_options.fetch('include_with_config')
  generator_options_exclude_with_config = generator_options.fetch('exclude_with_config')

  if generator_options_include.present?
    select_controller_names_generator_option_include(app_action_controller_descendants_names, generator_options_include)
  elsif generator_options_exclude.present?
    select_controller_names_generator_option_exclude(app_action_controller_descendants_names, generator_options_exclude)
  elsif generator_options_include_with_config.present?
    select_controller_names_generator_option_include_with_config(app_action_controller_descendants_names, generator_options_include_with_config)
  elsif generator_options_exclude_with_config.present?
    select_controller_names_generator_option_exclude_with_config(app_action_controller_descendants_names, generator_options_exclude_with_config)
  else
    select_controller_names_config(app_action_controller_descendants_names)
  end
end

#select_controller_names_config(app_action_controller_descendants_names) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/support/controller_generator.rb', line 131

def select_controller_names_config(app_action_controller_descendants_names)
  controller_names_config_included = ShouldaMatchmakers.configuration.models_included
  controller_names_config_excluded = ShouldaMatchmakers.configuration.models_excluded
  if controller_names_config_included.present?
    selected_controller_names_config = app_action_controller_descendants_names.map.select { |app_controller_name| controller_names_config_included.include? app_controller_name }.uniq.sort
    selected_controller_names_config
  elsif controller_names_config_excluded.present?
    selected_controller_names_config = app_action_controller_descendants_names.map.reject { |app_controller_name| controller_names_config_excluded.include? app_controller_name }.uniq.sort
    selected_controller_names_config
  else
    app_action_controller_descendants_names.map.uniq.sort
  end
end

#select_controller_names_generator_option_exclude(app_action_controller_descendants_names, exclude_controller_names) ⇒ Object



109
110
111
# File 'lib/support/controller_generator.rb', line 109

def select_controller_names_generator_option_exclude(app_action_controller_descendants_names, exclude_controller_names)
  app_action_controller_descendants_names.map(&:name).reject { |app_controller_name| exclude_controller_names.include? app_controller_name }.uniq.sort
end

#select_controller_names_generator_option_exclude_with_config(app_action_controller_descendants_names, exclude_with_config_controller_names) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/support/controller_generator.rb', line 122

def select_controller_names_generator_option_exclude_with_config(app_action_controller_descendants_names, exclude_with_config_controller_names)
  selected_action_controller_controller_names = select_controller_names_config(app_action_controller_descendants_names)
  if selected_action_controller_controller_names.present?
    selected_action_controller_controller_names.map.reject { |app_controller_name| exclude_with_config_controller_names.include? app_controller_name }.uniq.sort
  else
    select_controller_names_generator_option_exclude(app_action_controller_descendants_names, exclude_with_config_controller_names).uniq.sort
  end
end

#select_controller_names_generator_option_include(app_action_controller_descendants_names, include_controller_names) ⇒ Object



105
106
107
# File 'lib/support/controller_generator.rb', line 105

def select_controller_names_generator_option_include(app_action_controller_descendants_names, include_controller_names)
  app_action_controller_descendants_names.map(&:name).select { |app_controller_name| include_controller_names.include? app_controller_name }.uniq.sort
end

#select_controller_names_generator_option_include_with_config(app_action_controller_descendants_names, include_with_config_controller_names) ⇒ Object



113
114
115
116
117
118
119
120
# File 'lib/support/controller_generator.rb', line 113

def select_controller_names_generator_option_include_with_config(app_action_controller_descendants_names, include_with_config_controller_names)
  selected_action_controller_controller_names = select_controller_names_config(app_action_controller_descendants_names)
  if selected_action_controller_controller_names.present?
    (selected_action_controller_controller_names + app_action_controller_descendants_names.map.select { |app_controller_name| include_with_config_controller_names.include? app_controller_name }).uniq.sort
  else
    select_controller_names_generator_option_include(app_action_controller_descendants_names, include_with_config_controller_names).uniq.sort
  end
end