query-interface-client 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1b22d87e9ab86971cef744ff906b9cc4e2bbf23
4
- data.tar.gz: 39eaf53ecd571946d6d65464e40a0959d11c3e3d
3
+ metadata.gz: c18cd4dae2c81dd2e352d5509607cc1905c0e01e
4
+ data.tar.gz: 1b68f3bb6b2d722861b111d4237590840f0ec041
5
5
  SHA512:
6
- metadata.gz: b0ce5334bb11a93e241a8fea146753054bcb7852f4fc06e2f9dcd2a257d4166adbae17868c630bf5f0ad7dbfbab03a22b78520c0668a596510a6fcf2e698dfcd
7
- data.tar.gz: f1d68a3da3014232c3e54d48346221c4388f191907a9050b490a2d412ddcd48d75f567662bb8d6ca983cee3071dec10b1e880d3a8e6987252fa62f45c9eeed99
6
+ metadata.gz: 3ab5f0827c2b0f95f2adf47ac32b5300cd37ba75930551fdc6fa0d73dcbf7f2c83d81a21aaf4a818e73f89eb74fd34c22ca728910d81d6b13637f3b03c6149e4
7
+ data.tar.gz: c5f347f8779355906031dbf25aa546d992c53750f3090c061a15ce204118cab9a19d835f7a8a65f3ec3a1deba3215ef02f0a8e492bc00a2e0fc12264cb749415
data/Gemfile CHANGED
@@ -2,8 +2,11 @@ source 'http://rubygems.org'
2
2
 
3
3
  gem 'her'
4
4
  gem 'will_paginate'
5
+ gem 'activesupport', require: false
5
6
 
6
7
  group :development do
7
8
  gem 'rake'
8
9
  gem 'rspec'
10
+ gem 'autotest-standalone'
11
+ gem 'simplecov', :require => false, :group => :test
9
12
  end
data/Gemfile.lock CHANGED
@@ -11,6 +11,7 @@ GEM
11
11
  thread_safe (~> 0.1)
12
12
  tzinfo (~> 0.3.37)
13
13
  atomic (1.1.10)
14
+ autotest-standalone (4.5.11)
14
15
  builder (3.1.4)
15
16
  diff-lcs (1.2.4)
16
17
  faraday (0.8.7)
@@ -33,6 +34,10 @@ GEM
33
34
  rspec-expectations (2.14.0)
34
35
  diff-lcs (>= 1.1.3, < 2.0)
35
36
  rspec-mocks (2.14.1)
37
+ simplecov (0.7.1)
38
+ multi_json (~> 1.0)
39
+ simplecov-html (~> 0.7.1)
40
+ simplecov-html (0.7.1)
36
41
  thread_safe (0.1.0)
37
42
  atomic
38
43
  tzinfo (0.3.37)
@@ -42,7 +47,10 @@ PLATFORMS
42
47
  ruby
43
48
 
44
49
  DEPENDENCIES
50
+ activesupport
51
+ autotest-standalone
45
52
  her
46
53
  rake
47
54
  rspec
55
+ simplecov
48
56
  will_paginate
@@ -2,88 +2,130 @@ module QueryInterface
2
2
  module Client
3
3
  class LazyQuery
4
4
 
5
- attr_accessor :model, :api_params, :result
5
+ attr_accessor :model, :result, :result_model, :transformations
6
6
 
7
- def initialize(model, api_params = nil)
7
+ def initialize(model, transformations=nil, result_model=nil)
8
8
  self.model = model
9
- self.api_params = {
10
- conditions: api_params ? api_params[:conditions].dup : {},
11
- with: api_params ? api_params[:with].dup : [],
12
- order: api_params ? api_params[:order].dup : [],
13
- }
9
+ if transformations
10
+ self.transformations = transformations.map {|item| item.dup}
11
+ else
12
+ self.transformations = []
13
+ end
14
14
  self.result = nil
15
+ self.result_model = result_model
15
16
  end
16
17
 
17
- def filter(conditions)
18
- self.copy.tap do |dataset|
19
- dataset.api_params[:conditions].merge!(conditions)
20
- end
18
+ def parse(data)
19
+ (self.result_model ? self.result_model.parse(data) : self.model.parse(data))
21
20
  end
22
21
 
23
- def with(*fields)
24
- self.copy.tap do |dataset|
25
- dataset.api_params[:with] += fields
26
- end
22
+ def instantiate(data)
23
+ (self.result_model ? self.result_model.new(data) : self.model.new(data))
27
24
  end
28
25
 
29
- def order(*fields)
30
- self.copy.tap do |dataset|
31
- dataset.api_params[:order] = fields
32
- end
26
+ def instantiate_collection(parsed_data)
27
+ (self.result_model ? self.result_model.new_collection(parsed_data) : self.model.new_collection(parsed_data))
33
28
  end
34
29
 
35
30
  def copy(options = {})
36
- self.class.new(self.model, self.api_params)
31
+ self.class.new(self.model, self.transformations, self.result_model)
37
32
  end
38
33
 
39
- def do_collection_query(params={})
40
- self.model.get_collection(:query, query_data: self.api_params.merge(params))
34
+ def add_transformation(type, parameter=nil)
35
+ self.transformations << {transformation: type, parameter: parameter}
41
36
  end
42
37
 
43
- def do_resource_query(params = {})
44
- self.model.get_resource(:query, query_data: self.api_params.merge(params))
38
+ def filter(conditions={})
39
+ self.copy.tap do |query|
40
+ conditions.each do |key, value|
41
+ query.add_transformation(:filter, {field: key, value: value})
42
+ end
43
+ end
45
44
  end
46
45
 
47
- def do_raw_query(params = {})
48
- self.model.get_raw(:query, query_data: self.api_params.merge(params))
46
+ def instance(id)
47
+ self.copy.tap do |query|
48
+ query.add_transformation(:instance, id)
49
+ end
49
50
  end
50
51
 
51
- def first(*args)
52
- one(:first, *args)
52
+ def context(association, model=nil)
53
+ self.copy.tap do |query|
54
+ query.result_model = (model ? model : association.to_s.singularize.camelize.constantize)
55
+ query.add_transformation(:context, association)
56
+ end
53
57
  end
54
58
 
55
- def last(*args)
56
- one(:last, *args)
59
+ def with(*fields)
60
+ self.copy.tap do |query|
61
+ fields.each do |field|
62
+ query.add_transformation(:with, field)
63
+ end
64
+ end
65
+ end
66
+
67
+ def order(*fields)
68
+ self.copy.tap do |query|
69
+ fields.each do |field|
70
+ query.add_transformation(:order, field)
71
+ end
72
+ end
57
73
  end
58
74
 
59
75
  def evaluate
60
- self.result ||= self.do_collection_query(mode: :evaluate)
76
+ self.result ||= self.do_query()
61
77
  end
62
78
 
63
- def paginate(params = {})
64
- params = {page: 1, per_page: 10, mode: :paginate}.merge(params)
65
- raw = self.do_raw_query(params)[:parsed_data]
66
- result = raw[:data]
67
- objects = result[:objects].map { |h| self.model.new(h) }
79
+ def paginate(params={})
80
+ params = {page: 1, per_page: 10,}.merge(params)
81
+ self.add_transformation(:paginate, params)
82
+ raw = self.do_raw_query()
83
+ result = raw[:parsed_data][:data]
84
+ objects = result[:objects].map { |h| self.instantiate(h) }
68
85
  WillPaginate::Collection.create(params[:page], params[:per_page], result[:total]) do |pager|
69
86
  pager.replace objects
70
87
  end
71
88
  end
72
89
 
73
90
  def ids
74
- response = self.do_raw_query(mode: :ids)
75
- response.try(:[], :data)
91
+ self.add_transformation(:map_ids)
92
+ self.do_raw_query()[:parsed_data][:data]
76
93
  end
77
94
 
78
95
  def count
79
96
  if self.result
80
97
  self.result.count
81
98
  else
82
- r = self.do_raw_query(mode: :count)
99
+ self.add_transformation(:count)
100
+ r = self.do_raw_query()
83
101
  r[:parsed_data][:data][:count]
84
102
  end
85
103
  end
86
104
 
105
+ def do_query
106
+ parsed_data = self.do_raw_query[:parsed_data]
107
+ if parsed_data[:data].is_a?(Array)
108
+ self.instantiate_collection(parsed_data)
109
+ else
110
+ self.instantiate(
111
+ self.parse(parsed_data[:data]).
112
+ merge(_metadata: parsed_data[:metadata], _errors: parsed_data[:errors])
113
+ )
114
+ end
115
+ end
116
+
117
+ def do_raw_query
118
+ self.model.get_raw(:query, transformations: self.transformations)
119
+ end
120
+
121
+ def first(*args)
122
+ one(:first, *args)
123
+ end
124
+
125
+ def last(*args)
126
+ one(:last, *args)
127
+ end
128
+
87
129
  def to_json(*args)
88
130
  evaluate.to_json(*args)
89
131
  end
@@ -98,10 +140,9 @@ module QueryInterface
98
140
  if self.result
99
141
  self.result.send(which)
100
142
  else
101
- self.do_resource_query(params.merge(mode: which))
143
+ self.add_transformation(which)
144
+ self.do_query
102
145
  end
103
- rescue Faraday::Error::ResourceNotFound
104
- nil
105
146
  end
106
147
 
107
148
  end
@@ -1,7 +1,7 @@
1
1
  module QueryInterface
2
2
  module Client
3
3
 
4
- VERSION = '0.0.3'
4
+ VERSION = '0.1.0'
5
5
 
6
6
  end
7
7
  end
@@ -1,4 +1,6 @@
1
1
  require 'will_paginate/array'
2
2
 
3
+ require 'active_support/core_ext/string'
4
+
3
5
  require 'query-interface-client/lazy_query'
4
6
  require 'query-interface-client/resource'
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.add_runtime_dependency(%q<her>)
27
27
  s.add_runtime_dependency(%q<will_paginate>)
28
+ s.add_runtime_dependency(%q<activesupport>)
28
29
  s.add_development_dependency(%q<rake>)
29
30
  s.add_development_dependency(%q<rspec>)
30
31
  end
@@ -2,58 +2,77 @@ require 'spec_helper'
2
2
 
3
3
 
4
4
  def deep_copy_check(left, right)
5
- left.should_not be(right)
6
- [:conditions, :with, :order].each do |key|
7
- left[key].should_not be(right[key])
5
+ left.each_with_index do |item, idx|
6
+ right[idx].should_not be(item)
8
7
  end
9
8
  end
10
9
 
10
+ class Context
11
+ end
12
+
11
13
  describe QueryInterface::Client::LazyQuery do
12
14
  subject {QueryInterface::Client::LazyQuery}
13
15
  let(:model) {double("Dummy Model")}
14
- let(:default_params) { {conditions: {}, with: [], order: []} }
16
+ let(:transformations) {[{transformation: :filter, parameter: {field: "hase", value: "wuschel"}}]}
15
17
 
16
18
  context "construction" do
17
- let(:api_params) do
18
- {conditions: {field: 'value'}, with: [:inclusion], order: ["-something"]}
19
- end
20
19
 
21
20
  it "initializes itself with empty parameters and a supplied model" do
22
21
  query = subject.new(model)
23
- query.api_params.should == {conditions: {}, with: [], order: []}
22
+ query.transformations.should == []
24
23
  query.model.should eq(model)
25
24
  end
26
25
 
27
- it "honors passed api params" do
28
- query = subject.new(model, api_params)
29
- query.api_params.should == api_params
26
+ it "honors passed transformations params" do
27
+ query = subject.new(model, transformations)
28
+ query.transformations.should eq(transformations)
30
29
  end
31
30
 
32
- it "does not alter the originally passed api_params" do
33
- query = subject.new(model, api_params)
34
- deep_copy_check(api_params, query.api_params)
31
+ it "does not alter the originally passed transformations" do
32
+ query = subject.new(model, transformations)
33
+ deep_copy_check(transformations, query.transformations)
35
34
  end
36
35
  end
37
36
 
38
37
  context "copy" do
39
- let(:api_params) do
40
- {conditions: {field: 'value'}, with: [:inclusion], order: ["-something"]}
41
- end
42
- it "provides a copy method cloning api_params onto a new instance" do
43
- query = subject.new(model, api_params)
38
+ it "provides a copy method cloning transformations onto a new instance" do
39
+ query = subject.new(model, transformations)
44
40
  query_copy = query.copy
45
- query_copy.api_params.should eq(query.api_params)
46
- deep_copy_check(query_copy.api_params, query.api_params)
41
+ query_copy.transformations.should eq(query.transformations)
42
+ deep_copy_check(query_copy.transformations, query.transformations)
47
43
  end
48
44
  end
49
45
 
50
46
  context "filtering" do
51
- it "should create a new instance with updated api_params" do
47
+ it "should create a new instance with updated transformations" do
52
48
  query = subject.new(model)
53
49
  query_copy = subject.new(model)
54
50
  query.should_receive(:copy).and_return(query_copy)
55
51
  query.filter(a: :b)
56
- query_copy.api_params[:conditions].should eq({a: :b})
52
+ query_copy.transformations.should eq([{transformation: :filter, parameter: {field: :a, value: :b}}])
53
+ end
54
+ end
55
+
56
+ context "instancing" do
57
+ it "sets the instance parameter" do
58
+ query = subject.new(model)
59
+ query.should_receive(:copy).and_return(query)
60
+ query.instance(5)
61
+ query.transformations.should eq([{transformation: :instance, parameter: 5}])
62
+ end
63
+ end
64
+
65
+ context "context" do
66
+ let(:query) {subject.new(model)}
67
+ before do
68
+ query.should_receive(:copy).and_return(query)
69
+ query.context(:context)
70
+ end
71
+ it "should set the correct result model class" do
72
+ query.result_model.should == Context
73
+ end
74
+ it "sets the context parameter" do
75
+ query.transformations.should eq([{transformation: :context, parameter: :context}])
57
76
  end
58
77
  end
59
78
 
@@ -63,7 +82,7 @@ describe QueryInterface::Client::LazyQuery do
63
82
  query_copy = subject.new(model)
64
83
  query.should_receive(:copy).and_return(query_copy)
65
84
  query.with(:c)
66
- query_copy.api_params[:with].should eq([:c])
85
+ query_copy.transformations.should eq([{transformation: :with, parameter: :c}])
67
86
  end
68
87
  end
69
88
 
@@ -73,87 +92,140 @@ describe QueryInterface::Client::LazyQuery do
73
92
  query_copy = subject.new(model)
74
93
  query.should_receive(:copy).and_return(query_copy)
75
94
  query.order("-something")
76
- query_copy.api_params[:order].should eq(["-something"])
95
+ query_copy.transformations.should eq([{transformation: :order, parameter: "-something"}])
77
96
  end
78
97
  end
79
98
 
80
99
  context "chaining" do
81
- it "allows chaining of filter and with" do
82
- query = subject.new(model)
83
- query_copy = query.filter(a: :b).filter(c: :d).with(:e).with(:f, :g)
84
- query_copy.api_params[:conditions].should eq({a: :b, c: :d})
85
- query_copy.api_params[:with].should eq([:e, :f, :g])
86
- end
87
-
88
- it "calling order multiple times overwrites" do
100
+ it "allows chaining transformations in order of appearance" do
89
101
  query = subject.new(model)
90
- query_copy = query.order("-something").order("now really")
91
- query_copy.api_params[:order].should eq(["now really"])
102
+ query_copy = query.filter(a: :b, c: :d).filter(e: :f).with(:x, :y).instance(12).context(:context)
103
+ query_copy.transformations.should eq(
104
+ [
105
+ {transformation: :filter, parameter: {field: :a, value: :b}},
106
+ {transformation: :filter, parameter: {field: :c, value: :d}},
107
+ {transformation: :filter, parameter: {field: :e, value: :f}},
108
+ {transformation: :with, parameter: :x},
109
+ {transformation: :with, parameter: :y},
110
+ {transformation: :instance, parameter: 12},
111
+ {transformation: :context, parameter: :context}
112
+ ]
113
+ )
92
114
  end
93
115
  end
94
116
 
95
117
  context "first" do
118
+ let(:transformations) {[transformation: :first, parameter: nil]}
96
119
  it "gets the first object via do_query" do
97
120
  query = subject.new(model)
98
- model.should_receive(:get_resource)
99
- .with(:query, query_data: default_params.merge(mode: :first))
100
- .and_return("result object")
101
- query.first.should eq("result object")
121
+ query.should_receive(:do_query)
122
+ query.first
123
+ query.transformations.should eq(self.transformations)
102
124
  end
103
125
 
104
126
  it "uses the cached result" do
105
127
  query = subject.new(model)
106
128
  query.result = ["a", "b", "c"]
107
- query.should_not_receive(:do_query)
129
+ query.should_not_receive(:do_raw_query)
108
130
  query.first.should eq("a")
109
131
  end
110
132
  end
111
133
 
134
+ context "last" do
135
+ let(:transformations) {[transformation: :last, parameter: nil]}
136
+ it "gets the last object via do_query" do
137
+ query = subject.new(model)
138
+ query.should_receive(:do_query)
139
+ query.last
140
+ query.transformations.should eq(self.transformations)
141
+ end
142
+
143
+ it "uses the cached result" do
144
+ query = subject.new(model)
145
+ query.result = ["a", "b", "c"]
146
+ query.should_not_receive(:do_raw_query)
147
+ query.last.should eq("c")
148
+ end
149
+ end
150
+
112
151
  context "evaluate" do
113
- it "gets results via do_query and caches the result" do
152
+ let(:transformations) {[]}
153
+ context "without instance set" do
154
+ before do
155
+ model.should_receive(:get_raw)
156
+ .with(:query, transformations: self.transformations)
157
+ .and_return({parsed_data: {data: ["result object"]}})
158
+ model.stub(:new_collection).and_return(["result object"])
159
+ end
160
+
161
+ it "add an evaluation transformation" do
162
+ query = subject.new(model)
163
+ query.evaluate
164
+ query.transformations.should eq(transformations)
165
+ end
166
+
167
+ it "gets results via do_query and caches the result" do
168
+ query = subject.new(model)
169
+ query.evaluate.should eq(["result object"])
170
+ query.result.should eq(["result object"])
171
+ end
172
+
173
+ it "doesn't query the api twice" do
174
+ query = subject.new(model)
175
+ result = query.evaluate
176
+ result_second = query.evaluate
177
+ result.should be(result_second)
178
+ end
179
+ end
180
+ end
181
+
182
+ context "ids" do
183
+ let(:transformations) { [{transformation: :map_ids, parameter: nil}] }
184
+
185
+ it "adds a map_ids transformation" do
114
186
  query = subject.new(model)
115
- model.should_receive(:get_collection)
116
- .with(:query, query_data: default_params.merge(mode: :evaluate))
117
- .and_return(["result object"])
118
- query.evaluate.should eq(["result object"])
119
- query.result.should eq(["result object"])
187
+ query.stub!(:do_raw_query).and_return({parsed_data: {data: [1,2,3]}})
188
+ query.ids
189
+ query.transformations.should eq(self.transformations)
120
190
  end
121
191
 
122
- it "doesn't query the api twice" do
192
+ it "returns the data of the parsed query" do
123
193
  query = subject.new(model)
124
- model.should_receive(:get_collection)
125
- .with(:query, query_data: default_params.merge(mode: :evaluate))
126
- .and_return(["result object"])
127
- result = query.evaluate
128
- result_second = query.evaluate
129
- result.should be(result_second)
194
+ query.should_receive(:do_raw_query).and_return({parsed_data: {data: [1,2,3]}})
195
+ query.ids.should eq([1, 2, 3])
130
196
  end
131
197
  end
132
198
 
133
199
  context "count" do
134
- it "gets the count via do_query" do
200
+ let(:transformations) {[{transformation: :count, parameter: nil}]}
201
+
202
+ it "adds a count transformation" do
135
203
  query = subject.new(model)
136
- model.should_receive(:get_raw).with(:query, query_data: default_params.merge(mode: :count))
137
- .and_return({parsed_data: {data: {count: 42}}})
204
+ query.should_receive(:do_raw_query).and_return({parsed_data: {data: {count: 42}}})
138
205
  query.count.should eq(42)
206
+ query.transformations.should eq(self.transformations)
139
207
  end
140
208
 
141
209
  it "uses cached result for counting" do
142
210
  query = subject.new(model)
143
211
  query.result = ["a", "b", "c"]
144
- query.should_not_receive(:do_query)
212
+ query.should_not_receive(:do_raw_query)
145
213
  query.count.should eq(3)
146
214
  end
147
215
  end
148
216
 
149
217
  context "paginate" do
150
- it "paginates results" do
218
+ let(:transformations) {[{transformation: :paginate, parameter: {page: 1, per_page: 10}}]}
219
+
220
+
221
+ it "adds a paginate transformation" do
151
222
  query = subject.new(model)
152
223
  objects = (1..10).to_a
153
- model.should_receive(:get_raw).with(:query, query_data: default_params.merge({mode: :paginate, page: 1, per_page: 10})).and_return({parsed_data: {data: {objects: objects, total: 15}, errors: []}})
154
- objects.should_receive(:map).and_return(objects)
155
- result = query.paginate(page: 1, per_page: 10)
156
- result.should eq((1..10).to_a)
224
+ model.stub(:new).and_return(*objects)
225
+ query.should_receive(:do_raw_query).and_return({parsed_data: {data: {objects: objects, total: 15}, errors: []}})
226
+ result = query.paginate
227
+ query.transformations.should eq(self.transformations)
228
+ result.should eq(objects)
157
229
  result.is_a?(WillPaginate::Collection)
158
230
  result.total_entries.should eq(15)
159
231
  end
@@ -169,4 +241,64 @@ describe QueryInterface::Client::LazyQuery do
169
241
  end
170
242
  end
171
243
 
244
+ context "do queries" do
245
+ it "queries the api raw" do
246
+ query = subject.new(model)
247
+ model.should_receive(:get_raw).with(:query, transformations: [])
248
+ query.do_raw_query
249
+ end
250
+
251
+ it "executes the actual query and creates a collection where appropriate" do
252
+ query = subject.new(model)
253
+ data = {parsed_data: {data: [1,2,3]}}
254
+ query.should_receive(:do_raw_query).and_return(data)
255
+ query.should_receive(:instantiate_collection).with(data[:parsed_data])
256
+ query.do_query
257
+ end
258
+
259
+ it "executes the actual query and creates an object where appropriate" do
260
+ query = subject.new(model)
261
+ data = {parsed_data: {data: {id: 1, bunny: 'wuschel'}}}
262
+ query.should_receive(:do_raw_query).and_return(data)
263
+ query.should_receive(:parse).and_return(data[:parsed_data])
264
+ query.should_receive(:instantiate).with(data[:parsed_data].merge(_metadata: nil, _errors: nil))
265
+ query.do_query
266
+ end
267
+
268
+ end
269
+
270
+ context "parsing" do
271
+ let(:result_model) { double("result model") }
272
+ let(:data) { double("data") }
273
+
274
+ it "parses the data via result model if set" do
275
+ query = subject.new(model)
276
+ query.result_model = result_model
277
+ result_model.should_receive(:parse).with(data)
278
+ query.parse(data)
279
+ end
280
+
281
+ it "parses the data via model if no result model set" do
282
+ query = subject.new(model)
283
+ model.should_receive(:parse).with(data)
284
+ query.parse(data)
285
+ end
286
+ end
287
+
288
+ context "to_json" do
289
+ let(:transformations) {[]}
290
+ let(:result) { double("result") }
291
+ before do
292
+ model.should_receive(:get_raw)
293
+ .with(:query, transformations: self.transformations)
294
+ .and_return({parsed_data: {data: ["result object"]}})
295
+ model.stub(:new_collection).and_return(result)
296
+ end
297
+ it "calls to_json on the evaluated result" do
298
+ query = subject.new(model)
299
+ result.should_receive(:to_json)
300
+ query.to_json
301
+ end
302
+ end
303
+
172
304
  end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,6 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter "vendor/"
4
+ add_filter "spec/"
5
+ end
1
6
  require 'query-interface-client'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: query-interface-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Kopecky <andreas.kopecky@radarservices.com>
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-07-10 00:00:00.000000000 Z
13
+ date: 2013-10-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: her
@@ -40,6 +40,20 @@ dependencies:
40
40
  - - '>='
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: activesupport
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
43
57
  - !ruby/object:Gem::Dependency
44
58
  name: rake
45
59
  requirement: !ruby/object:Gem::Requirement