scaffold_plus 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5b490cd1736e29f658be2225acfb7acf13d583d
|
4
|
+
data.tar.gz: 65a025ea73ecce6f5a7ec16b745ed5a903d8e694
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d45b528fc3807500c43485658ed1510bc97daef86d980fdf6d7af2d8604306d80867ccbd3dc80338afa70a2680b034e25f341e4f50be949a5e5fc1345fe0f0b
|
7
|
+
data.tar.gz: 73f83b76bacaf97b7248a5056735d928b8633ebae1649171ebc60cfe81a8a5924b7afef2e58d75a909288c2bd8a19f06d7e7d385c30db83f033fa26eb55d5e46
|
data/README.md
CHANGED
@@ -44,6 +44,12 @@ This helper creates a join table and updates the two parent resources.
|
|
44
44
|
It can handle additional attributes in the join table incl. whitelisting
|
45
45
|
and accepts_nested_attributes_for in one of the parents.
|
46
46
|
|
47
|
+
### Add many-to-many association with has_and_belongs_to_many
|
48
|
+
rails generate scaffold_plus:habtm
|
49
|
+
|
50
|
+
This helper scaffolds a has_and_belongs_to_many relationship with migration
|
51
|
+
and updates to the models.
|
52
|
+
|
47
53
|
## Testing
|
48
54
|
|
49
55
|
Since I have no experience with test driven development (yet), this is
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
3
|
+
module ScaffoldPlus
|
4
|
+
module Generators
|
5
|
+
class HabtmGenerator < ActiveRecord::Generators::Base
|
6
|
+
desc "Add many-to-many association with has_and_belongs_to_many"
|
7
|
+
argument :name, type: :string,
|
8
|
+
desc: "The first object that has_and_belongs_to_many OTHERs"
|
9
|
+
argument :other, type: :string,
|
10
|
+
desc: "The second object that has_and_belongs_to_many NAMEs"
|
11
|
+
class_option :migration, type: :boolean, default: true,
|
12
|
+
desc: 'Create a migration for the join table'
|
13
|
+
class_option :permit, type: :boolean, default: true,
|
14
|
+
desc: 'Allow mass assignment for added attributes in NAME'
|
15
|
+
class_option :before, type: :array,
|
16
|
+
desc: 'Add a line before generated text in models'
|
17
|
+
class_option :after, type: :array,
|
18
|
+
desc: 'Add a line after generated text in models'
|
19
|
+
source_root File.expand_path('../templates', __FILE__)
|
20
|
+
|
21
|
+
def add_migration
|
22
|
+
return unless options.migration?
|
23
|
+
migration_template "habtm_migration.rb", "db/migrate/#{habtm_migration_name}.rb"
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_to_models
|
27
|
+
inject_into_class "app/models/#{name}.rb", class_name do
|
28
|
+
text = before_array.include?(name) ? "\n" : ""
|
29
|
+
text << " has_and_belongs_to_many :#{other.pluralize}\n"
|
30
|
+
text << "\n" if after_array.include?(name)
|
31
|
+
text
|
32
|
+
end
|
33
|
+
inject_into_class "app/models/#{other}.rb", other.camelize do
|
34
|
+
text = before_array.include?(other) ? "\n" : ""
|
35
|
+
text << " has_and_belongs_to_many :#{table_name}\n"
|
36
|
+
text << "\n" if after_array.include?(other)
|
37
|
+
text
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_to_permit
|
42
|
+
return unless options.permit?
|
43
|
+
text = "{ :#{other}_ids => [] }"
|
44
|
+
file = "app/controllers/#{table_name}_controller.rb"
|
45
|
+
gsub_file file, /(permit\(.*)\)/, "\\1, #{text})"
|
46
|
+
# Special case: no previous permit
|
47
|
+
gsub_file file, /^(\s*params)\[:#{name}\]$/, "\\1.require(:#{name}).permit(#{text})"
|
48
|
+
end
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
def before_array
|
53
|
+
options['before'] || []
|
54
|
+
end
|
55
|
+
|
56
|
+
def after_array
|
57
|
+
options['after'] || []
|
58
|
+
end
|
59
|
+
|
60
|
+
def sorted_sg
|
61
|
+
[name, other].sort
|
62
|
+
end
|
63
|
+
|
64
|
+
def sorted_pl
|
65
|
+
[table_name, other.pluralize].sort
|
66
|
+
end
|
67
|
+
|
68
|
+
def habtm_migration_name
|
69
|
+
"create_#{sorted_pl.first}_and_#{sorted_pl.second}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def habtm_table_name
|
73
|
+
"#{sorted_pl.first}_#{sorted_pl.second}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class <%= habtm_migration_name.camelize %> < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :<%= habtm_table_name %>, id: false do |t|
|
4
|
+
t.belongs_to :<%= sorted_sg[0] %>
|
5
|
+
t.belongs_to :<%= sorted_sg[1] %>
|
6
|
+
end
|
7
|
+
add_index :<%= habtm_table_name %>, :<%= sorted_sg[0] %>_id
|
8
|
+
add_index :<%= habtm_table_name %>, :<%= sorted_sg[1] %>_id
|
9
|
+
end
|
10
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffold_plus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Volker Wiegand
|
@@ -83,6 +83,8 @@ files:
|
|
83
83
|
- lib/generators/scaffold_plus/ancestry/templates/ancestry_migration.rb
|
84
84
|
- lib/generators/scaffold_plus/collection/collection_generator.rb
|
85
85
|
- lib/generators/scaffold_plus/collection/templates/view.html.erb
|
86
|
+
- lib/generators/scaffold_plus/habtm/habtm_generator.rb
|
87
|
+
- lib/generators/scaffold_plus/habtm/templates/habtm_migration.rb
|
86
88
|
- lib/generators/scaffold_plus/has_many/has_many_generator.rb
|
87
89
|
- lib/generators/scaffold_plus/has_many/templates/child_migration.rb
|
88
90
|
- lib/generators/scaffold_plus/has_many/templates/counter_migration.rb
|