acts_as_customized_attributes 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +5 -13
  2. data/README.md +3 -3
  3. data/Rakefile +15 -11
  4. data/config/routes.rb +1 -0
  5. data/lib/acts_as_customized_attributes.rb +1 -0
  6. data/lib/acts_as_customized_attributes/class_methods.rb +95 -13
  7. data/lib/acts_as_customized_attributes/compatibility.rb +1 -0
  8. data/lib/acts_as_customized_attributes/engine.rb +4 -2
  9. data/lib/acts_as_customized_attributes/instance_methods.rb +7 -6
  10. data/lib/acts_as_customized_attributes/version.rb +2 -1
  11. data/lib/tasks/acts_as_customized_attributes_tasks.rake +1 -0
  12. data/spec/dummy/Rakefile +2 -1
  13. data/spec/dummy/app/controllers/application_controller.rb +1 -0
  14. data/spec/dummy/app/helpers/application_helper.rb +1 -0
  15. data/spec/dummy/app/models/order.rb +1 -0
  16. data/spec/dummy/app/models/user.rb +1 -0
  17. data/spec/dummy/config.ru +2 -1
  18. data/spec/dummy/config/application.rb +4 -4
  19. data/spec/dummy/config/boot.rb +6 -5
  20. data/spec/dummy/config/database.example.yml +6 -37
  21. data/spec/dummy/config/database.shippable.yml +2 -5
  22. data/spec/dummy/config/database.yml +9 -16
  23. data/spec/dummy/config/environment.rb +2 -1
  24. data/spec/dummy/config/environments/development.rb +2 -0
  25. data/spec/dummy/config/environments/production.rb +3 -1
  26. data/spec/dummy/config/environments/test.rb +4 -2
  27. data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
  28. data/spec/dummy/config/initializers/inflections.rb +1 -0
  29. data/spec/dummy/config/initializers/mime_types.rb +1 -0
  30. data/spec/dummy/config/initializers/secret_token.rb +3 -1
  31. data/spec/dummy/config/initializers/session_store.rb +2 -1
  32. data/spec/dummy/config/initializers/wrap_parameters.rb +1 -0
  33. data/spec/dummy/config/routes.rb +1 -0
  34. data/spec/dummy/db/development.sqlite3 +0 -0
  35. data/spec/dummy/db/migrate/20141118114902_create_users.rb +1 -0
  36. data/spec/dummy/db/migrate/20141118114941_create_user_customized_attributes.rb +1 -0
  37. data/spec/dummy/db/migrate/20141118134833_create_orders.rb +1 -0
  38. data/spec/dummy/db/migrate/20141118135027_create_order_customized_attributes.rb +1 -0
  39. data/spec/dummy/db/schema.rb +16 -16
  40. data/spec/dummy/db/test.sqlite3 +0 -0
  41. data/spec/dummy/log/development.log +153 -0
  42. data/spec/dummy/log/test.log +2278 -0
  43. data/spec/dummy/script/rails +4 -3
  44. data/spec/factories/order.rb +1 -0
  45. data/spec/factories/user.rb +1 -0
  46. data/spec/models/user_spec.rb +23 -22
  47. data/spec/spec_helper.rb +8 -7
  48. metadata +64 -34
  49. data/app/models/acts_as_customized_attributes/data.rb +0 -29
  50. data/app/models/acts_as_customized_attributes/data_key.rb +0 -52
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
  # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
4
 
4
- APP_PATH = File.expand_path('../../config/application', __FILE__)
5
- require File.expand_path('../../config/boot', __FILE__)
6
- require 'rails/commands'
5
+ APP_PATH = File.expand_path("../../config/application", __FILE__)
6
+ require File.expand_path("../../config/boot", __FILE__)
7
+ require "rails/commands"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  FactoryGirl.define do
2
3
  factory :order do
3
4
  association :user, factory: :user
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  FactoryGirl.define do
2
3
  factory :user do
3
4
  email { Forgery::Internet.email_address }
@@ -1,44 +1,45 @@
1
+ # frozen_string_literal: true
1
2
  require "spec_helper"
2
3
 
3
4
  describe User do
4
- let!(:user){ create :user }
5
- let!(:order){ create :order, user: user }
5
+ let!(:user) { create :user }
6
+ let!(:order) { create :order, user: user }
6
7
 
7
8
  before do
8
9
  UserDataKey.update_cache_name_to_id
9
10
 
10
11
  user.update_customized_attributes(facebook_email: "kaspernj@facebook.com")
11
- user.customized_attribute(:facebook_email).should eq "kaspernj@facebook.com"
12
+ expect(user.customized_attribute(:facebook_email)).to eq "kaspernj@facebook.com"
12
13
  end
13
14
 
14
15
  it "should be possible to set custom data and it shouldn't mix up" do
15
16
  order.update_customized_attributes(affiliate_data: "test")
16
- order.customized_attributes[:affiliate_data].should eq "test"
17
- order.customized_attributes[:facebook_email].should eq nil
17
+ expect(order.customized_attributes[:affiliate_data]).to eq "test"
18
+ expect(order.customized_attributes[:facebook_email]).to eq nil
18
19
  end
19
20
 
20
21
  it "should autodelete when destroyed" do
21
22
  user_id = user.id
22
23
  user.destroy
23
24
 
24
- UserData.joins(:data_key).where(resource_id: user_id, user_data_keys: {name: "facebook_email"}).first.should eq nil
25
+ expect(UserData.joins(:data_key).where(resource_id: user_id, user_data_keys: {name: "facebook_email"}).first).to eq nil
25
26
  end
26
27
 
27
28
  it "should help search for attributes" do
28
29
  users_query = User.where_customized_attribute(:facebook_email, "kaspernj@facebook.com")
29
- users_query.count.should eq 1
30
- users_query.first.should eq user
30
+ expect(users_query.count).to eq 1
31
+ expect(users_query.first).to eq user
31
32
  end
32
33
 
33
34
  it "should clear cache when key is destroyed" do
34
35
  keys = UserDataKey.where(name: "facebook_email")
35
- keys.count.should eq 1
36
+ expect(keys.count).to eq 1
36
37
  keys.destroy_all
37
- keys.count.should eq 0
38
+ expect(keys.count).to eq 0
38
39
 
39
- expect {
40
+ expect do
40
41
  UserDataKey.id_for_name("facebook_email")
41
- }.to raise_error(KeyError)
42
+ end.to raise_error(KeyError)
42
43
  end
43
44
 
44
45
  it "should update the cache name" do
@@ -46,29 +47,29 @@ describe User do
46
47
  key.name = "facebook_mail"
47
48
  key.save!
48
49
 
49
- expect {
50
+ expect do
50
51
  UserDataKey.id_for_name("facebook_email")
51
- }.to raise_error(KeyError)
52
+ end.to raise_error(KeyError)
52
53
 
53
- user.customized_attribute(:facebook_mail).should eq "kaspernj@facebook.com"
54
+ expect(user.customized_attribute(:facebook_mail)).to eq "kaspernj@facebook.com"
54
55
  end
55
56
 
56
57
  it "shouldn't allow the same key twice" do
57
- user.customized_attribute(:facebook_email).should eq "kaspernj@facebook.com"
58
+ expect(user.customized_attribute(:facebook_email)).to eq "kaspernj@facebook.com"
58
59
 
59
- expect {
60
+ expect do
60
61
  UserDataKey.create!(name: "facebook_email")
61
- }.to raise_error(ActiveRecord::RecordInvalid)
62
+ end.to raise_error(ActiveRecord::RecordInvalid)
62
63
  end
63
64
 
64
65
  it "shouldn't allow the same data twice" do
65
- expect {
66
+ expect do
66
67
  UserData.create!(
67
68
  resource_id: user.id,
68
69
  data_key_id: UserDataKey.id_for_name("facebook_email"),
69
70
  value: "test"
70
71
  )
71
- }.to raise_error(ActiveRecord::RecordNotUnique)
72
+ end.to raise_error(ActiveRecord::RecordNotUnique)
72
73
  end
73
74
 
74
75
  it "should support transactioner" do
@@ -84,7 +85,7 @@ describe User do
84
85
  )
85
86
  end
86
87
 
87
- user.customized_attribute(:facebook_email).should eq "test@example.com"
88
- user.customized_attribute(:some_attribute).should eq "test"
88
+ expect(user.customized_attribute(:facebook_email)).to eq "test@example.com"
89
+ expect(user.customized_attribute(:some_attribute)).to eq "test"
89
90
  end
90
91
  end
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,17 @@
1
+ # frozen_string_literal: true
1
2
  require "codeclimate-test-reporter"
2
3
  CodeClimate::TestReporter.start
3
4
 
4
- ENV["RAILS_ENV"] ||= 'test'
5
- require File.expand_path("../dummy/config/environment", __FILE__)
6
- require 'rspec/rails'
7
- require 'rspec/autorun'
8
- require 'factory_girl_rails'
9
- require 'forgery'
5
+ ENV["RAILS_ENV"] ||= "test"
6
+ require "dummy/config/environment"
7
+ require "rspec/rails"
8
+ require "factory_girl_rails"
9
+ require "forgery"
10
+ require "sqlite3"
10
11
 
11
12
  # Requires supporting ruby files with custom matchers and macros, etc,
12
13
  # in spec/support/ and its subdirectories.
13
- Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
14
+ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
14
15
 
15
16
  RSpec.configure do |config|
16
17
  # ## Mock Framework
metadata CHANGED
@@ -1,113 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_customized_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kasper Johansen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2016-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.12
19
+ version: '4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.1.12
26
+ version: '4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec-rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 3.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 3.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: factory_girl_rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 4.5.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 4.5.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: forgery
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.6.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.6.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: codeclimate-test-reporter
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.4.8
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 0.4.8
83
83
  - !ruby/object:Gem::Dependency
84
- name: mysql2
84
+ name: sqlite3
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.3.11
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.3.11
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: active-record-transactioner
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: best_practice_project
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.0.10
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.0.10
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 0.42.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 0.42.0
111
139
  description: Key-based custom attributes that can be created on the fly for ActiveRecord
112
140
  models.
113
141
  email:
@@ -119,8 +147,6 @@ files:
119
147
  - MIT-LICENSE
120
148
  - README.md
121
149
  - Rakefile
122
- - app/models/acts_as_customized_attributes/data.rb
123
- - app/models/acts_as_customized_attributes/data_key.rb
124
150
  - config/routes.rb
125
151
  - lib/acts_as_customized_attributes.rb
126
152
  - lib/acts_as_customized_attributes/class_methods.rb
@@ -155,11 +181,13 @@ files:
155
181
  - spec/dummy/config/initializers/wrap_parameters.rb
156
182
  - spec/dummy/config/locales/en.yml
157
183
  - spec/dummy/config/routes.rb
184
+ - spec/dummy/db/development.sqlite3
158
185
  - spec/dummy/db/migrate/20141118114902_create_users.rb
159
186
  - spec/dummy/db/migrate/20141118114941_create_user_customized_attributes.rb
160
187
  - spec/dummy/db/migrate/20141118134833_create_orders.rb
161
188
  - spec/dummy/db/migrate/20141118135027_create_order_customized_attributes.rb
162
189
  - spec/dummy/db/schema.rb
190
+ - spec/dummy/db/test.sqlite3
163
191
  - spec/dummy/log/development.log
164
192
  - spec/dummy/log/test.log
165
193
  - spec/dummy/public/404.html
@@ -180,17 +208,17 @@ require_paths:
180
208
  - lib
181
209
  required_ruby_version: !ruby/object:Gem::Requirement
182
210
  requirements:
183
- - - ! '>='
211
+ - - ">="
184
212
  - !ruby/object:Gem::Version
185
213
  version: '0'
186
214
  required_rubygems_version: !ruby/object:Gem::Requirement
187
215
  requirements:
188
- - - ! '>='
216
+ - - ">="
189
217
  - !ruby/object:Gem::Version
190
218
  version: '0'
191
219
  requirements: []
192
220
  rubyforge_project:
193
- rubygems_version: 2.2.2
221
+ rubygems_version: 2.5.1
194
222
  signing_key:
195
223
  specification_version: 4
196
224
  summary: Customized attributes for models.
@@ -213,10 +241,12 @@ test_files:
213
241
  - spec/dummy/log/development.log
214
242
  - spec/dummy/log/test.log
215
243
  - spec/dummy/db/schema.rb
244
+ - spec/dummy/db/test.sqlite3
216
245
  - spec/dummy/db/migrate/20141118114941_create_user_customized_attributes.rb
217
246
  - spec/dummy/db/migrate/20141118135027_create_order_customized_attributes.rb
218
247
  - spec/dummy/db/migrate/20141118134833_create_orders.rb
219
248
  - spec/dummy/db/migrate/20141118114902_create_users.rb
249
+ - spec/dummy/db/development.sqlite3
220
250
  - spec/dummy/Rakefile
221
251
  - spec/dummy/config.ru
222
252
  - spec/dummy/config/initializers/wrap_parameters.rb
@@ -1,29 +0,0 @@
1
- class ActsAsCustomizedAttributes::Data < ActiveRecord::Base
2
- validate :associated_resource_and_data_key
3
-
4
- def self.key_class=(key_class)
5
- @key_class = key_class
6
- end
7
-
8
- def self.key_class
9
- return @key_class
10
- end
11
-
12
- private
13
-
14
- def associated_resource_and_data_key
15
- unless data_key_id?
16
- return errors.add :data_key_id, "not valid"
17
- end
18
-
19
- if !resource_id? || !resource
20
- return errors.add :resource_id, "not associated"
21
- end
22
-
23
- begin
24
- self.class.key_class.name_for_id(data_key_id)
25
- rescue KeyError
26
- errors.add :data_key_id, "doesn't exist"
27
- end
28
- end
29
- end
@@ -1,52 +0,0 @@
1
- class ActsAsCustomizedAttributes::DataKey < ActiveRecord::Base
2
- after_create :add_to_cache
3
- after_update :add_to_cache
4
- after_destroy :remove_from_cache
5
- before_update :remove_from_cache
6
-
7
- validates_presence_of :name
8
- validate :validate_unique_name
9
-
10
- def self.id_for_name(name)
11
- cache_name_to_id.fetch(name.to_s)
12
- end
13
-
14
- def self.name_for_id(id)
15
- cache_name_to_id.key(id) or raise KeyError, "No such ID: #{id}"
16
- end
17
-
18
- def self.cache_name_to_id
19
- update_cache_name_to_id unless @cache_name_to_id
20
- return @cache_name_to_id
21
- end
22
-
23
- # Initializes / reloads the cache.
24
- def self.update_cache_name_to_id
25
- @cache_name_to_id = {}
26
- find_each do |data_key|
27
- @cache_name_to_id[data_key.name] = data_key.id
28
- end
29
- end
30
-
31
- private
32
-
33
- def add_to_cache
34
- self.class.cache_name_to_id[name.to_s] = id
35
- end
36
-
37
- def remove_from_cache
38
- self.class.cache_name_to_id.delete(name_was)
39
- end
40
-
41
- def validate_unique_name
42
- begin
43
- id_exists = self.class.id_for_name(name)
44
-
45
- if id_exists != id
46
- errors.add :name, :taken
47
- end
48
- rescue KeyError
49
- # No problem.
50
- end
51
- end
52
- end