activerecord-postgres-hstore 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.
- data/Gemfile +3 -1
- data/Gemfile.lock +7 -0
- data/README.md +13 -1
- data/VERSION +1 -1
- data/activerecord-postgres-hstore.gemspec +5 -2
- data/app/Gemfile +2 -1
- data/lib/activerecord-postgres-hstore.rb +15 -1
- data/lib/activerecord-postgres-hstore/activerecord.rb +64 -21
- data/lib/activerecord-postgres-hstore/railties.rb +1 -2
- metadata +30 -19
data/Gemfile
CHANGED
@@ -2,7 +2,9 @@ source "http://rubygems.org"
|
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
gem 'rails'
|
4
4
|
gem 'rake'
|
5
|
-
|
5
|
+
|
6
|
+
gem 'pg', :platforms => :ruby
|
7
|
+
gem 'activerecord-jdbcpostgresql-adapter', :platforms => :jruby
|
6
8
|
|
7
9
|
# Add dependencies to develop your gem here.
|
8
10
|
# Include everything needed to run rake, tests, features, etc.
|
data/Gemfile.lock
CHANGED
@@ -22,6 +22,10 @@ GEM
|
|
22
22
|
activesupport (= 3.2.8)
|
23
23
|
arel (~> 3.0.2)
|
24
24
|
tzinfo (~> 0.3.29)
|
25
|
+
activerecord-jdbc-adapter (1.2.2.1)
|
26
|
+
activerecord-jdbcpostgresql-adapter (1.2.2.1)
|
27
|
+
activerecord-jdbc-adapter (~> 1.2.2.1)
|
28
|
+
jdbc-postgres (>= 9.0, < 9.2)
|
25
29
|
activeresource (3.2.8)
|
26
30
|
activemodel (= 3.2.8)
|
27
31
|
activesupport (= 3.2.8)
|
@@ -35,6 +39,7 @@ GEM
|
|
35
39
|
git (1.2.5)
|
36
40
|
hike (1.2.1)
|
37
41
|
i18n (0.6.1)
|
42
|
+
jdbc-postgres (9.1.901)
|
38
43
|
jeweler (1.8.4)
|
39
44
|
bundler (~> 1.0)
|
40
45
|
git (>= 1.2.5)
|
@@ -101,9 +106,11 @@ GEM
|
|
101
106
|
tzinfo (0.3.33)
|
102
107
|
|
103
108
|
PLATFORMS
|
109
|
+
java
|
104
110
|
ruby
|
105
111
|
|
106
112
|
DEPENDENCIES
|
113
|
+
activerecord-jdbcpostgresql-adapter
|
107
114
|
bundler (~> 1.1.3)
|
108
115
|
jeweler (~> 1.8.3)
|
109
116
|
pg
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ Notes for Rails 3.1 and above
|
|
25
25
|
The master branch already support a custom serialization coder.
|
26
26
|
If you want to use it just put in your Gemfile:
|
27
27
|
|
28
|
-
gem 'activerecord-postgres-hstore',
|
28
|
+
gem 'activerecord-postgres-hstore', github: 'engageis/activerecord-postgres-hstore'
|
29
29
|
|
30
30
|
If you install them gem from the master branch you also have to insert a
|
31
31
|
line in each model that uses hstore.
|
@@ -156,6 +156,18 @@ To avoid the above, make sure all named parameters are strings:
|
|
156
156
|
|
157
157
|
Have fun.
|
158
158
|
|
159
|
+
Test Database
|
160
|
+
-------------
|
161
|
+
|
162
|
+
To have hstore enabled when you load your database schema (as happens in rake db:test:prepare), you'll need to
|
163
|
+
uncomment or add the following line in config/application.rb
|
164
|
+
|
165
|
+
config.active_record.schema_format = :sql
|
166
|
+
|
167
|
+
This will change your schema dumps from Ruby to SQL. If you're
|
168
|
+
unsure about the implications of this change, we suggest reading this
|
169
|
+
[Rails Guide](http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you).
|
170
|
+
|
159
171
|
Help
|
160
172
|
----
|
161
173
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "activerecord-postgres-hstore"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Juan Maiz", "Diogo Biazus"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-01-03"
|
13
13
|
s.description = "This gem adds support for the postgres hstore type. It is the _just right_ alternative for storing hashes instead of using seralization or dynamic tables."
|
14
14
|
s.email = "juanmaiz@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -105,6 +105,7 @@ Gem::Specification.new do |s|
|
|
105
105
|
s.add_runtime_dependency(%q<rails>, [">= 0"])
|
106
106
|
s.add_runtime_dependency(%q<rake>, [">= 0"])
|
107
107
|
s.add_runtime_dependency(%q<pg>, [">= 0"])
|
108
|
+
s.add_runtime_dependency(%q<activerecord-jdbcpostgresql-adapter>, [">= 0"])
|
108
109
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
109
110
|
s.add_development_dependency(%q<bundler>, ["~> 1.1.3"])
|
110
111
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
|
@@ -114,6 +115,7 @@ Gem::Specification.new do |s|
|
|
114
115
|
s.add_dependency(%q<rails>, [">= 0"])
|
115
116
|
s.add_dependency(%q<rake>, [">= 0"])
|
116
117
|
s.add_dependency(%q<pg>, [">= 0"])
|
118
|
+
s.add_dependency(%q<activerecord-jdbcpostgresql-adapter>, [">= 0"])
|
117
119
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
118
120
|
s.add_dependency(%q<bundler>, ["~> 1.1.3"])
|
119
121
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
@@ -124,6 +126,7 @@ Gem::Specification.new do |s|
|
|
124
126
|
s.add_dependency(%q<rails>, [">= 0"])
|
125
127
|
s.add_dependency(%q<rake>, [">= 0"])
|
126
128
|
s.add_dependency(%q<pg>, [">= 0"])
|
129
|
+
s.add_dependency(%q<activerecord-jdbcpostgresql-adapter>, [">= 0"])
|
127
130
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
128
131
|
s.add_dependency(%q<bundler>, ["~> 1.1.3"])
|
129
132
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
data/app/Gemfile
CHANGED
@@ -1,4 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
if RUBY_PLATFORM == "jruby"
|
4
|
+
require 'activerecord-jdbcpostgresql-adapter'
|
5
|
+
else
|
6
|
+
require 'pg'
|
7
|
+
end
|
8
|
+
|
9
|
+
if defined? Rails
|
10
|
+
require "activerecord-postgres-hstore/railties"
|
11
|
+
else
|
12
|
+
ActiveSupport.on_load :active_record do
|
13
|
+
require "activerecord-postgres-hstore/activerecord"
|
14
|
+
end
|
15
|
+
end
|
2
16
|
require "activerecord-postgres-hstore/string"
|
3
17
|
require "activerecord-postgres-hstore/hash"
|
4
18
|
require "activerecord-postgres-hstore/coder"
|
@@ -66,29 +66,29 @@ module ActiveRecord
|
|
66
66
|
destroy_keys(attribute, *keys).save
|
67
67
|
end
|
68
68
|
|
69
|
-
if defined?
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
69
|
+
if defined? Rails and Rails.version < '3.1.0'
|
70
|
+
# This method is replaced for Rails 3 compatibility.
|
71
|
+
# All I do is add the condition when the field is a hash that converts the value
|
72
|
+
# to hstore format.
|
73
|
+
# IMHO this should be delegated to the column, so it won't be necessary to rewrite all
|
74
|
+
# this method.
|
75
|
+
def arel_attributes_values(include_primary_key = true, include_readonly_attributes = true, attribute_names = @attributes.keys)
|
76
|
+
attrs = {}
|
77
|
+
attribute_names.each do |name|
|
78
|
+
if (column = column_for_attribute(name)) && (include_primary_key || !column.primary)
|
79
|
+
if include_readonly_attributes || (!include_readonly_attributes && !self.class.readonly_attributes.include?(name))
|
80
|
+
value = read_attribute(name)
|
81
|
+
if self.class.columns_hash[name].type == :hstore && value && value.is_a?(Hash)
|
82
|
+
value = value.to_hstore # Done!
|
83
|
+
elsif value && self.class.serialized_attributes.has_key?(name) && (value.acts_like?(:date) || value.acts_like?(:time) || value.is_a?(Hash) || value.is_a?(Array))
|
84
|
+
value = value.to_yaml
|
85
|
+
end
|
86
|
+
attrs[self.class.arel_table[name]] = value
|
85
87
|
end
|
86
|
-
attrs[self.class.arel_table[name]] = value
|
87
88
|
end
|
88
89
|
end
|
90
|
+
attrs
|
89
91
|
end
|
90
|
-
attrs
|
91
|
-
end
|
92
92
|
end
|
93
93
|
|
94
94
|
end
|
@@ -101,6 +101,49 @@ module ActiveRecord
|
|
101
101
|
|
102
102
|
module ConnectionAdapters
|
103
103
|
|
104
|
+
module SchemaStatements
|
105
|
+
|
106
|
+
# Installs hstore by creating the Postgres extension
|
107
|
+
# if it does not exist
|
108
|
+
#
|
109
|
+
def install_hstore
|
110
|
+
execute "CREATE EXTENSION IF NOT EXISTS hstore"
|
111
|
+
end
|
112
|
+
|
113
|
+
# Uninstalls hstore by dropping Postgres extension if it exists
|
114
|
+
#
|
115
|
+
def uninstall_hstore
|
116
|
+
execute "DROP EXTENSION IF EXISTS hstore"
|
117
|
+
end
|
118
|
+
|
119
|
+
# Adds a GiST or GIN index to a table which has an hstore column.
|
120
|
+
#
|
121
|
+
# Example:
|
122
|
+
# add_hstore_index :people, :info, :type => :gin
|
123
|
+
#
|
124
|
+
# Options:
|
125
|
+
# :type = :gist (default) or :gin
|
126
|
+
#
|
127
|
+
# See http://www.postgresql.org/docs/9.2/static/textsearch-indexes.html for more information.
|
128
|
+
#
|
129
|
+
def add_hstore_index(table_name, column_name, options = {})
|
130
|
+
index_name, index_type, index_columns = add_index_options(table_name, column_name, options)
|
131
|
+
index_type = index_type.present? ? index_type : 'gist'
|
132
|
+
execute "CREATE INDEX #{index_name} ON #{table_name} USING #{index_type}(#{column_name})"
|
133
|
+
end
|
134
|
+
|
135
|
+
# Removes a GiST or GIN index of a table which has an hstore column.
|
136
|
+
#
|
137
|
+
# Example:
|
138
|
+
# remove_hstore_index :people, :info
|
139
|
+
#
|
140
|
+
def remove_hstore_index(table_name, options = {})
|
141
|
+
index_name = index_name_for_remove(table_name, options)
|
142
|
+
execute "DROP INDEX #{index_name}"
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
104
147
|
class TableDefinition
|
105
148
|
|
106
149
|
# Adds hstore type for migrations. So you can add columns to a table like:
|
@@ -133,7 +176,7 @@ module ActiveRecord
|
|
133
176
|
|
134
177
|
end
|
135
178
|
|
136
|
-
class PostgreSQLColumn
|
179
|
+
class PostgreSQLColumn
|
137
180
|
# Does the type casting from hstore columns using String#from_hstore or Hash#from_hstore.
|
138
181
|
def type_cast_code_with_hstore(var_name)
|
139
182
|
type == :hstore ? "#{var_name}.from_hstore" : type_cast_code_without_hstore(var_name)
|
@@ -148,7 +191,7 @@ module ActiveRecord
|
|
148
191
|
alias_method_chain :simplified_type, :hstore
|
149
192
|
end
|
150
193
|
|
151
|
-
class PostgreSQLAdapter
|
194
|
+
class PostgreSQLAdapter
|
152
195
|
def native_database_types_with_hstore
|
153
196
|
native_database_types_without_hstore.merge({:hstore => { :name => "hstore" }})
|
154
197
|
end
|
@@ -1,14 +1,13 @@
|
|
1
1
|
require 'rails'
|
2
2
|
require 'rails/generators'
|
3
3
|
require 'rails/generators/migration'
|
4
|
-
require 'pg'
|
5
4
|
|
6
5
|
# = Hstore Railtie
|
7
6
|
#
|
8
7
|
# Creates a new railtie for 2 reasons:
|
9
8
|
#
|
10
9
|
# * Initialize ActiveRecord properly
|
11
|
-
# * Add hstore:setup generator
|
10
|
+
# * Add hstore:setup generator
|
12
11
|
class Hstore < Rails::Railtie
|
13
12
|
|
14
13
|
initializer 'activerecord-postgres-hstore' 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.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-03 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &2161699660 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2161699660
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rake
|
28
|
-
requirement: &
|
28
|
+
requirement: &2161698580 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2161698580
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: pg
|
39
|
-
requirement: &
|
39
|
+
requirement: &2161697620 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,21 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2161697620
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: activerecord-jdbcpostgresql-adapter
|
50
|
+
requirement: &2161684980 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *2161684980
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: shoulda
|
50
|
-
requirement: &
|
61
|
+
requirement: &2161683500 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - ! '>='
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: '0'
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *2161683500
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: bundler
|
61
|
-
requirement: &
|
72
|
+
requirement: &2161682800 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: 1.1.3
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *2161682800
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: jeweler
|
72
|
-
requirement: &
|
83
|
+
requirement: &2161681960 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ~>
|
@@ -77,10 +88,10 @@ dependencies:
|
|
77
88
|
version: 1.8.3
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *2161681960
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: rdoc
|
83
|
-
requirement: &
|
94
|
+
requirement: &2161680700 !ruby/object:Gem::Requirement
|
84
95
|
none: false
|
85
96
|
requirements:
|
86
97
|
- - ! '>='
|
@@ -88,10 +99,10 @@ dependencies:
|
|
88
99
|
version: '0'
|
89
100
|
type: :development
|
90
101
|
prerelease: false
|
91
|
-
version_requirements: *
|
102
|
+
version_requirements: *2161680700
|
92
103
|
- !ruby/object:Gem::Dependency
|
93
104
|
name: rspec
|
94
|
-
requirement: &
|
105
|
+
requirement: &2161679500 !ruby/object:Gem::Requirement
|
95
106
|
none: false
|
96
107
|
requirements:
|
97
108
|
- - ! '>='
|
@@ -99,7 +110,7 @@ dependencies:
|
|
99
110
|
version: '0'
|
100
111
|
type: :development
|
101
112
|
prerelease: false
|
102
|
-
version_requirements: *
|
113
|
+
version_requirements: *2161679500
|
103
114
|
description: This gem adds support for the postgres hstore type. It is the _just right_
|
104
115
|
alternative for storing hashes instead of using seralization or dynamic tables.
|
105
116
|
email: juanmaiz@gmail.com
|
@@ -198,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
198
209
|
version: '0'
|
199
210
|
segments:
|
200
211
|
- 0
|
201
|
-
hash:
|
212
|
+
hash: 2025779825547619244
|
202
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
214
|
none: false
|
204
215
|
requirements:
|