Class: Muster::Strategies::ActiveRecord

Inherits:
Rack
  • Object
show all
Defined in:
lib/muster/strategies/active_record.rb

Overview

Query string parsing strategy that outputs ActiveRecord Query compatible options

Examples:


strategy = Muster::Strategies::ActiveRecord.new
results  = strategy.parse('select=id,name&where=status:new&order=name:desc')

# { 'select' => ['id', 'name'], :where => {'status' => 'new}, :order => 'name desc' }
#
# Person.select( results[:select] ).where( results[:where] ).order( results[:order] )

Instance Attribute Summary

Attributes inherited from Rack

#fields, #options

Instance Method Summary collapse

Methods inherited from Rack

#fields_to_parse, #initialize, #parse_query_string

Constructor Details

This class inherits a constructor from Muster::Strategies::Rack

Instance Method Details

#parse(query_string) ⇒ Hash

Processes a query string and returns a hash of its fields/values

Examples:


results  = strategy.parse('select=id,name&where=status:new&order=name:desc')

# { 'select' => ['id', 'name'], :where => {'status' => 'new}, :order => 'name desc' }

Parameters:

  • query_string (String)

    the query string to parse

Returns:



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/muster/strategies/active_record.rb', line 34

def parse( query_string )
  pagination = self.parse_pagination( query_string )

  parameters = ActiveSupport::HashWithIndifferentAccess.new(
    :select => self.parse_select(query_string),
    :order  => self.parse_order(query_string),
    :limit  => pagination[:limit],
    :offset => pagination[:offset],
    :where  => self.parse_where(query_string)
  )

  parameters.regular_writer('pagination', pagination[:pagination].symbolize_keys)

  return parameters
end

#parse_order(query_string) ⇒ Array (protected)

Returns order by clauses for AR queries

Examples:


value = self.parse_order('order=name:desc')  #=> ['name asc']

Parameters:

  • query_string (String)

    the original query string to parse order clauses from

Returns:

  • (Array)


77
78
79
80
81
82
# File 'lib/muster/strategies/active_record.rb', line 77

def parse_order( query_string )
  strategy = Muster::Strategies::SortExpression.new(:field => :order)
  results  = strategy.parse(query_string)

  return Array.wrap( results[:order] )
end

#parse_pagination(query_string) ⇒ Hash (protected)

Returns pagination information for AR queries

Examples:


value = self.parse_pagination('page=2&page_size=10')  #=> { 'pagination' => {:page => 2, :per_page => 10}, 'limit' => 10, 'offset' => 10 }

Parameters:

  • query_string (String)

    the original query string to parse pagination from

Returns:



93
94
95
96
97
98
# File 'lib/muster/strategies/active_record.rb', line 93

def parse_pagination( query_string )
  strategy = Muster::Strategies::Pagination.new(:fields => [:pagination, :limit, :offset])
  results  = strategy.parse(query_string)
  
  return results
end

#parse_select(query_string) ⇒ Array (protected)

Returns select clauses for AR queries

Examples:


value = self.parse_select('select=id,name')  #=> ['id', 'name']

Parameters:

  • query_string (String)

    the original query string to parse select clauses from

Returns:

  • (Array)


61
62
63
64
65
66
# File 'lib/muster/strategies/active_record.rb', line 61

def parse_select( query_string )
  strategy = Muster::Strategies::Hash.new(:field => :select)
  results  = strategy.parse(query_string)

  return Array.wrap( results[:select] )
end

#parse_where(query_string) ⇒ Hash (protected)

Returns where clauses for AR queries

Examples:


value = self.parse_where('where=id:1')  #=> {'id' => '1'}

Parameters:

  • query_string (String)

    the original query string to parse where statements from

Returns:



109
110
111
112
113
114
# File 'lib/muster/strategies/active_record.rb', line 109

def parse_where( query_string )
  strategy = Muster::Strategies::FilterExpression.new(:field => :where)
  results  = strategy.parse(query_string)

  return results[:where] || {}
end