neuron-client 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1 +1,21 @@
1
- rvm use ruby-1.9.2@neuron-client
1
+ #!/usr/bin/env bash
2
+
3
+ ruby_string="1.8.7"
4
+ gemset_name="neuron-client"
5
+
6
+ if rvm list strings | grep -q "${ruby_string}" ; then
7
+
8
+ # Load or create the specified environment
9
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
10
+ && -s "${rvm_path:-$HOME/.rvm}/environments/${ruby_string}@${gemset_name}" ]] ; then
11
+ \. "${rvm_path:-$HOME/.rvm}/environments/${ruby_string}@${gemset_name}"
12
+ else
13
+ rvm --create "${ruby_string}@${gemset_name}"
14
+ fi
15
+
16
+ else
17
+
18
+ # Notify the user to install the desired interpreter before proceeding.
19
+ echo "${ruby_string} was not found, please run 'rvm install ${ruby_string}' and then cd back into the project directory."
20
+
21
+ fi
data/Rakefile CHANGED
@@ -20,5 +20,5 @@ end
20
20
  desc "Open development console"
21
21
  task :console do
22
22
  puts "Loading development console..."
23
- system "irb -I #{File.join('.', 'lib')} -r #{File.join('.', 'lib', 'neuron-client')}"
23
+ system "irb -I #{File.join('.', 'lib')} -r #{File.join('.', 'environment')}"
24
24
  end
data/environment.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.require(:default, :test, :development)
data/lib/neuron-client.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require "rubygems"
2
+ require "tzinfo"
3
+ require "active_support" #TODO: when we upgrade to 3.x, this can be "active_support/core_ext"
1
4
  require "active_support/core_ext"
2
5
  require "neuron-client/version"
3
6
  require "neuron-client/admin_connection"
@@ -49,7 +49,10 @@ module Neuron
49
49
 
50
50
  def configure_membase_connection
51
51
  required(@config, :membase_servers)
52
- self.connection = MembaseConnection.new(config.membase_servers)
52
+ self.connection = MembaseConnection.new(config.membase_servers,
53
+ :local_cache_size => config[:local_cache_size],
54
+ :local_cache_expires => config[:local_cache_expires]
55
+ )
53
56
  end
54
57
 
55
58
  class << self
@@ -1,4 +1,5 @@
1
1
  require 'dalli'
2
+ require 'lrucache'
2
3
 
3
4
  module Neuron
4
5
  module Client
@@ -6,12 +7,36 @@ module Neuron
6
7
 
7
8
  attr_reader :client
8
9
 
9
- def initialize(servers)
10
+ def initialize(servers, opts={})
10
11
  @client = Dalli::Client.new(servers)
12
+ @local_cache = LRUCache.new(
13
+ :max_items => opts[:local_cache_size],
14
+ :ttl => opts[:local_cache_expires] || 60.seconds)
11
15
  end
12
16
 
13
- def get(key)
14
- @client.get(key)
17
+ def get(key, ttl=nil)
18
+ @local_cache.fetch(key, local_ttl(ttl)) do
19
+ @client.get(key)
20
+ end
21
+ end
22
+
23
+ def fetch(key, ttl=nil, options=nil, &callback)
24
+ @local_cache.fetch(key, local_ttl(ttl)) do
25
+ @client.fetch(key, options, &callback)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def local_ttl(ttl)
32
+ return nil if ttl.nil?
33
+ ttl = Float(ttl)
34
+ local_ttl = @local_cache.ttl
35
+ if local_ttl.nil? || local_ttl == 0 || local_ttl > ttl
36
+ ttl
37
+ else
38
+ nil
39
+ end
15
40
  end
16
41
  end
17
42
  end
@@ -4,7 +4,7 @@ module Neuron
4
4
  module Admin
5
5
  module Base
6
6
  def attributes
7
- self.class.attributes || []
7
+ self.class.superclass.attributes || []
8
8
  end
9
9
 
10
10
  def to_hash(*except)
@@ -55,7 +55,7 @@ module Neuron
55
55
  end
56
56
 
57
57
  def self.included(base)
58
- base.send(:attr_accessor, :errors)
58
+ base.superclass.send(:attr_accessor, :errors)
59
59
  base.extend(ClassMethods)
60
60
  end
61
61
 
@@ -73,7 +73,7 @@ module Neuron
73
73
  end
74
74
 
75
75
  def create(attrs={})
76
- @errors = catch (:errors) do
76
+ @errors = catch(:errors) do
77
77
  return create!(attrs)
78
78
  end
79
79
  nil
@@ -9,7 +9,7 @@ module Neuron
9
9
  end
10
10
 
11
11
  def method_missing(meth, *args, &block)
12
- (@proxied_model.methods.include?(meth) ? @proxied_model.send(meth, *args, &block) : super)
12
+ (@proxied_model.respond_to?(meth) ? @proxied_model.send(meth, *args, &block) : super)
13
13
  end
14
14
 
15
15
  class << self
@@ -29,7 +29,7 @@ module Neuron
29
29
  end
30
30
 
31
31
  def method_missing(meth, *args, &block)
32
- (class_to_proxy.methods.include?(meth) ? class_to_proxy.send(meth, *args, &block) : super)
32
+ (class_to_proxy.respond_to?(meth) ? class_to_proxy.send(meth, *args, &block) : super)
33
33
  end
34
34
  end
35
35
  end
@@ -91,7 +91,7 @@ module Neuron
91
91
  # Doesn't worry about whether or not the time is in the ad's date range.
92
92
  # Assumes ad is partitioned.
93
93
  def partitioned_hour?(time)
94
- day_partitions[(time.wday * 24) + time.hour] == 'T'
94
+ day_partitions.at((time.wday * 24) + time.hour) == 'T'
95
95
  end
96
96
 
97
97
  # Assume time is in the time zone of the ad.
@@ -3,6 +3,10 @@ module Neuron
3
3
  module Model
4
4
  module Membase
5
5
  class Ad < Common::Ad
6
+
7
+ ACTIVE_TTL = 60 #seconds
8
+ PRESSURE_TTL = 60 #seconds
9
+
6
10
  def total_impressed
7
11
  key = "count_delivery_ad_#{self.id}"
8
12
  self.class.connection.get(key).to_f
@@ -15,6 +19,18 @@ module Neuron
15
19
  self.class.connection.get(key).to_f
16
20
  end
17
21
 
22
+ def active?
23
+ self.class.connection.fetch("Ad:#{id}:active", ACTIVE_TTL) do
24
+ calculate_active?(Time.now, total_impressed, today_impressed)
25
+ end
26
+ end
27
+
28
+ def pressure
29
+ self.class.connection.fetch("Ad:#{id}:pressure", PRESSURE_TTL) do
30
+ calculate_pressure(Time.now, total_impressed, today_impressed)
31
+ end
32
+ end
33
+
18
34
  class << self
19
35
  def find(id)
20
36
  ad = nil
@@ -3,6 +3,15 @@ module Neuron
3
3
  module Model
4
4
  module Membase
5
5
  class Zone < Common::Zone
6
+
7
+ ADS_BY_PRIORITY_TTL = 60
8
+
9
+ def ads_by_priority
10
+ self.class.connection.fetch("Zone:#{id}:ads_by_priority", ADS_BY_PRIORITY_TTL) do
11
+ calculate_ads_by_priority
12
+ end
13
+ end
14
+
6
15
  class << self
7
16
  def find(id)
8
17
  zone = nil
@@ -1,5 +1,5 @@
1
1
  module Neuron
2
2
  module Client
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -19,10 +19,11 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
  s.add_dependency "rest-client", "~> 1.6.3"
21
21
  s.add_dependency "yajl-ruby", "~> 0.8.2"
22
- s.add_dependency "activesupport", "~> 3.0.10"
22
+ s.add_dependency "activesupport", ">= 2.3.11", "< 3.2"
23
23
  s.add_dependency "tzinfo", "~> 0.3.29"
24
24
  s.add_dependency "i18n", "~> 0.6.0"
25
25
  s.add_dependency "dalli", "~> 1.0.5"
26
+ s.add_dependency "lrucache", "~> 0.1.0"
26
27
 
27
28
  s.add_development_dependency "rspec", "~> 2.6.0"
28
29
  s.add_development_dependency "simplecov", "~> 0.4.2"
@@ -1,403 +1,219 @@
1
- ---
2
- - !ruby/struct:VCR::HTTPInteraction
3
- request: !ruby/struct:VCR::Request
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
4
  method: :post
5
5
  uri: http://127.0.0.1:3000/s3_files.json?api_key=secret
6
- body: !!null
7
- headers:
8
- accept:
6
+ body:
7
+ headers:
8
+ accept:
9
9
  - application/json
10
- accept-encoding:
11
- - gzip, deflate
12
- content-type:
10
+ content-type:
13
11
  - application/json
14
- content-length:
15
- - '77'
16
- response: !ruby/struct:VCR::Response
17
- status: !ruby/struct:VCR::ResponseStatus
12
+ accept-encoding:
13
+ - gzip, deflate
14
+ content-length:
15
+ - "77"
16
+ response: !ruby/struct:VCR::Response
17
+ status: !ruby/struct:VCR::ResponseStatus
18
18
  code: 201
19
19
  message: Created
20
- headers:
21
- location:
20
+ headers:
21
+ x-ua-compatible:
22
+ - IE=Edge
23
+ location:
22
24
  - http://127.0.0.1:3000/s3_files/1
23
- content-type:
25
+ content-type:
24
26
  - application/json; charset=utf-8
25
- cache-control:
26
- - no-cache
27
- x-ua-compatible:
28
- - IE=Edge
29
- x-runtime:
30
- - '2.156203'
31
- server:
27
+ date:
28
+ - Thu, 08 Sep 2011 19:15:34 GMT
29
+ server:
32
30
  - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
33
- date:
34
- - Tue, 26 Jul 2011 21:15:03 GMT
35
- content-length:
36
- - '156'
37
- set-cookie:
38
- - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNTkyMGNkZGRkZGEzMmI3ODFiMDhlZjI3ZjZjN2Y5ZTY%3D--abc9759030ac57f081014793dd0a18200acd40ce;
39
- path=/; HttpOnly
40
- body: !str
41
- str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
42
- net_http_res: &30964600 !ruby/object:Net::HTTPCreated
43
- http_version: '1.0'
44
- code: '201'
45
- message: Created
46
- header:
47
- location:
48
- - http://127.0.0.1:3000/s3_files/1
49
- content-type:
50
- - application/json; charset=utf-8
51
- cache-control:
52
- - no-cache
53
- x-ua-compatible:
54
- - IE=Edge
55
- x-runtime:
56
- - '2.156203'
57
- server:
58
- - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
59
- date:
60
- - Tue, 26 Jul 2011 21:15:03 GMT
61
- content-length:
62
- - '156'
63
- set-cookie:
64
- - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNTkyMGNkZGRkZGEzMmI3ODFiMDhlZjI3ZjZjN2Y5ZTY%3D--abc9759030ac57f081014793dd0a18200acd40ce;
65
- path=/; HttpOnly
66
- body: !str
67
- str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
68
- net_http_res: *30964600
69
- args: &30979260
70
- :method: :post
71
- :url: http://127.0.0.1:3000/s3_files.json?api_key=secret
72
- :payload: ! '{"s3_file":{"bucket":"test","filename":"filename","purpose":"RAW_EVENT_LOG"}}'
73
- :headers:
74
- :content_type: :json
75
- :accept: :json
76
- code: 201
77
- read: true
78
- args: *30979260
79
- code: 201
80
- http_version: '1.1'
81
- - !ruby/struct:VCR::HTTPInteraction
82
- request: !ruby/struct:VCR::Request
31
+ x-runtime:
32
+ - "0.271855"
33
+ content-length:
34
+ - "172"
35
+ set-cookie:
36
+ - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlMGYwMjIzYzc3ZjAzYjIwNDYzYjhlN2FmN2E1MmI5MGI%3D--f9c0be3ce928c665c7e4008c87bc8ae44725dcb4; path=/; HttpOnly
37
+ cache-control:
38
+ - no-cache
39
+ body: "{\"s3_file\":{\"bucket\":\"test\",\"created_at\":\"2011-09-08T19:15:34Z\",\"filename\":\"filename\",\"filesize\":null,\"id\":1,\"purpose\":\"RAW_EVENT_LOG\",\"updated_at\":\"2011-09-08T19:15:34Z\"}}"
40
+ http_version: "1.1"
41
+ - !ruby/struct:VCR::HTTPInteraction
42
+ request: !ruby/struct:VCR::Request
83
43
  method: :get
84
44
  uri: http://127.0.0.1:3000/s3_files.json?api_key=secret
85
- body: !!null
86
- headers:
87
- accept:
45
+ body:
46
+ headers:
47
+ accept:
88
48
  - application/json
89
- accept-encoding:
90
- - gzip, deflate
91
- content-type:
49
+ content-type:
92
50
  - application/json
93
- response: !ruby/struct:VCR::Response
94
- status: !ruby/struct:VCR::ResponseStatus
51
+ accept-encoding:
52
+ - gzip, deflate
53
+ response: !ruby/struct:VCR::Response
54
+ status: !ruby/struct:VCR::ResponseStatus
95
55
  code: 200
96
56
  message: OK
97
- headers:
98
- content-type:
99
- - application/json; charset=utf-8
100
- etag:
101
- - ! '"f28f9f731f02abb52de52eeb140f3904"'
102
- cache-control:
103
- - max-age=0, private, must-revalidate
104
- x-ua-compatible:
57
+ headers:
58
+ x-ua-compatible:
105
59
  - IE=Edge
106
- x-runtime:
107
- - '0.058083'
108
- server:
60
+ etag:
61
+ - "\"f653f39c883bdf1acabccea70ef2cb84\""
62
+ content-type:
63
+ - application/json; charset=utf-8
64
+ date:
65
+ - Thu, 08 Sep 2011 19:15:34 GMT
66
+ server:
109
67
  - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
110
- date:
111
- - Tue, 26 Jul 2011 21:15:03 GMT
112
- content-length:
113
- - '158'
114
- body: !str
115
- str: ! '[{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}]'
116
- net_http_res: &30899300 !ruby/object:Net::HTTPOK
117
- http_version: '1.0'
118
- code: '200'
119
- message: OK
120
- header:
121
- content-type:
122
- - application/json; charset=utf-8
123
- etag:
124
- - ! '"f28f9f731f02abb52de52eeb140f3904"'
125
- cache-control:
126
- - max-age=0, private, must-revalidate
127
- x-ua-compatible:
128
- - IE=Edge
129
- x-runtime:
130
- - '0.058083'
131
- server:
132
- - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
133
- date:
134
- - Tue, 26 Jul 2011 21:15:03 GMT
135
- content-length:
136
- - '158'
137
- body: !str
138
- str: ! '[{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}]'
139
- net_http_res: *30899300
140
- args: &30918140
141
- :method: :get
142
- :url: http://127.0.0.1:3000/s3_files.json?api_key=secret
143
- :headers:
144
- :content_type: :json
145
- :accept: :json
146
- code: 200
147
- read: true
148
- args: *30918140
149
- code: 200
150
- http_version: '1.1'
151
- - !ruby/struct:VCR::HTTPInteraction
152
- request: !ruby/struct:VCR::Request
68
+ x-runtime:
69
+ - "0.417905"
70
+ content-length:
71
+ - "174"
72
+ cache-control:
73
+ - max-age=0, private, must-revalidate
74
+ body: "[{\"s3_file\":{\"bucket\":\"test\",\"created_at\":\"2011-09-08T19:15:34Z\",\"filename\":\"filename\",\"filesize\":null,\"id\":1,\"purpose\":\"RAW_EVENT_LOG\",\"updated_at\":\"2011-09-08T19:15:34Z\"}}]"
75
+ http_version: "1.1"
76
+ - !ruby/struct:VCR::HTTPInteraction
77
+ request: !ruby/struct:VCR::Request
153
78
  method: :get
154
79
  uri: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
155
- body: !!null
156
- headers:
157
- accept:
80
+ body:
81
+ headers:
82
+ accept:
158
83
  - application/json
159
- accept-encoding:
160
- - gzip, deflate
161
- content-type:
84
+ content-type:
162
85
  - application/json
163
- response: !ruby/struct:VCR::Response
164
- status: !ruby/struct:VCR::ResponseStatus
86
+ accept-encoding:
87
+ - gzip, deflate
88
+ response: !ruby/struct:VCR::Response
89
+ status: !ruby/struct:VCR::ResponseStatus
165
90
  code: 200
166
91
  message: OK
167
- headers:
168
- content-type:
169
- - application/json; charset=utf-8
170
- etag:
171
- - ! '"67aa857a0fae3ef759591bfd7c6ce984"'
172
- cache-control:
173
- - max-age=0, private, must-revalidate
174
- x-ua-compatible:
92
+ headers:
93
+ x-ua-compatible:
175
94
  - IE=Edge
176
- x-runtime:
177
- - '0.058488'
178
- server:
95
+ etag:
96
+ - "\"a4662af39919ae7cebe8fab76bb44b76\""
97
+ content-type:
98
+ - application/json; charset=utf-8
99
+ date:
100
+ - Thu, 08 Sep 2011 19:15:35 GMT
101
+ server:
179
102
  - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
180
- date:
181
- - Tue, 26 Jul 2011 21:15:03 GMT
182
- content-length:
183
- - '156'
184
- body: !str
185
- str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
186
- net_http_res: &30863640 !ruby/object:Net::HTTPOK
187
- http_version: '1.0'
188
- code: '200'
189
- message: OK
190
- header:
191
- content-type:
192
- - application/json; charset=utf-8
193
- etag:
194
- - ! '"67aa857a0fae3ef759591bfd7c6ce984"'
195
- cache-control:
196
- - max-age=0, private, must-revalidate
197
- x-ua-compatible:
198
- - IE=Edge
199
- x-runtime:
200
- - '0.058488'
201
- server:
202
- - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
203
- date:
204
- - Tue, 26 Jul 2011 21:15:03 GMT
205
- content-length:
206
- - '156'
207
- body: !str
208
- str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
209
- net_http_res: *30863640
210
- args: &30882500
211
- :method: :get
212
- :url: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
213
- :headers:
214
- :content_type: :json
215
- :accept: :json
216
- code: 200
217
- read: true
218
- args: *30882500
219
- code: 200
220
- http_version: '1.1'
221
- - !ruby/struct:VCR::HTTPInteraction
222
- request: !ruby/struct:VCR::Request
103
+ x-runtime:
104
+ - "0.370982"
105
+ content-length:
106
+ - "172"
107
+ cache-control:
108
+ - max-age=0, private, must-revalidate
109
+ body: "{\"s3_file\":{\"bucket\":\"test\",\"created_at\":\"2011-09-08T19:15:34Z\",\"filename\":\"filename\",\"filesize\":null,\"id\":1,\"purpose\":\"RAW_EVENT_LOG\",\"updated_at\":\"2011-09-08T19:15:34Z\"}}"
110
+ http_version: "1.1"
111
+ - !ruby/struct:VCR::HTTPInteraction
112
+ request: !ruby/struct:VCR::Request
223
113
  method: :get
224
114
  uri: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
225
- body: !!null
226
- headers:
227
- accept:
115
+ body:
116
+ headers:
117
+ accept:
228
118
  - application/json
229
- accept-encoding:
230
- - gzip, deflate
231
- content-type:
119
+ content-type:
232
120
  - application/json
233
- response: !ruby/struct:VCR::Response
234
- status: !ruby/struct:VCR::ResponseStatus
121
+ accept-encoding:
122
+ - gzip, deflate
123
+ response: !ruby/struct:VCR::Response
124
+ status: !ruby/struct:VCR::ResponseStatus
235
125
  code: 200
236
126
  message: OK
237
- headers:
238
- content-type:
239
- - application/json; charset=utf-8
240
- etag:
241
- - ! '"67aa857a0fae3ef759591bfd7c6ce984"'
242
- cache-control:
243
- - max-age=0, private, must-revalidate
244
- x-ua-compatible:
127
+ headers:
128
+ x-ua-compatible:
245
129
  - IE=Edge
246
- x-runtime:
247
- - '0.103646'
248
- server:
130
+ etag:
131
+ - "\"a4662af39919ae7cebe8fab76bb44b76\""
132
+ content-type:
133
+ - application/json; charset=utf-8
134
+ date:
135
+ - Thu, 08 Sep 2011 19:15:35 GMT
136
+ server:
249
137
  - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
250
- date:
251
- - Tue, 26 Jul 2011 21:15:03 GMT
252
- content-length:
253
- - '156'
254
- body: !str
255
- str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
256
- net_http_res: &30800000 !ruby/object:Net::HTTPOK
257
- http_version: '1.0'
258
- code: '200'
259
- message: OK
260
- header:
261
- content-type:
262
- - application/json; charset=utf-8
263
- etag:
264
- - ! '"67aa857a0fae3ef759591bfd7c6ce984"'
265
- cache-control:
266
- - max-age=0, private, must-revalidate
267
- x-ua-compatible:
268
- - IE=Edge
269
- x-runtime:
270
- - '0.103646'
271
- server:
272
- - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
273
- date:
274
- - Tue, 26 Jul 2011 21:15:03 GMT
275
- content-length:
276
- - '156'
277
- body: !str
278
- str: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
279
- net_http_res: *30800000
280
- args: &30814500
281
- :method: :get
282
- :url: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
283
- :headers:
284
- :content_type: :json
285
- :accept: :json
286
- code: 200
287
- read: true
288
- args: *30814500
289
- code: 200
290
- http_version: '1.1'
291
- - !ruby/struct:VCR::HTTPInteraction
292
- request: !ruby/struct:VCR::Request
138
+ x-runtime:
139
+ - "0.432809"
140
+ content-length:
141
+ - "172"
142
+ cache-control:
143
+ - max-age=0, private, must-revalidate
144
+ body: "{\"s3_file\":{\"bucket\":\"test\",\"created_at\":\"2011-09-08T19:15:34Z\",\"filename\":\"filename\",\"filesize\":null,\"id\":1,\"purpose\":\"RAW_EVENT_LOG\",\"updated_at\":\"2011-09-08T19:15:34Z\"}}"
145
+ http_version: "1.1"
146
+ - !ruby/struct:VCR::HTTPInteraction
147
+ request: !ruby/struct:VCR::Request
293
148
  method: :put
294
149
  uri: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
295
- body: !!null
296
- headers:
297
- accept:
150
+ body:
151
+ headers:
152
+ accept:
298
153
  - application/json
299
- accept-encoding:
300
- - gzip, deflate
301
- content-type:
154
+ content-type:
302
155
  - application/json
303
- content-length:
304
- - '37'
305
- response: !ruby/struct:VCR::Response
306
- status: !ruby/struct:VCR::ResponseStatus
156
+ accept-encoding:
157
+ - gzip, deflate
158
+ content-length:
159
+ - "37"
160
+ response: !ruby/struct:VCR::Response
161
+ status: !ruby/struct:VCR::ResponseStatus
307
162
  code: 200
308
163
  message: OK
309
- headers:
310
- content-type:
311
- - application/json; charset=utf-8
312
- etag:
313
- - ! '"99914b932bd37a50b983c5e7c90ae93b"'
314
- cache-control:
315
- - max-age=0, private, must-revalidate
316
- x-ua-compatible:
164
+ headers:
165
+ x-ua-compatible:
317
166
  - IE=Edge
318
- x-runtime:
319
- - '0.062569'
320
- server:
167
+ etag:
168
+ - "\"99914b932bd37a50b983c5e7c90ae93b\""
169
+ content-type:
170
+ - application/json; charset=utf-8
171
+ date:
172
+ - Thu, 08 Sep 2011 19:15:36 GMT
173
+ server:
321
174
  - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
322
- date:
323
- - Tue, 26 Jul 2011 21:15:03 GMT
324
- content-length:
325
- - '2'
326
- set-cookie:
327
- - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlODcyMjcxYjA1YzMzYjhmY2Q4YTQyY2NmMTg3ZWZlNjM%3D--3ea83e017a27c14576690a4d98b58f12c9c3b480;
328
- path=/; HttpOnly
329
- body: ! '{}'
330
- http_version: '1.1'
331
- - !ruby/struct:VCR::HTTPInteraction
332
- request: !ruby/struct:VCR::Request
175
+ x-runtime:
176
+ - "0.377332"
177
+ content-length:
178
+ - "2"
179
+ set-cookie:
180
+ - _neuron-admin_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNDk0OWE5MjQ1MDk2OGQ3NDM5OWI2MjIyMTMwNTdkZTI%3D--b9b28d47b6b1ead701897392b8486b60cc1a8f53; path=/; HttpOnly
181
+ cache-control:
182
+ - max-age=0, private, must-revalidate
183
+ body: "{}"
184
+ http_version: "1.1"
185
+ - !ruby/struct:VCR::HTTPInteraction
186
+ request: !ruby/struct:VCR::Request
333
187
  method: :get
334
188
  uri: http://127.0.0.1:3000/s3_files/1.json?api_key=secret
335
- body: !!null
336
- headers:
337
- accept:
189
+ body:
190
+ headers:
191
+ accept:
338
192
  - application/json
339
- accept-encoding:
340
- - gzip, deflate
341
- content-type:
193
+ content-type:
342
194
  - application/json
343
- response: !ruby/struct:VCR::Response
344
- status: !ruby/struct:VCR::ResponseStatus
195
+ accept-encoding:
196
+ - gzip, deflate
197
+ response: !ruby/struct:VCR::Response
198
+ status: !ruby/struct:VCR::ResponseStatus
345
199
  code: 200
346
200
  message: OK
347
- headers:
348
- content-type:
349
- - application/json; charset=utf-8
350
- etag:
351
- - ! '"717dca0db92d340da526fc4e869d36a6"'
352
- cache-control:
353
- - max-age=0, private, must-revalidate
354
- x-ua-compatible:
201
+ headers:
202
+ x-ua-compatible:
355
203
  - IE=Edge
356
- x-runtime:
357
- - '0.102077'
358
- server:
204
+ etag:
205
+ - "\"2e781d02ae0edd8b484cab6de90dac46\""
206
+ content-type:
207
+ - application/json; charset=utf-8
208
+ date:
209
+ - Thu, 08 Sep 2011 19:15:36 GMT
210
+ server:
359
211
  - WEBrick/1.3.1 (Ruby/1.9.2/2011-07-09)
360
- date:
361
- - Tue, 26 Jul 2011 21:15:03 GMT
362
- content-length:
363
- - '158'
364
- body: ! '{"s3_file":{"bucket":"test","created_at":"2011-07-26T21:15:03Z","filename":"filename_2","id":1,"purpose":"RAW_EVENT_LOG","updated_at":"2011-07-26T21:15:03Z"}}'
365
- http_version: '1.1'
366
- - !ruby/struct:VCR::HTTPInteraction
367
- request: !ruby/struct:VCR::Request
368
- method: :put
369
- uri: http://127.0.0.1:3000//1.json?api_key=secret
370
- body: !!null
371
- headers:
372
- accept:
373
- - application/json
374
- accept-encoding:
375
- - gzip, deflate
376
- content-type:
377
- - application/json
378
- content-length:
379
- - '30'
380
- response: !ruby/struct:VCR::Response
381
- status: !ruby/struct:VCR::ResponseStatus
382
- code: 404
383
- message: Not Found
384
- headers:
385
- content-type:
386
- - text/html
387
- content-length:
388
- - '627'
389
- x-runtime:
390
- - '0.299115'
391
- connection:
392
- - keep-alive
393
- server:
394
- - thin 1.2.11 codename Bat-Shit Crazy
395
- body: ! "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n <title>Action
396
- Controller: Exception caught</title>\n <style>\n body { background-color:
397
- #fff; color: #333; }\n\n body, p, ol, ul, td {\n font-family: verdana,
398
- arial, helvetica, sans-serif;\n font-size: 13px;\n line-height:
399
- 18px;\n }\n\n pre {\n background-color: #eee;\n padding: 10px;\n
400
- \ font-size: 11px;\n }\n\n a { color: #000; }\n a:visited { color:
401
- #666; }\n a:hover { color: #fff; background-color:#000; }\n </style>\n</head>\n<body>\n\n<h1>Routing
402
- Error</h1>\n<p><pre>No route matches &quot;/1.json&quot;</pre></p>\n\n\n\n</body>\n</html>\n"
403
- http_version: '1.1'
212
+ x-runtime:
213
+ - "0.430121"
214
+ content-length:
215
+ - "174"
216
+ cache-control:
217
+ - max-age=0, private, must-revalidate
218
+ body: "{\"s3_file\":{\"bucket\":\"test\",\"created_at\":\"2011-09-08T19:15:34Z\",\"filename\":\"filename_2\",\"filesize\":null,\"id\":1,\"purpose\":\"RAW_EVENT_LOG\",\"updated_at\":\"2011-09-08T19:15:36Z\"}}"
219
+ http_version: "1.1"
@@ -1,82 +1,180 @@
1
1
  module Neuron
2
2
  module Client
3
3
  describe AdminConnection do
4
+
5
+ def stub_rest_client(receive, with_args, yield_args)
6
+ expectation = RestClient.should_receive(receive).with(*with_args)
7
+ if RUBY_VERSION =~ /^1\.8\./
8
+ expectation.and_yield(yield_args)
9
+ elsif RUBY_VERSION =~ /^1\.9\./
10
+ expectation.and_yield(*yield_args)
11
+ end
12
+ end
13
+
14
+ before(:each) do
15
+ @ac = AdminConnection.new('url', 'key')
16
+ @response = mock(:response, :code=>200, :to_str=>"{}")
17
+ @request = mock(:request)
18
+ @result = mock(:result)
19
+ end
20
+
4
21
  describe "initialize(url, key)" do
5
- it "should set the appropriate instance variables"
22
+ it "should set the appropriate instance variables" do
23
+ @ac.class.should == Neuron::Client::AdminConnection
24
+ end
6
25
  end
7
26
 
8
27
  describe "query_string(attrs={})" do
9
- it "should return the expected value"
28
+ it "should return the expected value" do
29
+ @ac.query_string({}).should == "api_key=key"
30
+ @ac.query_string(:foo=>'foo').split('&').sort.should == ["api_key=key","foo=foo"]
31
+ end
10
32
  end
11
33
 
12
34
  describe "get(path="", attrs={})" do
13
35
  context "when response.code is 200" do
14
36
  context "when the format is :json" do
15
- it "should call the expected methods and return the expected value"
37
+ it "should call the expected methods and return the expected value" do
38
+ stub_rest_client(:get, ["url/json?api_key=key", {:content_type=>:json, :accept=>:json}], [@response, @request, @result])
39
+ @ac.get().should == Yajl.load(@response.to_str)
40
+ end
16
41
  end
17
42
  end
18
43
  context "when response.code is not 200" do
19
- it "it should raise an error"
44
+ it "it should raise an error" do
45
+ @response.should_receive(:code).twice.and_return(500)
46
+ stub_rest_client(:get,["url/json?api_key=key", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
47
+ lambda{
48
+ @ac.get()
49
+ }.should raise_error
50
+ end
20
51
  end
21
52
  end
22
53
 
23
54
  describe "post(path="", form={}, attrs={})" do
24
55
  context "when response.code is 201" do
25
56
  context "when the format is :json" do
26
- it "should call the expected methods and return the expected value"
57
+ it "should call the expected methods and return the expected value" do
58
+ @response.should_receive(:code).and_return(201)
59
+ stub_rest_client(:post,["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
60
+ @ac.post().should == Yajl.load(@response.to_str)
61
+ end
27
62
  end
28
63
  context "when the format is not :json" do
29
- it "should call the expected methods and return the expected value"
64
+ it "should call the expected methods and return the expected value" do
65
+ @response.should_receive(:code).and_return(201)
66
+ stub_rest_client(:post,["url/path.html?api_key=key", "{}", {:content_type=>:html, :accept=>:html}],[@response, @request, @result])
67
+ @ac.post(:path, "{}", :format=>:html).should == @response.to_str
68
+ end
30
69
  end
31
70
  end
32
71
  context "when response.code is 422" do
33
72
  context "when the format is :json" do
34
- it "should throw the expected symbol and object"
73
+ it "should throw the expected symbol and object" do
74
+ @response.should_receive(:code).and_return(422)
75
+ stub_rest_client(:post, ["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
76
+ lambda{
77
+ @ac.post()
78
+ }.should raise_error
79
+ end
35
80
  end
36
81
  context "when the format is not :json" do
37
- it "should throw the expected symbol and object"
82
+ it "should throw the expected symbol and object" do
83
+ @response.should_receive(:code).and_return(422)
84
+ stub_rest_client(:post, ["url/path.html?api_key=key", "{}", {:content_type=>:html, :accept=>:html}],[@response, @request, @result])
85
+ lambda{
86
+ @ac.post(:path, "{}", :format=>:html)
87
+ }.should raise_error
88
+ end
38
89
  end
39
90
  end
40
91
  context "when response.code is not 201 or 422" do
41
- it "should raise an error"
92
+ it "should raise an error" do
93
+ @response.should_receive(:code).and_return(500)
94
+ stub_rest_client(:post,["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
95
+ lambda{
96
+ @ac.post()
97
+ }.should raise_error
98
+ end
42
99
  end
43
100
  end
44
-
101
+
45
102
  describe "put(path="", form={}, attrs={})" do
46
103
  context "when response.code is 200" do
47
104
  context "when the format is :json" do
48
- it "should call the expected methods and return the expected value"
105
+ it "should call the expected methods and return the expected value" do
106
+ @response.should_receive(:code).and_return(200)
107
+ stub_rest_client(:put,["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
108
+ @ac.put().should == Yajl.load(@response.to_str)
109
+ end
49
110
  end
50
111
  context "when the format is not :json" do
51
- it "should call the expected methods and return the expected value"
112
+ it "should call the expected methods and return the expected value" do
113
+ @response.should_receive(:code).and_return(200)
114
+ stub_rest_client(:put,["url/path.html?api_key=key", "{}", {:content_type=>:html, :accept=>:html}],[@response, @request, @result])
115
+ @ac.put(:path, "{}", :format=>:html).should == @response.to_str
116
+ end
52
117
  end
53
118
  end
54
119
  context "when response.code is 422" do
55
120
  context "when the format is :json" do
56
- it "should throw the expected symbol and object"
121
+ it "should throw the expected symbol and object" do
122
+ @response.should_receive(:code).and_return(422)
123
+ stub_rest_client(:put,["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
124
+ lambda{
125
+ @ac.put()
126
+ }.should raise_error
127
+ end
57
128
  end
58
129
  context "when the format is not :json" do
59
- it "should throw the expected symbol and object"
130
+ it "should throw the expected symbol and object" do
131
+ @response.should_receive(:code).and_return(422)
132
+ stub_rest_client(:put,["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
133
+ lambda{
134
+ @ac.put()
135
+ }.should raise_error
136
+ end
60
137
  end
61
138
  end
62
139
  context "when response.code is not 200 or 422" do
63
- it "should raise an error"
140
+ it "should raise an error" do
141
+ @response.should_receive(:code).and_return(500)
142
+ stub_rest_client(:put,["url/json?api_key=key", "{}", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
143
+ lambda{
144
+ @ac.put()
145
+ }.should raise_error
146
+ end
64
147
  end
65
148
  end
66
-
149
+
67
150
  describe "delete(path="", attrs={})" do
68
151
  context "when response.code is 200" do
69
152
  context "when format is :json" do
70
- it "should call the expected methods and return the expected value"
153
+ it "should call the expected methods and return the expected value" do
154
+ @response.should_receive(:code).and_return(200)
155
+ stub_rest_client(:delete,["url/path.json?api_key=key", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
156
+ @ac.delete(:path).should == Yajl.load(@response.to_str)
157
+ end
71
158
  end
72
159
  context "when format is not :json" do
73
- it "should call the expected methods and return the expected value"
160
+ it "should call the expected methods and return the expected value" do
161
+ @response.should_receive(:code).and_return(200)
162
+ stub_rest_client(:delete,["url/path.html?api_key=key", {:content_type=>:html, :accept=>:html}],[@response, @request, @result])
163
+ @ac.delete(:path, :format=>:html).should == @response.to_str
164
+ end
74
165
  end
75
166
  end
76
167
  context "when response.code is not 200" do
77
- it "should raise an error"
168
+ it "should raise an error" do
169
+ @response.should_receive(:code).and_return(500)
170
+ stub_rest_client(:delete,["url/json?api_key=key", {:content_type=>:json, :accept=>:json}],[@response, @request, @result])
171
+ lambda{
172
+ @ac.delete()
173
+ }.should raise_error
174
+ end
78
175
  end
79
176
  end
177
+
80
178
  end
81
179
  end
82
180
  end
@@ -14,12 +14,12 @@ module Neuron
14
14
 
15
15
  describe "get(key)" do
16
16
  it "should call the expected method and return the expected value" do
17
- m = MembaseConnection.allocate
18
17
  c = stub(:client)
19
- m.instance_variable_set(:@client, c)
18
+ Dalli::Client.should_receive(:new).with('127.0.0.1:11211').and_return(c)
19
+ m = MembaseConnection.new('127.0.0.1:11211')
20
20
  c.should_receive(:get).with('key_value')
21
21
 
22
- m.get('key_value')
22
+ m.get('key_value', 42)
23
23
  end
24
24
  end
25
25
  end
@@ -19,9 +19,12 @@ module Neuron
19
19
  describe AdCalculations do
20
20
  context "given an Ad with date range Sat, 01 Jan 2011, 00:00 -> Tue, 01 Feb 2011, 12:00; Beijing time; Day parted for 9:00 - 17:00, M-F; Daily cap of 10; Overall cap of 100; total_impressed of 50; today_impressed of 5" do
21
21
  before(:each) do
22
+ @time_zone = "Beijing"
23
+ Time.zone = @time_zone
24
+ Chronic.time_class = Time.zone
22
25
  @ad = FakeAd.new(
23
- :start_datetime => Time.new(2011,1,1,0,0,0,"+08:00"),
24
- :end_datetime => Time.new(2011,2,1,12,0,0,"+08:00"),
26
+ :start_datetime => Chronic.parse("2011-01-01 00:00"),
27
+ :end_datetime => Chronic.parse("2011-02-01 12:00"),
25
28
  :time_zone => "Beijing",
26
29
  :day_partitions => "F"*24 + ("F"*9 + "T"*8 + "F"*7)*5 + "F"*24,
27
30
  :daily_cap => 10,
@@ -32,22 +35,22 @@ module Neuron
32
35
  )
33
36
  end
34
37
  it "should be inactive on December 10th, 2010" do
35
- Timecop.freeze(Time.new(2010,12,10)) do
38
+ Timecop.freeze(Chronic.parse("2010-12-10")) do
36
39
  @ad.active?.should be_false
37
40
  end
38
41
  end
39
42
  it "should be inactive on January 1st, 2011" do
40
- Timecop.freeze(Time.new(2011,1,1,10,0,0,"+08:00")) do
43
+ Timecop.freeze(Chronic.parse("2011-01-01 10:00")) do
41
44
  @ad.active?.should be_false
42
45
  end
43
46
  end
44
47
  it "should be inactive on January 3rd, 2011 at 5:00 AM" do
45
- Timecop.freeze(Time.new(2011,1,3,5,0,0,"+08:00")) do
48
+ Timecop.freeze(Chronic.parse("2011-01-03 05:00")) do
46
49
  @ad.active?.should be_false
47
50
  end
48
51
  end
49
52
  context "on January 3rd, 2011 at 10:00 AM" do
50
- before(:each) { Timecop.freeze(Time.new(2011,1,3,10,0,0,"+08:00")) }
53
+ before(:each) { Timecop.freeze(Chronic.parse("2011-01-03 10:00")) }
51
54
  after(:each) { Timecop.return }
52
55
  it "should be active" do
53
56
  @ad.active?.should be_true
@@ -57,7 +60,7 @@ module Neuron
57
60
  end
58
61
  end
59
62
  context "on January 3rd, 2011 at 16:00" do
60
- before(:each) { Timecop.freeze(Time.new(2011,1,3,16,0,0,"+08:00")) }
63
+ before(:each) { Timecop.freeze(Chronic.parse("2011-1-3 16:00")) }
61
64
  after(:each) { Timecop.return }
62
65
  it "should be active" do
63
66
  @ad.active?.should be_true
@@ -67,7 +70,7 @@ module Neuron
67
70
  end
68
71
  end
69
72
  context "on January 27th, 2011 at 16:00" do
70
- before(:each) { Timecop.freeze(Time.new(2011,1,27,16,0,0,"+08:00")) }
73
+ before(:each) { Timecop.freeze(Chronic.parse("2011-1-27 16:00")) }
71
74
  after(:each) { Timecop.return }
72
75
  it "should be active" do
73
76
  @ad.active?.should be_true
@@ -77,7 +80,7 @@ module Neuron
77
80
  end
78
81
  end
79
82
  it "should be inactive on February 1st, 2011 at 13:00" do
80
- Timecop.freeze(Time.new(2011,2,1,13,0,0,"+08:00")) do
83
+ Timecop.freeze(Chronic.parse("2011-2-1 13:00")) do
81
84
  @ad.active?.should be_false
82
85
  end
83
86
  end
@@ -17,7 +17,7 @@ module Neuron
17
17
  it "should call the expected methods and return the expected value" do
18
18
  a = Ad.allocate
19
19
  a.should_receive(:time_zone).and_return('time_zone_value')
20
- Time.stub_chain(:now, :in_time_zone).with('time_zone_value').and_return(Time.new(2011, 5, 6, 7, 8, 9))
20
+ Time.stub_chain(:now, :in_time_zone).with('time_zone_value').and_return(Time.parse("2011-05-06 07:08"))
21
21
  a.should_receive(:id).and_return(7)
22
22
  Ad.stub_chain(:connection, :get).with('count_delivery_20110506_ad_7').and_return('99.99')
23
23
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neuron-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
9
+ - 1
10
+ version: 0.2.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - RMM Online
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-01 00:00:00 -05:00
18
+ date: 2011-09-08 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -56,14 +56,21 @@ dependencies:
56
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
57
  none: false
58
58
  requirements:
59
- - - ~>
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- hash: 19
61
+ hash: 21
62
62
  segments:
63
+ - 2
63
64
  - 3
64
- - 0
65
- - 10
66
- version: 3.0.10
65
+ - 11
66
+ version: 2.3.11
67
+ - - <
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 3
72
+ - 2
73
+ version: "3.2"
67
74
  type: :runtime
68
75
  version_requirements: *id003
69
76
  - !ruby/object:Gem::Dependency
@@ -115,9 +122,25 @@ dependencies:
115
122
  type: :runtime
116
123
  version_requirements: *id006
117
124
  - !ruby/object:Gem::Dependency
118
- name: rspec
125
+ name: lrucache
119
126
  prerelease: false
120
127
  requirement: &id007 !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ~>
131
+ - !ruby/object:Gem::Version
132
+ hash: 27
133
+ segments:
134
+ - 0
135
+ - 1
136
+ - 0
137
+ version: 0.1.0
138
+ type: :runtime
139
+ version_requirements: *id007
140
+ - !ruby/object:Gem::Dependency
141
+ name: rspec
142
+ prerelease: false
143
+ requirement: &id008 !ruby/object:Gem::Requirement
121
144
  none: false
122
145
  requirements:
123
146
  - - ~>
@@ -129,11 +152,11 @@ dependencies:
129
152
  - 0
130
153
  version: 2.6.0
131
154
  type: :development
132
- version_requirements: *id007
155
+ version_requirements: *id008
133
156
  - !ruby/object:Gem::Dependency
134
157
  name: simplecov
135
158
  prerelease: false
136
- requirement: &id008 !ruby/object:Gem::Requirement
159
+ requirement: &id009 !ruby/object:Gem::Requirement
137
160
  none: false
138
161
  requirements:
139
162
  - - ~>
@@ -145,11 +168,11 @@ dependencies:
145
168
  - 2
146
169
  version: 0.4.2
147
170
  type: :development
148
- version_requirements: *id008
171
+ version_requirements: *id009
149
172
  - !ruby/object:Gem::Dependency
150
173
  name: rb-fsevent
151
174
  prerelease: false
152
- requirement: &id009 !ruby/object:Gem::Requirement
175
+ requirement: &id010 !ruby/object:Gem::Requirement
153
176
  none: false
154
177
  requirements:
155
178
  - - ~>
@@ -161,11 +184,11 @@ dependencies:
161
184
  - 3
162
185
  version: 0.4.3
163
186
  type: :development
164
- version_requirements: *id009
187
+ version_requirements: *id010
165
188
  - !ruby/object:Gem::Dependency
166
189
  name: guard
167
190
  prerelease: false
168
- requirement: &id010 !ruby/object:Gem::Requirement
191
+ requirement: &id011 !ruby/object:Gem::Requirement
169
192
  none: false
170
193
  requirements:
171
194
  - - ~>
@@ -177,11 +200,11 @@ dependencies:
177
200
  - 2
178
201
  version: 0.6.2
179
202
  type: :development
180
- version_requirements: *id010
203
+ version_requirements: *id011
181
204
  - !ruby/object:Gem::Dependency
182
205
  name: guard-bundler
183
206
  prerelease: false
184
- requirement: &id011 !ruby/object:Gem::Requirement
207
+ requirement: &id012 !ruby/object:Gem::Requirement
185
208
  none: false
186
209
  requirements:
187
210
  - - ~>
@@ -193,11 +216,11 @@ dependencies:
193
216
  - 3
194
217
  version: 0.1.3
195
218
  type: :development
196
- version_requirements: *id011
219
+ version_requirements: *id012
197
220
  - !ruby/object:Gem::Dependency
198
221
  name: guard-rspec
199
222
  prerelease: false
200
- requirement: &id012 !ruby/object:Gem::Requirement
223
+ requirement: &id013 !ruby/object:Gem::Requirement
201
224
  none: false
202
225
  requirements:
203
226
  - - ~>
@@ -209,11 +232,11 @@ dependencies:
209
232
  - 2
210
233
  version: 0.4.2
211
234
  type: :development
212
- version_requirements: *id012
235
+ version_requirements: *id013
213
236
  - !ruby/object:Gem::Dependency
214
237
  name: fakeweb
215
238
  prerelease: false
216
- requirement: &id013 !ruby/object:Gem::Requirement
239
+ requirement: &id014 !ruby/object:Gem::Requirement
217
240
  none: false
218
241
  requirements:
219
242
  - - ~>
@@ -225,11 +248,11 @@ dependencies:
225
248
  - 0
226
249
  version: 1.3.0
227
250
  type: :development
228
- version_requirements: *id013
251
+ version_requirements: *id014
229
252
  - !ruby/object:Gem::Dependency
230
253
  name: vcr
231
254
  prerelease: false
232
- requirement: &id014 !ruby/object:Gem::Requirement
255
+ requirement: &id015 !ruby/object:Gem::Requirement
233
256
  none: false
234
257
  requirements:
235
258
  - - ~>
@@ -241,11 +264,11 @@ dependencies:
241
264
  - 1
242
265
  version: 1.11.1
243
266
  type: :development
244
- version_requirements: *id014
267
+ version_requirements: *id015
245
268
  - !ruby/object:Gem::Dependency
246
269
  name: timecop
247
270
  prerelease: false
248
- requirement: &id015 !ruby/object:Gem::Requirement
271
+ requirement: &id016 !ruby/object:Gem::Requirement
249
272
  none: false
250
273
  requirements:
251
274
  - - ~>
@@ -257,11 +280,11 @@ dependencies:
257
280
  - 5
258
281
  version: 0.3.5
259
282
  type: :development
260
- version_requirements: *id015
283
+ version_requirements: *id016
261
284
  - !ruby/object:Gem::Dependency
262
285
  name: chronic
263
286
  prerelease: false
264
- requirement: &id016 !ruby/object:Gem::Requirement
287
+ requirement: &id017 !ruby/object:Gem::Requirement
265
288
  none: false
266
289
  requirements:
267
290
  - - ~>
@@ -273,7 +296,7 @@ dependencies:
273
296
  - 2
274
297
  version: 0.6.2
275
298
  type: :development
276
- version_requirements: *id016
299
+ version_requirements: *id017
277
300
  description: Neuron Admin Client Gem
278
301
  email:
279
302
  - devteam@rmmonline.com
@@ -290,6 +313,7 @@ files:
290
313
  - Guardfile
291
314
  - README.md
292
315
  - Rakefile
316
+ - environment.rb
293
317
  - lib/neuron-client.rb
294
318
  - lib/neuron-client/admin_connection.rb
295
319
  - lib/neuron-client/api.rb