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 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
- gem 'pg'
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.
@@ -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', git: 'git://github.com/softa/activerecord-postgres-hstore.git'
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.4.1
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.4.1"
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 = "2012-09-14"
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"])
@@ -1,7 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem 'rails', '3.0.0'
4
- gem 'pg'
4
+ gem 'pg', :platforms => :ruby
5
+ gem 'activerecord-jdbcpostgresql-adapter', :platforms => :jruby
5
6
  gem 'activerecord-postgres-hstore', :path => '../'
6
7
 
7
8
  # Use unicorn as the web server
@@ -1,4 +1,18 @@
1
- require "activerecord-postgres-hstore/railties"
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?(Rails) && 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
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 < Column
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 < AbstractAdapter
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.1
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: 2012-09-14 00:00:00.000000000Z
13
+ date: 2013-01-03 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2157171100 !ruby/object:Gem::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: *2157171100
25
+ version_requirements: *2161699660
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
- requirement: &2157170000 !ruby/object:Gem::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: *2157170000
36
+ version_requirements: *2161698580
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: pg
39
- requirement: &2157169120 !ruby/object:Gem::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: *2157169120
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: &2157168140 !ruby/object:Gem::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: *2157168140
69
+ version_requirements: *2161683500
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: bundler
61
- requirement: &2157166860 !ruby/object:Gem::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: *2157166860
80
+ version_requirements: *2161682800
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: jeweler
72
- requirement: &2157165660 !ruby/object:Gem::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: *2157165660
91
+ version_requirements: *2161681960
81
92
  - !ruby/object:Gem::Dependency
82
93
  name: rdoc
83
- requirement: &2157164420 !ruby/object:Gem::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: *2157164420
102
+ version_requirements: *2161680700
92
103
  - !ruby/object:Gem::Dependency
93
104
  name: rspec
94
- requirement: &2157163540 !ruby/object:Gem::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: *2157163540
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: 3203326444745733758
212
+ hash: 2025779825547619244
202
213
  required_rubygems_version: !ruby/object:Gem::Requirement
203
214
  none: false
204
215
  requirements: