Class: ScaffoldPlus::Generators::HasOneGenerator

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

Instance Method Summary collapse

Instance Method Details

#add_migrationObject



33
34
35
36
# File 'lib/generators/scaffold_plus/has_one/has_one_generator.rb', line 33

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

#add_to_modelsObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/generators/scaffold_plus/has_one/has_one_generator.rb', line 48

def add_to_models
  inject_into_class "app/models/#{name}.rb", class_name do
    text = before_array.include?(name) ? "\n" : ""
    text << "  has_one :#{child}"
    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 :#{child}, allow_destroy: true\n"
    end
    text << "\n" if after_array.include?(name)
    text
  end

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

#add_to_routeObject



38
39
40
41
42
43
44
45
46
# File 'lib/generators/scaffold_plus/has_one/has_one_generator.rb', line 38

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

#update_child_controllerObject



86
87
88
89
90
91
92
93
94
# File 'lib/generators/scaffold_plus/has_one/has_one_generator.rb', line 86

def update_child_controller
  return unless options.permit?
  text = ":#{name}_id"
  file = "app/controllers/#{child.pluralize}_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



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/generators/scaffold_plus/has_one/has_one_generator.rb', line 96

def update_nested_resource
  return unless options.route?
  children = child.pluralize
  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



75
76
77
78
79
80
81
82
83
84
# File 'lib/generators/scaffold_plus/has_one/has_one_generator.rb', line 75

def update_parent_controller
  return if options.nested.blank?
  list = options.nested.map{|n| ":#{n}"}.join(', ')
  text = "#{child}_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