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



87
88
89
90
# File 'lib/conversocial/resources/query_engines/base.rb', line 87

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
# 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



106
107
108
# File 'lib/conversocial/resources/query_engines/base.rb', line 106

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

#greater_than_or_equal_to(field, value) ⇒ Object



110
111
112
# File 'lib/conversocial/resources/query_engines/base.rb', line 110

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

#is_nil(field) ⇒ Object



122
123
124
# File 'lib/conversocial/resources/query_engines/base.rb', line 122

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

#is_not_nil(field) ⇒ Object



126
127
128
# File 'lib/conversocial/resources/query_engines/base.rb', line 126

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

#lastObject



83
84
85
# File 'lib/conversocial/resources/query_engines/base.rb', line 83

def last
  fetch.last
end

#less_than_or_equal_to(field, value) ⇒ Object



118
119
120
# File 'lib/conversocial/resources/query_engines/base.rb', line 118

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

#lesser_than(field, value) ⇒ Object



114
115
116
# File 'lib/conversocial/resources/query_engines/base.rb', line 114

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

#new(params = {}) ⇒ Object



134
135
136
# File 'lib/conversocial/resources/query_engines/base.rb', line 134

def new params={}
  new_instance_of_klass model_klass, params
end

#select(*fields) ⇒ Object



102
103
104
# File 'lib/conversocial/resources/query_engines/base.rb', line 102

def select *fields
  where :fields => fields
end

#sizeObject Also known as: count



77
78
79
# File 'lib/conversocial/resources/query_engines/base.rb', line 77

def size
  fetch.size
end

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



93
94
95
96
# File 'lib/conversocial/resources/query_engines/base.rb', line 93

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

#to_fetch_urlObject



130
131
132
# File 'lib/conversocial/resources/query_engines/base.rb', line 130

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