surus 0.4.1 → 0.4.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c9704e8ae62f2951b6dafe408bd6136fc785f3a1
4
+ data.tar.gz: 38471bda203953316a99e095dac5e0dd93751f67
5
+ SHA512:
6
+ metadata.gz: 0d09100c14636b85460f7786ebf97393ffa730be521e7558c2d95075e0dab8093ab71acc11a575e111de5de5311fccf330136564c5fc83e8d0c8a2bb5fe08c87
7
+ data.tar.gz: 14e64a0de18c968df746f5a93eac0696ef4bbdee12a2f66f8fcb1be97d8c1c2fe4424399cf7defb90fbc4827d7395f7faf95cfbd9cb3083a7d5dfb32de454a14
@@ -1,3 +1,11 @@
1
+ # 0.4.2 (June 21, 2013)
2
+
3
+ * Make pg a development dependency to allow usage with JRuby
4
+ * Added migration support for hstore (Justin Talbott)
5
+ * Added migration support for json
6
+ * Make activerecord dependency ~> 3.1 to keep incompatible version of Surus from being used with Rails 4
7
+ * Updated docs to mention Rails 4 branch
8
+
1
9
  # 0.4.1 (February 27, 2013)
2
10
 
3
11
  * Fix array_has and array_has_any with varchar[]
data/README.md CHANGED
@@ -18,6 +18,11 @@ Or add to your Gemfile.
18
18
 
19
19
  gem 'surus'
20
20
 
21
+ # Rails 4 Support
22
+
23
+ This version of Surus is compatible with Rails 3.1.x and Rails 3.2.x. It is not
24
+ compatible with Rails 4. Checkout the rails4 branch if you are using Rails 4.
25
+
21
26
  # Hstore
22
27
 
23
28
  Hashes can be serialized to an hstore column. hstore is a PostgreSQL key/value
@@ -53,6 +58,13 @@ Hstore is a PostgreSQL extension. You can generate a migration to install it.
53
58
  rails g surus:hstore:install
54
59
  rake db:migrate
55
60
 
61
+ You can then use the hstore type in migrations.
62
+
63
+ class AddPropertiesToUsers < ActiveRecord::Migration
64
+ def change
65
+ add_column :users, :properties, :hstore
66
+ end
67
+ end
56
68
 
57
69
  Read more in the [PostgreSQL hstore documentation](http://www.postgresql.org/docs/9.1/static/hstore.html).
58
70
 
@@ -119,6 +131,15 @@ the Rails `to_json` interface.
119
131
  User.all_json(columns: [:id, :name, :email], include: {posts: {columns: [:id, :subject]}})
120
132
  Post.all_json(include: [:forum, :post])
121
133
 
134
+ You can use the json type in migrations.
135
+
136
+ class AddPropertiesToUsers < ActiveRecord::Migration
137
+ def change
138
+ add_column :users, :properties, :json
139
+ end
140
+ end
141
+
142
+
122
143
  # Benchmarks
123
144
 
124
145
  Using PostgreSQL's hstore enables searches to be done quickly in the database.
@@ -2,6 +2,7 @@ require 'active_record'
2
2
  require 'surus/version'
3
3
  require 'surus/hstore/serializer'
4
4
  require 'surus/hstore/scope'
5
+ require 'surus/hstore/connection_adapters'
5
6
  require 'surus/array/text_serializer'
6
7
  require 'surus/array/integer_serializer'
7
8
  require 'surus/array/float_serializer'
@@ -9,6 +10,7 @@ require 'surus/array/decimal_serializer'
9
10
  require 'surus/array/scope'
10
11
  require 'surus/synchronous_commit/connection'
11
12
  require 'surus/synchronous_commit/model'
13
+ require 'surus/json/connection_adapters'
12
14
  require 'surus/json/query'
13
15
  require 'surus/json/row_query'
14
16
  require 'surus/json/array_agg_query'
@@ -0,0 +1,46 @@
1
+ require 'active_record/connection_adapters/postgresql_adapter'
2
+
3
+ ActiveRecord::ConnectionAdapters::PostgreSQLColumn.class_eval do
4
+ def simplified_type_with_hstore(field_type)
5
+ field_type == 'hstore' ? :hstore : simplified_type_without_hstore(field_type)
6
+ end
7
+
8
+ alias_method_chain :simplified_type, :hstore
9
+ end
10
+
11
+
12
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
13
+ def native_database_types_with_hstore
14
+ native_database_types_without_hstore.merge({:hstore => { :name => "hstore" }})
15
+ end
16
+
17
+ alias_method_chain :native_database_types, :hstore
18
+ end
19
+
20
+ ActiveRecord::ConnectionAdapters::TableDefinition.class_eval do
21
+ # Adds hstore type for migrations. So you can add columns to a table like:
22
+ # create_table :people do |t|
23
+ # ...
24
+ # t.hstore :info
25
+ # ...
26
+ # end
27
+ def hstore(*args)
28
+ options = args.extract_options!
29
+ column_names = args
30
+ column_names.each { |name| column(name, 'hstore', options) }
31
+ end
32
+ end
33
+
34
+ ActiveRecord::ConnectionAdapters::Table.class_eval do
35
+ # Adds hstore type for migrations. So you can add columns to a table like:
36
+ # change_table :people do |t|
37
+ # ...
38
+ # t.hstore :info
39
+ # ...
40
+ # end
41
+ def hstore(*args)
42
+ options = args.extract_options!
43
+ column_names = args
44
+ column_names.each { |name| column(name, 'hstore', options) }
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require 'active_record/connection_adapters/postgresql_adapter'
2
+
3
+ ActiveRecord::ConnectionAdapters::PostgreSQLColumn.class_eval do
4
+ def simplified_type_with_json(field_type)
5
+ field_type == 'json' ? :json : simplified_type_without_json(field_type)
6
+ end
7
+
8
+ alias_method_chain :simplified_type, :json
9
+ end
10
+
11
+
12
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
13
+ def native_database_types_with_json
14
+ native_database_types_without_json.merge({:json => { :name => "json" }})
15
+ end
16
+
17
+ alias_method_chain :native_database_types, :json
18
+ end
19
+
20
+ ActiveRecord::ConnectionAdapters::TableDefinition.class_eval do
21
+ # Adds json type for migrations. So you can add columns to a table like:
22
+ # create_table :people do |t|
23
+ # ...
24
+ # t.json :info
25
+ # ...
26
+ # end
27
+ def json(*args)
28
+ options = args.extract_options!
29
+ column_names = args
30
+ column_names.each { |name| column(name, 'json', options) }
31
+ end
32
+ end
33
+
34
+ ActiveRecord::ConnectionAdapters::Table.class_eval do
35
+ # Adds json type for migrations. So you can add columns to a table like:
36
+ # change_table :people do |t|
37
+ # ...
38
+ # t.json :info
39
+ # ...
40
+ # end
41
+ def json(*args)
42
+ options = args.extract_options!
43
+ column_names = args
44
+ column_names.each { |name| column(name, 'json', options) }
45
+ end
46
+ end
@@ -1,3 +1,3 @@
1
1
  module Surus
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -23,14 +23,14 @@ Gem::Specification.new do |s|
23
23
  s.require_paths = ["lib"]
24
24
 
25
25
  # specify any dependencies here; for example:
26
- s.add_dependency 'pg'
27
- s.add_dependency 'activerecord', ">= 3.1.0"
26
+ s.add_dependency 'activerecord', "~> 3.1"
28
27
 
29
28
  s.add_development_dependency 'rspec', "~> 2.12.0"
30
29
  s.add_development_dependency 'guard', ">= 0.10.0"
31
30
  s.add_development_dependency 'guard-rspec', ">= 0.6.0"
32
31
  s.add_development_dependency 'rb-fsevent', '~> 0.9.1'
33
32
  s.add_development_dependency 'oj', '~> 2.0.2'
33
+ s.add_development_dependency 'pg'
34
34
  s.add_development_dependency 'pry', '~> 0.9.11'
35
35
  s.add_development_dependency 'factory_girl', '~> 4.2.0'
36
36
  s.add_development_dependency 'faker', '~> 1.1.2'
metadata CHANGED
@@ -1,52 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
5
- prerelease:
4
+ version: 0.4.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jack Christensen
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
11
+ date: 2013-06-21 00:00:00.000000000 Z
13
12
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: pg
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
13
  - !ruby/object:Gem::Dependency
31
14
  name: activerecord
32
15
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
16
  requirements:
35
- - - ! '>='
17
+ - - ~>
36
18
  - !ruby/object:Gem::Version
37
- version: 3.1.0
19
+ version: '3.1'
38
20
  type: :runtime
39
21
  prerelease: false
40
22
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
23
  requirements:
43
- - - ! '>='
24
+ - - ~>
44
25
  - !ruby/object:Gem::Version
45
- version: 3.1.0
26
+ version: '3.1'
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: rspec
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
31
  - - ~>
52
32
  - !ruby/object:Gem::Version
@@ -54,7 +34,6 @@ dependencies:
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
38
  - - ~>
60
39
  - !ruby/object:Gem::Version
@@ -62,39 +41,34 @@ dependencies:
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: guard
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ! '>='
45
+ - - '>='
68
46
  - !ruby/object:Gem::Version
69
47
  version: 0.10.0
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
52
+ - - '>='
76
53
  - !ruby/object:Gem::Version
77
54
  version: 0.10.0
78
55
  - !ruby/object:Gem::Dependency
79
56
  name: guard-rspec
80
57
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
58
  requirements:
83
- - - ! '>='
59
+ - - '>='
84
60
  - !ruby/object:Gem::Version
85
61
  version: 0.6.0
86
62
  type: :development
87
63
  prerelease: false
88
64
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
65
  requirements:
91
- - - ! '>='
66
+ - - '>='
92
67
  - !ruby/object:Gem::Version
93
68
  version: 0.6.0
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: rb-fsevent
96
71
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
72
  requirements:
99
73
  - - ~>
100
74
  - !ruby/object:Gem::Version
@@ -102,7 +76,6 @@ dependencies:
102
76
  type: :development
103
77
  prerelease: false
104
78
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
79
  requirements:
107
80
  - - ~>
108
81
  - !ruby/object:Gem::Version
@@ -110,7 +83,6 @@ dependencies:
110
83
  - !ruby/object:Gem::Dependency
111
84
  name: oj
112
85
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
86
  requirements:
115
87
  - - ~>
116
88
  - !ruby/object:Gem::Version
@@ -118,15 +90,27 @@ dependencies:
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
93
  requirements:
123
94
  - - ~>
124
95
  - !ruby/object:Gem::Version
125
96
  version: 2.0.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: pg
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: pry
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ~>
140
123
  - !ruby/object:Gem::Version
@@ -142,7 +125,6 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: factory_girl
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - ~>
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - ~>
156
137
  - !ruby/object:Gem::Version
@@ -158,7 +139,6 @@ dependencies:
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: faker
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - ~>
164
144
  - !ruby/object:Gem::Version
@@ -166,12 +146,11 @@ dependencies:
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - ~>
172
151
  - !ruby/object:Gem::Version
173
152
  version: 1.1.2
174
- description: ! "Surus accelerates ActiveRecord with PostgreSQL specific types and\n
153
+ description: "Surus accelerates ActiveRecord with PostgreSQL specific types and\n
175
154
  \ functionality. It enables indexed searching of serialized arrays
176
155
  and hashes.\n It also can control PostgreSQL synchronous commit
177
156
  behavior. By relaxing\n PostgreSQL's durability guarantee, transaction
@@ -209,11 +188,13 @@ files:
209
188
  - lib/surus/array/integer_serializer.rb
210
189
  - lib/surus/array/scope.rb
211
190
  - lib/surus/array/text_serializer.rb
191
+ - lib/surus/hstore/connection_adapters.rb
212
192
  - lib/surus/hstore/scope.rb
213
193
  - lib/surus/hstore/serializer.rb
214
194
  - lib/surus/json/array_agg_query.rb
215
195
  - lib/surus/json/association_scope_builder.rb
216
196
  - lib/surus/json/belongs_to_scope_builder.rb
197
+ - lib/surus/json/connection_adapters.rb
217
198
  - lib/surus/json/has_and_belongs_to_many_scope_builder.rb
218
199
  - lib/surus/json/has_many_scope_builder.rb
219
200
  - lib/surus/json/model.rb
@@ -240,27 +221,26 @@ files:
240
221
  - tmp/rspec_guard_result
241
222
  homepage: https://github.com/JackC/surus
242
223
  licenses: []
224
+ metadata: {}
243
225
  post_install_message:
244
226
  rdoc_options: []
245
227
  require_paths:
246
228
  - lib
247
229
  required_ruby_version: !ruby/object:Gem::Requirement
248
- none: false
249
230
  requirements:
250
- - - ! '>='
231
+ - - '>='
251
232
  - !ruby/object:Gem::Version
252
233
  version: '0'
253
234
  required_rubygems_version: !ruby/object:Gem::Requirement
254
- none: false
255
235
  requirements:
256
- - - ! '>='
236
+ - - '>='
257
237
  - !ruby/object:Gem::Version
258
238
  version: '0'
259
239
  requirements: []
260
240
  rubyforge_project: ''
261
- rubygems_version: 1.8.23
241
+ rubygems_version: 2.0.0
262
242
  signing_key:
263
- specification_version: 3
243
+ specification_version: 4
264
244
  summary: PostgreSQL Acceleration for ActiveRecord
265
245
  test_files:
266
246
  - spec/array/decimal_serializer_spec.rb
@@ -277,3 +257,4 @@ test_files:
277
257
  - spec/spec_helper.rb
278
258
  - spec/synchronous_commit/connection_spec.rb
279
259
  - spec/synchronous_commit/model_spec.rb
260
+ has_rdoc: