Class: Ordy::Orm::ActiveRecord::Orderable::Order
- Inherits:
-
Object
- Object
- Ordy::Orm::ActiveRecord::Orderable::Order
- Includes:
- Enumerable
- Defined in:
- lib/ordy/orm/active_record/orderable.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- DELIMITER =
'-'.freeze
Instance Attribute Summary collapse
-
#default(name = nil, &block) ⇒ Object
readonly
default do order_by_specified(:state).order_by(started: :desc, created_at: :desc) end.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
Instance Method Summary collapse
- #[](key) ⇒ Object
-
#associations(associations) ⇒ Object
associations comment: :scripts.
-
#columns(*column_names) ⇒ Object
columns :name, :email.
- #each(&block) ⇒ Object
-
#initialize(model) ⇒ Order
constructor
A new instance of Order.
-
#query(query, &block) ⇒ Object
query :users do |scope, args| scope.where(…).order(field: args) end.
-
#specified(args) ⇒ Object
specified(state: %w(new pending_migration migrating failed)).
Constructor Details
#initialize(model) ⇒ Order
Returns a new instance of Order.
17 18 19 20 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 17 def initialize(model) @model = model @orderables = {} end |
Instance Attribute Details
#default(name = nil, &block) ⇒ Object (readonly)
default do
order_by_specified(:state).order_by(started: :desc, created_at: :desc)
end
89 90 91 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 89 def default @default end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
14 15 16 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 14 def model @model end |
Instance Method Details
#[](key) ⇒ Object
26 27 28 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 26 def [](key) @orderables.fetch(key) end |
#associations(associations) ⇒ Object
associations comment: :scripts
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 43 def associations(associations) associations.each do |assoc, opts| column, association = if opts.is_a?(Hash) [opts.fetch(:column), opts.fetch(:as, assoc)] else [opts, assoc] end table_name = model.reflections.symbolize_keys.fetch(assoc).class_name.constantize.table_name @orderables[association] = { args: { association: association, table: table_name, column: column }, orderable: Orderable::ByAssociation } end end |
#columns(*column_names) ⇒ Object
columns :name, :email
33 34 35 36 37 38 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 33 def columns(*column_names) column_names.each do |column| @orderables[column] = { args: { table: model.table_name, column: column }, orderable: Orderable::ByColumn } end end |
#each(&block) ⇒ Object
22 23 24 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 22 def each(&block) @orderables.each(&block) end |
#query(query, &block) ⇒ Object
query :users do |scope, args|
scope.where(...).order(field: args[:direction])
end
79 80 81 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 79 def query(query, &block) @orderables[query] = { args: {}, orderable: block } end |
#specified(args) ⇒ Object
specified(state: %w(new pending_migration migrating failed))
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/ordy/orm/active_record/orderable.rb', line 62 def specified(args) args.each do |column, values| specified_column = "specified_#{column}".to_sym @orderables[specified_column] = { args: { table: model.table_name, column: column, values: values }, orderable: Orderable::BySpecified } end end |