cellect-client 2.1.1 → 3.0.0

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: 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