activerecord-postgres-hstore 0.7.1 → 0.7.2

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.
data/CHANGELOG ADDED
@@ -0,0 +1,10 @@
1
+ 0.7.2 / 2013-02-07
2
+
3
+ * Bug fixes
4
+
5
+ * Properly quote/escape double quotes https://github.com/engageis/activerecord-postgres-hstore/issues/78
6
+
7
+ * Enhancements
8
+
9
+ * Delegate hstore dumping/loading to https://github.com/seamusabshere/pg-hstore
10
+ * Add a CHANGELOG!
@@ -4,7 +4,7 @@ $:.unshift lib unless $:.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "activerecord-postgres-hstore"
7
- s.version = "0.7.1"
7
+ s.version = "0.7.2"
8
8
 
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.license = "MIT"
@@ -16,8 +16,9 @@ Gem::Specification.new do |s|
16
16
  s.required_ruby_version = ">= 1.8.7"
17
17
  s.required_rubygems_version = ">= 1.3.6"
18
18
 
19
- s.add_dependency "rails"
19
+ s.add_dependency "rails", ">= 3.1"
20
20
  s.add_dependency "rake"
21
+ s.add_dependency 'pg-hstore', '>=1.1.5'
21
22
  s.add_development_dependency "bundler"
22
23
  s.add_development_dependency "rdoc"
23
24
  s.add_development_dependency "rspec", "~> 2.11"
@@ -1,3 +1,5 @@
1
+ require 'pg_hstore'
2
+
1
3
  module ActiveRecord
2
4
  module Coders
3
5
  class Hstore
@@ -22,39 +24,13 @@ module ActiveRecord
22
24
  end
23
25
 
24
26
  private
25
- # Escapes values such that they will work in an hstore string
26
- def hstore_escape(str)
27
- return 'NULL' if str.nil?
28
- return str if str =~ /^".*"$/
29
- '"%s"' % str
30
- end
31
27
 
32
28
  def to_hstore obj
33
- return "" if obj.empty?
34
- obj.map do |idx, val|
35
- "%s=>%s" % [hstore_escape(idx), hstore_escape(val)]
36
- end * ","
37
- end
38
-
39
- def hstore_pair
40
- quoted_string = /"[^"\\]*(?:\\.[^"\\]*)*"/
41
- unquoted_string = /[^\s=,][^\s=,\\]*(?:\\.[^\s=,\\]*|=[^,>])*/
42
- string = /(#{quoted_string}|#{unquoted_string})/
43
- /#{string}\s*=>\s*#{string}/
29
+ PgHstore.dump obj, true
44
30
  end
45
31
 
46
32
  def from_hstore hstore
47
- token_pairs = (hstore.scan(hstore_pair)).map { |k,v| [k,v =~ /^NULL$/i ? nil : v] }
48
- token_pairs = token_pairs.map { |k,v|
49
- [k,v].map { |t|
50
- case t
51
- when nil then t
52
- when /\A"(.*)"\Z/m then $1.gsub(/\\(.)/, '\1')
53
- else t.gsub(/\\(.)/, '\1')
54
- end
55
- }
56
- }
57
- Hash[ token_pairs ]
33
+ PgHstore.load hstore, false
58
34
  end
59
35
  end
60
36
  end
@@ -82,6 +82,17 @@ describe ActiveRecord::Coders::Hstore do
82
82
  let(:value){ {'a' => 'a'} }
83
83
  it{ should eql('"a"=>"a"') }
84
84
  end
85
+
86
+ context 'when value has double quotes' do
87
+ let(:value){ {"a" => "\"a\""} }
88
+ it{ should eql(%q("a"=>"\"a\"")) }
89
+ end
90
+
91
+ # @seamusabshere not sure about this test
92
+ # context 'when value has double-escaped double quotes' do
93
+ # let(:value){ {"a" => "\\\"a\\\""} }
94
+ # it{ should eql(%q("a"=>"\"a\"")) }
95
+ # end
85
96
  end
86
97
 
87
98
  describe ".load" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-postgres-hstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-02-05 00:00:00.000000000 Z
13
+ date: 2013-02-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
- version: '0'
22
+ version: '3.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - ! '>='
29
29
  - !ruby/object:Gem::Version
30
- version: '0'
30
+ version: '3.1'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: rake
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -44,6 +44,22 @@ dependencies:
44
44
  - - ! '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: pg-hstore
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.5
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.1.5
47
63
  - !ruby/object:Gem::Dependency
48
64
  name: bundler
49
65
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +119,7 @@ files:
103
119
  - .gitignore
104
120
  - .rspec
105
121
  - .travis.yml
122
+ - CHANGELOG
106
123
  - Gemfile
107
124
  - LICENSE
108
125
  - README.md