Class: Bodhi::Query
- Inherits:
-
Object
- Object
- Bodhi::Query
- Defined in:
- lib/bodhi-slam/queries.rb
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#controller ⇒ Object
readonly
Returns the value of attribute controller.
-
#criteria ⇒ Object
readonly
Returns the value of attribute criteria.
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
-
#klass ⇒ Object
readonly
Returns the value of attribute klass.
-
#paging ⇒ Object
readonly
Returns the value of attribute paging.
-
#sorting ⇒ Object
readonly
Returns the value of attribute sorting.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
Instance Method Summary collapse
- #all ⇒ Object
- #clear! ⇒ Object
- #count ⇒ Object
- #delete ⇒ Object
- #first ⇒ Object
- #from(context) ⇒ Object
-
#initialize(klass, controller = "resources") ⇒ Query
constructor
A new instance of Query.
- #last ⇒ Object
- #limit(number) ⇒ Object
- #page(number) ⇒ Object
- #select(field_names) ⇒ Object
- #sort(field, order = nil) ⇒ Object
- #where(query) ⇒ Object (also: #and)
Constructor Details
#initialize(klass, controller = "resources") ⇒ Query
Returns a new instance of Query.
5 6 7 8 9 10 11 12 |
# File 'lib/bodhi-slam/queries.rb', line 5 def initialize(klass, controller="resources") @controller = controller @klass = Object.const_get(klass.to_s) @criteria = {} @fields = [] @paging = {} @sorting = {} end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def context @context end |
#controller ⇒ Object (readonly)
Returns the value of attribute controller.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def controller @controller end |
#criteria ⇒ Object (readonly)
Returns the value of attribute criteria.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def criteria @criteria end |
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def fields @fields end |
#klass ⇒ Object (readonly)
Returns the value of attribute klass.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def klass @klass end |
#paging ⇒ Object (readonly)
Returns the value of attribute paging.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def paging @paging end |
#sorting ⇒ Object (readonly)
Returns the value of attribute sorting.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def sorting @sorting end |
#url ⇒ Object (readonly)
Returns the value of attribute url.
3 4 5 |
# File 'lib/bodhi-slam/queries.rb', line 3 def url @url end |
Instance Method Details
#all ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/bodhi-slam/queries.rb', line 116 def all if context.nil? raise ArgumentError.new("a Bodhi::Context is required to query the API") end if context.invalid? raise Bodhi::ContextErrors.new(context.errors.), context.errors.to_a.to_s end result = context.connection.get do |request| request.url self.url request.headers[context.credentials_header] = context.credentials end if result.status != 200 raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}" end result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) } end |
#clear! ⇒ Object
14 15 16 17 18 19 20 |
# File 'lib/bodhi-slam/queries.rb', line 14 def clear! @context = nil @criteria = {} @fields.clear @paging.clear @sorting.clear end |
#count ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/bodhi-slam/queries.rb', line 74 def count if context.nil? raise ArgumentError.new("a Bodhi::Context is required to query the API") end if context.invalid? raise Bodhi::ContextErrors.new(context.errors.), context.errors.to_a.to_s end result = context.connection.get do |request| request.url self.url.gsub(klass.name, "#{klass}/count") request.headers[context.credentials_header] = context.credentials end if result.status != 200 raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}" end result.body["count"] end |
#delete ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/bodhi-slam/queries.rb', line 95 def delete if context.nil? raise ArgumentError.new("a Bodhi::Context is required to query the API") end if context.invalid? raise Bodhi::ContextErrors.new(context.errors.), context.errors.to_a.to_s end result = context.connection.delete do |request| request.url self.url request.headers[context.credentials_header] = context.credentials end if result.status != 200 raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}" end result.body end |
#first ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/bodhi-slam/queries.rb', line 137 def first if context.nil? raise ArgumentError.new("a Bodhi::Context is required to query the API") end if context.invalid? raise Bodhi::ContextErrors.new(context.errors.), context.errors.to_a.to_s end result = context.connection.get do |request| request.url self.url request.headers[context.credentials_header] = context.credentials end if result.status != 200 raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}" end result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }.first end |
#from(context) ⇒ Object
179 180 181 182 183 184 185 186 |
# File 'lib/bodhi-slam/queries.rb', line 179 def from(context) unless context.is_a? Bodhi::Context raise ArgumentError.new("Expected Bodhi::Context but received #{context.class}") end @context = context self end |
#last ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/bodhi-slam/queries.rb', line 158 def last if context.nil? raise ArgumentError.new("a Bodhi::Context is required to query the API") end if context.invalid? raise Bodhi::ContextErrors.new(context.errors.), context.errors.to_a.to_s end result = context.connection.get do |request| request.url self.url request.headers[context.credentials_header] = context.credentials end if result.status != 200 raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}" end result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }.last end |
#limit(number) ⇒ Object
213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/bodhi-slam/queries.rb', line 213 def limit(number) unless number.is_a? Integer raise ArgumentError.new("Expected Integer but received #{number.class}") end unless number <= 100 raise ArgumentError.new("Expected limit to be less than or equal to 100 but received #{number}") end @paging[:limit] = number self end |
#page(number) ⇒ Object
226 227 228 229 230 231 232 233 |
# File 'lib/bodhi-slam/queries.rb', line 226 def page(number) unless number.is_a? Integer raise ArgumentError.new("Expected Integer but received #{number.class}") end @paging[:page] = number self end |
#select(field_names) ⇒ Object
201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/bodhi-slam/queries.rb', line 201 def select(field_names) unless field_names.is_a? String raise ArgumentError.new("Expected String but received #{field_names.class}") end fields_array = field_names.split(',') @fields << fields_array @fields.flatten! @fields.uniq! self end |
#sort(field, order = nil) ⇒ Object
235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/bodhi-slam/queries.rb', line 235 def sort(field, order=nil) unless field.is_a? String raise ArgumentError.new("Expected String but received #{field.class}") end unless order.nil? @sorting[:order] = order end @sorting[:field] = field self end |
#where(query) ⇒ Object Also known as: and
188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/bodhi-slam/queries.rb', line 188 def where(query) if query.is_a?(String) json = JSON.parse(query) query = Bodhi::Support.symbolize_keys(json) else query = Bodhi::Support.symbolize_keys(query) end @criteria.merge!(query) self end |