acts_as_customized_attributes 0.0.6 → 0.0.7

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 (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