Package not found. Please check the package name and try again.

bodhi-slam 0.7.1 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 142c61ba57d9623f1875dc7ad3ef1802a4c26c55
4
- data.tar.gz: 4bc85952eebd17b260acab63647829f44773ec87
3
+ metadata.gz: 1fbe5ba6be9aceacf0acdc118e78a1a95ddd32ee
4
+ data.tar.gz: a7eae1661963319627d4694dfc90dd8bc5b1e327
5
5
  SHA512:
6
- metadata.gz: 6144923d080241629cf3c137b89094bc5402df06289ec93ebe01ceba94059af8f8dd8e4d3745a4759500f4da9a57f7a2a3a2119c90ca1a65572da89aabe7f869
7
- data.tar.gz: 6a71e114c72b1b31bae451a26e1c797cdb70e175c5cb91432c3531fcf69c5ac185aa981ff1cf6b93b0027f8e976e00c9b2dd91689b008d5885438ce229d9e5ad
6
+ metadata.gz: 938995fe271d5b2085a80c153931e3d0378c05daf587e247ef7baad00c2f48d4741b59299842c4042c0bbb3cf56ab44445983c200fbd6936e445d6ba3fb07dd1
7
+ data.tar.gz: 8f72e7317218ece3d876e7b803f738e55176e2de400bc368fa1c4d50bb1700c40f58be5d219fa1c2841d63a00a5d8a3cf18b0d1d393c64b30ae96213ef30ff75
@@ -50,30 +50,66 @@ module Bodhi
50
50
  through_query.where(association[:through][:foreign_key].to_sym => self.send(association[:primary_key]))
51
51
  through_query.select(association[:through][:primary_key])
52
52
 
53
- puts through_query.url
53
+ count = through_query.count
54
+ pages = (count.to_f / 100.0).ceil
54
55
 
56
+ instance_ids = []
55
57
  method_chain = association[:through][:primary_key].split('.')
56
- if method_chain.size == 1
57
- instance_ids = through_query.all.map{ |item| item.send(association[:through][:primary_key]) }
58
- else
59
- instance_ids = through_query.all.map do |item|
60
- method_chain.reduce(item){ |memo, method| memo.send(method) }
58
+
59
+ # loop through each page of the through query
60
+ if pages > 0
61
+ pages.times.collect do |n|
62
+ paged_query = through_query.clone
63
+ paged_query.page(n+1)
64
+
65
+ puts paged_query.url
66
+
67
+ records = paged_query.all
68
+ instance_ids << records.map{ |item| method_chain.reduce(item){ |memo, method| memo.send(method) } }
61
69
  end
70
+
71
+ instance_ids.flatten!.uniq!
62
72
  end
63
73
 
64
- query.where(association[:foreign_key].to_sym => { "$in" => instance_ids })
65
- else
74
+ # partition the target query if larger than 4K
75
+ test_query = query.clone
76
+ query_size = test_query.where(association[:foreign_key].to_sym => { "$in" => instance_ids }).and(association[:query]).url.bytesize
77
+
78
+ if query_size > 4000
79
+ records = []
80
+ instance_ids.each_slice(100) do |slice|
81
+ sliced_query = query.clone
82
+ sliced_query.where(association[:foreign_key].to_sym => { "$in" => slice })
83
+ sliced_query.and(association[:query])
84
+
85
+ puts sliced_query.url
86
+
87
+ records << sliced_query.all
88
+ end
89
+
90
+ records.flatten!
91
+ return records
92
+ else
93
+ query.where(association[:foreign_key].to_sym => { "$in" => instance_ids })
94
+ query.and(association[:query])
95
+
96
+ puts query.url
97
+ return query.all
98
+ end
99
+ else # default :has_many flow
66
100
  instance_id = self.send(association[:primary_key])
101
+
67
102
  if instance_id.is_a?(Array)
68
103
  query.where(association[:foreign_key].to_sym => { "$in" => instance_id })
69
104
  else
70
105
  query.where(association[:foreign_key].to_sym => instance_id)
71
106
  end
72
- end
73
107
 
74
- query.and(association[:query])
75
- puts query.url
76
- query.all
108
+ query.and(association[:query])
109
+
110
+ puts query.url
111
+ return query.all
112
+ end
77
113
  end
78
114
  end
79
115
 
@@ -16,6 +16,8 @@ module Bodhi
16
16
 
17
17
  def initialize(params={})
18
18
  @connection = Faraday.new(url: params[:server]) do |faraday|
19
+ faraday.use :http_cache
20
+
19
21
  faraday.request :multipart
20
22
  faraday.request :url_encoded
21
23
 
@@ -71,6 +71,48 @@ module Bodhi
71
71
  #query.gsub(/\s+/, "")
72
72
  end
73
73
 
74
+ def count
75
+ if context.nil?
76
+ raise ArgumentError.new("a Bodhi::Context is required to query the API")
77
+ end
78
+
79
+ if context.invalid?
80
+ raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
81
+ end
82
+
83
+ result = context.connection.get do |request|
84
+ request.url self.url.gsub(klass.name, "#{klass}/count")
85
+ request.headers[context.credentials_header] = context.credentials
86
+ end
87
+
88
+ if result.status != 200
89
+ raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
90
+ end
91
+
92
+ result.body["count"]
93
+ end
94
+
95
+ def delete
96
+ if context.nil?
97
+ raise ArgumentError.new("a Bodhi::Context is required to query the API")
98
+ end
99
+
100
+ if context.invalid?
101
+ raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
102
+ end
103
+
104
+ result = context.connection.delete do |request|
105
+ request.url self.url
106
+ request.headers[context.credentials_header] = context.credentials
107
+ end
108
+
109
+ if result.status != 204
110
+ raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
111
+ end
112
+
113
+ result.body
114
+ end
115
+
74
116
  def all
75
117
  if context.nil?
76
118
  raise ArgumentError.new("a Bodhi::Context is required to query the API")
@@ -43,26 +43,24 @@ module Bodhi
43
43
  batch
44
44
  end
45
45
 
46
- # Counts all of the Resources records and returns the result
47
- def count(context=nil)
48
- if context.nil?
49
- context = Bodhi::Context.global_context
50
- end
51
-
52
- if context.invalid?
53
- raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
54
- end
55
-
56
- result = context.connection.get do |request|
57
- request.url "/#{context.namespace}/resources/#{name}/count"
58
- request.headers[context.credentials_header] = context.credentials
59
- end
60
-
61
- if result.status != 200
62
- raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
63
- end
46
+ # Counts all records that match the given query
47
+ #
48
+ # context = Bodhi::Context.new
49
+ # count = Resource.count(context, name: "Foo")
50
+ def count(context, query={})
51
+ query_obj = Bodhi::Query.new(name)
52
+ query_obj.where(query).from(context)
53
+ query_obj.count
54
+ end
64
55
 
65
- result.body
56
+ # Deletes all records that match the given query
57
+ #
58
+ # context = Bodhi::Context.new
59
+ # count = Resource.delete(context, name: "Foo")
60
+ def delete!(context, query={})
61
+ query_obj = Bodhi::Query.new(name)
62
+ query_obj.where(query).from(context)
63
+ query_obj.delete
66
64
  end
67
65
 
68
66
  def create!(params, context=nil)
@@ -181,25 +179,6 @@ module Bodhi
181
179
  query_obj.where(query)
182
180
  query_obj
183
181
  end
184
-
185
- # Deletes all records from a resource in the given +context+
186
- #
187
- # context = Bodhi::Context.new
188
- # Resource.delete_all(context)
189
- def delete_all(context)
190
- if context.invalid?
191
- raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
192
- end
193
-
194
- result = context.connection.delete do |request|
195
- request.url "/#{context.namespace}/resources/#{name}"
196
- request.headers[context.credentials_header] = context.credentials
197
- end
198
-
199
- if result.status != 204
200
- raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
201
- end
202
- end
203
182
  end
204
183
 
205
184
  module InstanceMethods
data/lib/bodhi-slam.rb CHANGED
@@ -3,6 +3,7 @@ require "time"
3
3
  require 'faraday'
4
4
  require 'SecureRandom'
5
5
  require 'faraday_middleware'
6
+ require 'faraday-http-cache'
6
7
  require 'net/http/persistent'
7
8
  require 'regexp-examples'
8
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bodhi-slam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - willdavis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-08 00:00:00.000000000 Z
11
+ date: 2016-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday-http-cache
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: net-http-persistent
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +84,16 @@ dependencies:
70
84
  name: regexp-examples
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - "~>"
87
+ - - '='
74
88
  - !ruby/object:Gem::Version
75
- version: '1.1'
89
+ version: 1.1.3
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - "~>"
94
+ - - '='
81
95
  - !ruby/object:Gem::Version
82
- version: '1.1'
96
+ version: 1.1.3
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement