activerecord-postgres-composite-types 0.2.3 → 0.2.4

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.
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