has_many_prevent_dups 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +34 -0
  5. data/lib/has_many_prevent_dups/concat.rb +18 -0
  6. data/lib/has_many_prevent_dups/option.rb +38 -0
  7. data/lib/has_many_prevent_dups/version.rb +3 -0
  8. data/lib/has_many_prevent_dups/writers.rb +18 -0
  9. data/lib/has_many_prevent_dups.rb +9 -0
  10. data/test/dummy/README.rdoc +28 -0
  11. data/test/dummy/Rakefile +6 -0
  12. data/test/dummy/app/assets/javascripts/application.js +13 -0
  13. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  14. data/test/dummy/app/controllers/application_controller.rb +5 -0
  15. data/test/dummy/app/helpers/application_helper.rb +2 -0
  16. data/test/dummy/app/models/bean_bag.rb +2 -0
  17. data/test/dummy/app/models/husband.rb +10 -0
  18. data/test/dummy/app/models/lonely_model.rb +2 -0
  19. data/test/dummy/app/models/marriage.rb +6 -0
  20. data/test/dummy/app/models/wife.rb +8 -0
  21. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  22. data/test/dummy/bin/bundle +3 -0
  23. data/test/dummy/bin/rails +4 -0
  24. data/test/dummy/bin/rake +4 -0
  25. data/test/dummy/bin/setup +29 -0
  26. data/test/dummy/config/application.rb +26 -0
  27. data/test/dummy/config/boot.rb +5 -0
  28. data/test/dummy/config/database.yml +25 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +41 -0
  31. data/test/dummy/config/environments/production.rb +79 -0
  32. data/test/dummy/config/environments/test.rb +42 -0
  33. data/test/dummy/config/initializers/assets.rb +11 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  36. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  37. data/test/dummy/config/initializers/inflections.rb +16 -0
  38. data/test/dummy/config/initializers/mime_types.rb +4 -0
  39. data/test/dummy/config/initializers/session_store.rb +3 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +23 -0
  42. data/test/dummy/config/routes.rb +56 -0
  43. data/test/dummy/config/secrets.yml +22 -0
  44. data/test/dummy/config.ru +4 -0
  45. data/test/dummy/db/development.sqlite3 +0 -0
  46. data/test/dummy/db/migrate/20151201221132_create_bean_bags.rb +9 -0
  47. data/test/dummy/db/migrate/20151201224657_create_lonely_models.rb +8 -0
  48. data/test/dummy/db/migrate/20151201230001_create_husbands.rb +9 -0
  49. data/test/dummy/db/migrate/20151201230013_create_wives.rb +9 -0
  50. data/test/dummy/db/migrate/20151201230131_create_marriages.rb +10 -0
  51. data/test/dummy/db/schema.rb +49 -0
  52. data/test/dummy/db/test.sqlite3 +0 -0
  53. data/test/dummy/log/development.log +83 -0
  54. data/test/dummy/log/test.log +8736 -0
  55. data/test/dummy/public/404.html +67 -0
  56. data/test/dummy/public/422.html +67 -0
  57. data/test/dummy/public/500.html +66 -0
  58. data/test/dummy/public/favicon.ico +0 -0
  59. data/test/dummy/test/fixtures/bean_bags.yml +7 -0
  60. data/test/dummy/test/fixtures/husbands.yml +7 -0
  61. data/test/dummy/test/fixtures/lonely_models.yml +11 -0
  62. data/test/dummy/test/fixtures/marriages.yml +9 -0
  63. data/test/dummy/test/fixtures/wives.yml +7 -0
  64. data/test/dummy/test/models/bean_bag_test.rb +7 -0
  65. data/test/dummy/test/models/husband_test.rb +7 -0
  66. data/test/dummy/test/models/lonely_model_test.rb +7 -0
  67. data/test/dummy/test/models/marriage_test.rb +7 -0
  68. data/test/dummy/test/models/wife_test.rb +7 -0
  69. data/test/has_and_belongs_to_many_test.rb +4 -0
  70. data/test/has_many_through_test.rb +10 -0
  71. data/test/params_remain_intact_test.rb +12 -0
  72. data/test/support/concat_test.rb +39 -0
  73. data/test/support/writers_test.rb +25 -0
  74. data/test/test_helper.rb +27 -0
  75. metadata +240 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ color: MyString
5
+
6
+ two:
7
+ color: MyString
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ name: MyString
5
+
6
+ two:
7
+ name: MyString
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ # This model initially had no columns defined. If you add columns to the
4
+ # model remove the '{}' from the fixture names and add the columns immediately
5
+ # below each fixture, per the syntax in the comments below
6
+ #
7
+ one: {}
8
+ # column: value
9
+ #
10
+ two: {}
11
+ # column: value
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ husband_id:
5
+ wife_id:
6
+
7
+ two:
8
+ husband_id:
9
+ wife_id:
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ name: MyString
5
+
6
+ two:
7
+ name: MyString
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class BeanBagTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class HusbandTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class LonelyModelTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class MarriageTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class WifeTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class HasAndBelongsToManyTest < ActiveSupport::TestCase
4
+ end
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class HasManyThroughTest < ActiveSupport::TestCase
4
+ include WritersTest
5
+ include ConcatTest
6
+
7
+ setup do
8
+ @object = husbands(:one)
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+
3
+ class ParamsRemainIntactTest < ActiveSupport::TestCase
4
+
5
+ def test_existing_extension_option
6
+ assert_equal "Polyandry", wives(:one).husbands.love
7
+ end
8
+
9
+ def test_existing_extension_block
10
+ assert_equal "Polygyny", husbands(:one).wives.love
11
+ end
12
+ end
@@ -0,0 +1,39 @@
1
+ module ConcatTest
2
+
3
+ def test_collection_shovel
4
+ each_association do |collection|
5
+ item = send(collection, :one)
6
+ @object.send(collection) << item
7
+ @object.send(collection) << item
8
+ @object.send(collection) << [ item, item ]
9
+ assert_equal 1, @object.send(collection).length
10
+ end
11
+ end
12
+
13
+ def test_collection_push
14
+ each_association do |collection|
15
+ item = send(collection, :one)
16
+ @object.send(collection).push item
17
+ @object.send(collection).push item
18
+ @object.send(collection).push [ item, item ]
19
+ assert_equal 1, @object.send(collection).length
20
+ end
21
+ end
22
+
23
+ def test_collection_concat
24
+ each_association do |collection|
25
+ item = send(collection, :one)
26
+ @object.send(collection).concat item
27
+ @object.send(collection).concat item
28
+ @object.send(collection).concat [ item, item ]
29
+ assert_equal 1, @object.send(collection).length
30
+ end
31
+ end
32
+
33
+ private
34
+ def each_association
35
+ @object.class.send(:_prevent_dups_reflections).each do |collection|
36
+ yield(collection)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ module WritersTest
2
+
3
+ def test_collection=
4
+ each_association do |collection|
5
+ item = send(collection, :one)
6
+ @object.send("#{collection}=", [item, item])
7
+ assert_equal 1, @object.send(collection).length
8
+ end
9
+ end
10
+
11
+ def test_collection_singular_ids=
12
+ each_association do |collection|
13
+ item = send(collection, :one)
14
+ @object.send("#{collection.to_s.singularize}_ids=", [item.id, item.id, item.id])
15
+ assert_equal 1, @object.send(collection).length
16
+ end
17
+ end
18
+
19
+ private
20
+ def each_association
21
+ @object.class.send(:_prevent_dups_reflections).each do |collection|
22
+ yield(collection)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # Helper Gems
2
+ require 'awesome_print'
3
+ require 'byebug'
4
+
5
+ # Configure Rails Environment
6
+ ENV["RAILS_ENV"] = "test"
7
+ require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
8
+
9
+ # Load support files
10
+ Dir[File.join(File.dirname(__FILE__), "support", "*.rb")].each {|file| require file}
11
+
12
+ # Migration stuff
13
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
14
+
15
+ # Rails testing
16
+ require "rails/test_help"
17
+
18
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
19
+ # to be shown.
20
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
21
+
22
+ # Load fixtures from the engine
23
+ if ActiveSupport::TestCase.respond_to?(:fixture_path=)
24
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../dummy/test/fixtures", __FILE__)
25
+ ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
26
+ ActiveSupport::TestCase.fixtures :all
27
+ end
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: has_many_prevent_dups
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - James Kerr
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: awesome_print
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: A rails gem that prevents duplicate inserts when using the has_many :through
70
+ relationship in your models.
71
+ email:
72
+ - jkerr838@gmail.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - MIT-LICENSE
78
+ - README.rdoc
79
+ - Rakefile
80
+ - lib/has_many_prevent_dups.rb
81
+ - lib/has_many_prevent_dups/concat.rb
82
+ - lib/has_many_prevent_dups/option.rb
83
+ - lib/has_many_prevent_dups/version.rb
84
+ - lib/has_many_prevent_dups/writers.rb
85
+ - test/dummy/README.rdoc
86
+ - test/dummy/Rakefile
87
+ - test/dummy/app/assets/javascripts/application.js
88
+ - test/dummy/app/assets/stylesheets/application.css
89
+ - test/dummy/app/controllers/application_controller.rb
90
+ - test/dummy/app/helpers/application_helper.rb
91
+ - test/dummy/app/models/bean_bag.rb
92
+ - test/dummy/app/models/husband.rb
93
+ - test/dummy/app/models/lonely_model.rb
94
+ - test/dummy/app/models/marriage.rb
95
+ - test/dummy/app/models/wife.rb
96
+ - test/dummy/app/views/layouts/application.html.erb
97
+ - test/dummy/bin/bundle
98
+ - test/dummy/bin/rails
99
+ - test/dummy/bin/rake
100
+ - test/dummy/bin/setup
101
+ - test/dummy/config.ru
102
+ - test/dummy/config/application.rb
103
+ - test/dummy/config/boot.rb
104
+ - test/dummy/config/database.yml
105
+ - test/dummy/config/environment.rb
106
+ - test/dummy/config/environments/development.rb
107
+ - test/dummy/config/environments/production.rb
108
+ - test/dummy/config/environments/test.rb
109
+ - test/dummy/config/initializers/assets.rb
110
+ - test/dummy/config/initializers/backtrace_silencers.rb
111
+ - test/dummy/config/initializers/cookies_serializer.rb
112
+ - test/dummy/config/initializers/filter_parameter_logging.rb
113
+ - test/dummy/config/initializers/inflections.rb
114
+ - test/dummy/config/initializers/mime_types.rb
115
+ - test/dummy/config/initializers/session_store.rb
116
+ - test/dummy/config/initializers/wrap_parameters.rb
117
+ - test/dummy/config/locales/en.yml
118
+ - test/dummy/config/routes.rb
119
+ - test/dummy/config/secrets.yml
120
+ - test/dummy/db/development.sqlite3
121
+ - test/dummy/db/migrate/20151201221132_create_bean_bags.rb
122
+ - test/dummy/db/migrate/20151201224657_create_lonely_models.rb
123
+ - test/dummy/db/migrate/20151201230001_create_husbands.rb
124
+ - test/dummy/db/migrate/20151201230013_create_wives.rb
125
+ - test/dummy/db/migrate/20151201230131_create_marriages.rb
126
+ - test/dummy/db/schema.rb
127
+ - test/dummy/db/test.sqlite3
128
+ - test/dummy/log/development.log
129
+ - test/dummy/log/test.log
130
+ - test/dummy/public/404.html
131
+ - test/dummy/public/422.html
132
+ - test/dummy/public/500.html
133
+ - test/dummy/public/favicon.ico
134
+ - test/dummy/test/fixtures/bean_bags.yml
135
+ - test/dummy/test/fixtures/husbands.yml
136
+ - test/dummy/test/fixtures/lonely_models.yml
137
+ - test/dummy/test/fixtures/marriages.yml
138
+ - test/dummy/test/fixtures/wives.yml
139
+ - test/dummy/test/models/bean_bag_test.rb
140
+ - test/dummy/test/models/husband_test.rb
141
+ - test/dummy/test/models/lonely_model_test.rb
142
+ - test/dummy/test/models/marriage_test.rb
143
+ - test/dummy/test/models/wife_test.rb
144
+ - test/has_and_belongs_to_many_test.rb
145
+ - test/has_many_through_test.rb
146
+ - test/params_remain_intact_test.rb
147
+ - test/support/concat_test.rb
148
+ - test/support/writers_test.rb
149
+ - test/test_helper.rb
150
+ homepage: https://github.com/jameskerr/has_many_prevent_dups
151
+ licenses:
152
+ - MIT
153
+ metadata: {}
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubyforge_project:
170
+ rubygems_version: 2.4.5
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: A rails gem that prevents duplicate inserts when using the has_many :through
174
+ relationship in your models.
175
+ test_files:
176
+ - test/dummy/app/assets/javascripts/application.js
177
+ - test/dummy/app/assets/stylesheets/application.css
178
+ - test/dummy/app/controllers/application_controller.rb
179
+ - test/dummy/app/helpers/application_helper.rb
180
+ - test/dummy/app/models/bean_bag.rb
181
+ - test/dummy/app/models/husband.rb
182
+ - test/dummy/app/models/lonely_model.rb
183
+ - test/dummy/app/models/marriage.rb
184
+ - test/dummy/app/models/wife.rb
185
+ - test/dummy/app/views/layouts/application.html.erb
186
+ - test/dummy/bin/bundle
187
+ - test/dummy/bin/rails
188
+ - test/dummy/bin/rake
189
+ - test/dummy/bin/setup
190
+ - test/dummy/config/application.rb
191
+ - test/dummy/config/boot.rb
192
+ - test/dummy/config/database.yml
193
+ - test/dummy/config/environment.rb
194
+ - test/dummy/config/environments/development.rb
195
+ - test/dummy/config/environments/production.rb
196
+ - test/dummy/config/environments/test.rb
197
+ - test/dummy/config/initializers/assets.rb
198
+ - test/dummy/config/initializers/backtrace_silencers.rb
199
+ - test/dummy/config/initializers/cookies_serializer.rb
200
+ - test/dummy/config/initializers/filter_parameter_logging.rb
201
+ - test/dummy/config/initializers/inflections.rb
202
+ - test/dummy/config/initializers/mime_types.rb
203
+ - test/dummy/config/initializers/session_store.rb
204
+ - test/dummy/config/initializers/wrap_parameters.rb
205
+ - test/dummy/config/locales/en.yml
206
+ - test/dummy/config/routes.rb
207
+ - test/dummy/config/secrets.yml
208
+ - test/dummy/config.ru
209
+ - test/dummy/db/development.sqlite3
210
+ - test/dummy/db/migrate/20151201221132_create_bean_bags.rb
211
+ - test/dummy/db/migrate/20151201224657_create_lonely_models.rb
212
+ - test/dummy/db/migrate/20151201230001_create_husbands.rb
213
+ - test/dummy/db/migrate/20151201230013_create_wives.rb
214
+ - test/dummy/db/migrate/20151201230131_create_marriages.rb
215
+ - test/dummy/db/schema.rb
216
+ - test/dummy/db/test.sqlite3
217
+ - test/dummy/log/development.log
218
+ - test/dummy/log/test.log
219
+ - test/dummy/public/404.html
220
+ - test/dummy/public/422.html
221
+ - test/dummy/public/500.html
222
+ - test/dummy/public/favicon.ico
223
+ - test/dummy/Rakefile
224
+ - test/dummy/README.rdoc
225
+ - test/dummy/test/fixtures/bean_bags.yml
226
+ - test/dummy/test/fixtures/husbands.yml
227
+ - test/dummy/test/fixtures/lonely_models.yml
228
+ - test/dummy/test/fixtures/marriages.yml
229
+ - test/dummy/test/fixtures/wives.yml
230
+ - test/dummy/test/models/bean_bag_test.rb
231
+ - test/dummy/test/models/husband_test.rb
232
+ - test/dummy/test/models/lonely_model_test.rb
233
+ - test/dummy/test/models/marriage_test.rb
234
+ - test/dummy/test/models/wife_test.rb
235
+ - test/has_and_belongs_to_many_test.rb
236
+ - test/has_many_through_test.rb
237
+ - test/params_remain_intact_test.rb
238
+ - test/support/concat_test.rb
239
+ - test/support/writers_test.rb
240
+ - test/test_helper.rb