nobrainer 0.25.0 → 0.25.1

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: 950e98b70408c2d1fc05a6ee2e80f1f3e942999b
4
- data.tar.gz: 5b4ec8da15e3d9f48e1729f07cd336af12c27433
3
+ metadata.gz: 71e9e6216a8508d483d0c0769b6d8f5137b5f2c2
4
+ data.tar.gz: 91cc415c1d35b3120fc94edfc322bdc30652aa30
5
5
  SHA512:
6
- metadata.gz: 3719c006243290324956ec397d700cae2766598460423199bfc9ed3f731761b2d6fceec50365f2a839099b2edc3fb751aa88984a349aab4ef2132b6547444f09
7
- data.tar.gz: 02bc9ef3d13a887305d6fdd81a7f1eebd296a63c206f9347bce5e8078f3af71c36e625d9ebe5ac0ce55a93da24b5760842ef3e2b6e55738d38df189d6384c731
6
+ metadata.gz: b4a4656ab19c63e12e194b3c90dd7f25ffc806cfefee029a352e22deccca5908029bf06f14af097d8ebd069ef5eb0a923550d7411dc520fdb2fa8ef2e34378d6
7
+ data.tar.gz: 37f77aef1ca56aeda705659162bab344f4c1e6495ea0c9fe5682ac7a3276eaee642b9313153ecbb80caf839054a499db19c3dd20eb144820ea0a9a97cf1e7f50
@@ -4,6 +4,6 @@ class NoBrainer::Criteria
4
4
  extend NoBrainer::Autoload
5
5
  autoload_and_include :Core, :Run, :Raw, :Scope, :AfterFind, :Where, :OrderBy,
6
6
  :Limit, :Pluck, :Count, :Delete, :Enumerable, :Find,
7
- :First, :FirstOrCreate, :Aggregate, :EagerLoad, :Update,
8
- :Cache, :Index, :Extend
7
+ :First, :FirstOrCreate, :Changes, :Aggregate, :EagerLoad,
8
+ :Update, :Cache, :Index, :Extend
9
9
  end
@@ -0,0 +1,16 @@
1
+ module NoBrainer::Criteria::Changes
2
+ extend ActiveSupport::Concern
3
+
4
+ def changes(*args)
5
+ return finalized_criteria.changes(*args) unless finalized?
6
+
7
+ # We won't do any instantiations with attributes for now.
8
+ raise 'Please use .raw.changes()' unless raw?
9
+
10
+ # We can't have implicit sorting as eager streams are not
11
+ # supported by r.changes().
12
+ criteria = self
13
+ criteria = criteria.without_ordering if ordering_mode == :implicit
14
+ run { criteria.to_rql.changes(*args) }
15
+ end
16
+ end
@@ -2,7 +2,8 @@ module NoBrainer::Criteria::OrderBy
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  # The latest order_by() wins
5
- included { criteria_option :order_by, :ordering_mode, :merge_with => :set_scalar }
5
+ included { criteria_option :order_by, :ordering_mode, :reversed_ordering,
6
+ :merge_with => :set_scalar }
6
7
 
7
8
  def order_by(*rules, &block)
8
9
  # Note: We are relying on the fact that Hashes are ordered (since 1.9)
@@ -19,7 +20,8 @@ module NoBrainer::Criteria::OrderBy
19
20
 
20
21
  rules.keys.each { |k| model.ensure_valid_key!(k) unless k.is_a?(Proc) } if model
21
22
 
22
- chain(:order_by => rules, :ordering_mode => :normal)
23
+ chain(:order_by => rules, :ordering_mode => :explicit,
24
+ :reversed_ordering => false)
23
25
  end
24
26
 
25
27
  def without_ordering
@@ -27,12 +29,7 @@ module NoBrainer::Criteria::OrderBy
27
29
  end
28
30
 
29
31
  def reverse_order
30
- chain(:ordering_mode => case @options[:ordering_mode]
31
- when nil then :reversed
32
- when :normal then :reversed
33
- when :reversed then :normal
34
- when :disabled then :disabled
35
- end)
32
+ chain(:reversed_ordering => !@options[:reversed_ordering])
36
33
  end
37
34
 
38
35
  def order_by_indexed?
@@ -45,16 +42,21 @@ module NoBrainer::Criteria::OrderBy
45
42
 
46
43
  private
47
44
 
48
- def effective_order
49
- @options[:order_by].presence || (model ? {model.pk_name => :asc} : {})
45
+ def ordering_mode
46
+ @options[:ordering_mode] || :implicit
50
47
  end
51
48
 
52
49
  def reverse_order?
53
- @options[:ordering_mode] == :reversed
50
+ !!@options[:reversed_ordering]
54
51
  end
55
52
 
56
- def should_order?
57
- @options[:ordering_mode] != :disabled
53
+ def effective_order
54
+ # reversing the order happens later.
55
+ case ordering_mode
56
+ when :disabled then nil
57
+ when :explicit then @options[:order_by]
58
+ when :implicit then model && {model.pk_name => :asc}
59
+ end
58
60
  end
59
61
 
60
62
  class IndexFinder < Struct.new(:criteria, :index_name, :rql_proc)
@@ -63,7 +65,7 @@ module NoBrainer::Criteria::OrderBy
63
65
  end
64
66
 
65
67
  def first_key
66
- @first_key ||= criteria.__send__(:effective_order).first.try(:[], 0)
68
+ @first_key ||= criteria.__send__(:effective_order).to_a.first.try(:[], 0)
67
69
  end
68
70
 
69
71
  def first_key_indexable?
@@ -96,9 +98,8 @@ module NoBrainer::Criteria::OrderBy
96
98
 
97
99
  def compile_rql_pass1
98
100
  rql = super
99
- return rql unless should_order?
100
101
  _effective_order = effective_order
101
- return rql if _effective_order.empty?
102
+ return rql unless _effective_order.present?
102
103
 
103
104
  rql_rules = _effective_order.map do |k,v|
104
105
  if order_by_index_finder.index_name == k
@@ -29,6 +29,7 @@ module NoBrainer::Document::Criteria
29
29
  :first_or_create, :first_or_create!, # FirstOrCreate
30
30
  :min, :max, :sum, :avg, # Aggregate
31
31
  :update_all, :replace_all, # Update
32
+ :changes, # Changes
32
33
  :pluck, :without, :lazy_fetch, :without_plucking, # Pluck
33
34
  :find_by?, :find_by, :find_by!, :find?, :find, :find!, # Find
34
35
  :to => :all
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nobrainer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.0
4
+ version: 0.25.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Viennot
@@ -97,6 +97,7 @@ files:
97
97
  - lib/no_brainer/criteria/after_find.rb
98
98
  - lib/no_brainer/criteria/aggregate.rb
99
99
  - lib/no_brainer/criteria/cache.rb
100
+ - lib/no_brainer/criteria/changes.rb
100
101
  - lib/no_brainer/criteria/core.rb
101
102
  - lib/no_brainer/criteria/count.rb
102
103
  - lib/no_brainer/criteria/delete.rb