activerecord-postgres-hstore 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
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