polymorphic_integer_type 1.0.0 → 1.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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODEyOTFmYmVhMTRmNmEwYTZmYTI5YzcwYmNkMTUyMGI5Yjk0ZjQ3NQ==
5
+ data.tar.gz: !binary |-
6
+ NDRkNzdiMjUwZjUxYWI3NWM4YTA0N2YzYzcwYTlkZTJkYjE1YTAyZg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YjdhZDEwNjRjYzc3OWI4NGY2N2U5ZjEwNmUxNzRjMzkzMTVmZGI3Zjk4MzVh
10
+ NDhhYjYyNmRjMGJmOTI3NTcyZjMwNjU3Mjc2MGNjNzQ0ZjgzOWZhMzk4Nzg3
11
+ YTg0OGY4NThmNjI5MzE1ODJiY2FjYmExMTk1MGRlOTA3MmM3ZWE=
12
+ data.tar.gz: !binary |-
13
+ NzM3ZTZiMGIwMTQwMTk1NTU1N2FmZDk2MGQ5MTRjYjBhZTBiMWUwOTE1ZTU3
14
+ MjVjYjA3YWJmMTZmY2YxNjViMTk4ZmI1YmRlMDFkZTg2NjRhZjdkYjRlNDhi
15
+ M2VjNzcxMGVmY2ZiNTg2YmI2YTg0MzI2YWI2ODY1ZTE0MzlmMDM=
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # PolymorphicIntegerType
2
2
 
3
- Rails' polymorphic assocaitions are pretty useful. The example they give to set it up looks like:
3
+ Rails' polymorphic associations are pretty useful. The example they give to set it up looks like:
4
4
  ```ruby
5
5
  class Picture < ActiveRecord::Base
6
6
  belongs_to :imageable, polymorphic: true
@@ -29,7 +29,7 @@ class CreatePictures < ActiveRecord::Migration
29
29
  end
30
30
  ```
31
31
 
32
- The problem with this approach is the `imageable_type` is a string (and by default it is 255 characters). This is a little rediculous. For comparison, if we had a state machine with X states, would be describe the states with strings `"State1", "State2", etc` or would be just enumerate the state column and make it an integer. This gem will make it so we can use an integer for the `imageable_type` column.
32
+ The problem with this approach is that `imageable_type` is a string (and by default it is 255 characters). This is a little ridiculous. For comparison, if we had a state machine with X states, would we describe the states with strings `"State1", "State2", etc` or would we just enumerate the state column and make it an integer? This gem will allow us to use an integer for the `imageable_type` column.
33
33
 
34
34
  ## Installation
35
35
 
@@ -49,21 +49,21 @@ Or install it yourself as:
49
49
 
50
50
  The gem is pretty straightforward to use.
51
51
 
52
- First, include the extensions module and add the `integer_type` option to the assocaitions that are going to be using this. (That way it will play nicely with polymorphic association you would rather the type remain as a string)
52
+ 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.)
53
53
  ```ruby
54
54
  class Picture < ActiveRecord::Base
55
55
  include PolymorphicIntegerType::Extensions
56
- belongs_to :imageable, polymorphic: true, :integer_type => true
56
+ belongs_to :imageable, polymorphic: true, integer_type: true
57
57
  end
58
58
 
59
59
  class Employee < ActiveRecord::Base
60
60
  include PolymorphicIntegerType::Extensions
61
- has_many :pictures, as: :imageable, :integer_type => true
61
+ has_many :pictures, as: :imageable, integer_type: true
62
62
  end
63
63
 
64
64
  class Product < ActiveRecord::Base
65
65
  include PolymorphicIntegerType::Extensions
66
- has_many :pictures, as: :imageable, :integer_type => true
66
+ has_many :pictures, as: :imageable, integer_type: true
67
67
  end
68
68
  ```
69
69
 
@@ -76,55 +76,53 @@ PolymorphicIntegerType::Mapping.configuration do |config|
76
76
  end
77
77
  ```
78
78
 
79
- Note: The mapping here can start from whatever integer you wish, but I would advise not to use 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.
79
+ 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.
80
80
 
81
- If you want to migrate from a polymorphic association that is already a string you'll need to setup a migration (assuming sql for the time being. But this should be pretty straightforward)
81
+ 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.)
82
82
  ```ruby
83
83
  class PictureToPolymorphicIntegerType < ActiveRecord::Migration
84
84
 
85
85
  def up
86
- execute <<-SQL
87
- ALTER TABLE pictures
88
- ADD COLUMN new_imageable_type INTEGER
89
- SQL
86
+ change_table :pictures do |t|
87
+ t.integer :new_imageable_type
88
+ end
90
89
 
91
90
  execute <<-SQL
92
91
  UPDATE reminders
93
92
  SET new_imageable_type = CASE imageable_type
94
- WHEN 'Employee' THEN 1
95
- WHEN 'Product' THEN 2
96
- END
97
- SQL
98
- execute <<-SQL
99
- ALTER TABLE pictures
100
- DROP COLUMN imageable_type,
101
- CHANGE COLUMN new_imageable_type imageable_type INTEGER
93
+ WHEN 'Employee' THEN 1
94
+ WHEN 'Product' THEN 2
95
+ END
102
96
  SQL
97
+
98
+ change_table :pictures, :bulk => true do |t|
99
+ t.remove :imageable_type
100
+ t.rename :new_imageable_type, :imageable_type
101
+ end
103
102
  end
104
103
 
105
104
  def down
106
- execute <<-SQL
107
- ALTER TABLE pictures
108
- ADD COLUMN new_imageable_type VARCHAR(255)
109
- SQL
105
+ change_table :pictures do |t|
106
+ t.string :new_imageable_type
107
+ end
110
108
 
111
109
  execute <<-SQL
112
110
  UPDATE picture
113
111
  SET new_imageable_type = CASE imageable_type
114
- WHEN 1 THEN 'Employee'
115
- WHEN 2 THEN 'Product'
116
- END
117
- SQL
118
- execute <<-SQL
119
- ALTER TABLE picture
120
- DROP COLUMN imageable_type,
121
- CHANGE COLUMN new_imageable_type imageable_type VARCHAR(255)
112
+ WHEN 1 THEN 'Employee'
113
+ WHEN 2 THEN 'Product'
114
+ END
122
115
  SQL
116
+
117
+ change_table :pictures, :bulk => true do |t|
118
+ t.remove :imageable_type
119
+ t.rename :new_imageable_type, :imageable_type
120
+ end
123
121
  end
124
122
  end
125
123
  ```
126
124
 
127
- 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
125
+ 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
126
 
129
127
 
130
128
 
@@ -54,7 +54,7 @@ module PolymorphicIntegerType
54
54
  super(name, options, &extension)
55
55
  end
56
56
 
57
- def has_one(name, options)
57
+ def has_one(name, options = {})
58
58
  remove_type_and_establish_mapping(name, options)
59
59
  super(name, options)
60
60
  end
@@ -1,3 +1,3 @@
1
1
  module PolymorphicIntegerType
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymorphic_integer_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Kyle d'Oliveira
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-17 00:00:00.000000000 Z
11
+ date: 2013-11-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: activerecord
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - '='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - '='
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: mysql
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - '='
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - '='
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: debugger
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ! '>='
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ! '>='
108
95
  - !ruby/object:Gem::Version
@@ -141,27 +128,26 @@ files:
141
128
  homepage: ''
142
129
  licenses:
143
130
  - MIT
131
+ metadata: {}
144
132
  post_install_message:
145
133
  rdoc_options: []
146
134
  require_paths:
147
135
  - lib
148
136
  required_ruby_version: !ruby/object:Gem::Requirement
149
- none: false
150
137
  requirements:
151
138
  - - ! '>='
152
139
  - !ruby/object:Gem::Version
153
140
  version: '0'
154
141
  required_rubygems_version: !ruby/object:Gem::Requirement
155
- none: false
156
142
  requirements:
157
143
  - - ! '>='
158
144
  - !ruby/object:Gem::Version
159
145
  version: '0'
160
146
  requirements: []
161
147
  rubyforge_project:
162
- rubygems_version: 1.8.25
148
+ rubygems_version: 2.1.11
163
149
  signing_key:
164
- specification_version: 3
150
+ specification_version: 4
165
151
  summary: Use integers rather than strings for the _type field
166
152
  test_files:
167
153
  - spec/polymorphic_integer_type_spec.rb