fake_arel 1.4.0 → 1.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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.5.0
data/fake_arel.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fake_arel"
8
- s.version = "1.4.0"
8
+ s.version = "1.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Grant Ammons"]
12
- s.date = "2013-11-27"
12
+ s.date = "2014-02-04"
13
13
  s.description = "fake_arel will simulate rails 3 arel syntax for Rails 2."
14
14
  s.email = "grant@pipelinedealsco.com"
15
15
  s.extra_rdoc_files = [
@@ -17,6 +17,11 @@ module ActiveRecord
17
17
  scopes[name].call(self, *args)
18
18
  end
19
19
  end
20
+
21
+ # make all arguments optional, like Rails 3
22
+ def scoped(scope = {}, &block)
23
+ ActiveRecord::NamedScope::Scope.new(self, scope, &block)
24
+ end
20
25
  end
21
26
 
22
27
  class Scope
@@ -60,6 +60,32 @@ module Rails3Finders
60
60
  end
61
61
  named_scope :or, __or_fn
62
62
 
63
+ # returns a new scope, having removed the options mentioned
64
+ # does *not* support extended scopes
65
+ def self.except(*options)
66
+ # include is renamed to includes in Rails 3
67
+ includes = options.delete(:includes)
68
+ options << :include if includes
69
+
70
+ new_options = (scope(:find) || {}).reject { |k, v| options.include?(k) }
71
+ with_exclusive_scope(:find => new_options) { scoped }
72
+ end
73
+
74
+ # returns a new scope, with just the order replaced
75
+ # does *not* support extended scopes
76
+ def self.reorder(*order)
77
+ new_options = (scope(:find) || {}).dup
78
+ new_options[:order] = order.flatten.join(',')
79
+ with_exclusive_scope(:find =>new_options) { scoped }
80
+ end
81
+
82
+ def self.pluck(column)
83
+ new_options = (scope(:find) || {}).dup
84
+ new_options[:select] = "#{quoted_table_name}.#{column}"
85
+ new_options.delete(:include)
86
+ with_exclusive_scope(:find => new_options) { all.map(&column) }
87
+ end
88
+
63
89
  def self.fakearel_find_each(options = {:batch_size => 1000}, &block)
64
90
  count = self.scoped({}).count
65
91
  offset = 0
@@ -63,7 +63,7 @@ module WithScopeReplacement
63
63
  hash[method][key] = merge_joins(params[key], hash[method][key])
64
64
  # see https://rails.lighthouseapp.com/projects/8994/tickets/2810-with_scope-should-accept-and-use-order-option
65
65
  # it works now in reverse order to comply with ActiveRecord 3
66
- elsif key == :order && merge && !default_scoping.any?{ |s| s[method].keys.include?(key) }
66
+ elsif [:group, :order].include?(key) && merge && !default_scoping.any?{ |s| s[method].keys.include?(key) }
67
67
  hash[method][key] = [hash[method][key], params[key]].select{|o| !o.blank?}.join(', ')
68
68
  else
69
69
  hash[method][key] = hash[method][key] || params[key]
@@ -95,6 +95,18 @@ describe "Fake Arel" do
95
95
  Reply.group(:topic_id).map(&:topic_id).sort.should == [1, 2, 4].sort
96
96
  end
97
97
 
98
+ it "should support pluck" do
99
+ Reply.where(:id => 5).pluck(:id).should == [5]
100
+ end
101
+
102
+ it "should support reorder" do
103
+ Reply.where(:id => [4, 5]).order("id DESC").reorder("id").pluck(:id).should == [4, 5]
104
+ end
105
+
106
+ it "should support except" do
107
+ Reply.select(:id).except(:select).first.created_at.should_not == nil
108
+ end
109
+
98
110
  it "should properly chain order scope in definitions" do
99
111
  Reply.topic_4_id_asc.all.should == Reply.find(:all, :conditions => {:topic_id => 4}, :order=>'id asc')
100
112
  Reply.topic_4_id_desc.all.should == Reply.find(:all, :conditions => {:topic_id => 4}, :order=>'id desc')
@@ -156,6 +168,10 @@ describe "Fake Arel" do
156
168
  }
157
169
  end
158
170
 
171
+ it "should properly chain with group" do
172
+ Topic.group(:john).group(:doe).scope(:find, :group).should == 'john, doe'
173
+ end
174
+
159
175
  it "should respond to scoped" do
160
176
  Reply.scoped({}).class.should == ActiveRecord::NamedScope::Scope
161
177
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fake_arel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-27 00:00:00.000000000 Z
12
+ date: 2014-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -192,7 +192,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
192
  version: '0'
193
193
  segments:
194
194
  - 0
195
- hash: 3633317675981731964
195
+ hash: -1479168766933848698
196
196
  required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  none: false
198
198
  requirements: