activerecord-postgres-composite-types 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f1180c2f69bc0bcff969b4d5a0a8fc62ff6c2fd
4
- data.tar.gz: 6a94bec2dccd909fa613e66a50eee379dea61298
3
+ metadata.gz: fab1ca82523eece0cf8b9e0c64fd7cc0903b76ff
4
+ data.tar.gz: 218877b1a29bce9e891c450b989be9442c223333
5
5
  SHA512:
6
- metadata.gz: e87be224bc26e25a18ba0a641b2f764da2ff7708c1b17f667f1977cc17f1f75e19dff6996e6e9f6279490b1c8a79b14949af23f5d44cddf528ceaf5bbb455e3b
7
- data.tar.gz: cd42315a520c43ea636876e796d99730d848de9069adb0b22beadb0ebf64a6e53bb73ad0fab52f4ce380423762d8ca4459f464026a6d482d1893e9eb4605fb9f
6
+ metadata.gz: f98e1e96acfdd9607f918c7db4c47a8f2625ccb0769e8c6a0416008840f24dfec6a136c82aa4c18800d2be6fa8b9c0f3ff1e8b154e9f8e94150b4a5a3103d43b
7
+ data.tar.gz: df68e9973ecfb0d47906f5a1ac22e3f0bbe0dd7b3b2929c36c2363abbf3d7840df3de8304b0240b6e8513fadf4afdfb772fdacfa8a53f2c5a5ce795dc2de005e
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: activerecord-postgres-composite-types 0.2.4 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "activerecord-postgres-composite-types"
8
- s.version = "0.2.3"
9
+ s.version = "0.2.4"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Rafal Bigaj"]
12
- s.date = "2014-09-12"
14
+ s.date = "2014-11-28"
13
15
  s.description = "This gem adds support to the ActiveRecord (3.x and 4.x) for composite types."
14
16
  s.email = "rafal.bigaj@puzzleflow.com"
15
17
  s.extra_rdoc_files = [
@@ -43,8 +45,7 @@ Gem::Specification.new do |s|
43
45
  ]
44
46
  s.homepage = "http://github.com/puzzleflow/activerecord-postgres-composite-types"
45
47
  s.licenses = ["MIT"]
46
- s.require_paths = ["lib"]
47
- s.rubygems_version = "2.0.3"
48
+ s.rubygems_version = "2.4.2"
48
49
  s.summary = "ActiveRecord composite types support"
49
50
 
50
51
  if s.respond_to? :specification_version then
@@ -30,9 +30,9 @@ module ActiveRecord
30
30
  end
31
31
 
32
32
  def register_arel_visitor(klass)
33
- Arel::Visitors::ToSql.class_eval <<-RUBY
33
+ Arel::Visitors::Visitor.class_eval <<-RUBY
34
34
  def visit_#{klass.name.gsub('::', '_')}(o, a=nil)
35
- @connection.quote(o) + '::#{klass.type}'
35
+ "'" + ActiveRecord::ConnectionAdapters::PostgreSQLColumn::composite_type_to_string(o, o.class.connection) + "'" + '::#{klass.type}'
36
36
  end
37
37
  RUBY
38
38
  end
@@ -167,4 +167,4 @@ module ActiveRecord
167
167
 
168
168
  end
169
169
 
170
- require_relative "active_record_#{ActiveRecord::VERSION::MAJOR}"
170
+ require_relative "active_record_#{ActiveRecord::VERSION::MAJOR}"
@@ -86,7 +86,7 @@ module ActiveRecord
86
86
  extend ActiveSupport::Concern
87
87
 
88
88
  def type_cast_attribute_for_write(column, value)
89
- if klass = column.composite_type_class
89
+ if column && klass = column.composite_type_class
90
90
  # Cast Hash and Array to composite type klass
91
91
  if value.is_a?(klass)
92
92
  value
@@ -91,7 +91,12 @@ module ActiveRecord
91
91
  quote_and_escape(adapter.type_cast(value, column, true))
92
92
  end
93
93
  else
94
- adapter.type_cast(value, column, true)
94
+ res = adapter.type_cast(value, column, true)
95
+ if value.class < PostgresCompositeType
96
+ quote_and_escape(res)
97
+ else
98
+ res
99
+ end
95
100
  end
96
101
  end
97
102
  "(#{quoted_values.join(',')})"
@@ -84,6 +84,10 @@ class PostgresCompositeType
84
84
 
85
85
  def set_attributes(values)
86
86
  values.each do |name, value|
87
+ if Hash === value || Array === value
88
+ klass = self.class.columns.find(name).first.try(:composite_type_class)
89
+ value = klass.new(value) if klass
90
+ end
87
91
  send "#{name}=", value
88
92
  end
89
93
  end
@@ -91,8 +95,12 @@ class PostgresCompositeType
91
95
  def set_values(values)
92
96
  raise "Invalid values count: #{values.size}, expected: #{self.class.columns.size}" if values.size != self.class.columns.size
93
97
  self.class.columns.each.with_index do |column, i|
98
+ if Hash === values[i] || Array === values[i]
99
+ klass = column.composite_type_class
100
+ values[i] = klass.new(values[i]) if klass
101
+ end
94
102
  send "#{column.name}=", values[i]
95
103
  end
96
104
  end
97
105
 
98
- end
106
+ end
@@ -15,3 +15,7 @@ end
15
15
  class NestedType < PostgresCompositeType
16
16
  register_type :nested_type
17
17
  end
18
+
19
+ class NestedNestedType < PostgresCompositeType
20
+ register_type :nested_nested_type
21
+ end
@@ -5,6 +5,7 @@ ActiveRecord::Schema.define do
5
5
  execute "CREATE TYPE my_type AS (name varchar, number int, date timestamp)"
6
6
  execute "CREATE DOMAIN rgb_color AS TEXT CHECK(VALUE IN ('red', 'green', 'blue'))"
7
7
  execute "CREATE TYPE nested_type AS (comp compfoo, color rgb_color)"
8
+ execute "CREATE TYPE nested_nested_type AS (nested nested_type, color rgb_color)"
8
9
 
9
10
  create_table :foos, :id => false do |t|
10
11
  t.column :comp, :compfoo, default: "(0,\"\")"
@@ -14,6 +15,10 @@ ActiveRecord::Schema.define do
14
15
  t.column :nested, :nested_type
15
16
  end
16
17
 
18
+ create_table :bar2s, :id => false do |t|
19
+ t.column :nested, :nested_nested_type
20
+ end
21
+
17
22
  execute "INSERT INTO foos VALUES ((0,'abc')), ((1,'a/b''c\\d e f'))"
18
23
  execute "INSERT INTO bars VALUES (((0,'abc'),'red')), (((1,'cba'),'blue'))"
19
24
  end
@@ -2,7 +2,9 @@ require_relative 'helper'
2
2
 
3
3
  class TestNestedTypes < Test::Unit::TestCase
4
4
  class Bar < ActiveRecord::Base
5
+ end
5
6
 
7
+ class Bar2 < ActiveRecord::Base
6
8
  end
7
9
 
8
10
  should "cast value properly" do
@@ -15,4 +17,31 @@ class TestNestedTypes < Test::Unit::TestCase
15
17
  assert_equal Compfoo.new([1,'cba']), bars[1].nested.comp
16
18
  assert_equal 'blue', bars[1].nested.color
17
19
  end
18
- end
20
+
21
+ should "insert with nested type" do
22
+ bar = Bar.new(nested: {comp: Compfoo.new([2, 'bac']), color: 'red'})
23
+ bar.save
24
+ assert !bar.new_record?
25
+ end
26
+
27
+ should "build nested types from Hash" do
28
+ bar = Bar.new(nested: {comp: {f1: 2, f2: 'bac'}, color: 'red'})
29
+ assert_kind_of NestedType, bar.nested
30
+ end
31
+
32
+ should "build nested types from Array" do
33
+ bar = Bar.new(nested: [[2, 'bac'], 'red'])
34
+ assert_kind_of NestedType, bar.nested
35
+ end
36
+
37
+ should "insert with double nested type" do
38
+ bar = Bar2.new(nested: {nested: {comp: [1, 'dca'], color: 'blue'}, color: 'red'})
39
+ assert_kind_of NestedNestedType, bar.nested
40
+ end
41
+
42
+ should "select nested type" do
43
+ Bar2.create!(nested: {nested: {comp: [1, 'dca'], color: 'blue'}, color: 'red'})
44
+ assert !Bar2.where(nested: NestedNestedType.new(nested: {comp: [1, 'dca'], color: 'red'}, color: 'red')).exists?
45
+ assert Bar2.where(nested: NestedNestedType.new(nested: {comp: [1, 'dca'], color: 'blue'}, color: 'red')).exists?
46
+ end
47
+ end
metadata CHANGED
@@ -1,153 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-postgres-composite-types
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafal Bigaj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-12 00:00:00.000000000 Z
11
+ date: 2014-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pg
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.17.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.17.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: test-unit
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '2.1'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: shoulda
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '3.12'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.12'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '10.3'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '10.3'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: bundler
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '1.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: jeweler
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 2.0.1
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 2.0.1
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: combustion
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ~>
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: 0.5.2
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ~>
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.5.2
153
153
  description: This gem adds support to the ActiveRecord (3.x and 4.x) for composite
@@ -159,8 +159,8 @@ extra_rdoc_files:
159
159
  - LICENSE
160
160
  - README.rdoc
161
161
  files:
162
- - .document
163
- - .travis.yml
162
+ - ".document"
163
+ - ".travis.yml"
164
164
  - Gemfile
165
165
  - LICENSE
166
166
  - README.rdoc
@@ -192,17 +192,17 @@ require_paths:
192
192
  - lib
193
193
  required_ruby_version: !ruby/object:Gem::Requirement
194
194
  requirements:
195
- - - '>='
195
+ - - ">="
196
196
  - !ruby/object:Gem::Version
197
197
  version: '0'
198
198
  required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  requirements:
200
- - - '>='
200
+ - - ">="
201
201
  - !ruby/object:Gem::Version
202
202
  version: '0'
203
203
  requirements: []
204
204
  rubyforge_project:
205
- rubygems_version: 2.0.3
205
+ rubygems_version: 2.4.2
206
206
  signing_key:
207
207
  specification_version: 4
208
208
  summary: ActiveRecord composite types support