surus 0.2.0 → 0.3.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.
@@ -1,3 +1,14 @@
1
+ # 0.3.0 (February 16, 2012)
2
+
3
+ * Can now round-trip any value YAML can dump and load as an hstore key or value
4
+
5
+ # 0.2.0 (February 4, 2012)
6
+
7
+ * Added symbol to types that are successfully round-tripped as hstore keys and values
8
+ * Added synchronous_commit support
9
+ * Added benchmarks
10
+ * Added rdoc documentation and expanded readme.
11
+
1
12
  # 0.1.0 (February 2, 2012)
2
13
 
3
14
  * Added array serializers
data/README.md CHANGED
@@ -25,11 +25,18 @@ type that can be indexed for fast searching.
25
25
  end
26
26
 
27
27
  User.create :properties => { :favorite_color => "green", :results_per_page => 20 }
28
+ User.create :properties => { :favorite_colors => ["green", "blue", "red"] }
28
29
 
29
30
  Even though the underlying hstore can only use strings for keys and values
30
31
  (and NULL for values) Surus can successfully maintain type for integers,
31
- floats, bigdecimals, and dates. It does this by storing an extra key
32
- value pair (or two) to maintain type information.
32
+ floats, bigdecimals, dates, and any value that YAML can serialize. It does
33
+ this by storing an extra key value pair (or two) to maintain type information.
34
+
35
+ Because it falls back to YAML serialization for complex types, this means that
36
+ nested data structures can be serialized to an hstore. In other words, any
37
+ hash that can be serialized with the normal Rails YAML serialization can be
38
+ serialized with Surus. But you can get the benefits of PostgreSQL indexing
39
+ on the top level keys and values for free.
33
40
 
34
41
  Hstores can be searched with helper scopes.
35
42
 
@@ -125,7 +125,7 @@ module Surus
125
125
  elsif value == nil
126
126
  [nil, "String"] # we don't actually stringify nil because format_value special cases nil
127
127
  else
128
- [value.to_s, "String"] # coerce to string as we don't know how to reconstitue an unknown class
128
+ [YAML.dump(value), "YAML"]
129
129
  end
130
130
  end
131
131
 
@@ -145,6 +145,8 @@ module Surus
145
145
  true
146
146
  when "FalseClass"
147
147
  false
148
+ when "YAML"
149
+ YAML.load(value)
148
150
  else
149
151
  raise ArgumentError, "Can't typecast: #{type}"
150
152
  end
@@ -1,3 +1,3 @@
1
1
  module Surus
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -47,7 +47,9 @@ describe Surus::Hstore::Serializer do
47
47
  [BigDecimal("-1"), "negative BigDecimal"],
48
48
  [true, "true"],
49
49
  [false, "false"],
50
- [Date.today, "date"]
50
+ [Date.today, "date"],
51
+ [{"foo" => [1,2,3], "bar" => {"baz" => 42}}, "nested hash"],
52
+ [[1,2,3], "array"]
51
53
  ].each do |value, description|
52
54
  round_trip_examples << [{"foo" => value}, "value is #{description}"]
53
55
  round_trip_examples << [{value => "bar"}, "key is #{description}"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-05 00:00:00.000000000 Z
12
+ date: 2012-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg
16
- requirement: &13148960 !ruby/object:Gem::Requirement
16
+ requirement: &11662280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13148960
24
+ version_requirements: *11662280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activerecord
27
- requirement: &13161940 !ruby/object:Gem::Requirement
27
+ requirement: &11661280 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *13161940
35
+ version_requirements: *11661280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &13159120 !ruby/object:Gem::Requirement
38
+ requirement: &11660340 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.8.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *13159120
46
+ version_requirements: *11660340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: guard
49
- requirement: &13155700 !ruby/object:Gem::Requirement
49
+ requirement: &11659560 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.10.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *13155700
57
+ version_requirements: *11659560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: guard-rspec
60
- requirement: &13173200 !ruby/object:Gem::Requirement
60
+ requirement: &11624780 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 0.6.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *13173200
68
+ version_requirements: *11624780
69
69
  description: Includes serializers and search scopes for hstore and array. Also includes
70
70
  control over synchronous_commit to boost insert and update speed.
71
71
  email: