Class: Mongoid::SleepingKingStudios::Orderable::Metadata

Inherits:
Concern::Metadata show all
Defined in:
lib/mongoid/sleeping_king_studios/orderable/metadata.rb

Overview

Stores information about an Orderable concern.

Since:

  • 0.7.0

Instance Attribute Summary

Attributes inherited from Concern::Metadata

#name, #properties

Instance Method Summary collapse

Methods inherited from Concern::Metadata

#characterize, #relation_key, #relation_key?

Constructor Details

#initialize(name, properties = {}) ⇒ Metadata

Returns a new instance of Metadata.

Parameters:

  • name (Symbol, String)

    The name of the concern or relation.

  • properties (Hash) (defaults to: {})

    The properties of the concern or relation.

Since:

  • 0.7.0



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 11

def initialize name, properties = {}
  super

  self[:sort_params] = case properties[:sort_params]
  when Array
    properties[:sort_params].reduce({}) do |hsh, param|
      hsh.merge parse_sort_param(param)
    end # each
  when Hash
    properties[:sort_params].each.with_object({}) do |(key, value), hsh|
      hsh[key] = parse_sort_direction(value)
    end # each
  when Symbol, Origin::Key
    parse_sort_param(properties[:sort_params])
  end # case
end

Instance Method Details

#field_nameSymbol

The name of the field used to store the order.

Returns:

  • (Symbol)

    The field name.

Since:

  • 0.7.0



31
32
33
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 31

def field_name
  fetch(:as, default_field_name).intern
end

#field_name?Boolean

false.

Returns:

  • (Boolean)

    True if a custom field name is defined; otherwise

Since:

  • 0.7.0



37
38
39
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 37

def field_name?
  !!self[:as]
end

#field_wasSymbol

The name of the dirty tracking method for the order field.

Returns:

  • (Symbol)

    The method name.

Since:

  • 0.7.0



44
45
46
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 44

def field_was
  :"#{field_name}_was"
end

#field_writerSymbol

The name of the writer for the order field.

Returns:

  • (Symbol)

    The method name.

Since:

  • 0.7.0



51
52
53
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 51

def field_writer
  :"#{field_name}="
end

#filter_criteria(criteria) ⇒ Mongoid::Criteria

The criteria to filter only the desired collection items to sort.

Parameters:

  • criteria (Mongoid::Criteria)

    The base criteria to modify using the filter params.

Returns:

  • (Mongoid::Criteria)

Since:

  • 0.7.0



61
62
63
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 61

def filter_criteria criteria
  filter_params? ? criteria.where(filter_params) : criteria
end

#filter_paramsHash

The options (if any) to filter the collection by prior to sorting.

Returns:

  • (Hash)

Since:

  • 0.7.0



68
69
70
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 68

def filter_params
  self[:filter]
end

#filter_params?Boolean

Returns True if filter params are defined; otherwise false.

Returns:

  • (Boolean)

    True if filter params are defined; otherwise false.

Since:

  • 0.7.0



73
74
75
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 73

def filter_params?
  !!self[:filter]
end

#sort_criteria(criteria) ⇒ Mongoid::Criteria

The criteria to be used when sorting the collection.

Parameters:

  • criteria (Mongoid::Criteria)

    The base criteria to modify using the sort params.

Returns:

  • (Mongoid::Criteria)

Since:

  • 0.7.0



83
84
85
# File 'lib/mongoid/sleeping_king_studios/orderable/metadata.rb', line 83

def sort_criteria criteria
  filter_criteria(criteria).order_by(self[:sort_params])
end