polymorphic_integer_type 2.0.0 → 2.1.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: 08271771790e3d2546b8584b6fe792c8f494b640
4
- data.tar.gz: 27d420188711bc29f27712c91d8cb8e386ff8f8b
3
+ metadata.gz: 84ff86a8b1c1b2d27d9834ba6bfb1a5713968e42
4
+ data.tar.gz: 72f17ee895418f4a1a7db952ce135ebadb0521d4
5
5
  SHA512:
6
- metadata.gz: c2bfd9fc2c3a12b560cf8bd3ddc2c8863b434d21253b552f854d1fcc20ed5584c9f514d1cfed66e38873324f7af6e3a4e780d5b23ba28d0287b6c8a2a8d41b1b
7
- data.tar.gz: c293b70d040633371e16e5cad37c4a93005170f9be936202f8e74ec671ccdfc843214fb86c2ecf6587de5b1c252691d02f9daaf49e8219b4c51fb0cfeaaa5f94
6
+ metadata.gz: a333e4a0da4f90c6a7ee1e0b304303b17d29fe8be6745f17e02b6e5ddf6cd1d2eb7c77d9ee26281106f5c066cbbea6be89c28ee31974fa9b5642adba4687675e
7
+ data.tar.gz: 9c4ccc617103c6b818ae219bacc43c5513dac9995617fa3078db10bdfab1eb78c0d632b68d9a73fd628d5c7349031aaf08c63f367614adce6c1e59876f43ae7b
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # PolymorphicIntegerType
2
2
 
3
3
  Rails' polymorphic associations are pretty useful. The example they give to set it up looks like:
4
+
4
5
  ```ruby
5
6
  class Picture < ActiveRecord::Base
6
7
  belongs_to :imageable, polymorphic: true
@@ -16,6 +17,7 @@ end
16
17
  ```
17
18
 
18
19
  With a migration that looks like:
20
+
19
21
  ```ruby
20
22
  class CreatePictures < ActiveRecord::Migration
21
23
  def change
@@ -49,38 +51,48 @@ For Rails 3.2 use version < 2. Version >= 2 has been tested on Rails 4.2 and Rub
49
51
 
50
52
  ## Usage
51
53
 
52
- The gem is pretty straightforward to use.
54
+ For the model where the `belongs_to` is defined, include `PolymorphicIntegerType::Extensions` and set the `polymorphic:` option to a hash that maps an integer stored in the database to the name of a Ruby class.
53
55
 
54
- First, include the extensions module and add the `integer_type` option to the associations that are going to be using this. (That way it will play nicely with polymorphic associations whose type you would rather leave as a string.)
55
56
  ```ruby
56
57
  class Picture < ActiveRecord::Base
57
58
  include PolymorphicIntegerType::Extensions
58
- belongs_to :imageable, polymorphic: true, integer_type: true
59
+
60
+ belongs_to :imageable, polymorphic: {1 => "Employee", 2 => "Product"}
59
61
  end
62
+ ```
60
63
 
64
+ Next, include `PolymorphicIntegerType::Extensions` into any of the models that point back to the polymorphic integer type association (e.g., `Picture#imageable`) and add a [polymorphic association using `as:`](http://guides.rubyonrails.org/association_basics.html#polymorphic-associations).
65
+
66
+ ```ruby
61
67
  class Employee < ActiveRecord::Base
62
68
  include PolymorphicIntegerType::Extensions
63
- has_many :pictures, as: :imageable, integer_type: true
69
+
70
+ has_many :pictures, as: :imageable
64
71
  end
65
72
 
66
73
  class Product < ActiveRecord::Base
67
74
  include PolymorphicIntegerType::Extensions
68
- has_many :pictures, as: :imageable, integer_type: true
75
+
76
+ has_many :pictures, as: :imageable
69
77
  end
70
78
  ```
71
79
 
72
- Second, you need to create a mapping for the polymorphic associations. This should be loaded before the models. Putting it in an initializer is good (`config/initializers/polymorphic_type_mapping.rb`)
73
- ```ruby
74
- PolymorphicIntegerType::Mapping.configuration do |config|
80
+ ### External mappings
75
81
 
76
- config.add :imageable, {1 => "Employee", 2 => "Product" }
82
+ You can also store polymorphic type mappings separate from your models. This should be loaded before the models. Putting it in an initializer is one way to do this (e.g., `config/initializers/polymorphic_type_mapping.rb`)
77
83
 
84
+ ```ruby
85
+ PolymorphicIntegerType::Mapping.configuration do |config|
86
+ config.add :imageable, {1 => "Employee", 2 => "Product" }
78
87
  end
79
88
  ```
80
89
 
81
90
  Note: The mapping here can start from whatever integer you wish, but I would advise not using 0. The reason being that if you had a new class, for instance `Avatar`, and also wanted to use this polymorphic association but forgot to include it in the mapping, it would effectively get `to_i` called on it and stored in the database. `"Avatar".to_i == 0`, so if your mapping included 0, this would create a weird bug.
82
91
 
92
+ ### Migrating an existing association
93
+
83
94
  If you want to convert a polymorphic association that is already a string, you'll need to set up a migration. (Assuming SQL for the time being, but this should be pretty straightforward.)
95
+
84
96
  ```ruby
85
97
  class PictureToPolymorphicIntegerType < ActiveRecord::Migration
86
98
 
@@ -125,8 +137,18 @@ end
125
137
  ```
126
138
 
127
139
  Lastly, you will need to be careful of any place where you are doing raw SQL queries with the string (`imageable_type = 'Employee'`). They should use the integer instead.
128
-
129
140
 
141
+ ## Setup
142
+
143
+ You'll need to have git, Ruby, and MySQL. Then get up and running with a few commands:
144
+
145
+ ```bash
146
+ $ git clone ...
147
+ $ bundle install
148
+ $ vim spec/support/database.yml # Update username and password
149
+ $ bin/setup
150
+ $ bundle exec rspec
151
+ ```
130
152
 
131
153
  ## Contributing
132
154
 
data/Rakefile CHANGED
@@ -1 +1,39 @@
1
1
  require "bundler/gem_tasks"
2
+ require "yaml"
3
+ require "active_record"
4
+
5
+ namespace :db do
6
+ database_config = YAML.load(File.open("./spec/support/database.yml"))
7
+ admin_database_config = database_config.merge(database: "mysql")
8
+ migration_path = File.expand_path("./spec/support/migrations")
9
+
10
+ desc "Create the database"
11
+ task :create do
12
+ ActiveRecord::Base.establish_connection(admin_database_config)
13
+ ActiveRecord::Base.connection.create_database(database_config.fetch(:database))
14
+ puts "Database created."
15
+ end
16
+
17
+ desc "Migrate the database"
18
+ task :migrate do
19
+ ActiveRecord::Base.establish_connection(database_config)
20
+ ActiveRecord::Migrator.migrate(migration_path)
21
+ Rake::Task["db:schema"].invoke
22
+ puts "Database migrated."
23
+ end
24
+
25
+ desc "Drop the database"
26
+ task :drop do
27
+ ActiveRecord::Base.establish_connection(admin_database_config)
28
+ ActiveRecord::Base.connection.drop_database(database_config.fetch(:database))
29
+ puts "Database deleted."
30
+ end
31
+
32
+ desc "Reset the database"
33
+ task reset: [:drop, :create, :migrate]
34
+ desc 'Create a db/schema.rb file that is portable against any DB supported by AR'
35
+
36
+ task :schema do
37
+ # Noop to make ActiveRecord happy
38
+ end
39
+ end
data/bin/setup ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ bundle exec rake db:drop db:create db:migrate
@@ -7,10 +7,22 @@ module PolymorphicIntegerType
7
7
  options = scope if scope.kind_of? Hash
8
8
  integer_type = options.delete :integer_type
9
9
  super
10
- if options[:polymorphic] && integer_type
11
- mapping = PolymorphicIntegerType::Mapping[name]
10
+ if options[:polymorphic] && (integer_type || options[:polymorphic].is_a?(Hash))
11
+ mapping =
12
+ case integer_type
13
+ when true then PolymorphicIntegerType::Mapping[name]
14
+ when nil then options[:polymorphic]
15
+ else
16
+ raise ArgumentError, "Unknown integer_type value: #{integer_type.inspect}"
17
+ end.dup
18
+
12
19
  foreign_type = reflections[name.to_s].foreign_type
13
- self._polymorphic_foreign_types << foreign_type
20
+ _polymorphic_foreign_types << foreign_type
21
+
22
+ # Required way to dynamically define a class method on the model
23
+ singleton_class.__send__(:define_method, "#{foreign_type}_mapping") do
24
+ mapping
25
+ end
14
26
 
15
27
  define_method foreign_type do
16
28
  t = super()
@@ -40,11 +52,23 @@ module PolymorphicIntegerType
40
52
 
41
53
  def remove_type_and_establish_mapping(name, options, scope)
42
54
  integer_type = options.delete :integer_type
43
- if options[:as] && integer_type
55
+ polymorphic_type_mapping = retrieve_polymorphic_type_mapping(
56
+ polymorphic_type: options[:as],
57
+ class_name: options[:class_name] || name.to_s.classify
58
+ )
59
+
60
+ if options[:as] && (polymorphic_type_mapping || integer_type)
44
61
  poly_type = options.delete(:as)
45
- mapping = PolymorphicIntegerType::Mapping[poly_type]
46
- klass_mapping = (mapping||{}).key self.sti_name
47
- raise "Polymorphic Class Mapping is missing for #{poly_type}" unless klass_mapping
62
+ polymorphic_type_mapping ||= PolymorphicIntegerType::Mapping[poly_type]
63
+ if polymorphic_type_mapping == nil
64
+ raise "Polymorphic type mapping missing for #{poly_type.inspect}"
65
+ end
66
+
67
+ klass_mapping = (polymorphic_type_mapping || {}).key(sti_name)
68
+
69
+ if klass_mapping == nil
70
+ raise "Class not found for #{sti_name.inspect} in polymorphic type mapping: #{polymorphic_type_mapping}"
71
+ end
48
72
 
49
73
  options[:foreign_key] ||= "#{poly_type}_id"
50
74
  foreign_type = options.delete(:foreign_type) || "#{poly_type}_type"
@@ -59,6 +83,17 @@ module PolymorphicIntegerType
59
83
  end
60
84
  end
61
85
 
86
+ def retrieve_polymorphic_type_mapping(polymorphic_type:, class_name:)
87
+ return if polymorphic_type.nil?
88
+
89
+ belongs_to_class = class_name.safe_constantize
90
+ method_name = "#{polymorphic_type}_type_mapping"
91
+
92
+ if belongs_to_class && belongs_to_class.respond_to?(method_name)
93
+ belongs_to_class.public_send(method_name)
94
+ end
95
+ end
96
+
62
97
  def has_many(name, scope = nil, options = {}, &extension)
63
98
  if scope.kind_of? Hash
64
99
  options = scope
@@ -1,3 +1,3 @@
1
1
  module PolymorphicIntegerType
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -24,5 +24,4 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "activerecord", "4.2.0"
25
25
  spec.add_development_dependency "mysql2", "0.3.16"
26
26
  spec.add_development_dependency "byebug"
27
-
28
27
  end
@@ -1,21 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe PolymorphicIntegerType do
4
+ let(:owner) { Person.create(name: "Kyle") }
5
+ let(:dog) { Animal.create(name: "Bela", kind: "Dog", owner: owner) }
6
+ let(:cat) { Animal.create(name: "Alexi", kind: "Cat") }
4
7
 
5
- let(:owner) { Person.create(:name => "Kyle") }
6
- let(:dog) { Animal.create(:name => "Bela", :kind => "Dog", :owner => owner) }
7
- let(:cat) { Animal.create(:name => "Alexi", :kind => "Cat") }
8
+ let(:kibble) { Food.create(name: "Kibble") }
9
+ let(:chocolate) { Food.create(name: "Choclate") }
8
10
 
11
+ let(:milk) { Drink.create(name: "milk") }
12
+ let(:water) { Drink.create(name: "Water") }
13
+ let(:whiskey) { Drink.create(name: "Whiskey") }
9
14
 
10
- let(:kibble) { Food.create(:name => "Kibble") }
11
- let(:chocolate) { Food.create(:name => "Choclate") }
12
-
13
-
14
- let(:milk) { Drink.create(:name => "milk") }
15
- let(:water) { Drink.create(:name => "Water") }
16
- let(:whiskey) { Drink.create(:name => "Whiskey") }
17
-
18
- let(:link) { Link.create(:source => source, :target => target) }
15
+ let(:link) { Link.create(source: source, target: target) }
19
16
 
20
17
  context "when the source is nil" do
21
18
  let(:source) { nil }
@@ -58,13 +55,13 @@ describe PolymorphicIntegerType do
58
55
 
59
56
  end
60
57
  context "When a link is given polymorphic record" do
61
- let(:link) { Link.create(:source => source) }
58
+ let(:link) { Link.create(source: source) }
62
59
  let(:source) { cat }
63
60
  include_examples "proper source"
64
61
 
65
62
  context "and when it already has a polymorphic record" do
66
63
  let(:target) { kibble }
67
- before { link.update_attributes(:target => target) }
64
+ before { link.update_attributes(target: target) }
68
65
 
69
66
  include_examples "proper source"
70
67
  include_examples "proper target"
@@ -74,13 +71,13 @@ describe PolymorphicIntegerType do
74
71
  end
75
72
 
76
73
  context "When a link is given polymorphic id and type" do
77
- let(:link) { Link.create(:source_id => source.id, :source_type => source.class.to_s) }
74
+ let(:link) { Link.create(source_id: source.id, source_type: source.class.to_s) }
78
75
  let(:source) { cat }
79
76
  include_examples "proper source"
80
77
 
81
78
  context "and when it already has a polymorphic id and type" do
82
79
  let(:target) { kibble }
83
- before { link.update_attributes(:target_id => target.id, :target_type => target.class.to_s) }
80
+ before { link.update_attributes(target_id: target.id, target_type: target.class.to_s) }
84
81
  include_examples "proper source"
85
82
  include_examples "proper target"
86
83
 
@@ -90,8 +87,8 @@ describe PolymorphicIntegerType do
90
87
 
91
88
  context "When using a relation to the links with eagar loading" do
92
89
  let!(:links){
93
- [Link.create(:source => source, :target => kibble),
94
- Link.create(:source => source, :target => water)]
90
+ [Link.create(source: source, target: kibble),
91
+ Link.create(source: source, target: water)]
95
92
  }
96
93
  let(:source) { cat }
97
94
 
@@ -105,8 +102,8 @@ describe PolymorphicIntegerType do
105
102
 
106
103
  context "When using a through relation to the links with eagar loading" do
107
104
  let!(:links){
108
- [Link.create(:source => source, :target => kibble),
109
- Link.create(:source => source, :target => water)]
105
+ [Link.create(source: source, target: kibble),
106
+ Link.create(source: source, target: water)]
110
107
  }
111
108
  let(:source) { dog }
112
109
 
@@ -119,14 +116,14 @@ describe PolymorphicIntegerType do
119
116
  end
120
117
 
121
118
  context "When eagar loading the polymorphic association" do
122
- let(:link) { Link.create(:source_id => source.id, :source_type => source.class.to_s) }
119
+ let(:link) { Link.create(source_id: source.id, source_type: source.class.to_s) }
123
120
  let(:source) { cat }
124
121
 
125
122
  context "and when there are multiples sources" do
126
- let(:link_2) { Link.create(:source_id => source_2.id, :source_type => source_2.class.to_s) }
123
+ let(:link_2) { Link.create(source_id: source_2.id, source_type: source_2.class.to_s) }
127
124
  let(:source_2) { dog }
128
125
  it "should be able to preload both associations" do
129
- links = Link.includes(:source).where(:id => [link.id, link_2.id]).order(:id)
126
+ links = Link.includes(:source).where(id: [link.id, link_2.id]).order(:id)
130
127
  expect(links.first.source).to eql cat
131
128
  expect(links.last.source).to eql dog
132
129
  end
@@ -134,7 +131,7 @@ describe PolymorphicIntegerType do
134
131
  end
135
132
 
136
133
  it "should be able to preload the association" do
137
- l = Link.includes(:source).where(:id => link.id).first
134
+ l = Link.includes(:source).where(id: link.id).first
138
135
  expect(l.source).to eql cat
139
136
  end
140
137
 
@@ -142,8 +139,8 @@ describe PolymorphicIntegerType do
142
139
  end
143
140
 
144
141
  context "when the association is an STI table" do
145
- let(:link) { Link.create(:source => source, :target => whiskey) }
146
- let(:source) { Dog.create(:name => "Bela", :kind => "Dog", :owner => owner) }
142
+ let(:link) { Link.create(source: source, target: whiskey) }
143
+ let(:source) { Dog.create(name: "Bela", kind: "Dog", owner: owner) }
147
144
  it "should have the proper id, type and object for the source" do
148
145
  expect(link.source_id).to eql source.id
149
146
  expect(link.source_type).to eql "Animal"
@@ -151,5 +148,109 @@ describe PolymorphicIntegerType do
151
148
  end
152
149
  end
153
150
 
151
+ context "when mapping is given inline in the belongs_to model" do
152
+ class InlineLink < ActiveRecord::Base
153
+ include PolymorphicIntegerType::Extensions
154
+
155
+ self.table_name = "links"
156
+
157
+ belongs_to :source, polymorphic: {10 => "Person", 11 => "InlineAnimal"}
158
+ belongs_to :target, polymorphic: {10 => "Food", 13 => "InlineDrink"}
159
+ belongs_to :normal_target, polymorphic: true
160
+ end
161
+
162
+ class InlineAnimal < ActiveRecord::Base
163
+ include PolymorphicIntegerType::Extensions
164
+
165
+ self.table_name = "animals"
166
+
167
+ belongs_to :owner, class_name: "Person"
168
+ has_many :source_links, as: :source, class_name: "InlineLink"
169
+ end
170
+
171
+ class InlineDrink < ActiveRecord::Base
172
+ include PolymorphicIntegerType::Extensions
173
+
174
+ self.table_name = "drinks"
154
175
 
176
+ has_many :inline_links, as: :target
177
+ end
178
+
179
+ let!(:animal) { InlineAnimal.create!(name: "Lucy") }
180
+ let!(:drink) { InlineDrink.create!(name: "Water") }
181
+ let!(:link) { InlineLink.create!(source: animal, target: drink, normal_target: drink) }
182
+
183
+ let(:source) { animal }
184
+ let(:target) { drink }
185
+
186
+ include_examples "proper source"
187
+ include_examples "proper target"
188
+
189
+ it "creates foreign_type mapping method" do
190
+ expect(Link.source_type_mapping).to eq({0 => "Person", 1 => "Animal"})
191
+ expect(InlineLink.source_type_mapping).to eq({10 => "Person", 11 => "InlineAnimal"})
192
+ end
193
+
194
+ it "pulls mapping from given hash" do
195
+ expect(link.source_id).to eq(animal.id)
196
+ expect(link[:source_type]).to eq(11)
197
+ expect(link.target_id).to eq(drink.id)
198
+ expect(link[:target_type]).to eq(13)
199
+ end
200
+
201
+ it "doesn't break string type polymorphic associations" do
202
+ expect(link.normal_target).to eq(drink)
203
+ expect(link.normal_target_type).to eq("InlineDrink")
204
+ end
205
+ end
206
+
207
+ context "when mapping assigned to `polymorphic` option on belongs_to model" do
208
+ class InlineLink2 < ActiveRecord::Base
209
+ include PolymorphicIntegerType::Extensions
210
+
211
+ self.table_name = "links"
212
+
213
+ belongs_to :source, polymorphic: {10 => "Person", 11 => "InlineAnimal2"}
214
+ belongs_to :target, polymorphic: {10 => "Food", 13 => "InlineDrink2"}
215
+ belongs_to :normal_target, polymorphic: true
216
+ end
217
+
218
+ class InlineAnimal2 < ActiveRecord::Base
219
+ include PolymorphicIntegerType::Extensions
220
+
221
+ self.table_name = "animals"
222
+
223
+ has_many :source_links, as: :source, class_name: "InlineLink2"
224
+ end
225
+
226
+ class InlineDrink2 < ActiveRecord::Base
227
+ include PolymorphicIntegerType::Extensions
228
+
229
+ self.table_name = "drinks"
230
+
231
+ has_many :inline_links2, as: :target
232
+ end
233
+
234
+ let!(:animal) { InlineAnimal2.create!(name: "Lucy") }
235
+ let!(:drink) { InlineDrink2.create!(name: "Water") }
236
+ let!(:link) { InlineLink2.create!(source: animal, target: drink, normal_target: drink) }
237
+
238
+ let(:source) { animal }
239
+ let(:target) { drink }
240
+
241
+ include_examples "proper source"
242
+ include_examples "proper target"
243
+
244
+ it "pulls mapping from given hash" do
245
+ expect(link.source_id).to eq(animal.id)
246
+ expect(link[:source_type]).to eq(11)
247
+ expect(link.target_id).to eq(drink.id)
248
+ expect(link[:target_type]).to eq(13)
249
+ end
250
+
251
+ it "doesn't break string type polymorphic associations" do
252
+ expect(link.normal_target).to eq(drink)
253
+ expect(link.normal_target_type).to eq("InlineDrink2")
254
+ end
255
+ end
155
256
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
- require 'support/active_record'
1
+ require 'yaml'
2
+ require 'active_record'
2
3
  require 'polymorphic_integer_type'
3
4
  require 'support/configuration'
4
5
  require 'support/link'
@@ -8,26 +9,16 @@ require 'support/person'
8
9
  require 'support/food'
9
10
  require 'support/drink'
10
11
 
11
-
12
-
13
12
  RSpec.configure do |config|
14
-
15
13
  config.before(:suite) do
16
- ActiveRecord::Migrator.up "#{File.dirname(__FILE__)}/support/migrations"
14
+ database_config = YAML.load(File.open("#{File.dirname(__FILE__)}/support/database.yml"))
15
+ ActiveRecord::Base.establish_connection(database_config)
17
16
  end
18
17
 
19
- # No need to return the run the down migration after the test
20
- # but useful while in development
21
- # config.after(:suite) do
22
- # ActiveRecord::Migrator.down "#{File.dirname(__FILE__)}/support/migrations"
23
- # end
24
-
25
-
26
18
  config.around do |example|
27
19
  ActiveRecord::Base.transaction do
28
20
  example.run
29
21
  raise ActiveRecord::Rollback
30
22
  end
31
23
  end
32
-
33
24
  end
@@ -1,10 +1,6 @@
1
1
  class Animal < ActiveRecord::Base
2
-
3
2
  include PolymorphicIntegerType::Extensions
4
3
 
5
- belongs_to :owner, :class_name => "Person"
6
- has_many :source_links, :as => :source, :integer_type => true, :class_name => "Link"
7
-
8
-
9
-
4
+ belongs_to :owner, class_name: "Person"
5
+ has_many :source_links, as: :source, integer_type: true, class_name: "Link"
10
6
  end
@@ -1,6 +1,4 @@
1
1
  PolymorphicIntegerType::Mapping.configuration do |config|
2
-
3
2
  config.add :source, {0 => "Person", 1 => "Animal"}
4
3
  config.add :target, {0 => "Food", 1 => "Drink"}
5
-
6
4
  end
@@ -0,0 +1,6 @@
1
+ ---
2
+ :adapter: mysql2
3
+ :host: localhost
4
+ :database: polymorphic_integer_type_test
5
+ :username: root
6
+ :password: ''
data/spec/support/dog.rb CHANGED
@@ -1,4 +1,2 @@
1
1
  class Dog < Animal
2
-
3
-
4
2
  end
@@ -1,9 +1,5 @@
1
1
  class Drink < ActiveRecord::Base
2
-
3
2
  include PolymorphicIntegerType::Extensions
4
3
 
5
- has_many :target_links, :as => :target, :integer_type => true, :class_name => "Link"
6
-
7
-
8
-
4
+ has_many :target_links, as: :target, integer_type: true, class_name: "Link"
9
5
  end
data/spec/support/food.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  class Food < ActiveRecord::Base
2
-
3
2
  include PolymorphicIntegerType::Extensions
4
3
 
5
- has_many :target_links, :as => :target, :integer_type => true, :class_name => "Link"
6
-
7
-
4
+ has_many :target_links, as: :target, integer_type: true, class_name: "Link"
8
5
  end
data/spec/support/link.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  class Link < ActiveRecord::Base
2
-
3
2
  include PolymorphicIntegerType::Extensions
4
3
 
5
- belongs_to :source, :polymorphic => true, :integer_type => true
6
- belongs_to :target, :polymorphic => true, :integer_type => true
7
-
4
+ belongs_to :source, polymorphic: true, integer_type: true
5
+ belongs_to :target, polymorphic: true, integer_type: true
8
6
  end
@@ -4,6 +4,8 @@ class CreateLinkTable < ActiveRecord::Migration
4
4
  create_table :links do |t|
5
5
  t.integer :target_id
6
6
  t.integer :target_type
7
+ t.integer :normal_target_id
8
+ t.string :normal_target_type
7
9
  t.integer :source_id
8
10
  t.integer :source_type
9
11
  end
@@ -1,11 +1,8 @@
1
1
  class Person < ActiveRecord::Base
2
-
3
2
  include PolymorphicIntegerType::Extensions
4
3
 
5
- has_many :pets, :class_name => "Animal", :foreign_key => :owner_id
6
- has_many :source_links, :as => :source, :integer_type => true, :class_name => "Link"
7
-
8
- has_many :pet_source_links, :class_name => "Link", :through => :pets, :source => :source_links
9
-
4
+ has_many :pets, class_name: "Animal", foreign_key: :owner_id
5
+ has_many :source_links, as: :source, integer_type: true, class_name: "Link"
10
6
 
7
+ has_many :pet_source_links, class_name: "Link", through: :pets, source: :source_links
11
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymorphic_integer_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle d'Oliveira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-10 00:00:00.000000000 Z
11
+ date: 2017-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -97,7 +97,8 @@ dependencies:
97
97
  description: Allows the *_type field in the DB to be an integer rather than a string
98
98
  email:
99
99
  - kyle@goclio.com
100
- executables: []
100
+ executables:
101
+ - setup
101
102
  extensions: []
102
103
  extra_rdoc_files: []
103
104
  files:
@@ -106,6 +107,7 @@ files:
106
107
  - LICENSE.txt
107
108
  - README.md
108
109
  - Rakefile
110
+ - bin/setup
109
111
  - lib/polymorphic_integer_type.rb
110
112
  - lib/polymorphic_integer_type/extensions.rb
111
113
  - lib/polymorphic_integer_type/mapping.rb
@@ -113,9 +115,9 @@ files:
113
115
  - polymorphic_integer_type.gemspec
114
116
  - spec/polymorphic_integer_type_spec.rb
115
117
  - spec/spec_helper.rb
116
- - spec/support/active_record.rb
117
118
  - spec/support/animal.rb
118
119
  - spec/support/configuration.rb
120
+ - spec/support/database.yml
119
121
  - spec/support/dog.rb
120
122
  - spec/support/drink.rb
121
123
  - spec/support/food.rb
@@ -146,16 +148,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
148
  version: '0'
147
149
  requirements: []
148
150
  rubyforge_project:
149
- rubygems_version: 2.2.2
151
+ rubygems_version: 2.6.14
150
152
  signing_key:
151
153
  specification_version: 4
152
154
  summary: Use integers rather than strings for the _type field
153
155
  test_files:
154
156
  - spec/polymorphic_integer_type_spec.rb
155
157
  - spec/spec_helper.rb
156
- - spec/support/active_record.rb
157
158
  - spec/support/animal.rb
158
159
  - spec/support/configuration.rb
160
+ - spec/support/database.yml
159
161
  - spec/support/dog.rb
160
162
  - spec/support/drink.rb
161
163
  - spec/support/food.rb
@@ -1,12 +0,0 @@
1
- require 'active_record'
2
- Dir["#{File.dirname(__FILE__)}/migrations/*.rb"].each {|f| require f}
3
-
4
- config = {
5
- :adapter => "mysql2",
6
- :host => "localhost",
7
- :database => "polymorphic_integer_type_test",
8
- :username => "root",
9
- :password => ""
10
- }
11
- ActiveRecord::Base.establish_connection(config)
12
-