postgres_ext 0.0.6 → 0.0.7

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/.gitignore CHANGED
@@ -15,3 +15,6 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ bin/
19
+ .rbenv-version*
20
+
@@ -2,9 +2,12 @@ rvm:
2
2
  - 1.8.7
3
3
  - 1.9.2
4
4
  - 1.9.3
5
+ - jruby-18mode
6
+ - jruby-19mode
5
7
 
6
8
  before_script:
7
9
  - psql -c 'create database postgres_ext_test;' -U postgres
8
10
 
9
11
  notifications:
10
- email: false
12
+ email:
13
+ - git@danmcclain.net
@@ -1,8 +1,14 @@
1
+ ## 0.0.7
2
+
3
+ Adds Arel predicate functions for array overlap operator (`&&`) and
4
+ INET/CIDR contained within operator (`<<`)
5
+
1
6
  ## 0.0.6
2
7
 
3
8
  Lots of array related fixes:
4
9
  * Model creation should no longer fail when not assigning a value to an
5
10
  array column
6
11
  * Array columns follow database defaults
7
- Migration fix (rn0 and gilltots)
12
+
13
+ Migration fix (rn0 and gilltots)
8
14
  Typos in README (bcardarella)
data/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  Adds support for missing PostgreSQL data types to ActiveRecord.
4
4
 
5
- ## Current Status: [![Build Status](https://secure.travis-ci.org/dockyard/postgres_ext.png?branch=master)](http://travis-ci.org/dockyard/postgres_ext)
5
+ [![Build Status](https://secure.travis-ci.org/dockyard/postgres_ext.png?branch=master)](http://travis-ci.org/dockyard/postgres_ext)
6
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/dockyard/postgres_ext)
6
7
 
7
8
  ## Roadmap
8
9
 
@@ -25,11 +26,20 @@ Or install it yourself as:
25
26
 
26
27
  ## Usage
27
28
 
28
- Just `require 'postgres_ext'` and use ActiveRecord as you normally would! postgres_ext extends
29
+ Just `require 'postgres_ext'` and use ActiveRecord as you normally would! postgres\_ext extends
29
30
  ActiveRecord's data type handling.
30
31
 
31
32
  * [Migration/Schema.rb support](#migrationschemarb-support)
32
33
  * [Type Casting support](#type-casting-support)
34
+ * [Querying PostgreSQL datatypes](#querying-postgresql-datatypes)
35
+
36
+ ### Usage Notes
37
+ Take care when dealing with arrays and other types that allow you to
38
+ update their value in place. In place changes are not currently tracked
39
+ in Rails (see [this issue](https://github.com/rails/rails/issues/6954)).
40
+ To track changes that happen via `#<<` or other instance methods, be
41
+ sure to call `<attribute>_will_change!` so that Active Record knows to
42
+ persist the change.
33
43
 
34
44
  ## Migration/Schema.rb support
35
45
 
@@ -148,6 +158,101 @@ person_2.favorite_numbers.first.class
148
158
  # => Fixnum
149
159
  ```
150
160
 
161
+ ## Querying PostgreSQL datatypes
162
+
163
+ * [Arrays](#arrays-2)
164
+ * [INET/CIDR](#inetcidr)
165
+
166
+ ### Arrays
167
+
168
+ * [&& - Array Overlap operator](#---array-overlap-operator)
169
+ * [ANY or ALL functions](#any-or-all-functions)
170
+
171
+ #### && - Array Overlap operator
172
+
173
+ PostgreSQL implements the `&&` operator, known as the overlap operator,
174
+ for arrays. The overlap operator returns `t` (true) when two arrays have
175
+ one or more elements in common.
176
+
177
+ ```sql
178
+ ARRAY[1,2,3] && ARRAY[4,5,6]
179
+ -- f
180
+
181
+ ARRAY[1,2,3] && ARRAY[3,5,6]
182
+ -- t
183
+ ```
184
+
185
+ Postgres\_ext defines `array_overlap`, an [Arel](https://github.com/rails/arel)
186
+ predicate for the `&&` operator.
187
+
188
+ ```ruby
189
+ user_arel = User.arel_table
190
+
191
+ User.where(user_arel[:tags].array_overlap(['one','two'])).to_sql
192
+ # => SELECT \"users\".* FROM \"users\" WHERE \"users\".\"tags\" && '{one,two}'
193
+ ```
194
+
195
+ #### ANY or ALL functions
196
+
197
+ When querying array columns, you have the ability to see if a predicate
198
+ apply's to either *any* element in the array, or *all* elements of the
199
+ array. The syntax for these predicates are slightly different then the
200
+ normal `where` syntax in PostgreSQL. To see if an array contains the
201
+ string `'test'` in any location, you would write the following in SQL
202
+
203
+ ```sql
204
+ SELECT *
205
+ FROM users
206
+ WHERE 'test' = ANY(users.tags)
207
+ ```
208
+
209
+ Notice that the column is on the right hand side of the predicate,
210
+ instead of the left, because we have to call the `ANY` function on that
211
+ column.
212
+
213
+ We can generate the above query using [Arel](https://github.com/rails/arel)
214
+ and generating the Node manually. We would use the following to
215
+ accompish this:
216
+
217
+ ```ruby
218
+ user_arel = User.arel_table
219
+
220
+ any_tags_function = Arel::Nodes::NamedFunction.new('ANY', [user_arel[:tags]])
221
+ predicate = Arel::Nodes::Equality('test', any_tags_function)
222
+
223
+ User.where(predicate).to_sql
224
+ #=> SELECT \"users\".* FROM \"users\" WHERE 'test' = ANY(\"users\".\"tags\")
225
+
226
+ ```
227
+
228
+ The ALL version of this same predicate can be generated by swap `'ANY'`
229
+ for `'ALL'` in the named function.
230
+
231
+ ### INET/CIDR
232
+
233
+ #### `<<` -- Contained within operator
234
+
235
+ PostgreSQL defines the `<<`, or contained within operator for INET and
236
+ CIDR datatypes. The `<<` operator returns `t` (true) if a INET or CIDR
237
+ address is contained within the given subnet.
238
+
239
+ ```sql
240
+ inet '192.168.1.6' << inet '10.0.0.0/24'
241
+ -- f
242
+
243
+ inet '192.168.1.6' << inet '192.168.1.0/24'
244
+ -- t
245
+ ```
246
+
247
+ Postgres\_ext defines `contained_within`, an [Arel](https://github.com/rails/arel)
248
+ predicate for the `<<` operator.
249
+
250
+ ```ruby
251
+ user_arel = User.arel_table
252
+
253
+ User.where(user_arel[:ip_address].contained_witin('127.0.0.1/24')).to_sql
254
+ # => SELECT \"users\".* FROM \"users\" WHERE \"users\".\"ip_address\" << '127.0.0.1/24'
255
+ ```
151
256
  ## Authors
152
257
 
153
258
  Dan McClain [twitter](http://twitter.com/_danmcclain) [github](http://github.com/danmcclain)
data/Rakefile CHANGED
@@ -30,13 +30,4 @@ RSpec::Core::RakeTask.new(:spec) do |t|
30
30
  t.pattern = 'spec/**/*_spec.rb'
31
31
  end
32
32
 
33
- require 'rvm-tester'
34
- RVM::Tester::TesterTask.new(:suite) do |t|
35
- t.bundle_install = true # updates Gemfile.lock, default is true
36
- t.use_travis = true # looks for Rubies in .travis.yml (on by default)
37
- t.command = "bundle exec rake spec" # runs plain "rake" by default
38
- t.env = {"VERBOSE" => "1"} # set any ENV vars
39
- t.verbose = true # shows more output, off by default
40
- end
41
-
42
33
  task :default => :spec
@@ -101,8 +101,6 @@ module ActiveRecord
101
101
  :cidr
102
102
  when 'macaddr'
103
103
  :macaddr
104
- when /(\[\])$/
105
- "#{simplified_type field_type[0..field_type.length - 3]}_array".to_sym
106
104
  else
107
105
  simplified_type_without_extended_types field_type
108
106
  end
@@ -205,6 +203,15 @@ module ActiveRecord
205
203
  end
206
204
  alias_method_chain :type_cast, :extended_types
207
205
 
206
+ def quote_with_extended_types(value, column = nil)
207
+ if [Array, IPAddr].include? value.class
208
+ "'#{type_cast(value, column)}'"
209
+ else
210
+ quote_without_extended_types(value, column)
211
+ end
212
+ end
213
+ alias_method_chain :quote, :extended_types
214
+
208
215
  private
209
216
 
210
217
  def ipaddr_to_string(value)
@@ -1,9 +1,11 @@
1
+ require 'arel/nodes/binary'
1
2
  module Arel
2
3
  module Nodes
3
4
  class ContainedWithin < Arel::Nodes::Binary
4
5
  def operator; :<< end
5
- alias :operand1 :left
6
- alias :operand2 :right
6
+ end
7
+
8
+ class ArrayOverlap < Arel::Nodes::Binary
7
9
  end
8
10
  end
9
11
  end
@@ -2,8 +2,12 @@ require 'arel/predications'
2
2
 
3
3
  module Arel
4
4
  module Predications
5
- def contained_within other
5
+ def contained_within(other)
6
6
  Nodes::ContainedWithin.new self, other
7
7
  end
8
+
9
+ def array_overlap(other)
10
+ Nodes::ArrayOverlap.new self, other
11
+ end
8
12
  end
9
13
  end
@@ -7,6 +7,26 @@ module Arel
7
7
  "#{visit o.left} << #{visit o.right}"
8
8
  end
9
9
 
10
+ def visit_Arel_Nodes_ArrayOverlap o
11
+ if Array === o.right
12
+ right = "{#{o.right.map{|v| change_string(visit(v))}.join(',')}}"
13
+ "#{visit o.left} && '#{right}'"
14
+ else
15
+ "#{visit o.left} && #{visit o.right}"
16
+ end
17
+ end
18
+
19
+ def visit_IPAddr value
20
+ "'#{value.to_s}/#{value.instance_variable_get(:@mask_addr).to_s(2).count('1')}'"
21
+ end
22
+
23
+ def change_string value
24
+ if value.match /"|,|\{/
25
+ value.gsub(/"/, "\"").gsub(/'/,'"')
26
+ else
27
+ value.gsub(/'/,'')
28
+ end
29
+ end
10
30
  end
11
31
  end
12
32
  end
@@ -1,3 +1,3 @@
1
1
  module PostgresExt
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -16,13 +16,16 @@ Gem::Specification.new do |gem|
16
16
  gem.version = PostgresExt::VERSION
17
17
 
18
18
  gem.add_dependency 'activerecord', '~> 3.2.0'
19
- gem.add_dependency 'pg_array_parser', '~> 0.0.1'
19
+ gem.add_dependency 'pg_array_parser', '~> 0.0.3'
20
20
 
21
21
  gem.add_development_dependency 'rails', '~> 3.2.0'
22
22
  gem.add_development_dependency 'rspec-rails', '~> 2.9.0'
23
23
  gem.add_development_dependency 'bourne', '~> 1.1.2'
24
- gem.add_development_dependency 'pg', '~> 0.13.2'
24
+ if RUBY_PLATFORM =~ /java/
25
+ gem.add_development_dependency 'activerecord-jdbcpostgresql-adapter'
26
+ else
27
+ gem.add_development_dependency 'pg', '~> 0.13.2'
28
+ end
25
29
  gem.add_development_dependency 'debugger', '~> 1.1.2' if RUBY_VERSION == '1.9.3'
26
30
  gem.add_development_dependency 'fivemat'
27
- gem.add_development_dependency 'rvm-tester'
28
31
  end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Array Column Predicates' do
4
+ let!(:adapter) { ActiveRecord::Base.connection }
5
+
6
+ before do
7
+ adapter.create_table :arel_arrays, :force => true do |t|
8
+ t.string :tags, :array => true
9
+ end
10
+
11
+ class ArelArray < ActiveRecord::Base
12
+ attr_accessible :tags
13
+ end
14
+ end
15
+
16
+ after do
17
+ adapter.drop_table :arel_arrays
18
+ Object.send(:remove_const, :ArelArray)
19
+ end
20
+
21
+ describe 'Array Overlap' do
22
+ it 'converts Arel array_overlap statment' do
23
+ arel_table = ArelArray.arel_table
24
+
25
+ arel_table.where(arel_table[:tags].array_overlap(['tag','tag 2'])).to_sql.should match /&& '\{tag,tag 2\}'/
26
+ end
27
+
28
+ it 'returns matched records' do
29
+ one = ArelArray.create!(:tags => ['one'])
30
+ two = ArelArray.create!(:tags => ['two'])
31
+ arel_table = ArelArray.arel_table
32
+
33
+ ArelArray.where(arel_table[:tags].array_overlap(['one'])).should include(one)
34
+ ArelArray.where(arel_table[:tags].array_overlap(['two'])).should include(two)
35
+ ArelArray.where(arel_table[:tags].array_overlap(['two','one'])).should include(two)
36
+ ArelArray.where(arel_table[:tags].array_overlap(['two','one'])).should include(one)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'INET related AREL functions' do
4
+ let!(:adapter) { ActiveRecord::Base.connection }
5
+ before do
6
+ adapter.create_table :ip_addresses, :force => true do |t|
7
+ t.inet :address
8
+ end
9
+
10
+ class IpAddress < ActiveRecord::Base
11
+ attr_accessible :address
12
+ end
13
+ end
14
+
15
+ after do
16
+ adapter.drop_table :ip_addresses
17
+ Object.send(:remove_const, :IpAddress)
18
+ end
19
+
20
+ describe 'quoting IPAddr in sql statement' do
21
+ it 'properly converts IPAddr to quoted strings when passed as an argument to a where clause' do
22
+ IpAddress.where(:address => IPAddr.new('127.0.0.1')).to_sql.should include("'127.0.0.1/32'")
23
+ end
24
+ end
25
+
26
+ describe 'cotained with (<<) operator' do
27
+ it 'converts Arel contained_within statemnts to <<' do
28
+ arel_table = IpAddress.arel_table
29
+
30
+ arel_table.where(arel_table[:address].contained_within(IPAddr.new('127.0.0.1/24'))).to_sql.should match /<< '127.0.0.0\/24'/
31
+ end
32
+ end
33
+ end
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Models with array columns' do
4
- context 'no default value, string array' do
5
- let!(:adapter) { ActiveRecord::Base.connection }
4
+ let!(:adapter) { ActiveRecord::Base.connection }
6
5
 
6
+ context 'no default value, string array' do
7
7
  before do
8
8
  adapter.create_table :users, :force => true do |t|
9
9
  t.string :nick_names, :array => true
@@ -18,29 +18,45 @@ describe 'Models with array columns' do
18
18
  Object.send(:remove_const, :User)
19
19
  end
20
20
 
21
- describe '#create' do
22
- it 'creates a user when there is no array assignment' do
23
- u = User.create()
24
- u.reload
25
- u.nick_names.should eq nil
26
- end
21
+ context 'no default value, string array' do
22
+ describe '#create' do
23
+ it 'creates a user when there is no array assignment' do
24
+ u = User.create()
25
+ u.reload
26
+ u.nick_names.should eq nil
27
+ end
27
28
 
28
- it 'creates a user with an empty array' do
29
- u = User.create(:nick_names => [])
30
- u.reload
31
- u.nick_names.should eq []
29
+ it 'creates a user with an empty array' do
30
+ u = User.create(:nick_names => [])
31
+ u.reload
32
+ u.nick_names.should eq []
33
+ end
34
+
35
+ it 'creates a user with an array of some values' do
36
+ u = User.create(:nick_names => ['some', 'things'])
37
+ u.reload
38
+ u.nick_names.should eq ['some', 'things']
39
+ end
32
40
  end
41
+ end
33
42
 
34
- it 'creates a user with an array of some values' do
35
- u = User.create(:nick_names => ['some', 'things'])
36
- u.reload
37
- u.nick_names.should eq ['some', 'things']
43
+ context 'Setting values' do
44
+ describe 'setting a new value' do
45
+ it 'returns the value set when the record is retrieved' do
46
+ u = User.create(:nick_names => ['some', 'things'])
47
+ u.reload
48
+
49
+ u.nick_names = ['different', 'values']
50
+ u.save
51
+
52
+ u.reload
53
+ u.nick_names.should eq ['different', 'values']
54
+ end
38
55
  end
39
56
  end
40
57
  end
41
58
 
42
- context 'default value, string array' do
43
- let!(:adapter) { ActiveRecord::Base.connection }
59
+ context 'default values' do
44
60
  before do
45
61
  adapter.create_table :defaulted_users, :force => true do |t|
46
62
  t.string :nick_names, :array => true, :default => '{}'
@@ -55,23 +71,25 @@ describe 'Models with array columns' do
55
71
  Object.send(:remove_const, :DefaultedUser)
56
72
  end
57
73
 
58
- describe '#create' do
59
- it 'creates a user when there is no array assignment' do
60
- u = DefaultedUser.create()
61
- u.reload
62
- u.nick_names.should eq []
63
- end
74
+ context 'model creation' do
75
+ describe '#create' do
76
+ it 'creates a user when there is no array assignment' do
77
+ u = DefaultedUser.create()
78
+ u.reload
79
+ u.nick_names.should eq []
80
+ end
64
81
 
65
- it 'creates a user with an nil' do
66
- u = DefaultedUser.create(:nick_names => nil)
67
- u.reload
68
- u.nick_names.should eq nil
69
- end
82
+ it 'creates a user with an nil' do
83
+ u = DefaultedUser.create(:nick_names => nil)
84
+ u.reload
85
+ u.nick_names.should eq nil
86
+ end
70
87
 
71
- it 'creates a user with an array of some values' do
72
- u = DefaultedUser.create(:nick_names => ['some', 'things'])
73
- u.reload
74
- u.nick_names.should eq ['some', 'things']
88
+ it 'creates a user with an array of some values' do
89
+ u = DefaultedUser.create(:nick_names => ['some', 'things'])
90
+ u.reload
91
+ u.nick_names.should eq ['some', 'things']
92
+ end
75
93
  end
76
94
  end
77
95
  end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Models with inet columns' do
4
+ let!(:adapter) { ActiveRecord::Base.connection }
5
+
6
+ context 'no default value, inet' do
7
+ before do
8
+ adapter.create_table :addresses, :force => true do |t|
9
+ t.inet :ip_address
10
+ end
11
+ class Address < ActiveRecord::Base
12
+ attr_accessible :ip_address
13
+ end
14
+ end
15
+
16
+ after do
17
+ adapter.drop_table :addresses
18
+ Object.send(:remove_const, :Address)
19
+ end
20
+
21
+ context 'no default value, inet' do
22
+ describe '#create' do
23
+ it 'creates an address when there is no assignment' do
24
+ address = Address.create()
25
+ address.reload
26
+ address.ip_address.should eq nil
27
+ end
28
+
29
+ it 'creates an address with an address string' do
30
+ address = Address.create( :ip_address => '192.168.0.1')
31
+ address.reload
32
+ address.ip_address.should eq IPAddr.new('192.168.0.1')
33
+ end
34
+
35
+ it 'creates an address with an IPAddr' do
36
+ ip_addr = IPAddr.new('192.168.0.1')
37
+ address = Address.create( :ip_address => ip_addr)
38
+ address.reload
39
+ address.ip_address.should eq ip_addr
40
+ end
41
+ end
42
+
43
+ describe 'inet assignment' do
44
+ it 'updates an address with an address string' do
45
+ address = Address.create( :ip_address => '192.168.0.1')
46
+ address.ip_address = '192.168.1.2'
47
+ address.save
48
+
49
+ address.reload
50
+ address.ip_address.should eq IPAddr.new('192.168.1.2')
51
+ end
52
+
53
+ it 'updates an address with an IPAddr' do
54
+ ip_addr_1 = IPAddr.new('192.168.0.1')
55
+ ip_addr_2 = IPAddr.new('192.168.1.2')
56
+ address = Address.create( :ip_address => ip_addr_1)
57
+ address.ip_address = ip_addr_2
58
+ address.save
59
+
60
+ address.reload
61
+ address.ip_address.should eq ip_addr_2
62
+ end
63
+ end
64
+
65
+ describe 'find_by_inet' do
66
+ let!(:address) { Address.create(:ip_address => '192.168.0.1') }
67
+
68
+ it 'finds address using string value' do
69
+ Address.find_by_ip_address('192.168.0.1').should eq address
70
+ end
71
+
72
+ it 'finds address using IPAddr' do
73
+ ip_addr = IPAddr.new '192.168.0.1'
74
+ Address.find_by_ip_address(ip_addr).should eq address
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -15,4 +15,11 @@ Dir[File.join(ENGINE_RAILS_ROOT, 'spec/support/**/*.rb')].each { |f| require f }
15
15
  RSpec.configure do |config|
16
16
  config.mock_with :mocha
17
17
  config.use_transactional_fixtures = true
18
+ config.backtrace_clean_patterns = [
19
+ #/\/lib\d*\/ruby\//,
20
+ #/bin\//,
21
+ #/gems/,
22
+ #/spec\/spec_helper\.rb/,
23
+ /lib\/rspec\/(core|expectations|matchers|mocks)/
24
+ ]
18
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postgres_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-10 00:00:00.000000000 Z
12
+ date: 2012-09-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 0.0.1
37
+ version: 0.0.3
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 0.0.1
45
+ version: 0.0.3
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rails
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -139,22 +139,6 @@ dependencies:
139
139
  - - ! '>='
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: rvm-tester
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
150
- type: :development
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
142
  description: Adds missing native PostgreSQL data types to ActiveRecord
159
143
  email:
160
144
  - git@danmcclain.net
@@ -183,6 +167,8 @@ files:
183
167
  - lib/postgres_ext/arel/visitors/to_sql.rb
184
168
  - lib/postgres_ext/version.rb
185
169
  - postgres_ext.gemspec
170
+ - spec/arel/array_spec.rb
171
+ - spec/arel/inet_spec.rb
186
172
  - spec/columns/array_spec.rb
187
173
  - spec/columns/inet_spec.rb
188
174
  - spec/dummy/.gitignore
@@ -243,6 +229,7 @@ files:
243
229
  - spec/migrations/macaddr_spec.rb
244
230
  - spec/migrations/uuid_spec.rb
245
231
  - spec/models/array_spec.rb
232
+ - spec/models/inet_spec.rb
246
233
  - spec/schema_dumper/array_spec.rb
247
234
  - spec/schema_dumper/cidr_spec.rb
248
235
  - spec/schema_dumper/inet_spec.rb
@@ -263,7 +250,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
263
250
  version: '0'
264
251
  segments:
265
252
  - 0
266
- hash: -1872786162985157385
253
+ hash: 169599389239444303
267
254
  required_rubygems_version: !ruby/object:Gem::Requirement
268
255
  none: false
269
256
  requirements:
@@ -272,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
272
259
  version: '0'
273
260
  segments:
274
261
  - 0
275
- hash: -1872786162985157385
262
+ hash: 169599389239444303
276
263
  requirements: []
277
264
  rubyforge_project:
278
265
  rubygems_version: 1.8.23
@@ -280,6 +267,8 @@ signing_key:
280
267
  specification_version: 3
281
268
  summary: Extends ActiveRecord to handle native PostgreSQL data types
282
269
  test_files:
270
+ - spec/arel/array_spec.rb
271
+ - spec/arel/inet_spec.rb
283
272
  - spec/columns/array_spec.rb
284
273
  - spec/columns/inet_spec.rb
285
274
  - spec/dummy/.gitignore
@@ -340,6 +329,7 @@ test_files:
340
329
  - spec/migrations/macaddr_spec.rb
341
330
  - spec/migrations/uuid_spec.rb
342
331
  - spec/models/array_spec.rb
332
+ - spec/models/inet_spec.rb
343
333
  - spec/schema_dumper/array_spec.rb
344
334
  - spec/schema_dumper/cidr_spec.rb
345
335
  - spec/schema_dumper/inet_spec.rb