shake_n_bake 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .gem
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in shake_n_bake.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Tom Wilson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,17 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib'
2
+ require 'shake_n_bake'
3
+
4
+ ShakeNBake do
5
+
6
+ INTERVAL = 2
7
+
8
+ shake do
9
+ puts 'Enter a number'
10
+ STDIN.gets # return to bake
11
+ end
12
+
13
+ bake do |result|
14
+ puts result.to_i + 10 # add 10 to result
15
+ puts 'Cool, lets play again!'
16
+ end
17
+ end
@@ -0,0 +1,66 @@
1
+ # DSL for Shake n Bake
2
+ class ShakeNBake::DSL
3
+ include Singleton
4
+
5
+ # Setup Method for registering instance vars
6
+ def setup(&block)
7
+ self.instance_eval(&block) if block_given?
8
+ end
9
+
10
+ # Shake ping the queue or data your watching
11
+ def shake(&block)
12
+ @shake_proc = block if block_given?
13
+ end
14
+
15
+ # Bake when result exec block
16
+ def bake(&block)
17
+ @bake_proc = block if block_given?
18
+ end
19
+
20
+ # Start your engines!
21
+ def run
22
+ register_signal_handlers
23
+ loop do
24
+ break if shutdown?
25
+ result = self.instance_eval &@shake_proc
26
+ self.instance_exec(result, &@bake_proc) if result
27
+ sleep INTERVAL || 2
28
+ end
29
+ end
30
+
31
+ private
32
+ # FROM Resque::Worker
33
+
34
+ # Registers the various signal handlers a worker responds to.
35
+ #
36
+ # TERM: Shutdown immediately, stop processing jobs.
37
+ # INT: Shutdown immediately, stop processing jobs.
38
+ # QUIT: Shutdown after the current job has finished processing.
39
+ def register_signal_handlers
40
+ trap('TERM') { shutdown! }
41
+ trap('INT') { shutdown! }
42
+ begin
43
+ trap('QUIT') { shutdown }
44
+ rescue ArgumentError
45
+ warn "Signals QUIT, USR1, USR2, and/or CONT not supported."
46
+ end
47
+ end
48
+
49
+ # Schedule this worker for shutdown. Will finish processing the
50
+ # current job.
51
+ def shutdown
52
+ puts 'Exiting...'
53
+ @shutdown = true
54
+ end
55
+
56
+ # Shutdown immediately.
57
+ def shutdown!
58
+ shutdown
59
+ end
60
+
61
+ # Should this worker shutdown as soon as current job is finished?
62
+ def shutdown?
63
+ @shutdown
64
+ end
65
+
66
+ end
@@ -0,0 +1,3 @@
1
+ module ShakeNBake
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,12 @@
1
+ require "shake_n_bake/version"
2
+ require 'singleton'
3
+
4
+ module ShakeNBake; end
5
+
6
+ require_relative 'shake_n_bake/dsl'
7
+
8
+ def ShakeNBake(&block)
9
+ snb = ShakeNBake::DSL.instance
10
+ snb.instance_eval(&block)
11
+ snb.run
12
+ end
data/readme.md ADDED
@@ -0,0 +1,75 @@
1
+ # UNDER DEVELOPMENT #
2
+
3
+ ---
4
+
5
+ # Shake-N-Bake
6
+
7
+ A very simple dsl that allows you to neatly watch for something
8
+ for a given Interval and then once the result is received and
9
+ valid the publish/write the result.
10
+
11
+ AKA.
12
+
13
+ # `Shake` ~ N ~ `Bake`
14
+
15
+ ## Example 1 : Consuming a Job from a Cloudq
16
+
17
+ ``` ruby
18
+ require 'shake_n_bake'
19
+
20
+ ShakeNBake do
21
+
22
+ INTERVAL = 2 # seconds
23
+
24
+ setup do
25
+ @cloudq = Cloudq::Consumer.new 'incoming_fax'
26
+ end
27
+
28
+ shake do
29
+ # watch a queue
30
+ @cloudq.get_job
31
+ end
32
+
33
+ bake do |job|
34
+ Fax.new(job[:args]).deliver
35
+ @cloudq.complete_job job.id
36
+ end
37
+ end
38
+
39
+ ```
40
+
41
+ ## Example 2 : Watching a local database and publishing a job
42
+
43
+ ``` ruby
44
+ require 'sequel'
45
+ require 'chronic'
46
+ require 'cloudq'
47
+ require 'shake_n_bake'
48
+
49
+ ShakeNBake do
50
+
51
+ INTERVAL = 10 # seconds
52
+
53
+ setup do
54
+ # my db connection
55
+ end
56
+
57
+ shake do
58
+ # watch for change form a db
59
+ DB['select is_awesome from foo where chg_date < ?', Chronic.parse('10 seconds ago')].get
60
+ end
61
+
62
+ bake do |result|
63
+ # publish it to cloudq
64
+ Cloudq::Publish.new('awesome').job 'Person', :awesome => result
65
+ end
66
+
67
+ end
68
+
69
+ ```
70
+
71
+ _If your not first your last_
72
+
73
+ `Shake` ~ N ~ `Bake`
74
+
75
+ See LICENSE.
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "shake_n_bake/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "shake_n_bake"
7
+ s.version = ShakeNBake::VERSION
8
+ s.authors = ["Tom Wilson"]
9
+ s.email = ["tom@jackhq.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Shake and Bake is a simple dsl that allow you to check a system or service "Shake" then write or publish if there are results "bake"}
12
+ s.description = %q{Shake and Bake is a simple dsl that allow you to check a system or service "Shake" then write or publish if there are results "bake"}
13
+
14
+ s.rubyforge_project = "shake_n_bake"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ s.add_development_dependency('rspec')
21
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shake_n_bake
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Wilson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-21 00:00:00.000000000 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ requirement: &2156714620 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *2156714620
26
+ description: Shake and Bake is a simple dsl that allow you to check a system or service
27
+ "Shake" then write or publish if there are results "bake"
28
+ email:
29
+ - tom@jackhq.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - .gitignore
35
+ - .rvmrc
36
+ - Gemfile
37
+ - LICENSE
38
+ - Rakefile
39
+ - examples/simple.rb
40
+ - lib/shake_n_bake.rb
41
+ - lib/shake_n_bake/dsl.rb
42
+ - lib/shake_n_bake/version.rb
43
+ - readme.md
44
+ - shake_n_bake.gemspec
45
+ has_rdoc: true
46
+ homepage: ''
47
+ licenses: []
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ requirements: []
65
+ rubyforge_project: shake_n_bake
66
+ rubygems_version: 1.6.2
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: Shake and Bake is a simple dsl that allow you to check a system or service
70
+ "Shake" then write or publish if there are results "bake"
71
+ test_files: []