Class: Muster::Strategies::ActiveRecord
- Defined in:
- lib/muster/strategies/active_record.rb
Overview
Query string parsing strategy that outputs ActiveRecord Query compatible options
Instance Attribute Summary
Attributes inherited from Rack
Instance Method Summary collapse
-
#parse(query_string) ⇒ Muster::Results
Processes a query string and returns a hash of its fields/values.
-
#parse_includes(query_string) ⇒ Hash
protected
Returns includes clauses for AR queries.
-
#parse_joins(query_string) ⇒ Hash
protected
Returns joins clauses for AR queries.
-
#parse_order(query_string) ⇒ Array
protected
Returns order by clauses for AR queries.
-
#parse_pagination(query_string) ⇒ Hash
protected
Returns pagination information for AR queries.
-
#parse_select(query_string) ⇒ Array
protected
Returns select clauses for AR queries.
-
#parse_where(query_string) ⇒ Hash
protected
Returns where clauses for AR queries.
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) ⇒ Muster::Results
Processes a query string and returns a hash of its fields/values
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/muster/strategies/active_record.rb', line 34 def parse(query_string) # rubocop:disable Metrics/MethodLength pagination = parse_pagination(query_string) parameters = Muster::Results.new( :select => parse_select(query_string), :order => parse_order(query_string), :limit => pagination[:limit], :offset => pagination[:offset], :where => parse_where(query_string), :joins => parse_joins(query_string), :includes => parse_includes(query_string) ) parameters.regular_writer('pagination', pagination[:pagination].symbolize_keys) parameters end |
#parse_includes(query_string) ⇒ Hash (protected)
Returns includes clauses for AR queries
153 154 155 156 157 158 |
# File 'lib/muster/strategies/active_record.rb', line 153 def parse_includes(query_string) strategy = Muster::Strategies::JoinsExpression.new(:field => :includes) results = strategy.parse(query_string) results[:includes] || {} end |
#parse_joins(query_string) ⇒ Hash (protected)
Returns joins clauses for AR queries
137 138 139 140 141 142 |
# File 'lib/muster/strategies/active_record.rb', line 137 def parse_joins(query_string) strategy = Muster::Strategies::JoinsExpression.new(:field => :joins) results = strategy.parse(query_string) results[:joins] || {} end |
#parse_order(query_string) ⇒ Array (protected)
Returns order by clauses for AR queries
79 80 81 82 83 84 |
# File 'lib/muster/strategies/active_record.rb', line 79 def parse_order(query_string) strategy = Muster::Strategies::SortExpression.new(:field => :order) results = strategy.parse(query_string) Array.wrap(results[:order]) end |
#parse_pagination(query_string) ⇒ Hash (protected)
Returns pagination information for AR queries
95 96 97 98 |
# File 'lib/muster/strategies/active_record.rb', line 95 def parse_pagination(query_string) strategy = Muster::Strategies::Pagination.new(:fields => [:pagination, :limit, :offset]) strategy.parse(query_string) end |
#parse_select(query_string) ⇒ Array (protected)
Returns select clauses for AR queries
63 64 65 66 67 68 |
# File 'lib/muster/strategies/active_record.rb', line 63 def parse_select(query_string) strategy = Muster::Strategies::Hash.new(:field => :select) results = strategy.parse(query_string) Array.wrap(results[:select]) end |
#parse_where(query_string) ⇒ Hash (protected)
Returns where clauses for AR queries
-
In the case a NULL or NIL query string value is included (case insensitive), a ‘nil` object is substituted for the String value.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/muster/strategies/active_record.rb', line 113 def parse_where(query_string) strategy = Muster::Strategies::FilterExpression.new(:field => :where) results = strategy.parse(query_string) nil_regex = /^(null|nil)$/i if results[:where] && !results[:where].values.grep(nil_regex).empty? results[:where].each do |key, value| results[:where][key] = nil if value.match(nil_regex) end end results[:where] || {} end |