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.
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/order_query/space.rb', line 11 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
23 24 25 |
# File 'lib/order_query/space.rb', line 23 def at(record) Point.new(record, self) end |
#first ⇒ ActiveRecord::Base
38 39 40 |
# File 'lib/order_query/space.rb', line 38 def first scope.first end |
#inspect ⇒ Object
49 50 51 |
# File 'lib/order_query/space.rb', line 49 def inspect "#<OrderQuery::Space @columns=#{@columns.inspect} @base_scope=#{@base_scope.inspect}>" end |
#last ⇒ ActiveRecord::Base
43 44 45 |
# File 'lib/order_query/space.rb', line 43 def last scope_reverse.first end |
#scope ⇒ ActiveRecord::Relation
Returns scope ordered by columns.
28 29 30 |
# File 'lib/order_query/space.rb', line 28 def scope @scope ||= @base_scope.order(@order_by_sql.build) end |
#scope_reverse ⇒ ActiveRecord::Relation
Returns scope ordered by columns in reverse.
33 34 35 |
# File 'lib/order_query/space.rb', line 33 def scope_reverse @scope_reverse ||= @base_scope.order(@order_by_sql.build_reverse) end |