asynchronic 0.1.0 → 0.2.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.
Files changed (37) hide show
  1. data/lib/asynchronic.rb +0 -2
  2. data/lib/asynchronic/data_store/helper.rb +42 -0
  3. data/lib/asynchronic/data_store/in_memory.rb +18 -22
  4. data/lib/asynchronic/data_store/key.rb +19 -1
  5. data/lib/asynchronic/data_store/lazy_store.rb +17 -0
  6. data/lib/asynchronic/data_store/lazy_value.rb +34 -0
  7. data/lib/asynchronic/data_store/readonly_store.rb +17 -0
  8. data/lib/asynchronic/data_store/redis.rb +16 -27
  9. data/lib/asynchronic/data_store/scoped_store.rb +52 -0
  10. data/lib/asynchronic/environment.rb +7 -27
  11. data/lib/asynchronic/job.rb +15 -27
  12. data/lib/asynchronic/process.rb +105 -76
  13. data/lib/asynchronic/queue_engine/in_memory.rb +5 -1
  14. data/lib/asynchronic/queue_engine/ost.rb +5 -1
  15. data/lib/asynchronic/queue_engine/synchronic.rb +68 -0
  16. data/lib/asynchronic/transparent_proxy.rb +52 -0
  17. data/lib/asynchronic/version.rb +1 -1
  18. data/spec/data_store/data_store_examples.rb +48 -32
  19. data/spec/data_store/in_memory_spec.rb +5 -0
  20. data/spec/data_store/key_spec.rb +36 -12
  21. data/spec/data_store/lazy_value_examples.rb +38 -0
  22. data/spec/data_store/redis_spec.rb +17 -0
  23. data/spec/data_store/scoped_store_spec.rb +60 -0
  24. data/spec/expectations.rb +7 -7
  25. data/spec/facade_spec.rb +15 -13
  26. data/spec/jobs.rb +70 -49
  27. data/spec/minitest_helper.rb +11 -1
  28. data/spec/process/life_cycle_examples.rb +149 -135
  29. data/spec/queue_engine/synchronic_spec.rb +27 -0
  30. data/spec/transparent_proxy_spec.rb +36 -0
  31. data/spec/worker/worker_examples.rb +1 -1
  32. metadata +117 -79
  33. checksums.yaml +0 -7
  34. data/lib/asynchronic/data_store/lookup.rb +0 -27
  35. data/lib/asynchronic/hash.rb +0 -31
  36. data/lib/asynchronic/runtime.rb +0 -40
  37. data/spec/data_store/lookup_spec.rb +0 -92
@@ -1,31 +0,0 @@
1
- class Hash
2
- def with_indiferent_access
3
- HashWithIndiferentAccess.new self
4
- end
5
- end
6
-
7
- class HashWithIndiferentAccess < Hash
8
-
9
- def initialize(hash=nil)
10
- merge! hash if hash
11
- end
12
-
13
- def [](key)
14
- if key?(key) || !transformable_key?(key)
15
- super
16
- else
17
- super transform_key(key)
18
- end
19
- end
20
-
21
- private
22
-
23
- def transformable_key?(key)
24
- key.is_a?(String) || key.is_a?(Symbol)
25
- end
26
-
27
- def transform_key(key)
28
- key.is_a?(String) ? key.to_sym : key.to_s
29
- end
30
-
31
- end
@@ -1,40 +0,0 @@
1
- module Asynchronic
2
- class Runtime
3
-
4
- attr_reader :process
5
-
6
- def initialize(process)
7
- @process = process
8
- end
9
-
10
- def evaluate
11
- begin
12
- @data = process.data
13
- process.job.local.each { |k,v| define_singleton_method(k) { v } }
14
- instance_eval &process.job.class.implementation
15
- ensure
16
- process.merge @data
17
- end
18
- end
19
-
20
- def self.evaluate(process)
21
- new(process).evaluate
22
- end
23
-
24
- private
25
-
26
- def define_job(job_class, options={})
27
- defaults = {
28
- parent: process.job.lookup.id,
29
- queue: job_class.queue || process.queue
30
- }
31
-
32
- process.env.build_job job_class, defaults.merge(options)
33
- end
34
-
35
- def data
36
- @data
37
- end
38
-
39
- end
40
- end
@@ -1,92 +0,0 @@
1
- require 'minitest_helper'
2
-
3
- describe Asynchronic::DataStore::Lookup do
4
-
5
- describe 'One level' do
6
-
7
- let(:job) { Asynchronic::Job.new }
8
- let(:lookup) { Asynchronic::DataStore::Lookup.new job }
9
-
10
- it 'Id' do
11
- lookup.id.must_equal "job:#{job.id}"
12
- end
13
-
14
- it 'Status' do
15
- lookup.status.must_equal "job:#{job.id}:status"
16
- end
17
-
18
- it 'Data' do
19
- lookup.data.must_equal "job:#{job.id}:data"
20
- end
21
-
22
- it 'Jobs' do
23
- lookup.jobs.must_equal "job:#{job.id}:jobs"
24
- end
25
-
26
- it 'Error' do
27
- lookup.error.must_equal "job:#{job.id}:error"
28
- end
29
-
30
- it 'Created At' do
31
- lookup.created_at.must_equal "job:#{job.id}:created_at"
32
- end
33
-
34
- it 'Queued At' do
35
- lookup.queued_at.must_equal "job:#{job.id}:queued_at"
36
- end
37
-
38
- it 'Started At' do
39
- lookup.started_at.must_equal "job:#{job.id}:started_at"
40
- end
41
-
42
- it 'Finalized At' do
43
- lookup.finalized_at.must_equal "job:#{job.id}:finalized_at"
44
- end
45
-
46
- end
47
-
48
- describe 'Two levels' do
49
-
50
- let(:parent) { "job:#{SecureRandom.uuid}" }
51
- let(:job) { Asynchronic::Job.new parent: parent }
52
- let(:lookup) { Asynchronic::DataStore::Lookup.new job }
53
-
54
- it 'Id' do
55
- lookup.id.must_equal "#{parent}:jobs:#{job.id}"
56
- end
57
-
58
- it 'Status' do
59
- lookup.status.must_equal "#{parent}:jobs:#{job.id}:status"
60
- end
61
-
62
- it 'Data' do
63
- lookup.data.must_equal "#{parent}:jobs:#{job.id}:data"
64
- end
65
-
66
- it 'Jobs' do
67
- lookup.jobs.must_equal "#{parent}:jobs:#{job.id}:jobs"
68
- end
69
-
70
- it 'Error' do
71
- lookup.error.must_equal "#{parent}:jobs:#{job.id}:error"
72
- end
73
-
74
- it 'Created At' do
75
- lookup.created_at.must_equal "#{parent}:jobs:#{job.id}:created_at"
76
- end
77
-
78
- it 'Queued At' do
79
- lookup.queued_at.must_equal "#{parent}:jobs:#{job.id}:queued_at"
80
- end
81
-
82
- it 'Started At' do
83
- lookup.started_at.must_equal "#{parent}:jobs:#{job.id}:started_at"
84
- end
85
-
86
- it 'Finalized At' do
87
- lookup.finalized_at.must_equal "#{parent}:jobs:#{job.id}:finalized_at"
88
- end
89
-
90
- end
91
-
92
- end