Class: Conversocial::Resources::QueryEngines::Base

Inherits:
Object
  • Object
show all
Includes:
Utils::HTTP, Utils::Strings, Enumerable
Defined in:
lib/conversocial/resources/query_engines/base.rb

Direct Known Subclasses

Account, Author, Channel, Conversation, Keyvalue, Report, Tag, User

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utils::HTTP

#add_query_params, #https_basic_auth_get, #https_basic_auth_post

Methods included from Utils::Strings

#demodulize

Constructor Details

#initialize(client) ⇒ Base

Returns a new instance of Base.



13
14
15
16
17
# File 'lib/conversocial/resources/query_engines/base.rb', line 13

def initialize client
  @client = client
  @cache  = Conversocial::Resources::QueryEngines::Cache.new client.cache_expiry
  clear
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



11
12
13
# File 'lib/conversocial/resources/query_engines/base.rb', line 11

def client
  @client
end

#query_paramsObject (readonly)

Returns the value of attribute query_params.



11
12
13
# File 'lib/conversocial/resources/query_engines/base.rb', line 11

def query_params
  @query_params
end

Instance Method Details

#clearObject



50
51
52
53
# File 'lib/conversocial/resources/query_engines/base.rb', line 50

def clear
  @query_params = {}
  self
end

#default_fetch_query_paramsObject



19
20
21
# File 'lib/conversocial/resources/query_engines/base.rb', line 19

def default_fetch_query_params
  {}
end

#default_find_query_paramsObject



23
24
25
# File 'lib/conversocial/resources/query_engines/base.rb', line 23

def default_find_query_params
  {}
end

#each(&block) ⇒ Object



27
28
29
30
31
# File 'lib/conversocial/resources/query_engines/base.rb', line 27

def each &block
  fetch.each do |member|
    block.call(member)
  end
end

#each_page(&block) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/conversocial/resources/query_engines/base.rb', line 33

def each_page &block
  @query_params[:fields] ||= model_klass.fields.join(',')
  response = fetch_ex add_query_params("", default_fetch_query_params.merge(@query_params))
  begin
    continue = block.call response[:items]
    continue = true
    if continue
      next_page_url = (response[:json]['paging'] || {})['next_page']
      if next_page_url.present?
        response = fetch_ex next_page_url
      else
        response = nil
      end
    end
  end while response && continue
end

#fetchObject



89
90
91
92
# File 'lib/conversocial/resources/query_engines/base.rb', line 89

def fetch
  @query_params[:fields] ||= model_klass.fields.join(',')
  (fetch_ex add_query_params("", default_fetch_query_params.merge(@query_params)))[:items]
end

#find(find_id) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/conversocial/resources/query_engines/base.rb', line 66

def find find_id

    @query_params[:fields] ||= model_klass.fields.join(',')

    json = get_json add_query_params("/#{find_id}", default_find_query_params.merge(@query_params))
    clear
    if json
      item = new json[resource_name]
      attach_content_to_items([item], json['content']).first
    end

end

#greater_than(field, value) ⇒ Object



108
109
110
# File 'lib/conversocial/resources/query_engines/base.rb', line 108

def greater_than field, value
  comparison_filter field, "gt", value
end

#greater_than_or_equal_to(field, value) ⇒ Object



112
113
114
# File 'lib/conversocial/resources/query_engines/base.rb', line 112

def greater_than_or_equal_to field, value
  comparison_filter field, "gte", value
end

#is_nil(field) ⇒ Object



124
125
126
# File 'lib/conversocial/resources/query_engines/base.rb', line 124

def is_nil field
  comparison_filter field, "isnull", 1
end

#is_not_nil(field) ⇒ Object



128
129
130
# File 'lib/conversocial/resources/query_engines/base.rb', line 128

def is_not_nil field
  comparison_filter field, "isnull", 0
end

#lastObject



85
86
87
# File 'lib/conversocial/resources/query_engines/base.rb', line 85

def last
  fetch.last
end

#less_than_or_equal_to(field, value) ⇒ Object



120
121
122
# File 'lib/conversocial/resources/query_engines/base.rb', line 120

def less_than_or_equal_to field, value
  comparison_filter field, "lte", value
end

#lesser_than(field, value) ⇒ Object



116
117
118
# File 'lib/conversocial/resources/query_engines/base.rb', line 116

def lesser_than field, value
  comparison_filter field, "lt", value
end

#new(params = {}) ⇒ Object



136
137
138
# File 'lib/conversocial/resources/query_engines/base.rb', line 136

def new params={}
  new_instance_of_klass model_klass, params
end

#select(*fields) ⇒ Object



104
105
106
# File 'lib/conversocial/resources/query_engines/base.rb', line 104

def select *fields
  where :fields => fields
end

#sizeObject Also known as: count



79
80
81
# File 'lib/conversocial/resources/query_engines/base.rb', line 79

def size
  fetch.size
end

#sort(field) ⇒ Object Also known as: sort_by, order, order_by



95
96
97
98
# File 'lib/conversocial/resources/query_engines/base.rb', line 95

def sort field
  field = field.join ',' if field.kind_of? Array
  where :sort => field
end

#to_fetch_urlObject



132
133
134
# File 'lib/conversocial/resources/query_engines/base.rb', line 132

def to_fetch_url
  absolute_path add_query_params("", default_fetch_query_params.merge(@query_params))
end

#where(options) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# File 'lib/conversocial/resources/query_engines/base.rb', line 55

def where options
  options = options.map do |k, v|
    v = v.utc.strftime '%Y-%m-%dT%H:%M:%S' if v.kind_of? Time
    v = v.to_s if v.kind_of? Date
    [k, v]
  end.to_h

  @query_params.merge! options
  self
end