Class: Ordy::Orm::ActiveRecord::Orderable::Order

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(model) ⇒ Order

Returns a new instance of Order.

Parameters:

  • model (ActiveRecord::Model)


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

Parameters:

  • name (Symbol) (defaults to: nil)
  • block (Proc)


89
90
91
# File 'lib/ordy/orm/active_record/orderable.rb', line 89

def default
  @default
end

#modelObject (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

Parameters:

  • [Hash] (Array)

    associations



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

Parameters:

  • [Symbol] (Array)

    column_names



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

Parameters:

  • query (Symbol)
  • block (Proc)


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))

Parameters:

  • [Hash] (Array)

    args



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