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.
- checksums.yaml +5 -13
- data/README.md +3 -3
- data/Rakefile +15 -11
- data/config/routes.rb +1 -0
- data/lib/acts_as_customized_attributes.rb +1 -0
- data/lib/acts_as_customized_attributes/class_methods.rb +95 -13
- data/lib/acts_as_customized_attributes/compatibility.rb +1 -0
- data/lib/acts_as_customized_attributes/engine.rb +4 -2
- data/lib/acts_as_customized_attributes/instance_methods.rb +7 -6
- data/lib/acts_as_customized_attributes/version.rb +2 -1
- data/lib/tasks/acts_as_customized_attributes_tasks.rake +1 -0
- data/spec/dummy/Rakefile +2 -1
- data/spec/dummy/app/controllers/application_controller.rb +1 -0
- data/spec/dummy/app/helpers/application_helper.rb +1 -0
- data/spec/dummy/app/models/order.rb +1 -0
- data/spec/dummy/app/models/user.rb +1 -0
- data/spec/dummy/config.ru +2 -1
- data/spec/dummy/config/application.rb +4 -4
- data/spec/dummy/config/boot.rb +6 -5
- data/spec/dummy/config/database.example.yml +6 -37
- data/spec/dummy/config/database.shippable.yml +2 -5
- data/spec/dummy/config/database.yml +9 -16
- data/spec/dummy/config/environment.rb +2 -1
- data/spec/dummy/config/environments/development.rb +2 -0
- data/spec/dummy/config/environments/production.rb +3 -1
- data/spec/dummy/config/environments/test.rb +4 -2
- data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/dummy/config/initializers/inflections.rb +1 -0
- data/spec/dummy/config/initializers/mime_types.rb +1 -0
- data/spec/dummy/config/initializers/secret_token.rb +3 -1
- data/spec/dummy/config/initializers/session_store.rb +2 -1
- data/spec/dummy/config/initializers/wrap_parameters.rb +1 -0
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20141118114902_create_users.rb +1 -0
- data/spec/dummy/db/migrate/20141118114941_create_user_customized_attributes.rb +1 -0
- data/spec/dummy/db/migrate/20141118134833_create_orders.rb +1 -0
- data/spec/dummy/db/migrate/20141118135027_create_order_customized_attributes.rb +1 -0
- data/spec/dummy/db/schema.rb +16 -16
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +153 -0
- data/spec/dummy/log/test.log +2278 -0
- data/spec/dummy/script/rails +4 -3
- data/spec/factories/order.rb +1 -0
- data/spec/factories/user.rb +1 -0
- data/spec/models/user_spec.rb +23 -22
- data/spec/spec_helper.rb +8 -7
- metadata +64 -34
- data/app/models/acts_as_customized_attributes/data.rb +0 -29
- data/app/models/acts_as_customized_attributes/data_key.rb +0 -52
data/spec/dummy/script/rails
CHANGED
@@ -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(
|
5
|
-
require File.expand_path(
|
6
|
-
require
|
5
|
+
APP_PATH = File.expand_path("../../config/application", __FILE__)
|
6
|
+
require File.expand_path("../../config/boot", __FILE__)
|
7
|
+
require "rails/commands"
|
data/spec/factories/order.rb
CHANGED
data/spec/factories/user.rb
CHANGED
data/spec/models/user_spec.rb
CHANGED
@@ -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).
|
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].
|
17
|
-
order.customized_attributes[:facebook_email].
|
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.
|
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.
|
30
|
-
users_query.first.
|
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.
|
36
|
+
expect(keys.count).to eq 1
|
36
37
|
keys.destroy_all
|
37
|
-
keys.count.
|
38
|
+
expect(keys.count).to eq 0
|
38
39
|
|
39
|
-
expect
|
40
|
+
expect do
|
40
41
|
UserDataKey.id_for_name("facebook_email")
|
41
|
-
|
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
|
-
|
52
|
+
end.to raise_error(KeyError)
|
52
53
|
|
53
|
-
user.customized_attribute(:facebook_mail).
|
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).
|
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
|
-
|
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
|
-
|
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).
|
88
|
-
user.customized_attribute(:some_attribute).
|
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"] ||=
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
82
|
+
version: 0.4.8
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: sqlite3
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
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:
|
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.
|
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
|