hstore_accessor 0.4.1 → 0.5.0
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 +4 -4
- data/README.md +7 -0
- data/hstore_accessor.gemspec +1 -0
- data/lib/hstore_accessor.rb +9 -1
- data/lib/hstore_accessor/version.rb +1 -1
- data/spec/hstore_accessor_spec.rb +40 -0
- data/spec/spec_helper.rb +5 -2
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 460ba6cc8bae8307b3ddfdfd57af74ba02294934
|
4
|
+
data.tar.gz: cfd99b46a2ec13e2307c849720f5044315bf36f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89245110259014870177d5b8c221d035909c1c8a635dd8a16a57384047ed00bfc80628aa265d2af317a58718d975e0134323e2208f08985c9af9b08b999e3635
|
7
|
+
data.tar.gz: a55c4ca8c1aea4ba9b85dae96f79fd1c7a2144e0737a645dac690597115ad2d124139d189cc63f78a18635c21a0903e5de5dde34eeda62af60e5747f6257bdf7
|
data/README.md
CHANGED
@@ -131,6 +131,13 @@ Product.is_popular # => when populer is set to true
|
|
131
131
|
Product.not_popular # => when populer is set to false
|
132
132
|
```
|
133
133
|
|
134
|
+
Predicate methods are also available on instances:
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
product = Product.new(popular: true)
|
138
|
+
product.popular? #=> true
|
139
|
+
```
|
140
|
+
|
134
141
|
### Single-table Inheritance
|
135
142
|
|
136
143
|
One of the big issues with `ActiveRecord` single-table inheritance (STI)
|
data/hstore_accessor.gemspec
CHANGED
data/lib/hstore_accessor.rb
CHANGED
@@ -18,7 +18,7 @@ module HstoreAccessor
|
|
18
18
|
:array => -> value { (value && value.join(SEPARATOR)) || nil },
|
19
19
|
:hash => -> value { (value && value.to_json) || nil },
|
20
20
|
:time => -> value { value.to_i },
|
21
|
-
:boolean => -> value { (value == true).to_s },
|
21
|
+
:boolean => -> value { (value.to_s == "true").to_s },
|
22
22
|
:date => -> value { (value && value.to_s) || nil }
|
23
23
|
}
|
24
24
|
|
@@ -57,6 +57,8 @@ module HstoreAccessor
|
|
57
57
|
store_key = type[:store_key]
|
58
58
|
end
|
59
59
|
|
60
|
+
data_type = data_type.to_sym
|
61
|
+
|
60
62
|
raise InvalidDataTypeError unless VALID_TYPES.include?(data_type)
|
61
63
|
|
62
64
|
define_method("#{key}=") do |value|
|
@@ -69,6 +71,12 @@ module HstoreAccessor
|
|
69
71
|
deserialize(data_type, value)
|
70
72
|
end
|
71
73
|
|
74
|
+
if type == :boolean
|
75
|
+
define_method("#{key}?") do
|
76
|
+
return send("#{key}")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
72
80
|
query_field = "#{hstore_attribute} -> '#{store_key}'"
|
73
81
|
|
74
82
|
case data_type
|
@@ -54,6 +54,7 @@ describe HstoreAccessor do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
context "nil values" do
|
57
|
+
|
57
58
|
let!(:timestamp) { Time.now }
|
58
59
|
let!(:datestamp) { Date.today }
|
59
60
|
let!(:product) { Product.new }
|
@@ -73,6 +74,27 @@ describe HstoreAccessor do
|
|
73
74
|
end
|
74
75
|
|
75
76
|
end
|
77
|
+
|
78
|
+
describe "predicate methods" do
|
79
|
+
|
80
|
+
let!(:product) { Product.new }
|
81
|
+
|
82
|
+
it "return the state for true boolean fields" do
|
83
|
+
product.popular = true
|
84
|
+
product.save
|
85
|
+
product.reload
|
86
|
+
expect(product.popular?).to be_true
|
87
|
+
end
|
88
|
+
|
89
|
+
it "return the state for false boolean fields" do
|
90
|
+
product.popular = false
|
91
|
+
product.save
|
92
|
+
product.reload
|
93
|
+
expect(product.popular?).to be_false
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
76
98
|
describe "scopes" do
|
77
99
|
|
78
100
|
let!(:timestamp) { Time.now }
|
@@ -270,6 +292,24 @@ describe HstoreAccessor do
|
|
270
292
|
expect(product.released_at).to eq datestamp
|
271
293
|
end
|
272
294
|
|
295
|
+
context "correctly stores boolean values" do
|
296
|
+
|
297
|
+
it "when string 'true' is passed" do
|
298
|
+
product.popular = 'true'
|
299
|
+
product.save
|
300
|
+
product.reload
|
301
|
+
expect(product.popular).to be_true
|
302
|
+
end
|
303
|
+
|
304
|
+
it "when a real boolean is passed" do
|
305
|
+
product.popular = true
|
306
|
+
product.save
|
307
|
+
product.reload
|
308
|
+
expect(product.popular).to be_true
|
309
|
+
end
|
310
|
+
|
311
|
+
end
|
312
|
+
|
273
313
|
it "setters call the _will_change! method of the store attribute" do
|
274
314
|
product.should_receive(:options_will_change!)
|
275
315
|
product.color = "green"
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "hstore_accessor"
|
2
|
+
require "database_cleaner"
|
2
3
|
|
3
4
|
ActiveRecord::Base.establish_connection(
|
4
5
|
adapter: "postgresql",
|
@@ -13,10 +14,12 @@ ActiveRecord::Base.connection.create_table(:products) do |t|
|
|
13
14
|
t.hstore :options
|
14
15
|
end
|
15
16
|
|
17
|
+
DatabaseCleaner.strategy = :truncation
|
18
|
+
|
16
19
|
RSpec.configure do |config|
|
17
20
|
config.mock_with :rspec
|
18
21
|
|
19
|
-
config.
|
20
|
-
|
22
|
+
config.before do
|
23
|
+
DatabaseCleaner.clean
|
21
24
|
end
|
22
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hstore_accessor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe Hirn
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-11-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pg
|
@@ -110,6 +110,20 @@ dependencies:
|
|
110
110
|
- - '>='
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: database_cleaner
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
type: :development
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
113
127
|
description: Adds typed hstore backed fields to an ActiveRecord model.
|
114
128
|
email:
|
115
129
|
- joe@devmynd.com
|