cellect-client 0.0.7 → 0.0.8

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: aa613e71bf121890b018f0a6d738b4a4882d5548
4
- data.tar.gz: e9d91db66e59cf82c2d17aff465493933c772838
3
+ metadata.gz: 1bef3620635a4c9925ddec189583b56ccf60ed08
4
+ data.tar.gz: 4cf61ff3a15c4661df6279efb382fb0be24cee0c
5
5
  SHA512:
6
- metadata.gz: b9dea858e333ec11796df53a7521b269df50004a7fd2072cb33fcbdacf8bfb7967539b4b82b5201ad48863dbdcb78c835e819c83cb9b54273ca703e6d7febbd1
7
- data.tar.gz: b8244dd21f8889e2f4d7ee443bb3b2c894af4fd6f8295d4ee2d30f94f6697f19c8e9acbae4847dcfa7d046b5b17f7da1b7a1d126a381222cf2110d357198c1a5
6
+ metadata.gz: 60fe4c89fb71a17972eefb544e76e13960e2e84b94fef1f75b4076730bb2a09180eab9e106ce37d2bff2f108af88b1a1c34dd5c0e8b2c834f5723b8bb5e12ae3
7
+ data.tar.gz: fe2197a0d56baae9439755057e03c3391a6655ca7b40716137d79c76f10866115a5800ff253f945c81da597536bea6571f31fe02480076ca927641dcc4c063ab
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_runtime_dependency 'celluloid-io', '0.16.0.pre'
33
33
  spec.add_runtime_dependency 'http', '~> 0.6'
34
34
  spec.add_runtime_dependency 'zk', '~> 1.9'
35
+ spec.add_runtime_dependency 'multi_json', '~> 1.10.1'
35
36
  end
@@ -1,7 +1,9 @@
1
1
  require 'http'
2
+ require 'multi_json'
2
3
 
3
4
  module Cellect
4
5
  module Client
6
+ class CellectServerError < StandardError; end
5
7
  class Connection
6
8
  include Celluloid
7
9
  include Celluloid::IO
@@ -31,7 +33,9 @@ module Cellect
31
33
  end
32
34
 
33
35
  def get_subjects(user_id: user_id, host: host, workflow_id: workflow_id, limit: limit, group_id: group_id)
34
- send_http host, :get, "/workflows/#{ workflow_id }", querystring(user_id: user_id, group_id: group_id, limit: limit)
36
+ response = send_http host, :get, "/workflows/#{ workflow_id }", querystring(user_id: user_id, group_id: group_id, limit: limit)
37
+ ensure_valid_response response
38
+ MultiJson.load response.body
35
39
  end
36
40
 
37
41
  protected
@@ -57,6 +61,12 @@ module Cellect
57
61
  end
58
62
  end.join('&')
59
63
  end
64
+
65
+ def ensure_valid_response(response)
66
+ unless response.code == 200
67
+ raise CellectServerError, "Server Responded #{ response.code }"
68
+ end
69
+ end
60
70
  end
61
71
  end
62
72
  end
@@ -1,3 +1,3 @@
1
1
  module Cellect
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'
3
3
  end
@@ -5,11 +5,11 @@ module Cellect::Client
5
5
  let(:connection){ Cellect::Client.connection }
6
6
 
7
7
  before(:each) do
8
- Cellect::Client.node_set.stub(:nodes).and_return 'a' => '1', 'b' => '2'
8
+ allow(Cellect::Client.node_set).to receive(:nodes).and_return 'a' => '1', 'b' => '2'
9
9
  end
10
10
 
11
11
  def should_send(action: action, url: url, to: to)
12
- HTTP.should_receive(:send).with action, "http://#{ to }/#{ url }", socket_class: Celluloid::IO::TCPSocket
12
+ expect(HTTP).to receive(:send).with(action, "http://#{ to }/#{ url }", socket_class: Celluloid::IO::TCPSocket).and_return(HTTP::Response.new(200, nil, nil, "{ \"this response\": \"intentionally blank\" }"))
13
13
  end
14
14
 
15
15
  def should_broadcast(action: action, url: url)
@@ -60,12 +60,30 @@ module Cellect::Client
60
60
  should_send action: :put, url: 'workflows/random/users/123/add_seen?subject_id=456', to: 1
61
61
  connection.add_seen subject_id: 456, host: '1', user_id: 123, workflow_id: 'random'
62
62
  end
63
-
63
+
64
64
  it 'should get subjects' do
65
65
  should_send action: :get, url: 'workflows/random?user_id=1&group_id=1&limit=10', to: 1
66
66
  connection.get_subjects host: '1', workflow_id: 'random', user_id: 1, limit: 10, group_id: 1
67
67
  should_send action: :get, url: 'workflows/random?user_id=1', to: 1
68
68
  connection.get_subjects host: '1', workflow_id: 'random', user_id: 1
69
69
  end
70
+
71
+ context 'getting subjects' do
72
+ def get_subjects
73
+ connection.get_subjects host: '1', workflow_id: 'random', user_id: 1, limit: 10, group_id: 1
74
+ end
75
+
76
+ it 'should return subjects as an array' do
77
+ response = HTTP::Response.new 200, '1.1', nil, '[1, 2, 3, 4, 5]'
78
+ allow(HTTP).to receive(:send).and_return response
79
+ expect(get_subjects).to eq [1, 2, 3, 4, 5]
80
+ end
81
+
82
+ it 'should raise an error for unexpected responses' do
83
+ response = HTTP::Response.new 404, '1.1', nil, ''
84
+ allow(HTTP).to receive(:send).and_return response
85
+ expect{ get_subjects }.to raise_error Cellect::Client::CellectServerError, 'Server Responded 404'
86
+ end
87
+ end
70
88
  end
71
89
  end
@@ -14,7 +14,7 @@ module Cellect::Client
14
14
  Thread.pass
15
15
  end
16
16
 
17
- node_set.nodes['node0000000001'].should == 'foo'
17
+ expect(node_set.nodes['node0000000001']).to eq 'foo'
18
18
  ensure
19
19
  node_set.zk.delete '/nodes/node0000000001'
20
20
  end
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,7 @@ end
8
8
  Bundler.require :test, :development
9
9
 
10
10
  ENV['CELLECT_POOL_SIZE'] = '3'
11
+ SPAWN_ZK = !ENV['ZK_URL']
11
12
 
12
13
  require 'pry'
13
14
  require 'oj'
@@ -24,7 +25,6 @@ Cellect::Server.adapter = SpecAdapter.new
24
25
  SET_TYPES = %w(random priority pairwise_random pairwise_priority)
25
26
 
26
27
  RSpec.configure do |config|
27
- config.treat_symbols_as_metadata_keys_with_true_values = true
28
28
  config.run_all_when_everything_filtered = true
29
29
  config.filter_run :focus
30
30
  config.order = 'random'
@@ -37,6 +37,6 @@ RSpec.configure do |config|
37
37
  end
38
38
 
39
39
  config.after(:suite) do
40
- `zkServer stop #{ CELLECT_ZK_CONFIG } > /dev/null 2>&1`
40
+ `zkServer stop #{ CELLECT_ZK_CONFIG } > /dev/null 2>&1` if SPAWN_ZK
41
41
  end
42
42
  end
@@ -2,24 +2,24 @@ shared_examples_for 'node set' do
2
2
  let(:node_set){ Cellect::NodeSet.new }
3
3
 
4
4
  it 'should connect to zoo keeper' do
5
- node_set.zk.should be_nil
5
+ expect(node_set.zk).to be_nil
6
6
  pass_until node_set, is: :ready
7
- node_set.zk.should be_connected
7
+ expect(node_set.zk).to be_connected
8
8
  end
9
9
 
10
10
  it 'should know the connection state' do
11
- node_set.state.should be :initializing
11
+ expect(node_set.state).to be :initializing
12
12
  pass_until node_set, is: :ready
13
- node_set.should be_ready
13
+ expect(node_set).to be_ready
14
14
  end
15
15
 
16
16
  it 'should accept a connection string' do
17
17
  begin
18
18
  pass_until node_set, is: :ready
19
19
  ENV['ZK_URL'] = 'foobar'
20
- node_set.send(:zk_url).should == 'foobar'
20
+ expect(node_set.send(:zk_url)).to eq 'foobar'
21
21
  ENV.delete 'ZK_URL'
22
- node_set.send(:zk_url).should == 'localhost:2181'
22
+ expect(node_set.send(:zk_url)).to eq 'localhost:2181'
23
23
  ensure
24
24
  ENV['ZK_URL'] = 'localhost:21811'
25
25
  end
@@ -1,11 +1,11 @@
1
1
  shared_examples_for 'a set' do
2
2
  it 'should convert to an Array' do
3
- set.to_a.should =~ (1..5).to_a
3
+ expect(set.to_a).to eq (1..5).to_a
4
4
  end
5
5
 
6
6
  it 'should add elements' do
7
7
  set.add 100
8
- set.to_a.should include 100
8
+ expect(set.to_a).to include 100
9
9
  end
10
10
 
11
11
  it 'should remove elements' do
@@ -14,7 +14,7 @@ shared_examples_for 'a set' do
14
14
  end
15
15
 
16
16
  it 'should sample elements' do
17
- set.sample(2).length.should == 2
17
+ expect(set.sample(2).length).to eq 2
18
18
  end
19
19
 
20
20
  it 'should not include removed elements in samples' do
@@ -29,6 +29,6 @@ shared_examples_for 'a set' do
29
29
  it 'should know if it contains an element' do
30
30
  set.should_not include 100
31
31
  set.add 100
32
- set.should include 100
32
+ expect(set).to include 100
33
33
  end
34
34
  end
@@ -6,21 +6,21 @@ shared_examples_for 'workflow' do |name|
6
6
  end
7
7
 
8
8
  it 'should add singleton instances to the registry' do
9
- obj.class[:foo].should be_a_kind_of Cellect::Server::Workflow
10
- obj.class[:foo].object_id.should == obj.class[:foo].object_id
9
+ expect(obj.class[:foo]).to be_a_kind_of Cellect::Server::Workflow
10
+ expect(obj.class[:foo].object_id).to eq obj.class[:foo].object_id
11
11
  end
12
12
 
13
13
  it 'should initialize empty' do
14
- obj.name.should be_a String
15
- obj.users.should be_a Hash
14
+ expect(obj.name).to be_a String
15
+ expect(obj.users).to be_a Hash
16
16
 
17
17
  set_klass = obj.prioritized? ? DiffSet::PrioritySet : DiffSet::RandomSet
18
- obj.subjects.should be_a set_klass
18
+ expect(obj.subjects).to be_a set_klass
19
19
  end
20
20
 
21
21
  it 'should provide a user lookup' do
22
- obj.user(1).should be_a Cellect::Server::User
23
- obj.user(1).object_id.should == obj.user(1).object_id
24
- obj.users.keys.should include 1
22
+ expect(obj.user(1)).to be_a Cellect::Server::User
23
+ expect(obj.user(1).object_id).to eq obj.user(1).object_id
24
+ expect(obj.users.keys).to include 1
25
25
  end
26
26
  end
@@ -1,26 +1,28 @@
1
- zk_dir = File.join CELLECT_ROOT, 'tmp/zookeeper'
2
-
3
- `rm -rf #{ zk_dir }; mkdir -p #{ zk_dir }`
4
-
5
- CELLECT_ZK_CONFIG = "#{ zk_dir }/zoo.cfg"
6
- File.open(CELLECT_ZK_CONFIG, 'w') do |out|
7
- out.puts <<-TEXT
8
- tickTime=2000
9
- initLimit=10
10
- syncLimit=5
11
- dataDir=#{ zk_dir }
12
- clientPort=21811
13
- forceSync=no
14
- snapCount=1000000
15
- TEXT
1
+ if SPAWN_ZK
2
+ zk_dir = File.join CELLECT_ROOT, 'tmp/zookeeper'
3
+ CELLECT_ZK_CONFIG = "#{ zk_dir }/zoo.cfg"
4
+
5
+ `rm -rf #{ zk_dir }; mkdir -p #{ zk_dir }`
6
+
7
+ File.open(CELLECT_ZK_CONFIG, 'w') do |out|
8
+ out.puts <<-TEXT
9
+ tickTime=2000
10
+ initLimit=10
11
+ syncLimit=5
12
+ dataDir=#{ zk_dir }
13
+ clientPort=21811
14
+ forceSync=no
15
+ snapCount=1000000
16
+ TEXT
17
+ end
18
+
19
+ if `echo ruok | nc 127.0.0.1 21811`.chomp == 'imok'
20
+ pid = `ps aux | grep -e 'Cellect[\/]tmp[\/]zookeeper'`.split[1]
21
+ puts "Killing rogue zookeeper process: #{ pid }..."
22
+ `kill -s TERM #{ pid }`
23
+ sleep 1
24
+ end
25
+
26
+ `zkServer start #{ CELLECT_ZK_CONFIG } > /dev/null 2>&1`
27
+ ENV['ZK_URL'] = 'localhost:21811'
16
28
  end
17
-
18
- if `echo ruok | nc 127.0.0.1 21811`.chomp == 'imok'
19
- pid = `ps aux | grep -e 'Cellect[\/]tmp[\/]zookeeper'`.split[1]
20
- puts "Killing rogue zookeeper process: #{ pid }..."
21
- `kill -s TERM #{ pid }`
22
- sleep 1
23
- end
24
-
25
- `zkServer start #{ CELLECT_ZK_CONFIG } > /dev/null 2>&1`
26
- ENV['ZK_URL'] = 'localhost:21811'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cellect-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Parrish
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '1.9'
153
+ - !ruby/object:Gem::Dependency
154
+ name: multi_json
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 1.10.1
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 1.10.1
153
167
  description: ''
154
168
  email:
155
169
  - michael@zooniverse.org
@@ -216,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
230
  version: '0'
217
231
  requirements: []
218
232
  rubyforge_project:
219
- rubygems_version: 2.2.2
233
+ rubygems_version: 2.4.2
220
234
  signing_key:
221
235
  specification_version: 4
222
236
  summary: ''