Class: ScaffoldPlus::Generators::HasManyGenerator

Inherits:
ActiveRecord::Generators::Base
  • Object
show all
Defined in:
lib/generators/scaffold_plus/has_many/has_many_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_counterObject



40
41
42
43
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 40

def add_counter
  return unless options.counter?
  migration_template 'counter_migration.rb', "db/migrate/#{counter_migration}.rb"
end

#add_migrationObject



35
36
37
38
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 35

def add_migration
  return unless options.migration?
  migration_template 'child_migration.rb', "db/migrate/#{migration_name}.rb"
end

#add_to_modelsObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 55

def add_to_models
  inject_into_class "app/models/#{name}.rb", class_name do
    text = before_array.include?(name) ? "\n" : ""
    text << "  has_many :#{children}"
    text << ", inverse_of: :#{name}" if options.inverse?
    text << ", dependent: :#{dependent}" if options.dependent.present?
    text << "\n"
    if options.nested.present?
      text << "  accepts_nested_attributes_for :#{children}, allow_destroy: true, reject_if: :all_blank\n"
    end
    text << "\n" if after_array.include?(name)
    text
  end

  child = children.singularize
  inject_into_class "app/models/#{child}.rb", child.camelize do
    text = before_array.include?(child) ? "\n" : ""
    text << "  belongs_to :#{name}"
    if options.foreign_key.present?
      text << ", foreign_key: \"#{options.foreign_key}\""
    end
    text << ", inverse_of: :#{children}" if options.inverse?
    text << ", counter_cache: true" if options.counter?
    text << "\n"
    text << "\n" if after_array.include?(child)
    text
  end
end

#add_to_routeObject



45
46
47
48
49
50
51
52
53
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 45

def add_to_route
  return unless options.route?
  gsub_file "config/routes.rb", /^  resources :#{table_name} do$/ do |match|
    match << "\n    resources :#{children}"
  end
  gsub_file "config/routes.rb", /^  resources :#{table_name}$/ do |match|
    match << " do\n    resources :#{children}\n  end"
  end
end

#update_child_controllerObject



95
96
97
98
99
100
101
102
103
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 95

def update_child_controller
  return unless options.permit?
  text = ":#{name}_id"
  file = "app/controllers/#{children}_controller.rb"
  return unless File.exist?(file)
  gsub_file file, /(permit\(.*)\)/, "\\1, #{text})"
  # Special case: no previous permit
  gsub_file file, /^(\s*params)\[:#{name}\]$/, "\\1.require(:#{name}).permit(#{text})"
end

#update_nested_resourceObject



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 105

def update_nested_resource
  return unless options.route?
  child = children.singularize
  file = "app/controllers/#{children}_controller.rb"
  if File.exist?(file)
    gsub_file file, /GET .#{children}.new$/ do |match|
      match = "GET /#{table_name}/:id/#{children}/new"
    end
    gsub_file file, /^    @#{child} = #{child.camelize}.new$/ do |match|
      match = "    @#{name} = #{class_name}.find(params[:#{name}_id])\n" +
              "    @#{child} = @#{name}.#{children}.build"
    end
  end
  file = "app/views/#{children}/_form.html.erb"
  if File.exist?(file)
    gsub_file file, /form_for\(@#{child}/ do |match|
      match = "form_for([@#{name}, @#{child}]"
    end
  end
end

#update_parent_controllerObject



84
85
86
87
88
89
90
91
92
93
# File 'lib/generators/scaffold_plus/has_many/has_many_generator.rb', line 84

def update_parent_controller
  return if options.nested.blank?
  list = options.nested.map{|n| ":#{n}"}.join(', ')
  text = "#{children}_attributes: [ #{list} ]"
  file = "app/controllers/#{table_name}_controller.rb"
  return unless File.exist?(file)
  gsub_file file, /(permit\(.*)\)/, "\\1, #{text})"
  # Special case: no previous permit
  gsub_file file, /^(\s*params)\[:#{name}\]$/, "\\1.require(:#{name}).permit(#{text})"
end