cellect-client 2.1.1 → 3.0.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: 629d4f83d1f5203b9daac11d92da40ed592a0f33
4
- data.tar.gz: 7225f6c225eaf55deaa1e28c2e051bc31bad222b
3
+ metadata.gz: 1078227bba61ad301cc8455264181baf5fd6cd87
4
+ data.tar.gz: 66a0abcc056d63bd77c0b0d6fd49b1e0f65c2e12
5
5
  SHA512:
6
- metadata.gz: 32f22dfd59946343e81873f938c4bfad24b8f32ae55216516a8d37664755352c2b871109e980e840fa6ab6c500846a8a9d8f422b162676d52591ab6b78e9747a
7
- data.tar.gz: 686c2f16afef3cd6a0f58c5fdd41436eda271e97279930a8a838ba18a58f49ad872943fdb6cceff1be7a3afa2acfb7e806c25d24b700d2a80ec83f3190fcae15
6
+ metadata.gz: 20f5686575a9f73df5df7d9d811eac8663b469769a0f83e5eb19bbc9895ab11ee33d7e63c5baf5869331fe4687d3987d9e8a649c326a3cd55d1865d375d4acae
7
+ data.tar.gz: 95431db5865b17a590f44beac3e3f8fa6c2904d3969ab0fa670a275d745008443c59ba5817302e179a48021812137e274036a3e98ddb2f48283599afcc2419b6
data/.travis.yml CHANGED
@@ -13,3 +13,10 @@ rvm:
13
13
  script: bundle exec rake spec
14
14
  services:
15
15
  - redis-server
16
+
17
+ addons:
18
+ code_climate:
19
+ repo_token: $CODECLIMATE_REPO_TOKEN
20
+
21
+ after_success:
22
+ - bundle exec codeclimate-test-reporter
data/cellect.gemspec CHANGED
@@ -29,7 +29,8 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency 'puma', '~> 2.8'
30
30
  spec.add_development_dependency 'pg', '~> 0.17'
31
31
  spec.add_development_dependency 'connection_pool', '~> 2.0'
32
- spec.add_development_dependency 'codeclimate-test-reporter'
32
+ spec.add_development_dependency "simplecov"
33
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0.0"
33
34
 
34
35
  spec.add_runtime_dependency 'cellect-server', Cellect::VERSION
35
36
  spec.add_runtime_dependency 'cellect-client', Cellect::VERSION
@@ -1,3 +1,3 @@
1
1
  module Cellect
2
- VERSION = '2.1.1'
2
+ VERSION = '3.0.0'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'codeclimate-test-reporter'
2
- CodeClimate::TestReporter.start
1
+ require "simplecov"
2
+ SimpleCov.start
3
3
 
4
4
  CELLECT_ROOT = File.expand_path File.join(File.dirname(__FILE__), '../')
5
5
 
@@ -0,0 +1,42 @@
1
+ shared_examples_for 'loader' do |name|
2
+ let(:fixtures) do
3
+ Cellect::Server
4
+ .adapter
5
+ .fixtures
6
+ .fetch(workflow.name, { })
7
+ .fetch('entries', [])
8
+ end
9
+ let(:fixture_count) { fixtures.count }
10
+
11
+ describe "#load_data" do
12
+ it "should use the server adapter to load data" do
13
+ expect(Cellect::Server.adapter)
14
+ .to receive(:load_data_for)
15
+ .with(workflow.name)
16
+ .and_call_original
17
+ loader.load_data
18
+ end
19
+
20
+ it "should mark the workflow as loaded" do
21
+ expect { loader.load_data }.to change { workflow.state }.to(:ready)
22
+ end
23
+ end
24
+
25
+ describe "#reload_data" do
26
+ it "should replace the existing subjects with the reloaded set" do
27
+ expect {
28
+ loader.reload_data(subjects)
29
+ }.to change {
30
+ workflow.subjects
31
+ }.to(subjects)
32
+ end
33
+
34
+ it "should mark the workflow as ready" do
35
+ expect {
36
+ loader.reload_data(subjects)
37
+ }.to change {
38
+ workflow.state
39
+ }.to(:ready)
40
+ end
41
+ end
42
+ end
@@ -1,10 +1,4 @@
1
1
  shared_examples_for 'workflow' do |name|
2
- let(:obj){ send name }
3
-
4
- before(:each) do
5
- Cellect::Server.adapter.load_workflow obj.name
6
- end
7
-
8
2
  it 'should add singleton instances to the registry' do
9
3
  expect(obj.class[obj.name]).to be_a_kind_of Cellect::Server::Workflow
10
4
  expect(obj.class[obj.name].object_id).to eq obj.class[obj.name].object_id
@@ -14,8 +8,12 @@ shared_examples_for 'workflow' do |name|
14
8
  expect(obj.name).to be_a String
15
9
  expect(obj.users).to be_a Hash
16
10
 
17
- set_klass = obj.prioritized? ? DiffSet::PrioritySet : DiffSet::RandomSet
18
- expect(obj.subjects).to be_a set_klass
11
+ if obj.grouped?
12
+ expect(obj.subjects).to eq({})
13
+ else
14
+ set_klass = obj.prioritized? ? DiffSet::PrioritySet : DiffSet::RandomSet
15
+ expect(obj.subjects).to be_a set_klass
16
+ end
19
17
  end
20
18
 
21
19
  it 'should provide a user lookup' do
@@ -23,4 +21,82 @@ shared_examples_for 'workflow' do |name|
23
21
  expect(obj.user(1).object_id).to eq obj.user(1).object_id
24
22
  expect(obj.users.keys).to include 1
25
23
  end
24
+
25
+ context "with a celluloid stubbed async loader" do
26
+ let(:loader) do
27
+ if obj.grouped?
28
+ Cellect::Server::GroupedLoader.new(obj)
29
+ else
30
+ Cellect::Server::Loader.new(obj)
31
+ end
32
+ end
33
+ let(:celluloid_target) { loader.wrapped_object }
34
+
35
+ before do
36
+ allow(obj.wrapped_object).to receive(:data_loader).and_return(loader)
37
+ allow(loader).to receive(:async).and_return(loader)
38
+ end
39
+
40
+ describe '#load_data' do
41
+ it 'should request data from the loader' do
42
+ expect(celluloid_target).to receive(:load_data)
43
+ obj.load_data
44
+ end
45
+
46
+ it 'should not attempt to reload subjects when in ready state' do
47
+ obj.state = :ready
48
+ expect(celluloid_target).not_to receive(:load_data)
49
+ obj.load_data
50
+ end
51
+ end
52
+
53
+ describe '#reload_data' do
54
+ context "able to reload" do
55
+ before do
56
+ obj.can_reload_at = Time.now - 1
57
+ obj.state = :ready
58
+ end
59
+
60
+ it 'should request data from the loader' do
61
+ expect(celluloid_target)
62
+ .to receive(:reload_data)
63
+ .with(instance_of(obj.subjects.class))
64
+ obj.reload_data
65
+ end
66
+
67
+ it 'should not reload subjects when state is in any kind of loading' do
68
+ %i(reloading loading).each do |state|
69
+ obj.state = state
70
+ expect(celluloid_target).not_to receive(:reload_data)
71
+ obj.reload_data
72
+ end
73
+ end
74
+ end
75
+
76
+ it 'should not allow reloading until after loading' do
77
+ expect(celluloid_target).not_to receive(:reload_data)
78
+ obj.reload_data
79
+ end
80
+
81
+ context "after initial data load" do
82
+ before do
83
+ obj.state = :ready
84
+ obj.set_reload_at_time
85
+ end
86
+
87
+ it 'should not allow reloading after first load' do
88
+ expect(celluloid_target).not_to receive(:reload_data)
89
+ obj.reload_data
90
+ end
91
+
92
+ context "when reload time gaurds has past" do
93
+ it 'should allow reloading after timer has reset' do
94
+ obj.can_reload_at = Time.now - 1
95
+ expect(celluloid_target).to receive(:reload_data)
96
+ obj.reload_data
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
26
102
  end
@@ -10,7 +10,12 @@ class SpecAdapter < Cellect::Server::Adapters::Default
10
10
  end
11
11
 
12
12
  def load_data_for(workflow_name)
13
- fixtures.fetch(workflow_name, { }).fetch 'entries', []
13
+ entries = fixtures.fetch(workflow_name, { }).fetch 'entries', []
14
+ if block_given?
15
+ entries.each { |entry| yield entry }
16
+ else
17
+ entries
18
+ end
14
19
  end
15
20
 
16
21
  def fixtures
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: 2.1.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Parrish
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-09 00:00:00.000000000 Z
11
+ date: 2017-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -209,6 +209,7 @@ files:
209
209
  - spec/spec_helper.rb
210
210
  - spec/support/cellect_helper.rb
211
211
  - spec/support/shared_api_context.rb
212
+ - spec/support/shared_examples_for_loader.rb
212
213
  - spec/support/shared_examples_for_set.rb
213
214
  - spec/support/shared_examples_for_workflow.rb
214
215
  - spec/support/spec_adapter.rb
@@ -254,6 +255,7 @@ test_files:
254
255
  - spec/spec_helper.rb
255
256
  - spec/support/cellect_helper.rb
256
257
  - spec/support/shared_api_context.rb
258
+ - spec/support/shared_examples_for_loader.rb
257
259
  - spec/support/shared_examples_for_set.rb
258
260
  - spec/support/shared_examples_for_workflow.rb
259
261
  - spec/support/spec_adapter.rb