hstore_attributes 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hstore_attributes/version.rb +1 -1
- data/lib/hstore_attributes.rb +12 -3
- data/test/hstore_reader_test.rb +11 -8
- data/test/hstore_writer_test.rb +11 -0
- data/test/test_helper.rb +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7670a1540b41cf655db5638737cb86086193661d
|
4
|
+
data.tar.gz: 6cb7f874632c3d5f92b5bb47d4edfa3460a7e9b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a7dd48f1c828733a7b42947d1231c5fb3f2546976923d7b179b0120f858232b28bfe970f4d1e87ba04bb9c4edd26fbfdcc3a0a774b1183ba7fb8059b1709425
|
7
|
+
data.tar.gz: 6d0c78db0d3d51ef6b8cd59495f099593d63ab2ca56e0b79bc23bd096d5d9be137cc6172dda79740765ddbb5d5badb617e30b11817d24d5a60d0d882eed3e78f
|
data/lib/hstore_attributes.rb
CHANGED
@@ -1,13 +1,22 @@
|
|
1
1
|
require "hstore_attributes/version"
|
2
2
|
|
3
3
|
module HstoreAttributes
|
4
|
+
def self.convert(value, options = {})
|
5
|
+
if options[:allow_nil] == true and value.nil?
|
6
|
+
nil
|
7
|
+
elsif options[:type_cast]
|
8
|
+
options[:type_cast].to_proc.call(value)
|
9
|
+
else
|
10
|
+
value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
4
14
|
def hstore_reader(hstore, *attributes)
|
5
15
|
options = attributes.extract_options!
|
6
16
|
attributes.map(&:to_s).each do |attribute|
|
7
17
|
define_method(attribute) do
|
8
18
|
value = (send(hstore) || {})[attribute]
|
9
|
-
|
10
|
-
value
|
19
|
+
HstoreAttributes.convert(value, options)
|
11
20
|
end
|
12
21
|
end
|
13
22
|
end
|
@@ -16,7 +25,7 @@ module HstoreAttributes
|
|
16
25
|
options = attributes.extract_options!
|
17
26
|
attributes.map(&:to_s).each do |attribute|
|
18
27
|
define_method("#{attribute}=") do |value|
|
19
|
-
value =
|
28
|
+
value = HstoreAttributes.convert(value, options)
|
20
29
|
send("#{hstore}=", (send(hstore) || {}).merge(attribute => value))
|
21
30
|
end
|
22
31
|
end
|
data/test/hstore_reader_test.rb
CHANGED
@@ -7,14 +7,7 @@ class Product
|
|
7
7
|
hstore_reader :data, :price, :price_2, type_cast: :to_i
|
8
8
|
hstore_reader :data, :name, type_cast: ->(value) { value.to_s.upcase }
|
9
9
|
hstore_reader :data, :description
|
10
|
-
|
11
|
-
def data
|
12
|
-
@data
|
13
|
-
end
|
14
|
-
|
15
|
-
def data=(data)
|
16
|
-
@data = data
|
17
|
-
end
|
10
|
+
hstore_reader :data, :money, type_cast: :to_d, allow_nil: true
|
18
11
|
end
|
19
12
|
|
20
13
|
describe "hstore_reader" do
|
@@ -68,4 +61,14 @@ describe "hstore_reader" do
|
|
68
61
|
@product.data = {"name" => "zomg"}
|
69
62
|
assert_equal "ZOMG", @product.name
|
70
63
|
end
|
64
|
+
|
65
|
+
it "returns nil for nil money" do
|
66
|
+
@product.data = {"money" => nil}
|
67
|
+
assert_equal nil, @product.money
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns typecasted money" do
|
71
|
+
@product.data = {"money" => "1.23"}
|
72
|
+
assert_equal BigDecimal.new("1.23"), @product.money
|
73
|
+
end
|
71
74
|
end
|
data/test/hstore_writer_test.rb
CHANGED
@@ -7,6 +7,7 @@ class Product
|
|
7
7
|
hstore_writer :data, :name, :name_2
|
8
8
|
hstore_writer :data, :price, type_cast: :to_i
|
9
9
|
hstore_writer :data, :cents, type_cast: ->(value) { (value.to_f * 100).to_i }
|
10
|
+
hstore_writer :data, :money, type_cast: :to_d, allow_nil: true
|
10
11
|
end
|
11
12
|
|
12
13
|
describe "hstore_writer" do
|
@@ -70,4 +71,14 @@ describe "hstore_writer" do
|
|
70
71
|
@product.cents = "1"
|
71
72
|
assert_equal({"cents" => 100}, @product.data)
|
72
73
|
end
|
74
|
+
|
75
|
+
it "sets money using type_cast function" do
|
76
|
+
@product.money = "1.53"
|
77
|
+
assert_equal({"money" => BigDecimal.new("1.53")}, @product.data)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "allows money to be nil function" do
|
81
|
+
@product.money = nil
|
82
|
+
assert_equal({"money" => nil}, @product.data)
|
83
|
+
end
|
73
84
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hstore_attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kuba Kuźma
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
94
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.0.
|
95
|
+
rubygems_version: 2.0.2
|
96
96
|
signing_key:
|
97
97
|
specification_version: 4
|
98
98
|
summary: Easy accessors for Hstore data.
|