pg_power 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,9 @@
1
1
  # PgPower
2
2
 
3
+ [![Build Status](https://secure.travis-ci.org/TMXCredit/pg_power.png)](http://travis-ci.org/TMXCredit/pg_power)
4
+ [![Dependency Status](https://gemnasium.com/TMXCredit/pg_power.png)](https://gemnasium.com/TMXCredit/pg_power)
5
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/TMXCredit/pg_power)
6
+
3
7
  ActiveRecord extension to get more from PostgreSQL:
4
8
 
5
9
  * Create/drop schemas.
@@ -17,28 +21,28 @@ It was tested with Rails 3.1.x and 3.2.x, Ruby 1.8.7 REE and 1.9.3.
17
21
  ### Create schema
18
22
 
19
23
  In migrations you can use `create_schema` and `drop_schema` methods like this:
20
-
21
- class ReplaceDemographySchemaWithPolitics < ActiveRecord::Migration
22
- def change
23
- drop_schema 'demography'
24
- create_schema 'politics'
25
- end
26
- end
27
-
24
+ ```ruby
25
+ class ReplaceDemographySchemaWithPolitics < ActiveRecord::Migration
26
+ def change
27
+ drop_schema 'demography'
28
+ create_schema 'politics'
29
+ end
30
+ end
31
+ ```
28
32
  ### Create table
29
33
 
30
34
  Use schema `:schema` option to specify schema name:
31
-
32
- create_table "countries", :schema => "demography" do |t|
33
- # columns goes here
34
- end
35
-
35
+ ```ruby
36
+ create_table "countries", :schema => "demography" do |t|
37
+ # columns goes here
38
+ end
39
+ ```
36
40
  ### Move table to another schema
37
41
 
38
42
  Move table `countries` from `demography` schema to `public`:
39
-
40
- move_table_to_schema 'demography.countries', :public
41
-
43
+ ```ruby
44
+ move_table_to_schema 'demography.countries', :public
45
+ ```
42
46
  ## Table and column comments
43
47
 
44
48
  Provides the following methods to manage comments:
@@ -54,55 +58,55 @@ Provides the following methods to manage comments:
54
58
  ### Examples
55
59
 
56
60
  Set a comment on the given table.
57
-
58
- set_table_comment :phone_numbers, 'This table stores phone numbers that conform to the North American Numbering Plan.'
59
-
61
+ ```ruby
62
+ set_table_comment :phone_numbers, 'This table stores phone numbers that conform to the North American Numbering Plan.'
63
+ ```
60
64
  Sets a comment on a given column of a given table.
61
-
62
- set_column_comment :phone_numbers, :npa, 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.'
63
-
65
+ ```ruby
66
+ set_column_comment :phone_numbers, :npa, 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.'
67
+ ```
64
68
  Removes any comment from the given table.
65
-
66
- remove_table_comment :phone_numbers
67
-
69
+ ```ruby
70
+ remove_table_comment :phone_numbers
71
+ ```
68
72
  Removes any comment from the given column of a given table.
69
-
70
- remove_column_comment :phone_numbers, :npa
71
-
73
+ ```ruby
74
+ remove_column_comment :phone_numbers, :npa
75
+ ```
72
76
  Set comments on multiple columns in the table.
73
-
74
- set_column_comments :phone_numbers, :npa => 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.',
75
- :nxx => 'Central Office Number'
76
-
77
+ ```ruby
78
+ set_column_comments :phone_numbers, :npa => 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.',
79
+ :nxx => 'Central Office Number'
80
+ ```
77
81
  Remove comments from multiple columns in the table.
78
-
79
- remove_column_comments :phone_numbers, :npa, :nxx
80
-
82
+ ```ruby
83
+ remove_column_comments :phone_numbers, :npa, :nxx
84
+ ```
81
85
  PgPower also adds extra methods to change_table.
82
86
 
83
87
  Set comments:
84
-
85
- change_table :phone_numbers do |t|
86
- t.set_table_comment 'This table stores phone numbers that conform to the North American Numbering Plan.'
87
- t.set_column_comment :npa, 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.'
88
- end
89
-
90
- change_table :phone_numbers do |t|
91
- t.set_column_comments :npa => 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.',
92
- :nxx => 'Central Office Number'
93
- end
94
-
88
+ ```ruby
89
+ change_table :phone_numbers do |t|
90
+ t.set_table_comment 'This table stores phone numbers that conform to the North American Numbering Plan.'
91
+ t.set_column_comment :npa, 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.'
92
+ end
93
+
94
+ change_table :phone_numbers do |t|
95
+ t.set_column_comments :npa => 'Numbering Plan Area Code - Allowed ranges: [2-9] for first digit, [0-9] for second and third digit.',
96
+ :nxx => 'Central Office Number'
97
+ end
98
+ ```
95
99
  Remove comments:
96
-
97
- change_table :phone_numbers do |t|
98
- t.remove_table_comment
99
- t.remove_column_comment :npa
100
- end
101
-
102
- change_table :phone_numbers do |t|
103
- t.remove_column_comments :npa, :nxx
104
- end
105
-
100
+ ```ruby
101
+ change_table :phone_numbers do |t|
102
+ t.remove_table_comment
103
+ t.remove_column_comment :npa
104
+ end
105
+
106
+ change_table :phone_numbers do |t|
107
+ t.remove_column_comments :npa, :nxx
108
+ end
109
+ ```
106
110
  ## Foreign keys
107
111
 
108
112
  We imported some code of [foreigner](https://github.com/matthuhiggins/foreigner)
@@ -116,23 +120,29 @@ The syntax is compatible with `foreigner`:
116
120
 
117
121
 
118
122
  Add foreign key from `comments` to `posts` using `post_id` column as key by default:
119
- add_foreign_key(:comments, :posts)
120
-
123
+ ```ruby
124
+ add_foreign_key(:comments, :posts)
125
+ ```
121
126
  Specify key explicitly:
122
- add_foreign_key(:comments, :posts, :column => :blog_post_id)
123
-
127
+ ```ruby
128
+ add_foreign_key(:comments, :posts, :column => :blog_post_id)
129
+ ```
124
130
  Specify name of foreign key constraint:
125
- add_foreign_key(:comments, :posts, :name => "comments_posts_fk")
126
-
131
+ ```ruby
132
+ add_foreign_key(:comments, :posts, :name => "comments_posts_fk")
133
+ ```
127
134
  It works with schemas as expected:
128
- add_foreign_key('blog.comments', 'blog.posts')
129
-
135
+ ```ruby
136
+ add_foreign_key('blog.comments', 'blog.posts')
137
+ ```
130
138
  Adds the index 'index_comments_on_post_id':
131
- add_foreign_key(:comments, :posts)
132
-
139
+ ```ruby
140
+ add_foreign_key(:comments, :posts)
141
+ ```
133
142
  Does not add an index:
143
+ ```ruby
134
144
  add_foreign_key(:comments, :posts, :exclude_index => true)
135
-
145
+ ```
136
146
  ## Partial Indexes
137
147
 
138
148
  We used a Rails 4.x [pull request](https://github.com/rails/rails/pull/4956) as a
@@ -141,13 +151,13 @@ starting point, backported to Rails 3.1.x and patched it to be schema-aware.
141
151
  ### Examples
142
152
 
143
153
  Add a partial index to a table
144
-
145
- add_index(:comments, [:country_id, :user_id], :where => 'active')
146
-
154
+ ```ruby
155
+ add_index(:comments, [:country_id, :user_id], :where => 'active')
156
+ ```
147
157
  Add a partial index to a schema table
148
-
149
- add_index('blog.comments', :user_id, :where => 'active')
150
-
158
+ ```ruby
159
+ add_index('blog.comments', :user_id, :where => 'active')
160
+ ```
151
161
  ## Indexes on Expressions
152
162
 
153
163
  PostgreSQL supports indexes on expressions. Right now, only basic functional
@@ -156,19 +166,19 @@ expressions are supported.
156
166
  ### Examples
157
167
 
158
168
  Add an index to a column with a function
159
-
160
- add_index(:comments, "lower(text)")
161
-
169
+ ```ruby
170
+ add_index(:comments, "lower(text)")
171
+ ```
162
172
  ## Tools
163
173
 
164
174
  PgPower::Tools provides number of useful methods:
165
-
166
- PgPower::Tools.create_schema "services" # => create new PG schema "services"
167
- PgPower::Tools.create_schema "nets" # => create new PG schema "nets"
168
- PgPower::Tools.drop_schema "services" # => remove the PG schema "services"
169
- PgPower::Tools.schemas # => ["public", "information_schema", "nets"]
170
- PgPower::Tools.index_exists?(table, columns, options) # => returns true if an index exists for the given params
171
-
175
+ ```ruby
176
+ PgPower::Tools.create_schema "services" # => create new PG schema "services"
177
+ PgPower::Tools.create_schema "nets" # => create new PG schema "nets"
178
+ PgPower::Tools.drop_schema "services" # => remove the PG schema "services"
179
+ PgPower::Tools.schemas # => ["public", "information_schema", "nets"]
180
+ PgPower::Tools.index_exists?(table, columns, options) # => returns true if an index exists for the given params
181
+ ```
172
182
  ## Running tests:
173
183
 
174
184
  * Configure `spec/dummy/config/database.yml` for development and test environments.
@@ -178,11 +188,11 @@ PgPower::Tools provides number of useful methods:
178
188
  ## TODO:
179
189
 
180
190
  Add next syntax to create table:
181
-
182
- create_table "table_name", :schema => "schema_name" do |t|
183
- # columns goes here
184
- end
185
-
191
+ ```ruby
192
+ create_table "table_name", :schema => "schema_name" do |t|
193
+ # columns goes here
194
+ end
195
+ ```
186
196
  Support for JRuby:
187
197
 
188
198
  * Jdbc driver provides its own `create_schema(schema, user)` method - solve conflicts.
@@ -0,0 +1,6 @@
1
+ module ActiveRecord
2
+ # Raised when an DB operation cannot be carried out because the current
3
+ # database user lacks the required privileges.
4
+ class InsufficientPrivilege < WrappedDatabaseException
5
+ end
6
+ end
@@ -4,13 +4,16 @@ module PgPower::ConnectionAdapters::PostgreSQLAdapter
4
4
  extend ActiveSupport::Autoload
5
5
  extend ActiveSupport::Concern
6
6
 
7
- autoload :SchemaMethods , 'pg_power/connection_adapters/postgresql_adapter/schema_methods'
8
- autoload :CommentMethods , 'pg_power/connection_adapters/postgresql_adapter/comment_methods'
9
- autoload :ForeignerMethods, 'pg_power/connection_adapters/postgresql_adapter/foreigner_methods'
10
- autoload :IndexMethods , 'pg_power/connection_adapters/postgresql_adapter/index_methods'
7
+ # TODO: Looks like explicit path specification can be omitted -- aignatyev 20120904
8
+ autoload :SchemaMethods, 'pg_power/connection_adapters/postgresql_adapter/schema_methods'
9
+ autoload :CommentMethods, 'pg_power/connection_adapters/postgresql_adapter/comment_methods'
10
+ autoload :ForeignerMethods, 'pg_power/connection_adapters/postgresql_adapter/foreigner_methods'
11
+ autoload :IndexMethods, 'pg_power/connection_adapters/postgresql_adapter/index_methods'
12
+ autoload :TranslateException, 'pg_power/connection_adapters/postgresql_adapter/translate_exception'
11
13
 
12
14
  include SchemaMethods
13
15
  include CommentMethods
14
16
  include ForeignerMethods
15
17
  include IndexMethods
18
+ include TranslateException
16
19
  end
@@ -0,0 +1,18 @@
1
+ # Extend ActiveRecord::ConnectionAdapter::PostgreSQLAdapter logic
2
+ # to wrap more pg-specific errors into specific exception classes
3
+ module PgPower::ConnectionAdapters::PostgreSQLAdapter::TranslateException
4
+ # # See http://www.postgresql.org/docs/9.1/static/errcodes-appendix.html
5
+ INSUFFICIENT_PRIVILEGE = "42501"
6
+
7
+ # Intercept insufficient privilege PGError and raise active_record wrapped database exception
8
+ def translate_exception(exception, message)
9
+ case exception.result.try(:error_field, PGresult::PG_DIAG_SQLSTATE)
10
+ when INSUFFICIENT_PRIVILEGE
11
+ exc_message = exception.result.try(:error_field, PGresult::PG_DIAG_MESSAGE_PRIMARY)
12
+ exc_message ||= message
13
+ ::ActiveRecord::InsufficientPrivilege.new(exc_message, exception)
14
+ else
15
+ super
16
+ end
17
+ end
18
+ end
@@ -6,6 +6,7 @@ module PgPower
6
6
  ActiveSupport.on_load(:active_record) do
7
7
  # load monkey patches
8
8
  ['schema_dumper',
9
+ 'errors',
9
10
  'connection_adapters/postgresql_adapter',
10
11
  'connection_adapters/abstract/schema_statements'].each do |path|
11
12
  require PgPower::Engine.root + 'lib/core_ext/active_record/' + path
@@ -30,7 +30,11 @@ module PgPower::SchemaDumper::SchemaMethods
30
30
  # Dumps tables from schemas other than public
31
31
  def non_public_schema_tables(stream)
32
32
  get_non_public_schema_table_names.each do |name|
33
- table(name, stream)
33
+ begin
34
+ table(name, stream)
35
+ rescue ::ActiveRecord::InsufficientPrivilege => exc
36
+ with_warnings(false) { warn("#{exc.class.name}: #{exc.message}. Skipping #{name.inspect}...") }
37
+ end
34
38
  end
35
39
  end
36
40
  private :non_public_schema_tables
@@ -1,4 +1,4 @@
1
1
  module PgPower
2
2
  # Version of pg_power gem.
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
metadata CHANGED
@@ -1,150 +1,159 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pg_power
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 0
10
- version: 1.0.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Potapov Sergey
14
9
  - Arthur Shagall
10
+ - TMX Credit
15
11
  autorequire:
16
12
  bindir: bin
17
13
  cert_chain: []
18
-
19
- date: 2012-09-05 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
32
- version_requirements: *id001
14
+ date: 2012-09-12 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
33
17
  name: pg
34
- prerelease: false
35
- - !ruby/object:Gem::Dependency
18
+ requirement: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
36
24
  type: :runtime
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
46
- version_requirements: *id002
47
- name: rspec-rails
48
25
  prerelease: false
49
- - !ruby/object:Gem::Dependency
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
28
+ requirements:
29
+ - - ! '>='
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec-rails
34
+ requirement: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
50
40
  type: :runtime
51
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
52
43
  none: false
53
- requirements:
54
- - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 5
57
- segments:
58
- - 3
59
- - 1
60
- version: "3.1"
61
- version_requirements: *id003
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ - !ruby/object:Gem::Dependency
62
49
  name: rails
50
+ requirement: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '3.1'
56
+ type: :runtime
63
57
  prerelease: false
64
- - !ruby/object:Gem::Dependency
65
- type: :development
66
- requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- version_requirements: *id004
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ version: '3.1'
64
+ - !ruby/object:Gem::Dependency
76
65
  name: rcov
77
- prerelease: false
78
- - !ruby/object:Gem::Dependency
66
+ requirement: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
79
72
  type: :development
80
- requirement: &id005 !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- version_requirements: *id005
90
- name: yard
91
73
  prerelease: false
92
- - !ruby/object:Gem::Dependency
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: yard
82
+ requirement: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
93
88
  type: :development
94
- requirement: &id006 !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 0
102
- version: "0"
103
- version_requirements: *id006
104
- name: metrical
105
89
  prerelease: false
106
- - !ruby/object:Gem::Dependency
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: metrical
98
+ requirement: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
107
104
  type: :development
108
- requirement: &id007 !ruby/object:Gem::Requirement
109
- none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- hash: 3
114
- segments:
115
- - 0
116
- version: "0"
117
- version_requirements: *id007
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
118
113
  name: jeweler
114
+ requirement: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
119
121
  prerelease: false
120
- - !ruby/object:Gem::Dependency
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: ruby-debug19
130
+ requirement: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
121
136
  type: :development
122
- requirement: &id008 !ruby/object:Gem::Requirement
123
- none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 3
128
- segments:
129
- - 0
130
- version: "0"
131
- version_requirements: *id008
132
- name: ruby-debug
133
137
  prerelease: false
134
- description: ActiveRecord extensions for PostgreSQL. Provides useful tools and ability to create/drop schemas in migrations.
135
- email:
136
- - blake131313@gmail.com
137
- - arthur.shagall@gmail.com
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ! '>='
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ description: ActiveRecord extensions for PostgreSQL. Provides useful tools and ability
145
+ to create/drop schemas in migrations.
146
+ email:
147
+ - rubygems@tmxcredit.com
138
148
  executables: []
139
-
140
149
  extensions: []
141
-
142
- extra_rdoc_files:
150
+ extra_rdoc_files:
143
151
  - README.markdown
144
- files:
152
+ files:
145
153
  - README.markdown
146
154
  - lib/core_ext/active_record/connection_adapters/abstract/schema_statements.rb
147
155
  - lib/core_ext/active_record/connection_adapters/postgresql_adapter.rb
156
+ - lib/core_ext/active_record/errors.rb
148
157
  - lib/core_ext/active_record/schema_dumper.rb
149
158
  - lib/pg_power.rb
150
159
  - lib/pg_power/connection_adapters.rb
@@ -160,6 +169,7 @@ files:
160
169
  - lib/pg_power/connection_adapters/postgresql_adapter/foreigner_methods.rb
161
170
  - lib/pg_power/connection_adapters/postgresql_adapter/index_methods.rb
162
171
  - lib/pg_power/connection_adapters/postgresql_adapter/schema_methods.rb
172
+ - lib/pg_power/connection_adapters/postgresql_adapter/translate_exception.rb
163
173
  - lib/pg_power/connection_adapters/table.rb
164
174
  - lib/pg_power/connection_adapters/table/comment_methods.rb
165
175
  - lib/pg_power/connection_adapters/table/foreigner_methods.rb
@@ -178,36 +188,29 @@ files:
178
188
  - lib/tasks/pg_power_tasks.rake
179
189
  homepage: https://github.com/TMXCredit/pg_power
180
190
  licenses: []
181
-
182
191
  post_install_message:
183
192
  rdoc_options: []
184
-
185
- require_paths:
193
+ require_paths:
186
194
  - lib
187
- required_ruby_version: !ruby/object:Gem::Requirement
195
+ required_ruby_version: !ruby/object:Gem::Requirement
188
196
  none: false
189
- requirements:
190
- - - ">="
191
- - !ruby/object:Gem::Version
192
- hash: 3
193
- segments:
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ segments:
194
202
  - 0
195
- version: "0"
196
- required_rubygems_version: !ruby/object:Gem::Requirement
203
+ hash: 3609710966930791506
204
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
205
  none: false
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- hash: 3
202
- segments:
203
- - 0
204
- version: "0"
206
+ requirements:
207
+ - - ! '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
205
210
  requirements: []
206
-
207
211
  rubyforge_project:
208
212
  rubygems_version: 1.8.24
209
213
  signing_key:
210
214
  specification_version: 3
211
215
  summary: ActiveRecord extensions for PostgreSQL.
212
216
  test_files: []
213
-