serf_handler 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f17b68c3011b7a593e3139a84d8d42f1497d2c47
4
+ data.tar.gz: 6cac6c6d4fc7b3aa827a04290ea1ae00d54caaef
5
+ SHA512:
6
+ metadata.gz: 8c276d31d860b4f99ca2532bd7abe725ba1dedada3a1317aa11f0781ce35280f0ac4931ca849f3a415d47e36ba217c8c96f543cff20a5b098825daab529b2ba9
7
+ data.tar.gz: 56c44c998e2b118cc595ecc13d899b7e0a8f24ba0a17833efa72cee7e12f1fbbae84d1b338540d43c3e432e5011f9389f034b4bbb998793752d44fd7646fa6c0
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ vendor
19
+ .DS_Store
20
+ *~
21
+ .gitignore~
22
+ *.zip
23
+
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.2"
4
+ - "1.9.3"
5
+ - "jruby-19mode"
6
+ - "rbx-19mode"
7
+ - "ruby-head"
8
+ script: bundle exec rake spec
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Runtime dependencies specified in gemspec
4
+ gemspec
5
+
6
+ # Development and Testing dependencies
7
+ group :development, :test do
8
+ gem 'bundler'
9
+ gem 'rake'
10
+ gem "rspec"
11
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 konchan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ serf_handler
2
+ ============
3
+ [![Build Status](https://travis-ci.org/konchan/serf_handler.svg?branch=master)](https://travis-ci.org/konchan/serf_handler)
4
+
5
+ [Serf](http://www.serfdom.io/) is a cluster orchestration framework which developed by [HashiCorp](http://www.hashicorp.com/). Serf allows you to execute your scripts when serf event occur.
6
+ You can simply extend SerfHandler and process serf events. Serf_handler is a very simple Ruby framework with no dependencies.
7
+ I have a lot in reference to [this code](https://github.com/garethr/serf-master).
8
+
9
+ ### how to install
10
+
11
+ ```
12
+ gem install serf_handler
13
+ ```
14
+
15
+ ### how to use
16
+
17
+ ```sample.rb
18
+ require 'serf_handler'
19
+
20
+ class MyEventHandler
21
+ # called by SerfHandler when member-join event occur
22
+ def member_join
23
+ # write your code
24
+ end
25
+ end
26
+
27
+ if __FILE__ == $0
28
+ handler = SerfHandlerProxy.new
29
+ handler.register('MyRole', MyEventHandler.new)
30
+ handler.run
31
+ end
32
+ ```
33
+
34
+ ### Contributing
35
+ - Fork it
36
+ - Create your feature branch (```git checkout -b my-new-feature```)
37
+ - Commit your changes (```git commit -am 'Add some feature'```)
38
+ - Push to the branch (```git push origin my-new-feature```)
39
+ - Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env rake
2
+ require 'rubygems'
3
+ require 'bundler'
4
+ require "bundler/gem_tasks"
5
+
6
+ begin
7
+ Bundler.setup(:default, :development)
8
+ rescue Bundler::BundlerError => e
9
+ $stderr.puts e.message
10
+ $stderr.puts "Run `bundle install` to install missing gems"
11
+ exit e.status_code
12
+ end
13
+ require 'rake'
14
+
15
+ require 'rspec/core'
16
+ require 'rspec/core/rake_task'
17
+ RSpec::Core::RakeTask.new(:spec) do |spec|
18
+ spec.pattern = FileList['spec/**/*_spec.rb']
19
+ end
20
+
21
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
22
+ spec.pattern = 'spec/**/*_spec.rb'
23
+ spec.rcov = true
24
+ end
25
+
26
+ task :default => :spec
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ # @author katsuyuki
3
+ #
4
+ require "logger"
5
+
6
+ class SerfHandler
7
+ attr :name, :role, :event
8
+
9
+ def initialize(logger=nil)
10
+ if logger
11
+ @logger = logger
12
+ else
13
+ @logger = Logger.new(STDOUT)
14
+ @logger.level = Logger::INFO
15
+ end
16
+ @name = ENV['SERF_SELF_NAME']
17
+ @role = ENV['SERF_TAG_ROLE'] || ENV['SERF_SELF_ROLE']
18
+ @event = ENV['SERF_EVENT'] == 'user'? ENV['SERF_USER_EVENT'] : ENV['SERF_EVENT'].gsub(/-/, '_')
19
+ end
20
+
21
+ def log(msg)
22
+ @logger.info(msg)
23
+ end
24
+ end
25
+
26
+ class SerfHandlerProxy < SerfHandler
27
+ def initialize(logger=nil)
28
+ super(logger)
29
+ @handlers = {}
30
+ end
31
+
32
+ def register(role, handler)
33
+ @handlers[role] = handler
34
+ end
35
+
36
+ def get_klass()
37
+ klass = false
38
+ if @handlers.include?(@role)
39
+ klass = @handlers[@role]
40
+ elsif @handlers.include?('default')
41
+ klass = @handlers['default']
42
+ end
43
+ klass
44
+ end
45
+
46
+ def run()
47
+ unless klass = get_klass
48
+ log "no handler for role"
49
+ else
50
+ begin
51
+ klass.send @event
52
+ rescue NoMethodError => e
53
+ log "event not implemented by class"
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'serf_handler'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = 'serf_handler'
8
+ gem.version = '0.1'
9
+ gem.authors = ['KONNO Katsuyuki']
10
+ gem.email = 'konno.katsuyuki@nifty.com'
11
+ gem.description = 'Serf event handlers for ruby'
12
+ gem.summary = 'Serf event handlers for ruby'
13
+ gem.homepage = 'http://github.com/konchan/serf_handler'
14
+ gem.licenses = ['MIT']
15
+
16
+ gem.rubygems_version = '2.0.14'
17
+ gem.files = `git ls-files`.split($\)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ['lib']
21
+ gem.extra_rdoc_files = [
22
+ 'LICENSE',
23
+ 'README.md'
24
+ ]
25
+
26
+ gem.add_runtime_dependency('logger', ['>= 1.2.8'])
27
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+
3
+ describe "SerfHandler" do
4
+ context "Check initialize process" do
5
+ before do
6
+ ENV['SERF_SELF_NAME'] = 'local'
7
+ ENV['SERF_SELF_ROLE'] = 'web'
8
+ ENV['SERF_EVENT'] = 'member-join'
9
+ end
10
+
11
+ it "has handler name as 'local'" do
12
+ handler = SerfHandler.new
13
+ expect(handler.name).to eq('local')
14
+ end
15
+
16
+ it "has handler role as 'web'" do
17
+ handler = SerfHandler.new
18
+ expect(handler.role).to eq('web')
19
+ end
20
+
21
+ it "is set the event: 'member-join'" do
22
+ handler = SerfHandler.new
23
+ expect(handler.event).to eq('member_join')
24
+ end
25
+ end
26
+
27
+ context "Check user event processing" do
28
+ before do
29
+ ENV['SERF_SELF_NAME'] = 'local'
30
+ ENV['SERF_SELF_ROLE'] = 'web'
31
+ ENV['SERF_EVENT'] = 'user'
32
+ ENV['SERF_USER_EVENT'] = 'deploy'
33
+ end
34
+
35
+ it "has custome event: user" do
36
+ handler = SerfHandler.new
37
+ expect(handler.event).to eq('deploy')
38
+ end
39
+ end
40
+ end
41
+
42
+ describe "SerfHandlerProxy" do
43
+ context "Check Processing Tags" do
44
+ before do
45
+ ENV['SERF_SELF_NAME'] = nil
46
+ ENV['SERF_TAG_ROLE'] = 'bob'
47
+ ENV['SERF_EVENT'] = 'member-join'
48
+ end
49
+
50
+ it "has the role as bob" do
51
+ handler = SerfHandlerProxy.new
52
+ expect(handler.role).to eq('bob')
53
+ end
54
+ end
55
+
56
+ context "Test negative cases" do
57
+ before do
58
+ ENV['SERF_TAG_ROLE'] = nil
59
+ ENV['SERF_SELF_NAME'] = nil
60
+ ENV['SERF_SELF_ROLE'] = nil
61
+ ENV['SERF_EVENT'] = 'member-join'
62
+ end
63
+
64
+ it "has no role" do
65
+ logger = double('Logger')
66
+ expect(logger).to receive(:info).with("no handler for role").and_return(true)
67
+ handler = SerfHandlerProxy.new(logger)
68
+ handler.run
69
+ end
70
+
71
+ it "has no method implemented" do
72
+ logger = double('Logger')
73
+ expect(logger).to receive(:info).with("event not implemented by class").and_return(true)
74
+ handler = SerfHandlerProxy.new(logger)
75
+ handler.register('default', SerfHandler.new)
76
+ handler.run
77
+ end
78
+ end
79
+
80
+ context "Test custom event" do
81
+ before do
82
+ ENV['SERF_SELF_NAME'] = nil
83
+ ENV['SERF_SELF_ROLE'] = nil
84
+ ENV['SERF_EVENT'] = 'user'
85
+ ENV['SERF_USER_EVENT'] = 'implemented'
86
+ end
87
+
88
+ it "has method to process custom event" do
89
+ handler = SerfHandlerProxy.new
90
+ sample = double('SerfHandler')
91
+ expect(sample).to receive(:implemented).and_return(true)
92
+ handler.register('default', sample)
93
+ handler.run
94
+ end
95
+ end
96
+
97
+ context "Test standard event when role is default" do
98
+ before do
99
+ ENV['SERF_SELF_NAME'] = nil
100
+ ENV['SERF_EVENT'] = 'member-join'
101
+ end
102
+
103
+ it "has method to process member_join event" do
104
+ handler = SerfHandlerProxy.new
105
+ sample = double('SerfHandler')
106
+ expect(sample).to receive(:member_join).and_return(true)
107
+ handler.register('default', sample)
108
+ handler.run
109
+ end
110
+ end
111
+
112
+ context "Test standard event when role is web" do
113
+ before do
114
+ ENV['SERF_SELF_NAME'] = nil
115
+ ENV['SERF_SELF_ROLE'] = 'web'
116
+ ENV['SERF_EVENT'] = 'member-join'
117
+ end
118
+
119
+ it "has method to process member_join event" do
120
+ handler = SerfHandlerProxy.new
121
+ sample = double('SerfHandler')
122
+ expect(sample).to receive(:member_join).and_return(true)
123
+ handler.register('web', sample)
124
+ handler.run
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'rspec'
3
+ require 'serf_handler'
4
+
5
+ RSpec.configure do |config|
6
+
7
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: serf_handler
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - KONNO Katsuyuki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: logger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.8
27
+ description: Serf event handlers for ruby
28
+ email: konno.katsuyuki@nifty.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files:
32
+ - LICENSE
33
+ - README.md
34
+ files:
35
+ - .gitignore
36
+ - .travis.yml
37
+ - Gemfile
38
+ - LICENSE
39
+ - README.md
40
+ - Rakefile
41
+ - lib/serf_handler.rb
42
+ - serf_handler.gemspec
43
+ - spec/serf_handler_spec.rb
44
+ - spec/spec_helper.rb
45
+ homepage: http://github.com/konchan/serf_handler
46
+ licenses:
47
+ - MIT
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 2.0.14
66
+ signing_key:
67
+ specification_version: 4
68
+ summary: Serf event handlers for ruby
69
+ test_files:
70
+ - spec/serf_handler_spec.rb
71
+ - spec/spec_helper.rb