activerecord-postgres-hstore 0.4.1 → 0.5.0

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