Class: OrderQuery::Space
- Inherits:
-
Object
- Object
- OrderQuery::Space
- Defined in:
- lib/order_query/space.rb
Overview
Order specification and a scope
Instance Attribute Summary collapse
- #columns ⇒ Array<OrderQuery::Column> readonly
Instance Method Summary collapse
- #at(record) ⇒ Point
- #first ⇒ ActiveRecord::Base
-
#initialize(base_scope, order_spec) ⇒ Space
constructor
A new instance of Space.
- #inspect ⇒ Object
- #last ⇒ ActiveRecord::Base
-
#scope ⇒ ActiveRecord::Relation
Scope ordered by columns.
-
#scope_reverse ⇒ ActiveRecord::Relation
Scope ordered by columns in reverse.
Constructor Details
#initialize(base_scope, order_spec) ⇒ Space
Returns a new instance of Space.
12 13 14 15 16 17 18 19 20 21 |
# File 'lib/order_query/space.rb', line 12 def initialize(base_scope, order_spec) @base_scope = base_scope @columns = order_spec.map { |cond_spec| Column.new(cond_spec, base_scope) } # add primary key if columns are not unique unless @columns.last.unique? raise ArgumentError.new('Unique column must be last') if @columns.detect(&:unique?) @columns << Column.new([base_scope.primary_key], base_scope) end @order_by_sql = SQL::OrderBy.new(@columns) end |
Instance Attribute Details
#columns ⇒ Array<OrderQuery::Column> (readonly)
7 8 9 |
# File 'lib/order_query/space.rb', line 7 def columns @columns end |
Instance Method Details
#at(record) ⇒ Point
24 25 26 |
# File 'lib/order_query/space.rb', line 24 def at(record) Point.new(record, self) end |
#first ⇒ ActiveRecord::Base
39 40 41 |
# File 'lib/order_query/space.rb', line 39 def first scope.first end |
#inspect ⇒ Object
48 49 50 |
# File 'lib/order_query/space.rb', line 48 def inspect "#<OrderQuery::Space @columns=#{@columns.inspect} @base_scope=#{@base_scope.inspect}>" end |
#last ⇒ ActiveRecord::Base
44 45 46 |
# File 'lib/order_query/space.rb', line 44 def last scope_reverse.first end |
#scope ⇒ ActiveRecord::Relation
Returns scope ordered by columns.
29 30 31 |
# File 'lib/order_query/space.rb', line 29 def scope @scope ||= @base_scope.order(@order_by_sql.build) end |
#scope_reverse ⇒ ActiveRecord::Relation
Returns scope ordered by columns in reverse.
34 35 36 |
# File 'lib/order_query/space.rb', line 34 def scope_reverse @scope_reverse ||= @base_scope.order(@order_by_sql.build_reverse) end |