vigilem-core 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/lib/vigilem/core.rb +9 -0
  3. data/lib/vigilem/core/abstract_device.rb +97 -0
  4. data/lib/vigilem/core/adapters.rb +2 -0
  5. data/lib/vigilem/core/adapters/adapter.rb +57 -0
  6. data/lib/vigilem/core/adapters/basic_adapter.rb +43 -0
  7. data/lib/vigilem/core/adapters/buffered_adapter.rb +28 -0
  8. data/lib/vigilem/core/buffer.rb +151 -0
  9. data/lib/vigilem/core/buffer_handler.rb +95 -0
  10. data/lib/vigilem/core/default_buffer.rb +45 -0
  11. data/lib/vigilem/core/demultiplexer.rb +225 -0
  12. data/lib/vigilem/core/device.rb +43 -0
  13. data/lib/vigilem/core/event_handler.rb +156 -0
  14. data/lib/vigilem/core/eventable.rb +80 -0
  15. data/lib/vigilem/core/hooks.rb +36 -0
  16. data/lib/vigilem/core/hooks/callback.rb +66 -0
  17. data/lib/vigilem/core/hooks/callback_proc.rb +25 -0
  18. data/lib/vigilem/core/hooks/conditional_hook.rb +62 -0
  19. data/lib/vigilem/core/hooks/hook.rb +193 -0
  20. data/lib/vigilem/core/hooks/inheritable.rb +24 -0
  21. data/lib/vigilem/core/hooks/meta_callback.rb +53 -0
  22. data/lib/vigilem/core/hooks/utils.rb +23 -0
  23. data/lib/vigilem/core/hub.rb +50 -0
  24. data/lib/vigilem/core/input_system_handler.rb +55 -0
  25. data/lib/vigilem/core/lockable_pipeline_component.rb +30 -0
  26. data/lib/vigilem/core/multiplexer.rb +168 -0
  27. data/lib/vigilem/core/pipeline.rb +68 -0
  28. data/lib/vigilem/core/stat.rb +121 -0
  29. data/lib/vigilem/core/system.rb +9 -0
  30. data/lib/vigilem/core/system/check.rb +33 -0
  31. data/lib/vigilem/core/transfer_agent.rb +67 -0
  32. data/lib/vigilem/core/version.rb +5 -0
  33. data/spec/bug_notes.txt +12 -0
  34. data/spec/given_helper.rb +12 -0
  35. data/spec/spec_helper.rb +7 -0
  36. data/spec/vigilem/core/abstract_device_spec.rb +103 -0
  37. data/spec/vigilem/core/adapters/adapter_spec.rb +28 -0
  38. data/spec/vigilem/core/adapters/basic_adapter_spec.rb +53 -0
  39. data/spec/vigilem/core/adapters/buffered_adapter_spec.rb +16 -0
  40. data/spec/vigilem/core/buffer_handler_spec.rb +51 -0
  41. data/spec/vigilem/core/buffer_spec.rb +236 -0
  42. data/spec/vigilem/core/default_buffer_spec.rb +17 -0
  43. data/spec/vigilem/core/demultiplexer_spec.rb +166 -0
  44. data/spec/vigilem/core/device_spec.rb +62 -0
  45. data/spec/vigilem/core/event_handler_spec.rb +134 -0
  46. data/spec/vigilem/core/hooks/callback_proc_spec.rb +66 -0
  47. data/spec/vigilem/core/hooks/hook_spec.rb +230 -0
  48. data/spec/vigilem/core/hooks/inheritable_spec.rb +19 -0
  49. data/spec/vigilem/core/hooks/meta_callback_spec.rb +69 -0
  50. data/spec/vigilem/core/hooks/utils_spec.rb +25 -0
  51. data/spec/vigilem/core/hooks_spec.rb +50 -0
  52. data/spec/vigilem/core/hub_spec.rb +51 -0
  53. data/spec/vigilem/core/input_system_handler_spec.rb +33 -0
  54. data/spec/vigilem/core/lockable_pipeline_component_spec.rb +19 -0
  55. data/spec/vigilem/core/multiplexer_spec.rb +113 -0
  56. data/spec/vigilem/core/pipeline_spec.rb +5 -0
  57. data/spec/vigilem/core/stat_spec.rb +63 -0
  58. data/spec/vigilem/core/system/check_spec.rb +24 -0
  59. data/spec/vigilem/core/system_spec.rb +29 -0
  60. data/spec/vigilem/core/transfer_agent_spec.rb +80 -0
  61. metadata +273 -0
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ require 'vigilem/core/device'
4
+
5
+ describe Vigilem::Core::Device do
6
+ describe '#new' do
7
+
8
+ Stat = Vigilem::Core::Stat
9
+
10
+ before(:each) do
11
+ Stat.all << double('fake_stat', :available? => true, :input_system_name => 'guy on the couch')
12
+ end
13
+
14
+ after(:each) do
15
+ Stat.all.replace([])
16
+ end
17
+
18
+ subject do
19
+ described_class.new do
20
+ on_os(/.+/) do
21
+ @adaptability_level = 'Tardigrade'
22
+ end
23
+
24
+ on_input_system(/.+/) do
25
+ @mode = 'stun'
26
+ end
27
+ after_init { @testr = 'test' }
28
+ end
29
+ end
30
+
31
+ context 'class creation' do
32
+ it 'creates a Class if block given' do
33
+ expect(subject).to be_instance_of(Class)
34
+ end
35
+ end
36
+
37
+ context 'instantiation' do
38
+
39
+ it 'throws error when settings are empty' do
40
+ expect { described_class.new }.to raise_error(RuntimeError)
41
+ end
42
+
43
+ it 'will pass system_checks' do
44
+ expect { subject.new }.to_not raise_error
45
+ end
46
+
47
+ context 'hooks' do
48
+ it 'runs #on_os hook' do
49
+ expect(subject.new.instance_variable_get(:@adaptability_level)).to eql 'Tardigrade'
50
+ end
51
+
52
+ it 'runs #on_input_system hook' do
53
+ expect(subject.new.instance_variable_get(:@mode)).to eql 'stun'
54
+ end
55
+
56
+ end
57
+ end
58
+
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,134 @@
1
+
2
+ require 'vigilem/core/event_handler'
3
+
4
+ describe Vigilem::Core::EventHandler do
5
+
6
+ class EventHandlerHost
7
+ include Vigilem::Core::EventHandler
8
+ end
9
+
10
+ subject { EventHandlerHost.new }
11
+
12
+ describe '#type_handles' do
13
+
14
+ it 'returns a Hash' do
15
+ expect(subject.type_handles).to be_a(Hash)
16
+ end
17
+ end
18
+
19
+ context 'register, execution' do
20
+
21
+ let(:handler) do
22
+ lambda do |event|
23
+ ["I'm handling it", event]
24
+ end
25
+ end
26
+
27
+ let!(:register) { subject.on(:my_event, &handler) }
28
+
29
+ describe '#on' do
30
+ it 'adds a block to the hash with the key == type arg' do
31
+ expect(subject.type_handles[:my_event].call(:my_event)).to eql(handler.call(:my_event))
32
+ end
33
+
34
+ end
35
+
36
+ describe '#handle' do
37
+
38
+ class Event
39
+ end
40
+
41
+ class UnknownEvent
42
+ end
43
+
44
+ let(:event) do
45
+ Event.new
46
+ end
47
+
48
+ let(:handler) do
49
+ lambda do |event|
50
+ ["I'm handling it", event]
51
+ end
52
+ end
53
+
54
+ it 'executes the registered block with the event as arg' do
55
+ subject.on(Event, &handler)
56
+ expect(subject.handle(event)).to eql(["I'm handling it", event])
57
+ end
58
+
59
+ it 'returns nil when event is not registered/handle-able' do
60
+ subject.on(Event, &handler)
61
+ expect(subject.handle(UnknownEvent.new)).to be_nil
62
+ end
63
+ end
64
+
65
+ let(:test_name) { 'on_test_event' }
66
+
67
+ describe '#type_from_on_format' do
68
+ it 'strips out the event type from the on_#{event_type} format' do
69
+ expect(described_class.type_from_on_format(test_name)).to eql(:test_event)
70
+ end
71
+ end
72
+
73
+ describe '::type_from_on_format' do
74
+ it 'returns whether or not the string is in on_#{event_type} format' do
75
+ expect(described_class.type_from_on_format(test_name)).to be_truthy
76
+ end
77
+ end
78
+
79
+ describe '#respond_to?' do
80
+ it 'responds to items in the on_#{type} format' do
81
+ expect(described_class.respond_to?(test_name)).to be_truthy
82
+ end
83
+ end
84
+
85
+ context 'private' do
86
+
87
+ describe '_define_register' do
88
+
89
+ it 'will not respond to direct access' do
90
+ expect { subject.class._define_register }.to raise_error(NoMethodError, /private method `_define_register'/)
91
+ end
92
+
93
+ class SomeEvent; end
94
+
95
+ let!(:run_method) { subject.class.send(:_define_register, SomeEvent, 'some_event') }
96
+
97
+ it 'defines the class_method on_#{type} method' do
98
+ expect(subject.class).to respond_to(:on_some_event)
99
+ end
100
+
101
+ it 'defines the instance_method on_#{type} method' do
102
+ expect(subject.class.method_defined?(:on_some_event)).to be_truthy
103
+ end
104
+
105
+ it 'returns the method defined' do
106
+ expect(run_method).to be_a(Method)
107
+ end
108
+
109
+ end
110
+
111
+ describe '_define_handler' do
112
+
113
+ it 'will not respond to direct access' do
114
+ expect { subject.class._define_handler }.to raise_error(NoMethodError, /private method `_define_handler'/)
115
+ end
116
+
117
+ class SomeEvent; end
118
+
119
+ let!(:run_method) { subject.class.send(:_define_handler, 'some_event') {|event| "this is some_event #{event}" } }
120
+
121
+ it 'defines the instance_method on_#{type} method' do
122
+ expect(subject.class.method_defined?(:handle_some_event)).to be_truthy
123
+ end
124
+
125
+ it 'returns the method defined' do
126
+ expect(run_method).to be_a(Proc)
127
+ end
128
+
129
+ end
130
+ end #context 'private'
131
+
132
+ end
133
+
134
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ require 'vigilem/core/hooks'
4
+
5
+ describe Vigilem::Core::Hooks::CallbackProc do
6
+ subject do
7
+ described_class.new do
8
+ self
9
+ end
10
+ end
11
+
12
+ describe '#evaluate' do
13
+
14
+ before(:all) { Context = Class.new }
15
+
16
+ context 'class' do
17
+
18
+ let!(:result) { subject.evaluate(Context) }
19
+
20
+ it 'will run in the class context specified' do
21
+ expect(result).to eql(Context)
22
+ end
23
+
24
+ it '[] will be the same' do
25
+ expect(result).to eql(Context)
26
+ end
27
+
28
+ it 'will remember the last result' do
29
+ expect(subject.result).to eql(Context)
30
+ end
31
+ end
32
+
33
+ context 'instance' do
34
+
35
+ let(:instance) { Context.new }
36
+
37
+ let!(:result) { subject.evaluate(instance) }
38
+
39
+ it 'will run in the object context specified' do
40
+ expect(result).to eql(instance)
41
+ end
42
+
43
+ it '[] will be the same' do
44
+ expect(result).to eql(instance)
45
+ end
46
+
47
+ it 'will remember the last result' do
48
+ expect(subject.result).to eql(instance)
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ describe '#call' do
55
+
56
+ let!(:result) { subject.call }
57
+
58
+ it 'will run like Proc' do
59
+ expect(result).to eql(self)
60
+ end
61
+
62
+ it 'will remember the result' do
63
+ expect(subject.result).to eql(result)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,230 @@
1
+ require 'spec_helper'
2
+
3
+ require 'vigilem/core/hooks'
4
+
5
+ describe Vigilem::Core::Hooks::Hook do
6
+
7
+ subject { described_class.new(:testr) }
8
+
9
+ describe '#new' do
10
+
11
+ it 'to yield itself' do
12
+ expect {|b| described_class.new(:testr, &b).to yield_control }
13
+ end
14
+
15
+ end
16
+
17
+ context 'after initialized' do
18
+
19
+ let!(:init_size) { subject.callbacks.size }
20
+
21
+ describe '#<<' do
22
+
23
+ let!(:callbacks) { subject << lambda { self } }
24
+
25
+ it 'should increase callbacks by one' do
26
+ expect(subject.callbacks.size).to eql(init_size + 1)
27
+ end
28
+
29
+ it 'will return a full the list of callbacks' do
30
+ expect(callbacks).to equal(subject.callbacks)
31
+ end
32
+
33
+ it 'will convert procs to Callbacks' do
34
+ expect(callbacks.all? {|cb| cb.is_a? Vigilem::Core::Hooks::Callback }).to be_truthy
35
+ end
36
+ end
37
+
38
+ describe '#add' do
39
+ let!(:callbacks) { subject.add { self } }
40
+
41
+ it 'should increase callbacks by one' do
42
+ expect(subject.callbacks.size).to eql(init_size + 1)
43
+ end
44
+
45
+ it 'will return a full the list of callbacks' do
46
+ expect(callbacks).to equal(subject.callbacks)
47
+ end
48
+
49
+ it 'will convert procs to Callbacks' do
50
+ expect(callbacks.all? {|cb| cb.is_a? Vigilem::Core::Hooks::Callback }).to be_truthy
51
+ end
52
+ end
53
+
54
+ describe '#callbacks' do
55
+
56
+ let(:sub_callback) do
57
+ class TmpSubClass < self.class
58
+ lambda { self }
59
+ end
60
+ end
61
+
62
+ let!(:all_callbacks) { subject << sub_callback }
63
+
64
+ it 'filters out subclass callbacks when given context/scope' do
65
+ expect(subject.callbacks(self).none? {|cb| cb.source_location == sub_callback.source_location }).to be_truthy
66
+ end
67
+
68
+ end
69
+
70
+ context 'execution' do
71
+
72
+ let!(:callback1) { subject.add { self }.last }
73
+
74
+ let!(:callback2) { subject.add { self.class }.last }
75
+
76
+ describe '#call' do
77
+
78
+ it 'will execute callbacks in the context which they where created' do
79
+ expect(subject.call()).to eql([self, self.class])
80
+ end
81
+ end
82
+
83
+ describe '#run' do
84
+
85
+ let!(:context) { (FakeContext = Class.new).new }
86
+
87
+ it 'will execute callbacks in the context which is passed in' do
88
+ expect(subject.run(context)).to eql([context, FakeContext])
89
+ end
90
+ end
91
+ end
92
+
93
+ describe '#default_body' do
94
+
95
+ it 'will return a Proc' do
96
+ expect(subject.default_body).to be_a(Proc)
97
+ end
98
+
99
+ end
100
+
101
+ describe '#bind' do
102
+
103
+ let!(:context) do
104
+ local = subject
105
+ Class.new do
106
+ extend Vigilem::Core::Hooks
107
+ local.bind(self)
108
+ end
109
+ end
110
+
111
+ it 'will add hook as singleton_method' do
112
+ expect(context.respond_to?(:testr)).to be_truthy
113
+ end
114
+
115
+ describe '#owner' do
116
+ it 'wil be the value of context' do
117
+ expect(subject.owner).to eql(context)
118
+ end
119
+ end
120
+
121
+ end
122
+
123
+ describe '#generate' do
124
+
125
+ let!(:context) do
126
+ local = subject
127
+ Class.new do
128
+ extend Vigilem::Core::Hooks
129
+ local.generate(self)
130
+ end.new
131
+ end
132
+
133
+ it 'will add hook as instance_method' do
134
+ expect(context.respond_to?(:testr)).to be_truthy
135
+ end
136
+
137
+ describe '#owner' do
138
+ it 'wil be the value of context' do
139
+ expect(subject.owner).to eql(context.class)
140
+ end
141
+ end
142
+
143
+ end
144
+
145
+ describe '#body' do
146
+
147
+ it 'will return default_proc when not set' do
148
+ expect(subject.send(:body)).to equal(subject.default_body)
149
+ end
150
+
151
+ let(:nw_body) { lambda { puts 'test' } }
152
+
153
+ it 'will return a block when given one' do
154
+ expect(subject.send(:body, &nw_body)).to eql(nw_body)
155
+ end
156
+
157
+ context 'generating' do
158
+
159
+ subject do
160
+ described_class.new(:bdy) do
161
+ body { 'test' }
162
+ end
163
+ end
164
+
165
+ let!(:context) do
166
+ local = subject
167
+ Class.new do
168
+ extend Vigilem::Core::Hooks
169
+ local.generate(self)
170
+ end.new
171
+ end
172
+
173
+ it 'will set the prco to be generated on the class' do
174
+ expect(context.bdy).to eql('test')
175
+ end
176
+
177
+ context 'binding' do
178
+ subject do
179
+ described_class.new(:bdy) do
180
+ body { 'test' }
181
+ end
182
+ end
183
+
184
+ let!(:context) do
185
+ local = subject
186
+ Class.new do
187
+ extend Vigilem::Core::Hooks
188
+ local.bind(self)
189
+ end
190
+ end
191
+
192
+ it 'will set the proc to be binded on the class' do
193
+ expect(context.bdy).to eql('test')
194
+ end
195
+ end
196
+
197
+ end
198
+ end
199
+
200
+ describe '::enumerate' do
201
+
202
+ let(:call_backs) do
203
+ [ Vigilem::Core::Hooks::CallbackProc.new {|arg| self },
204
+ Vigilem::Core::Hooks::CallbackProc.new {|arg| self.class } ]
205
+ end
206
+
207
+ it 'will accept args with a list of callbacks and enumerate through them passing a long the args' do
208
+ expect(call_backs.first).to receive(:call).with('test').and_return('test')
209
+ expect(call_backs.last).to receive(:call).with('test').and_return(String)
210
+ described_class.send(:enumerate, call_backs, :args => 'test')
211
+ end
212
+
213
+ it 'will return the results' do
214
+ expect(described_class.send(:enumerate, call_backs, :args => 'test')).to eql([self, self.class])
215
+ end
216
+
217
+ it 'will accept a block and yield a meta_callback' do
218
+ expect {|b| described_class.send(:enumerate, call_backs, &b).to yield_with_args(MetaCallback) }
219
+ end
220
+
221
+ it 'will accept an arg of :context and evaluate the callbacks in that context' do
222
+ expect(call_backs.first).to receive(:evaluate).with(self, 'test').and_return(self)
223
+ expect(call_backs.last).to receive(:evaluate).with(self, 'test').and_return(String)
224
+ described_class.send(:enumerate, call_backs, :context => self, :args => 'test')
225
+ end
226
+ end
227
+
228
+
229
+ end
230
+ end