Class: RestfulQuery::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/restful_query/parser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query, options = {}) ⇒ Parser

Returns a new instance of Parser.



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/restful_query/parser.rb', line 5

def initialize(query, options = {})
  @options         = options || {}
  @exclude_columns = columns_from_options(:exclude, options)
  @integer_columns = columns_from_options(:integer, options)
  @map_columns     = options[:map_columns] || {}
  @default_sort    = options[:default_sort] ? [Sort.parse(options[:default_sort])] : []
  @single_sort     = options[:single_sort] || false
  @query           = (query || {}).dup
  @default_join    = @query.delete(:join) || :and
  extract_sorts_from_conditions
  map_conditions
end

Instance Attribute Details

#exclude_columnsObject (readonly)

Returns the value of attribute exclude_columns.



3
4
5
# File 'lib/restful_query/parser.rb', line 3

def exclude_columns
  @exclude_columns
end

#integer_columnsObject (readonly)

Returns the value of attribute integer_columns.



3
4
5
# File 'lib/restful_query/parser.rb', line 3

def integer_columns
  @integer_columns
end

#map_columnsObject (readonly)

Returns the value of attribute map_columns.



3
4
5
# File 'lib/restful_query/parser.rb', line 3

def map_columns
  @map_columns
end

#optionsObject (readonly)

Returns the value of attribute options.



3
4
5
# File 'lib/restful_query/parser.rb', line 3

def options
  @options
end

#queryObject (readonly)

Returns the value of attribute query.



3
4
5
# File 'lib/restful_query/parser.rb', line 3

def query
  @query
end

Instance Method Details

#clear_default_sort!Object



90
91
92
# File 'lib/restful_query/parser.rb', line 90

def clear_default_sort!
  @sorts.reject! {|s| s == @default_sort.first }
end

#conditionsObject



18
19
20
# File 'lib/restful_query/parser.rb', line 18

def conditions
  conditions_hash.values.flatten
end

#conditions_for(column) ⇒ Object



26
27
28
# File 'lib/restful_query/parser.rb', line 26

def conditions_for(column)
  conditions_hash[column.to_s]
end

#has_conditions?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/restful_query/parser.rb', line 22

def has_conditions?
  !conditions.empty?
end

#has_sort?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/restful_query/parser.rb', line 53

def has_sort?
  !sorts.empty?
end

#set_sort(column_name, direction) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/restful_query/parser.rb', line 75

def set_sort(column_name, direction)
  column = map_column(column_name)
  if new_sort = self.sort(column_name)
    if direction.nil?
      self.sorts.reject! {|s| s.column == column.to_s }
    else
      new_sort.direction = direction
    end
  else
    new_sort = Sort.new(column, direction)
    self.sorts << new_sort
  end
  new_sort
end

#sort(column_name) ⇒ Object



70
71
72
73
# File 'lib/restful_query/parser.rb', line 70

def sort(column_name)
  column = map_column(column_name)
  sorts.detect {|s| s && s.column == column }
end

#sort_sqlObject



49
50
51
# File 'lib/restful_query/parser.rb', line 49

def sort_sql
  @sorts.collect {|s| s.to_sql }.join(', ')
end

#sorted_by?(column_name) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
68
# File 'lib/restful_query/parser.rb', line 65

def sorted_by?(column_name)
  column = map_column(column_name)
  sorted_columns.include?(column.to_s)
end

#sorted_columnsObject



61
62
63
# File 'lib/restful_query/parser.rb', line 61

def sorted_columns
  sorts.collect {|s| s.column }
end

#sortsObject



57
58
59
# File 'lib/restful_query/parser.rb', line 57

def sorts
  @sorts ||= []
end

#to_conditions_array(join = nil) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/restful_query/parser.rb', line 30

def to_conditions_array(join = nil)
  join ||= @default_join
  join_string = (join == :or) ? ' OR ' : ' AND '
  conditions_string = []
  conditions_values = []
  conditions.each do |c| 
    ca = c.to_condition_array
    conditions_string << ca[0]
    conditions_values << ca[1]
  end
  conditions_values.unshift(conditions_string.join(join_string))
end

#to_query_hashObject



43
44
45
46
47
# File 'lib/restful_query/parser.rb', line 43

def to_query_hash
  hash = @query
  hash['_sort'] = sorts.collect {|s| s.to_s } unless sorts.empty?
  hash
end