oni 0.0.1 → 1.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.
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Oni::Configurable do
4
+ let :example_class do
5
+ Class.new do
6
+ include Oni::Configurable
7
+ end
8
+ end
9
+
10
+ example 'setting an option' do
11
+ example_class.set(:number, 10)
12
+
13
+ example_class.options[:number].should == 10
14
+ end
15
+
16
+ example 'setting multiple options' do
17
+ example_class.set_multiple(:a => 10, :b => 20)
18
+
19
+ example_class.options[:a].should == 10
20
+ example_class.options[:b].should == 20
21
+ end
22
+
23
+ example 'retrieve an option' do
24
+ example_class.set(:number, 10)
25
+
26
+ example_class.new.option(:number).should == 10
27
+ end
28
+
29
+ example 'retrieve an option with a default value' do
30
+ example_class.new.option(:number, 20).should == 20
31
+ end
32
+
33
+ example 'evaluate an option value upon retrieval' do
34
+ example_class.set(:dynamic, proc { Struct.new(:example) })
35
+
36
+ instance = example_class.new
37
+
38
+ instance.option(:dynamic).should_not == instance.option(:dynamic)
39
+ end
40
+
41
+ example 'raise for a required but unset option' do
42
+ instance = example_class.new
43
+ block = lambda { instance.require_option!(:another_number) }
44
+
45
+ block.should raise_error(ArgumentError)
46
+ end
47
+
48
+ example 'do not raise for a required option with a value' do
49
+ example_class.set(:another_number, 20)
50
+
51
+ instance = example_class.new
52
+
53
+ instance.require_option!(:another_number)
54
+ instance.option(:another_number).should == 20
55
+ end
56
+ end
@@ -0,0 +1,154 @@
1
+ require 'spec_helper'
2
+
3
+ describe Oni::Daemon do
4
+ let :example_daemon do
5
+ mapper = Class.new(Oni::Mapper) do
6
+ attr_reader :number
7
+
8
+ def map_input(input)
9
+ return input[:number]
10
+ end
11
+
12
+ def map_output(number)
13
+ return {:new_number => number}
14
+ end
15
+ end
16
+
17
+ worker = Class.new(Oni::Worker) do
18
+ def initialize(number)
19
+ @number = number
20
+ end
21
+
22
+ def process
23
+ return @number * 2
24
+ end
25
+ end
26
+
27
+ Class.new(Oni::Daemon) do
28
+ attr_reader :number, :number2, :message, :output, :timings
29
+
30
+ set :mapper, mapper
31
+ set :worker, worker
32
+ set :threads, 2
33
+
34
+ def after_initialize
35
+ @number = 10
36
+ end
37
+
38
+ def before_start
39
+ @number2 = 20
40
+ end
41
+
42
+ def receive
43
+ yield({:number => 10})
44
+ end
45
+
46
+ def complete(message, output, timings)
47
+ @message = message
48
+ @output = output
49
+ @timings = timings
50
+ end
51
+ end
52
+ end
53
+
54
+ example 'call #after_initialize' do
55
+ example_daemon.new.number.should == 10
56
+ end
57
+
58
+ example 'call #before_start' do
59
+ daemon = example_daemon.new
60
+ daemon.start
61
+ daemon.stop
62
+
63
+ daemon.number2.should == 20
64
+ end
65
+
66
+ example 'raise for the default receive method' do
67
+ daemon = Oni::Daemon.new
68
+
69
+ lambda { daemon.receive }.should raise_error(NotImplementedError)
70
+ end
71
+
72
+ example 'return the amount of threads to use' do
73
+ example_daemon.set(:threads, 10)
74
+
75
+ example_daemon.new.threads.should == 10
76
+ end
77
+
78
+ example 'use the default amount of threads' do
79
+ example_daemon.set(:threads, nil)
80
+
81
+ example_daemon.new.threads.should == Oni::Daemon::DEFAULT_THREAD_AMOUNT
82
+ end
83
+
84
+ example 'create the mapper without any arguments' do
85
+ mapper = example_daemon.new.create_mapper
86
+
87
+ mapper.is_a?(Oni::Mapper).should == true
88
+ mapper.number.nil?.should == true
89
+ end
90
+
91
+ example 'start and stop the thread daemon' do
92
+ instance = example_daemon.new
93
+ instance.start
94
+
95
+ instance.workers.length.should == instance.threads
96
+
97
+ instance.stop
98
+
99
+ instance.workers.length.should == 0
100
+ end
101
+
102
+ example 'process a job' do
103
+ instance = example_daemon.new
104
+
105
+ instance.start
106
+ instance.stop
107
+
108
+ instance.message.should == {:number => 10}
109
+ instance.output.should == {:new_number => 20}
110
+ end
111
+
112
+ example 'measure the execution time' do
113
+ instance = example_daemon.new
114
+
115
+ instance.start
116
+ instance.stop
117
+
118
+ instance.timings.is_a?(Benchmark::Tms).should == true
119
+ end
120
+
121
+ context 'error handling' do
122
+ let :example_daemon do
123
+ Class.new(Oni::Daemon) do
124
+ set :threads, 0
125
+
126
+ def receive
127
+ yield 10
128
+ end
129
+ end
130
+ end
131
+
132
+ let :custom_error_daemon do
133
+ Class.new(example_daemon) do
134
+ set :threads, 0
135
+
136
+ def error(error)
137
+ raise 'custom error'
138
+ end
139
+ end
140
+ end
141
+
142
+ example 'should raise by default' do
143
+ daemon = example_daemon.new
144
+
145
+ lambda { daemon.start }.should raise_error(ArgumentError)
146
+ end
147
+
148
+ example 'allow custom error callbacks' do
149
+ daemon = custom_error_daemon.new
150
+
151
+ lambda { daemon.start }.should raise_error(RuntimeError, 'custom error')
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require_relative '../../../lib/oni/daemons/sqs'
3
+
4
+ describe Oni::Daemons::SQS do
5
+ let :example_daemon do
6
+ Class.new(Oni::Daemons::SQS)
7
+ end
8
+
9
+ example 'require the queue name to be set' do
10
+ block = lambda { example_daemon.new }
11
+
12
+ block.should raise_error(ArgumentError, /The option queue_name is required/)
13
+ end
14
+
15
+ example 'receive a message' do
16
+ example_daemon.set(:queue_name, 'example')
17
+
18
+ instance = example_daemon.new
19
+ queue = Class.new do
20
+ def poll(options = {})
21
+ yield 10
22
+ end
23
+ end
24
+
25
+ instance.stub(:queue).and_return(queue.new)
26
+
27
+ instance.receive do |number|
28
+ number.should == 10
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Oni::Mapper do
4
+ let :example_mapper do
5
+ Class.new(Oni::Mapper)
6
+ end
7
+
8
+ example 'set an option of the class' do
9
+ example_mapper.set(:number, 10)
10
+
11
+ example_mapper.new.option(:number).should == 10
12
+ end
13
+
14
+ example 'return the raw input' do
15
+ input = {:number => 10}
16
+
17
+ example_mapper.new.map_input(input).should == input
18
+ end
19
+
20
+ example 'return the raw output' do
21
+ output = {:number => 10}
22
+
23
+ example_mapper.new.map_output(output).should == output
24
+ end
25
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Oni::Worker do
4
+ let :example_worker do
5
+ Class.new(Oni::Worker) do
6
+ def initialize(number = 10)
7
+ @number = number
8
+ end
9
+
10
+ def process
11
+ return @number * 2
12
+ end
13
+ end
14
+ end
15
+
16
+ example 'raise for the default process method' do
17
+ worker = Oni::Worker.new
18
+
19
+ lambda { worker.process }.should raise_error(NotImplementedError)
20
+ end
21
+
22
+ example 'set an option of the class' do
23
+ example_worker.set(:number, 10)
24
+
25
+ example_worker.new.option(:number).should == 10
26
+ end
27
+
28
+ example 'process a job' do
29
+ worker = example_worker.new(10)
30
+
31
+ worker.process.should == 20
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ require 'rspec'
2
+
3
+ require_relative 'support/simplecov' if ENV['COVERAGE']
4
+ require_relative '../lib/oni'
5
+
6
+ RSpec.configure do |config|
7
+ config.color = true
8
+ end
@@ -0,0 +1,12 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.configure do
4
+ root File.expand_path('../../../', __FILE__)
5
+ command_name 'rspec'
6
+ project_name 'oni'
7
+
8
+ add_filter 'spec'
9
+ add_filter 'lib/oni/version'
10
+ end
11
+
12
+ SimpleCov.start
@@ -0,0 +1,6 @@
1
+ desc 'Generates code coverage'
2
+ task :coverage do
3
+ ENV['COVERAGE'] = '1'
4
+
5
+ Rake::Task['test'].invoke
6
+ end
data/task/doc.rake ADDED
@@ -0,0 +1,4 @@
1
+ desc 'Builds the documentation'
2
+ task :doc do
3
+ sh('yard doc')
4
+ end
data/task/jenkins.rake ADDED
@@ -0,0 +1,2 @@
1
+ desc 'Runs all the tests for Jenkins'
2
+ task :jenkins => ['ci:setup:rspec', 'test']
data/task/tag.rake ADDED
@@ -0,0 +1,6 @@
1
+ desc 'Creates a Git tag for the current version'
2
+ task :tag do
3
+ version = Oni::VERSION
4
+
5
+ sh %Q{git tag -a -m "Version #{version}" #{version}}
6
+ end
data/task/test.rake ADDED
@@ -0,0 +1,4 @@
1
+ desc 'Runs the tests'
2
+ task :test do
3
+ sh 'rspec spec'
4
+ end
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oni
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Olery <info@olery.com>
8
- - Yorick Peterse <yorickpeterse@gmail.com>
9
- - Wilco van Duinkerken <wilcovanduinkerken@olery.com>
7
+ - Yorick Peterse
8
+ - Wilco van Duinkerken
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-10-09 00:00:00.000000000 Z
12
+ date: 2013-11-18 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rake
@@ -110,16 +109,60 @@ dependencies:
110
109
  - - ! '>='
111
110
  - !ruby/object:Gem::Version
112
111
  version: '0'
113
- description: Ruby framework for building concurrent job processing applications.
112
+ - !ruby/object:Gem::Dependency
113
+ name: aws-sdk
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: Framework for building concurrent daemons in Ruby.
114
127
  email:
115
128
  executables: []
116
129
  extensions: []
117
130
  extra_rdoc_files: []
118
131
  files:
132
+ - .gitignore
133
+ - .travis.yml
134
+ - .yardopts
135
+ - Gemfile
136
+ - LICENSE
137
+ - README.md
138
+ - Rakefile
139
+ - doc/changelog.md
140
+ - doc/css/common.css
141
+ - examples/github_status.rb
142
+ - jenkins.sh
119
143
  - lib/oni.rb
144
+ - lib/oni/configurable.rb
145
+ - lib/oni/daemon.rb
146
+ - lib/oni/daemons/sqs.rb
147
+ - lib/oni/mapper.rb
120
148
  - lib/oni/version.rb
149
+ - lib/oni/worker.rb
150
+ - oni.gemspec
151
+ - spec/oni/configurable_spec.rb
152
+ - spec/oni/daemon_spec.rb
153
+ - spec/oni/daemons/sqs_spec.rb
154
+ - spec/oni/mapper_spec.rb
155
+ - spec/oni/worker_spec.rb
156
+ - spec/spec_helper.rb
157
+ - spec/support/simplecov.rb
158
+ - task/coverage.rake
159
+ - task/doc.rake
160
+ - task/jenkins.rake
161
+ - task/tag.rake
162
+ - task/test.rake
121
163
  homepage:
122
- licenses: []
164
+ licenses:
165
+ - MIT
123
166
  metadata: {}
124
167
  post_install_message:
125
168
  rdoc_options: []
@@ -140,6 +183,13 @@ rubyforge_project:
140
183
  rubygems_version: 2.1.2
141
184
  signing_key:
142
185
  specification_version: 4
143
- summary: Ruby framework for building concurrent job processing applications.
144
- test_files: []
186
+ summary: Framework for building concurrent daemons in Ruby.
187
+ test_files:
188
+ - spec/oni/configurable_spec.rb
189
+ - spec/oni/daemon_spec.rb
190
+ - spec/oni/daemons/sqs_spec.rb
191
+ - spec/oni/mapper_spec.rb
192
+ - spec/oni/worker_spec.rb
193
+ - spec/spec_helper.rb
194
+ - spec/support/simplecov.rb
145
195
  has_rdoc: yard