postgres_ext 0.3.0 → 0.3.1
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/CHANGELOG.md +6 -0
- data/lib/postgres_ext/active_record/connection_adapters/postgres_adapter.rb +4 -2
- data/lib/postgres_ext/active_record/relation/query_methods.rb +3 -3
- data/lib/postgres_ext/version.rb +1 -1
- data/spec/columns/array_spec.rb +3 -0
- data/spec/migrations/ean13_spec.rb +27 -0
- data/spec/models/array_spec.rb +18 -9
- data/spec/models/ean13_spec.rb +57 -0
- data/spec/schema_dumper/ean13_spec.rb +17 -0
- metadata +33 -7
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
@@ -119,6 +119,8 @@ module ActiveRecord
|
|
119
119
|
:cidr
|
120
120
|
when 'macaddr'
|
121
121
|
:macaddr
|
122
|
+
when 'ean13'
|
123
|
+
:ean13
|
122
124
|
else
|
123
125
|
simplified_type_without_extended_types field_type
|
124
126
|
end
|
@@ -131,7 +133,7 @@ module ActiveRecord
|
|
131
133
|
class UnsupportedFeature < Exception; end
|
132
134
|
|
133
135
|
EXTENDED_TYPES = { :inet => {:name => 'inet'}, :cidr => {:name => 'cidr'}, :macaddr => {:name => 'macaddr'},
|
134
|
-
:uuid => {:name => 'uuid'}, :citext => {:name => 'citext'} }
|
136
|
+
:uuid => {:name => 'uuid'}, :citext => {:name => 'citext'}, :ean13 => {:name => 'ean13'} }
|
135
137
|
|
136
138
|
class ColumnDefinition < ActiveRecord::ConnectionAdapters::ColumnDefinition
|
137
139
|
attr_accessor :array
|
@@ -383,7 +385,7 @@ module ActiveRecord
|
|
383
385
|
|
384
386
|
casted_value = type_cast_extended(value, column, true)
|
385
387
|
|
386
|
-
if casted_value.is_a? String
|
388
|
+
if casted_value.is_a?(String) && value.is_a?(String)
|
387
389
|
casted_value = casted_value.dup
|
388
390
|
# Encode backslashes. One backslash becomes 4 in the resulting SQL.
|
389
391
|
# (why 4, and not 2? Trial and error shows 4 works, 2 fails to parse.)
|
@@ -71,11 +71,11 @@ module ActiveRecord
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
-
def where_with_chaining(opts
|
75
|
-
if opts
|
74
|
+
def where_with_chaining(*opts, &block)
|
75
|
+
if opts.empty? && !block_given?
|
76
76
|
WhereChain.new(self)
|
77
77
|
else
|
78
|
-
where_without_chaining(opts,
|
78
|
+
where_without_chaining(*opts, &block)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
data/lib/postgres_ext/version.rb
CHANGED
data/spec/columns/array_spec.rb
CHANGED
@@ -61,6 +61,9 @@ describe 'Array column' do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
context 'corner cases, strings with commas and quotations' do
|
64
|
+
it 'converts one element, 2 dimensional arrays' do
|
65
|
+
adapter.type_cast([['one','two']], text_array_column).should eq '{{"one","two"}}'
|
66
|
+
end
|
64
67
|
it 'converts the PostgreSQL value containing escaped " to an array' do
|
65
68
|
text_array_column.type_cast('{"has \" quote",another value}').should eq ['has " quote', 'another value']
|
66
69
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'ean13 migrations' do
|
4
|
+
let!(:connection) { ActiveRecord::Base.connection }
|
5
|
+
before(:all) { ActiveRecord::Base.connection.add_extension('isn') if ActiveRecord::Base.connection.supports_extensions? }
|
6
|
+
after { connection.drop_table :data_types }
|
7
|
+
it 'creates an ean13 column' do
|
8
|
+
lambda do
|
9
|
+
connection.create_table :data_types do |t|
|
10
|
+
t.ean13 :ean13_1
|
11
|
+
t.ean13 :ean13_2, :ean13_3
|
12
|
+
t.column :ean13_4, :ean13
|
13
|
+
end
|
14
|
+
end.should_not raise_exception
|
15
|
+
|
16
|
+
columns = connection.columns(:data_types)
|
17
|
+
ean13_1 = columns.detect { |c| c.name == 'ean13_1'}
|
18
|
+
ean13_2 = columns.detect { |c| c.name == 'ean13_2'}
|
19
|
+
ean13_3 = columns.detect { |c| c.name == 'ean13_3'}
|
20
|
+
ean13_4 = columns.detect { |c| c.name == 'ean13_4'}
|
21
|
+
|
22
|
+
ean13_1.sql_type.should eq 'ean13'
|
23
|
+
ean13_2.sql_type.should eq 'ean13'
|
24
|
+
ean13_3.sql_type.should eq 'ean13'
|
25
|
+
ean13_4.sql_type.should eq 'ean13'
|
26
|
+
end
|
27
|
+
end
|
data/spec/models/array_spec.rb
CHANGED
@@ -57,17 +57,26 @@ describe 'Models with array columns' do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
context 'Setting values' do
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
u.reload
|
60
|
+
it 'returns the value set when the record is retrieved' do
|
61
|
+
u = User.create(:nick_names => ['some', 'things'])
|
62
|
+
u.reload
|
64
63
|
|
65
|
-
|
66
|
-
|
64
|
+
u.nick_names = ['different', 'values']
|
65
|
+
u.save
|
67
66
|
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
u.reload
|
68
|
+
u.nick_names.should eq ['different', 'values']
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'creates a user with an int array of some values' do
|
72
|
+
u = User.create(:favorite_numbers => [2,3,5])
|
73
|
+
u.reload
|
74
|
+
|
75
|
+
u.favorite_numbers = [1,2,3]
|
76
|
+
u.save
|
77
|
+
|
78
|
+
u.reload
|
79
|
+
u.favorite_numbers.should eq [1,2,3]
|
71
80
|
end
|
72
81
|
end
|
73
82
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Models with ean13 columns' do
|
4
|
+
let!(:adapter) { ActiveRecord::Base.connection }
|
5
|
+
|
6
|
+
context 'no default value, ean' do
|
7
|
+
before do
|
8
|
+
adapter.create_table :books, :force => true do |t|
|
9
|
+
t.ean13 :ean
|
10
|
+
end
|
11
|
+
|
12
|
+
class Book < ActiveRecord::Base
|
13
|
+
attr_accessible :ean
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
after do
|
18
|
+
adapter.drop_table :books
|
19
|
+
Object.send(:remove_const, :Book)
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'no default value, ean' do
|
23
|
+
describe '#create' do
|
24
|
+
it 'create a book when there is no ean assignment' do
|
25
|
+
book = Book.create()
|
26
|
+
book.reload
|
27
|
+
book.ean.should eq nil
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'creates a book with an ean string' do
|
31
|
+
book = Book.create(:ean => '9780312174910')
|
32
|
+
book.reload
|
33
|
+
book.ean.should eq '978-0-312-17491-0'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'ean assignment' do
|
38
|
+
it 'updates a book with an ean string' do
|
39
|
+
book = Book.create(:ean => '9783037781265')
|
40
|
+
book.ean = '9780312174910'
|
41
|
+
book.save
|
42
|
+
|
43
|
+
book.reload
|
44
|
+
book.ean.should eq '978-0-312-17491-0'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'find_by_ean' do
|
49
|
+
let!(:ean) { Book.create(:ean => '9783037781265') }
|
50
|
+
|
51
|
+
it 'finds book using string value' do
|
52
|
+
Book.find_by_ean('9783037781265').should eq ean
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'ean13 schema dump' do
|
4
|
+
let!(:connection) { ActiveRecord::Base.connection }
|
5
|
+
after { connection.drop_table :testings }
|
6
|
+
it 'correctly generates ean13 column statements' do
|
7
|
+
stream = StringIO.new
|
8
|
+
connection.create_table :testings do |t|
|
9
|
+
t.ean13 :ean13_column
|
10
|
+
end
|
11
|
+
|
12
|
+
ActiveRecord::SchemaDumper.dump(connection, stream)
|
13
|
+
output = stream.string
|
14
|
+
|
15
|
+
output.should match /t\.ean13/
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postgres_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Dan McClain
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-03
|
12
|
+
date: 2013-05-03 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activerecord
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: pg_array_parser
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rails
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rspec-rails
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: bourne
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,6 +94,7 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: pg
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ~>
|
88
100
|
- !ruby/object:Gem::Version
|
@@ -90,6 +102,7 @@ dependencies:
|
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
107
|
- - ~>
|
95
108
|
- !ruby/object:Gem::Version
|
@@ -193,11 +206,13 @@ files:
|
|
193
206
|
- spec/migrations/array_spec.rb
|
194
207
|
- spec/migrations/cidr_spec.rb
|
195
208
|
- spec/migrations/citext_spec.rb
|
209
|
+
- spec/migrations/ean13_spec.rb
|
196
210
|
- spec/migrations/index_spec.rb
|
197
211
|
- spec/migrations/inet_spec.rb
|
198
212
|
- spec/migrations/macaddr_spec.rb
|
199
213
|
- spec/migrations/uuid_spec.rb
|
200
214
|
- spec/models/array_spec.rb
|
215
|
+
- spec/models/ean13_spec.rb
|
201
216
|
- spec/models/inet_spec.rb
|
202
217
|
- spec/queries/array_queries_spec.rb
|
203
218
|
- spec/queries/contains_querie_spec.rb
|
@@ -205,6 +220,7 @@ files:
|
|
205
220
|
- spec/schema_dumper/array_spec.rb
|
206
221
|
- spec/schema_dumper/cidr_spec.rb
|
207
222
|
- spec/schema_dumper/citext_spec.rb
|
223
|
+
- spec/schema_dumper/ean13_spec.rb
|
208
224
|
- spec/schema_dumper/extension_spec.rb
|
209
225
|
- spec/schema_dumper/index_spec.rb
|
210
226
|
- spec/schema_dumper/inet_spec.rb
|
@@ -213,26 +229,33 @@ files:
|
|
213
229
|
- spec/spec_helper.rb
|
214
230
|
homepage: ''
|
215
231
|
licenses: []
|
216
|
-
metadata: {}
|
217
232
|
post_install_message:
|
218
233
|
rdoc_options: []
|
219
234
|
require_paths:
|
220
235
|
- lib
|
221
236
|
required_ruby_version: !ruby/object:Gem::Requirement
|
237
|
+
none: false
|
222
238
|
requirements:
|
223
|
-
- - '>='
|
239
|
+
- - ! '>='
|
224
240
|
- !ruby/object:Gem::Version
|
225
241
|
version: '0'
|
242
|
+
segments:
|
243
|
+
- 0
|
244
|
+
hash: 3683941487581046941
|
226
245
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
|
+
none: false
|
227
247
|
requirements:
|
228
|
-
- - '>='
|
248
|
+
- - ! '>='
|
229
249
|
- !ruby/object:Gem::Version
|
230
250
|
version: '0'
|
251
|
+
segments:
|
252
|
+
- 0
|
253
|
+
hash: 3683941487581046941
|
231
254
|
requirements: []
|
232
255
|
rubyforge_project:
|
233
|
-
rubygems_version:
|
256
|
+
rubygems_version: 1.8.23
|
234
257
|
signing_key:
|
235
|
-
specification_version:
|
258
|
+
specification_version: 3
|
236
259
|
summary: Extends ActiveRecord to handle native PostgreSQL data types
|
237
260
|
test_files:
|
238
261
|
- spec/arel/arel_spec.rb
|
@@ -295,11 +318,13 @@ test_files:
|
|
295
318
|
- spec/migrations/array_spec.rb
|
296
319
|
- spec/migrations/cidr_spec.rb
|
297
320
|
- spec/migrations/citext_spec.rb
|
321
|
+
- spec/migrations/ean13_spec.rb
|
298
322
|
- spec/migrations/index_spec.rb
|
299
323
|
- spec/migrations/inet_spec.rb
|
300
324
|
- spec/migrations/macaddr_spec.rb
|
301
325
|
- spec/migrations/uuid_spec.rb
|
302
326
|
- spec/models/array_spec.rb
|
327
|
+
- spec/models/ean13_spec.rb
|
303
328
|
- spec/models/inet_spec.rb
|
304
329
|
- spec/queries/array_queries_spec.rb
|
305
330
|
- spec/queries/contains_querie_spec.rb
|
@@ -307,6 +332,7 @@ test_files:
|
|
307
332
|
- spec/schema_dumper/array_spec.rb
|
308
333
|
- spec/schema_dumper/cidr_spec.rb
|
309
334
|
- spec/schema_dumper/citext_spec.rb
|
335
|
+
- spec/schema_dumper/ean13_spec.rb
|
310
336
|
- spec/schema_dumper/extension_spec.rb
|
311
337
|
- spec/schema_dumper/index_spec.rb
|
312
338
|
- spec/schema_dumper/inet_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 78f29ab859ad31017d1173ec07e12a0b5603b823
|
4
|
-
data.tar.gz: 3ae3cbc58fc1cdf7018721d01078855cc4fcc089
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 995ffd20fefb645371140742c7742cee1ebb9bc1cdbc9bd9bd7f9b32fa8057ac83fc661daed70bffb311700cb9c5e1b87ad64102008509ddf93ec6a7e2f11d14
|
7
|
-
data.tar.gz: ae873dde5e07a41dee3b5ccccbbdd6f06443f7a0ccb0e65ff3f2678a7a8fcb91d5323afb6bbcbf17be03a30dd9278ff6fee71b96b5e0bc7e863ef9274615d992
|