surus 0.4.2 → 0.5.0

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.
@@ -2,12 +2,11 @@ module Surus
2
2
  module JSON
3
3
  class HasManyScopeBuilder < AssociationScopeBuilder
4
4
  def scope
5
- association_scope = association
5
+ s = association
6
6
  .klass
7
7
  .where("#{outside_primary_key}=#{association_foreign_key}")
8
- association_scope = association_scope.where(conditions) if conditions
9
- association_scope = association_scope.order(order) if order
10
- association_scope
8
+ s = s.instance_eval(&association.scope) if association.scope
9
+ s
11
10
  end
12
11
 
13
12
  def outside_primary_key
@@ -7,7 +7,7 @@ module Surus
7
7
  end
8
8
 
9
9
  def all_json(options={})
10
- sql = ArrayAggQuery.new(scoped, options).to_sql
10
+ sql = ArrayAggQuery.new(all, options).to_sql
11
11
  connection.select_value sql
12
12
  end
13
13
  end
@@ -1,3 +1,3 @@
1
1
  module Surus
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -14,17 +14,17 @@ describe Surus::Array::Scope do
14
14
  end
15
15
 
16
16
  context "with one element" do
17
- subject { TextArrayRecord.array_has(:texts, "b").all }
17
+ subject { TextArrayRecord.array_has(:texts, "b") }
18
18
  shared_examples
19
19
  end
20
20
 
21
21
  context "with array of elements" do
22
- subject { TextArrayRecord.array_has(:texts, ["a", "b"]).all }
22
+ subject { TextArrayRecord.array_has(:texts, ["a", "b"]) }
23
23
  shared_examples
24
24
  end
25
25
 
26
26
  context "with multiple elements" do
27
- subject { TextArrayRecord.array_has(:texts, "a", "b").all }
27
+ subject { TextArrayRecord.array_has(:texts, "a", "b") }
28
28
  shared_examples
29
29
  end
30
30
  end
@@ -40,17 +40,17 @@ describe Surus::Array::Scope do
40
40
  end
41
41
 
42
42
  context "with one element" do
43
- subject { TextArrayRecord.array_has_any(:texts, "b").all }
43
+ subject { TextArrayRecord.array_has_any(:texts, "b") }
44
44
  shared_examples
45
45
  end
46
46
 
47
47
  context "with array of elements" do
48
- subject { TextArrayRecord.array_has_any(:texts, ["b", "c"]).all }
48
+ subject { TextArrayRecord.array_has_any(:texts, ["b", "c"]) }
49
49
  shared_examples
50
50
  end
51
51
 
52
52
  context "with multiple elements" do
53
- subject { TextArrayRecord.array_has_any(:texts, "b", "c").all }
53
+ subject { TextArrayRecord.array_has_any(:texts, "b", "c") }
54
54
  shared_examples
55
55
  end
56
56
  end
@@ -7,69 +7,69 @@ describe Surus::Hstore::Scope do
7
7
  let!(:match) { HstoreRecord.create! :properties => { "a" => "1", "b" => "2", "c" => "3" } }
8
8
  let!(:missing_key) { HstoreRecord.create! :properties => { "a" => "1", "c" => "3" } }
9
9
  let!(:wrong_value) { HstoreRecord.create! :properties => { "a" => "1", "b" => "5" } }
10
-
11
- subject { HstoreRecord.hstore_has_pairs(:properties, "a" => "1", "b" => "2").all }
12
-
10
+
11
+ subject { HstoreRecord.hstore_has_pairs(:properties, "a" => "1", "b" => "2") }
12
+
13
13
  it { should include(match) }
14
14
  it { should_not include(missing_key) }
15
15
  it { should_not include(wrong_value) }
16
16
  it { should_not include(empty) }
17
17
  end
18
-
18
+
19
19
  context "hstore_has_key" do
20
20
  let!(:match) { HstoreRecord.create! :properties => { "a" => "1", "b" => "2" } }
21
21
  let!(:missing_key) { HstoreRecord.create! :properties => { "a" => "1", "c" => "3" } }
22
-
23
- subject { HstoreRecord.hstore_has_key(:properties, "b").all }
22
+
23
+ subject { HstoreRecord.hstore_has_key(:properties, "b") }
24
24
 
25
25
  it { should include(match) }
26
26
  it { should_not include(missing_key) }
27
27
  it { should_not include(empty) }
28
28
  end
29
-
29
+
30
30
  context "hstore_has_all_keys" do
31
31
  let!(:match) { HstoreRecord.create! :properties => { "a" => "1", "b" => "2", "c" => "3" } }
32
32
  let!(:missing_one_key) { HstoreRecord.create! :properties => { "b" => "2", "c" => "3" } }
33
33
  let!(:missing_all_keys) { HstoreRecord.create! :properties => { "f" => "1", "g" => "2" } }
34
-
34
+
35
35
  def self.shared_examples
36
36
  it { should include(match) }
37
37
  it { should_not include(missing_one_key) }
38
38
  it { should_not include(missing_all_keys) }
39
- it { should_not include(empty) }
39
+ it { should_not include(empty) }
40
40
  end
41
-
41
+
42
42
  context "with array of keys" do
43
- subject { HstoreRecord.hstore_has_all_keys(:properties, ["a", "b"]).all }
43
+ subject { HstoreRecord.hstore_has_all_keys(:properties, ["a", "b"]) }
44
44
  shared_examples
45
45
  end
46
-
46
+
47
47
  context "with multiple key arguments" do
48
- subject { HstoreRecord.hstore_has_all_keys(:properties, "a", "b").all }
48
+ subject { HstoreRecord.hstore_has_all_keys(:properties, "a", "b") }
49
49
  shared_examples
50
50
  end
51
51
  end
52
-
52
+
53
53
  context "hstore_has_any_key" do
54
54
  let!(:match_1) { HstoreRecord.create! :properties => { "a" => "1", "c" => "3" } }
55
55
  let!(:match_2) { HstoreRecord.create! :properties => { "b" => "2", "d" => "4" } }
56
56
  let!(:missing_all_keys) { HstoreRecord.create! :properties => { "c" => "3", "d" => "4" } }
57
-
57
+
58
58
  def self.shared_examples
59
59
  it { should include(match_1) }
60
60
  it { should include(match_2) }
61
61
  it { should_not include(missing_all_keys) }
62
- it { should_not include(empty) }
63
- it { should_not include(empty) }
62
+ it { should_not include(empty) }
63
+ it { should_not include(empty) }
64
64
  end
65
-
65
+
66
66
  context "with array of keys" do
67
- subject { HstoreRecord.hstore_has_any_keys(:properties, ["a", "b"]).all }
67
+ subject { HstoreRecord.hstore_has_any_keys(:properties, ["a", "b"]) }
68
68
  shared_examples
69
69
  end
70
-
70
+
71
71
  context "with multiple key arguments" do
72
- subject { HstoreRecord.hstore_has_any_keys(:properties, "a", "b").all }
72
+ subject { HstoreRecord.hstore_has_any_keys(:properties, "a", "b") }
73
73
  shared_examples
74
74
  end
75
75
  end
@@ -12,35 +12,21 @@ class HstoreRecord < ActiveRecord::Base
12
12
  end
13
13
 
14
14
  class TextArrayRecord < ActiveRecord::Base
15
- serialize :texts, Surus::Array::TextSerializer.new
16
15
  end
17
16
 
18
17
  class VarcharArrayRecord < ActiveRecord::Base
19
- serialize :varchars, Surus::Array::TextSerializer.new
20
- end
21
-
22
- class IntegerArrayRecord < ActiveRecord::Base
23
- serialize :integers, Surus::Array::IntegerSerializer.new
24
- end
25
-
26
- class FloatArrayRecord < ActiveRecord::Base
27
- serialize :floats, Surus::Array::FloatSerializer.new
28
- end
29
-
30
- class DecimalArrayRecord < ActiveRecord::Base
31
- serialize :decimals, Surus::Array::DecimalSerializer.new
32
18
  end
33
19
 
34
20
  class User < ActiveRecord::Base
35
21
  has_many :posts, foreign_key: :author_id
36
22
  has_many :posts_with_order,
23
+ -> { order 'posts.id desc' },
37
24
  foreign_key: :author_id,
38
- class_name: 'Post',
39
- order: 'posts.id desc'
25
+ class_name: 'Post'
40
26
  has_many :posts_with_conditions,
27
+ -> { where subject: 'foo' },
41
28
  foreign_key: :author_id,
42
- class_name: 'Post',
43
- conditions: {subject: 'foo'}
29
+ class_name: 'Post'
44
30
  end
45
31
 
46
32
  class Forum < ActiveRecord::Base
@@ -51,9 +37,9 @@ class Post < ActiveRecord::Base
51
37
  belongs_to :forum
52
38
  belongs_to :author, class_name: 'User'
53
39
  belongs_to :forum_with_impossible_conditions,
40
+ -> { where '1=2' },
54
41
  foreign_key: :forum_id,
55
- class_name: 'Forum',
56
- conditions: '1=2'
42
+ class_name: 'Forum'
57
43
  has_and_belongs_to_many :tags
58
44
  end
59
45
 
@@ -23,7 +23,7 @@ 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 'activerecord', "~> 3.1"
26
+ s.add_dependency 'activerecord', "~> 4.0"
27
27
 
28
28
  s.add_development_dependency 'rspec', "~> 2.12.0"
29
29
  s.add_development_dependency 'guard', ">= 0.10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Christensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-21 00:00:00.000000000 Z
11
+ date: 2013-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '3.1'
19
+ version: '4.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
- version: '3.1'
26
+ version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -169,32 +169,21 @@ files:
169
169
  - LICENSE
170
170
  - README.md
171
171
  - Rakefile
172
- - bench/array_create.rb
173
- - bench/array_find.rb
174
- - bench/array_serialize.rb
175
172
  - bench/benchmark_helper.rb
176
173
  - bench/database.yml
177
174
  - bench/database_structure.sql
178
- - bench/hstore_create.rb
179
175
  - bench/hstore_find.rb
180
- - bench/hstore_serialize.rb
181
176
  - bench/json_generation.rb
182
177
  - bench/synchronous_commit.rb
183
178
  - lib/generators/surus/hstore/install_generator.rb
184
179
  - lib/generators/surus/hstore/templates/install_hstore.rb
185
180
  - lib/surus.rb
186
- - lib/surus/array/decimal_serializer.rb
187
- - lib/surus/array/float_serializer.rb
188
- - lib/surus/array/integer_serializer.rb
189
181
  - lib/surus/array/scope.rb
190
- - lib/surus/array/text_serializer.rb
191
- - lib/surus/hstore/connection_adapters.rb
192
182
  - lib/surus/hstore/scope.rb
193
183
  - lib/surus/hstore/serializer.rb
194
184
  - lib/surus/json/array_agg_query.rb
195
185
  - lib/surus/json/association_scope_builder.rb
196
186
  - lib/surus/json/belongs_to_scope_builder.rb
197
- - lib/surus/json/connection_adapters.rb
198
187
  - lib/surus/json/has_and_belongs_to_many_scope_builder.rb
199
188
  - lib/surus/json/has_many_scope_builder.rb
200
189
  - lib/surus/json/model.rb
@@ -203,11 +192,7 @@ files:
203
192
  - lib/surus/synchronous_commit/connection.rb
204
193
  - lib/surus/synchronous_commit/model.rb
205
194
  - lib/surus/version.rb
206
- - spec/array/decimal_serializer_spec.rb
207
- - spec/array/float_serializer_spec.rb
208
- - spec/array/integer_serializer_spec.rb
209
195
  - spec/array/scope_spec.rb
210
- - spec/array/text_serializer_spec.rb
211
196
  - spec/database.yml
212
197
  - spec/database_structure.sql
213
198
  - spec/factories.rb
@@ -238,16 +223,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
223
  version: '0'
239
224
  requirements: []
240
225
  rubyforge_project: ''
241
- rubygems_version: 2.0.0
226
+ rubygems_version: 2.0.3
242
227
  signing_key:
243
228
  specification_version: 4
244
229
  summary: PostgreSQL Acceleration for ActiveRecord
245
230
  test_files:
246
- - spec/array/decimal_serializer_spec.rb
247
- - spec/array/float_serializer_spec.rb
248
- - spec/array/integer_serializer_spec.rb
249
231
  - spec/array/scope_spec.rb
250
- - spec/array/text_serializer_spec.rb
251
232
  - spec/database.yml
252
233
  - spec/database_structure.sql
253
234
  - spec/factories.rb
@@ -1,46 +0,0 @@
1
- require 'benchmark_helper'
2
-
3
- options = {}
4
- optparse = OptionParser.new do |opts|
5
- options[:records] = 1000
6
- opts.on '-r NUM', '--records NUM', Integer, 'Number of records to create' do |n|
7
- options[:records] = n
8
- end
9
-
10
- options[:elements] = 10
11
- opts.on '-e NUM', '--elements NUM', Integer, 'Number of elements' do |n|
12
- options[:elements] = n
13
- end
14
- end
15
-
16
- optparse.parse!
17
-
18
- clean_database
19
-
20
- num_records = options[:records]
21
- num_elements = options[:elements]
22
-
23
- arrays = num_records.times.map do
24
- num_elements.times.map { SecureRandom.hex(4) }
25
- end
26
-
27
- puts
28
- puts "Writing #{num_records} records with a #{num_elements} element string array"
29
-
30
- Benchmark.bm(8) do |x|
31
- x.report("Surus") do
32
- SurusKeyValueRecord.transaction do
33
- num_records.times do |i|
34
- SurusTextArrayRecord.create! :names => arrays[i]
35
- end
36
- end
37
- end
38
-
39
- x.report("YAML") do
40
- YamlKeyValueRecord.transaction do
41
- num_records.times do |i|
42
- YamlArrayRecord.create! :names => arrays[i]
43
- end
44
- end
45
- end
46
- end
@@ -1,79 +0,0 @@
1
- require 'benchmark_helper'
2
-
3
- options = {}
4
- optparse = OptionParser.new do |opts|
5
- options[:records] = 2_000
6
- opts.on '-r NUM', '--records NUM', Integer, 'Number of records to create' do |n|
7
- options[:records] = n
8
- end
9
-
10
- options[:elements] = 10
11
- opts.on '-e NUM', '--elements NUM', Integer, 'Number of elements per array' do |n|
12
- options[:elements] = n
13
- end
14
-
15
- options[:finds] = 200
16
- opts.on '-f NUM', '--finds NUM', Integer, 'Number of finds to perform' do |n|
17
- options[:finds] = n
18
- end
19
-
20
- options[:yaml] = false
21
- opts.on '-y', '--yaml', 'Include YAML in benchmark (VERY SLOW!)' do
22
- options[:yaml] = true
23
- end
24
- end
25
-
26
- optparse.parse!
27
-
28
- clean_database
29
-
30
- num_records = options[:records]
31
- num_elements = options[:elements]
32
- num_finds = options[:finds]
33
- yaml = options[:yaml]
34
-
35
- puts "Skipping YAML test. Use -y to enable (VERY SLOW!)" unless yaml
36
-
37
- arrays = num_records.times.map do
38
- num_elements.times.map { SecureRandom.hex(4) }
39
- end
40
-
41
- print "Creating Surus test data... "
42
- SurusKeyValueRecord.transaction do
43
- num_records.times do |i|
44
- SurusTextArrayRecord.create! :names => arrays[i]
45
- end
46
- end
47
- puts "Done."
48
-
49
- if yaml
50
- print "Creating YAML test data... "
51
- YamlArrayRecord.transaction do
52
- num_records.times do |i|
53
- YamlArrayRecord.create! :names => arrays[i]
54
- end
55
- end
56
- puts "Done."
57
- end
58
-
59
- puts
60
- puts "#{num_records} records with #{num_elements} element arrays"
61
- puts "Finding all where array includes value #{num_finds} times"
62
-
63
- values_to_find = arrays.sample(num_finds).map { |a| a.sample }
64
-
65
- Benchmark.bm(8) do |x|
66
- x.report("Surus") do
67
- values_to_find.each do |value_to_find|
68
- SurusTextArrayRecord.array_has(:names, value_to_find).all
69
- end
70
- end
71
-
72
- if yaml
73
- x.report("YAML") do
74
- values_to_find.each do |value_to_find|
75
- YamlArrayRecord.all.select { |r| r.names.include?(value_to_find) }
76
- end
77
- end
78
- end
79
- end