fragile 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in fragile.gemspec
4
+ gemspec
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2012 Takashi Nakamura
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+ # Name:: Fragile
4
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
5
+ # Created:: Jun 15, 2012
6
+ # Updated:: Jun 15, 2012
7
+ # Copyright:: tnakamura Copyright (c) 2012
8
+ # License:: Licensed under the MIT LICENSE.
9
+
10
+ begin
11
+ require "rubygems"
12
+ gem "fragile"
13
+ rescue LoadError
14
+ end
15
+
16
+ require "fragile"
17
+
18
+ Fragile.application.run
19
+
@@ -0,0 +1,15 @@
1
+ pipeline :foobar do
2
+ use :foo, :name => "hoge"
3
+ use :bar, :suffix => "fuga"
4
+ use :bar, :suffix => "moga"
5
+ use :hoge
6
+ end
7
+
8
+ pipeline :hogefuga do
9
+ retry_count 3
10
+
11
+ use :foo, :name => "aaa"
12
+ use :bar, :suffix => "bbb"
13
+ use :hoge
14
+ end
15
+
@@ -0,0 +1,14 @@
1
+ module Fragile
2
+ module Plugin
3
+ class Bar
4
+ def initialize(config)
5
+ @suffix = config[:suffix]
6
+ end
7
+
8
+ def call(data)
9
+ data[:name] += @suffix
10
+ data
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Fragile
2
+ module Plugin
3
+ class Foo
4
+ def initialize(config)
5
+ @name = config[:name]
6
+ end
7
+
8
+ def call(data)
9
+ { :name => @name }
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,13 @@
1
+ module Fragile
2
+ module Plugin
3
+ class Hoge
4
+ def initialize(config)
5
+ end
6
+
7
+ def call(data)
8
+ puts data[:name]
9
+ end
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "fragile/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "fragile"
7
+ s.version = Fragile::VERSION
8
+ s.authors = ["tnakamura"]
9
+ s.email = ["griefworker@gmail.com"]
10
+ s.homepage = "https://github.com/tnakamura/fragile"
11
+ s.summary = %q{Ruby Pipeline Framework}
12
+ s.description = %q{Ruby Pipeline Framework}
13
+
14
+ s.rubyforge_project = "fragile"
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
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
@@ -0,0 +1,14 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+ require "fragile/version"
9
+ require "fragile/plugin_manager"
10
+ require "fragile/pipeline"
11
+ require "fragile/pipeline_manager"
12
+ require "fragile/dsl"
13
+ require "fragile/application"
14
+
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+ require "optparse"
9
+ require "fragile/version"
10
+ require "fragile/pipeline_manager"
11
+ require "fragile/plugin_manager"
12
+
13
+ module Fragile
14
+ class Application
15
+ include Fragile::PipelineManager
16
+ include Fragile::PluginManager
17
+
18
+ def initialize
19
+ @spcfile = File.join(Dir.pwd, "Spcfile")
20
+ end
21
+
22
+ def run
23
+ handle_options
24
+ load_plugins
25
+ load_spcfile
26
+ run_pipeline(ARGV)
27
+ end
28
+
29
+ def load_spcfile
30
+ load @spcfile
31
+ end
32
+
33
+ def handle_options
34
+ opts = OptionParser.new
35
+ opts.version = Fragile::VERSION
36
+ opts.banner = "fragile [-f RECIPE_FILE] {options} targets..."
37
+ opts.separator ""
38
+ opts.separator "Options are ..."
39
+ opts.on_tail("-h", "--help", "-H", "Display this help message.") do
40
+ puts opts
41
+ exit
42
+ end
43
+ opts.on("-f", "--recipefile=RECIPE_FILE", "Recipe file path") { |v|
44
+ @spcfile = v
45
+ @plugin_dir ||= File.join(File.dirname(@spcfile), "plugins")
46
+ }
47
+ opts.on("-p", "--plugindir=plugin_dir", "Plugin directory") { |v| @plugin_dir = v }
48
+ opts.parse!(ARGV)
49
+
50
+ unless 0 < ARGV.count
51
+ puts opts
52
+ exit
53
+ end
54
+ end
55
+ end
56
+
57
+ def self.application
58
+ @application ||= Application.new
59
+ end
60
+ end
61
+
@@ -0,0 +1,18 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+
9
+ module Fragile
10
+ module DSL
11
+ def pipeline(name, &block)
12
+ Fragile.application.define_pipeline(name, &block)
13
+ end
14
+ end
15
+ end
16
+
17
+ self.extend Fragile::DSL
18
+
@@ -0,0 +1,53 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+
9
+ module Fragile
10
+ class PipelineError < Exception
11
+ end
12
+
13
+ class Pipeline
14
+ attr_reader :name
15
+
16
+ def initialize(name)
17
+ @name = name
18
+ @retry_count = 3
19
+ @plugins = []
20
+ end
21
+
22
+ def retry_count(count)
23
+ @retry_count = count
24
+ end
25
+
26
+ def use(plugin, config={})
27
+ @plugins << Fragile.application.create_plugin(plugin, config)
28
+ end
29
+
30
+ def run
31
+ data = nil
32
+ @plugins.each do |plugin|
33
+ retry_handler do
34
+ data = plugin.call(data)
35
+ end
36
+ end
37
+ end
38
+
39
+ private
40
+ def retry_handler(&block)
41
+ count = 0
42
+ begin
43
+ block.call
44
+ rescue
45
+ if @retry_count < count
46
+ raise PipelineError.new("retry over error.")
47
+ end
48
+ count += 1
49
+ retry
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+ require "fragile/pipeline"
9
+
10
+ module Fragile
11
+ module PipelineManager
12
+ def pipelines
13
+ @pipelines ||= {}
14
+ end
15
+
16
+ def define_pipeline(name, &block)
17
+ p = Pipeline.new(name.to_s)
18
+ p.instance_eval(&block)
19
+ self.pipelines[name.to_s] = p
20
+ end
21
+
22
+ def pipeline_exist?(name)
23
+ self.pipelines.has_key?(name.to_s)
24
+ end
25
+
26
+ def run_pipeline(*names)
27
+ names.flatten.each do |name|
28
+ unless pipeline_exist?(name)
29
+ raise Fragile::PipelineError.new("Pipeline #{name} not found.")
30
+ end
31
+ self.pipelines[name.to_s].run
32
+ end
33
+ end
34
+ end
35
+ end
36
+
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+
9
+ module Fragile
10
+ module Plugin; end
11
+
12
+ class PluginError < Exception
13
+ end
14
+
15
+ module PluginManager
16
+ attr_accessor :plugin_dir
17
+
18
+ def load_plugins
19
+ return unless Dir.exist?(@plugin_dir)
20
+
21
+ pattern = File.join(@plugin_dir, "*.rb")
22
+ Dir.glob(pattern) do |path|
23
+ load path
24
+ end
25
+ end
26
+
27
+ def create_plugin(plugin, config)
28
+ if plugin.instance_of?(Class)
29
+ # クラスなら直接 new する
30
+ plugin.new(config)
31
+ else
32
+ # 文字列かシンボルならクラスを取得して new する
33
+ plugin_name = classify(plugin.to_s)
34
+ create_plugin_instance(plugin_name, config)
35
+ end
36
+ end
37
+
38
+ private
39
+ def create_plugin_instance(class_name, config)
40
+ klass = Fragile::Plugin.const_get(class_name)
41
+ klass.new(config)
42
+ end
43
+
44
+ def classify(name)
45
+ name.split("_").map{ |s| s.capitalize }.join
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+ # Name:: Fragile
3
+ # Author:: tnakamura <http://d.hatena.ne.jp/griefworker>
4
+ # Created:: Jun 15, 2012
5
+ # Updated:: Jun 15, 2012
6
+ # Copyright:: tnakamura Copyright (c) 2012
7
+ # License:: Licensed under the MIT LICENSE.
8
+
9
+ module Fragile
10
+ VERSION = "0.0.1"
11
+ end
@@ -0,0 +1,21 @@
1
+ # coding: utf-8
2
+ require_relative "test_helper"
3
+ require "minitest/spec"
4
+ require "minitest/autorun"
5
+ require "fragile"
6
+
7
+ describe "DSL" do
8
+ describe "#pipeline" do
9
+ include Fragile::DSL
10
+
11
+ after do
12
+ Fragile.application.pipelines.clear
13
+ end
14
+
15
+ it "パイプラインを登録できるべき" do
16
+ pipeline "foo" do;end
17
+ assert_equal true, Fragile.application.pipelines.has_key?("foo")
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,97 @@
1
+ # coding: utf-8
2
+ require_relative "test_helper"
3
+ require "minitest/spec"
4
+ require "minitest/autorun"
5
+ require "fragile"
6
+
7
+ class TestApp
8
+ include Fragile::PipelineManager
9
+ end
10
+
11
+ class TestPlugin
12
+ def initialize(config)
13
+ @config = config
14
+ end
15
+
16
+ def call(data)
17
+ @config[:called] = true
18
+ end
19
+ end
20
+
21
+ describe "PipelineManager" do
22
+ describe "#define_pipeline" do
23
+ before do
24
+ @manager = TestApp.new
25
+ end
26
+
27
+ it "パイプラインを登録できるべき" do
28
+ @manager.define_pipeline :foo do;end
29
+ assert_equal true, @manager.pipelines.has_key?("foo")
30
+ end
31
+ end
32
+
33
+ describe "#pipeline_exist?" do
34
+ describe "存在しないパイプライン名のとき" do
35
+ before do
36
+ @manager = TestApp.new
37
+ end
38
+
39
+ it "false を返すべき" do
40
+ assert_equal false, @manager.pipeline_exist?("foo")
41
+ end
42
+ end
43
+
44
+ describe "存在するパイプライン名のとき" do
45
+ before do
46
+ @manager = TestApp.new
47
+ @manager.define_pipeline "bar" do;end
48
+ end
49
+
50
+ it "true を返すべき" do
51
+ assert_equal true, @manager.pipeline_exist?("bar")
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "#pipelines" do
57
+ describe "パイプラインが登録されていないとき" do
58
+ before do
59
+ @manager = TestApp.new
60
+ end
61
+
62
+ it "空であるべき" do
63
+ assert_equal true, @manager.pipelines.empty?
64
+ end
65
+ end
66
+ end
67
+
68
+ describe "#run_pipeline" do
69
+ describe "登録されていないパイプラインを指定したとき" do
70
+ before do
71
+ @manager = TestApp.new
72
+ end
73
+
74
+ it "PipelineError が発生するべき" do
75
+ assert_raises Fragile::PipelineError do
76
+ @manager.run_pipeline("hoge")
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "登録されているパイプラインを指定したとき" do
82
+ before do
83
+ @config = config = {}
84
+ @manager = TestApp.new
85
+ @manager.define_pipeline "hoge" do
86
+ use TestPlugin, config
87
+ end
88
+ end
89
+
90
+ it "パイプラインを実行できるべき" do
91
+ @manager.run_pipeline("hoge")
92
+ assert_equal true, @config[:called]
93
+ end
94
+ end
95
+ end
96
+ end
97
+
@@ -0,0 +1,109 @@
1
+ # coding: utf-8
2
+ require_relative "test_helper"
3
+ require "minitest/spec"
4
+ require "minitest/autorun"
5
+ require "fragile"
6
+
7
+ describe "Pipeline" do
8
+ describe "#name" do
9
+ before do
10
+ @pipeline = Fragile::Pipeline.new("test")
11
+ end
12
+
13
+ it "設定した値を取得できるべき" do
14
+ assert_equal "test", @pipeline.name
15
+ end
16
+ end
17
+
18
+ describe "#retry_count" do
19
+ before do
20
+ @pipeline = Fragile::Pipeline.new("test")
21
+ end
22
+
23
+ it "値を設定できるべき" do
24
+ @pipeline.retry_count 5
25
+
26
+ actual = nil
27
+ @pipeline.instance_eval { actual = @retry_count }
28
+ assert_equal 5, actual
29
+ end
30
+ end
31
+
32
+ describe "#use" do
33
+ class TestPlugin
34
+ attr_accessor :config
35
+
36
+ def initialize(config)
37
+ @config = config
38
+ end
39
+
40
+ def call(data)
41
+ end
42
+ end
43
+
44
+ before do
45
+ @pipeline = Fragile::Pipeline.new("test")
46
+ end
47
+
48
+ it "プラグインを設定できるべき" do
49
+ @pipeline.use TestPlugin
50
+
51
+ actual_count = nil
52
+ @pipeline.instance_eval { actual_count = @plugins.count }
53
+ assert_equal 1, actual_count
54
+ end
55
+ end
56
+
57
+ describe "#run" do
58
+ class TestPlugin
59
+ attr_accessor :config
60
+
61
+ def initialize(config)
62
+ @config = config
63
+ @max_error_count = config[:max_error_count] || 0
64
+ @error_count = 0
65
+ end
66
+
67
+ def call(data)
68
+ if @error_count < @max_error_count
69
+ @error_count += 1
70
+ raise "Error #{@error_count}"
71
+ end
72
+ @config[:called] = true
73
+ end
74
+ end
75
+
76
+ it "パイプラインを実行できるべき" do
77
+ @data = {}
78
+ @pipeline = Fragile::Pipeline.new("test")
79
+ @pipeline.use TestPlugin, @data
80
+
81
+ @pipeline.run
82
+
83
+ assert_equal true, @data[:called]
84
+ end
85
+
86
+ it "@retry_count 回リトライできるべき" do
87
+ @data = {:max_error_count => 3}
88
+ @pipeline = Fragile::Pipeline.new("test")
89
+ @pipeline.use TestPlugin, @data
90
+ @pipeline.retry_count 2
91
+
92
+ @pipeline.run
93
+
94
+ assert_equal true, @data[:called]
95
+ end
96
+
97
+ it "@retry_count 回以上失敗すると PipelineError が発生するべき" do
98
+ @data = {:max_error_count => 4}
99
+ @pipeline = Fragile::Pipeline.new("test")
100
+ @pipeline.use TestPlugin, @data
101
+ @pipeline.retry_count 2
102
+
103
+ assert_raises Fragile::PipelineError do
104
+ @pipeline.run
105
+ end
106
+ end
107
+ end
108
+ end
109
+
@@ -0,0 +1,96 @@
1
+ # coding: utf-8
2
+ require_relative "test_helper"
3
+ require "minitest/spec"
4
+ require "minitest/autorun"
5
+ require "fragile"
6
+
7
+ class TestApp
8
+ include Fragile::PluginManager
9
+
10
+ def initialize(plugin_dir)
11
+ @plugin_dir = plugin_dir
12
+ end
13
+ end
14
+
15
+ module Fragile::Plugin
16
+ class TestPlugin
17
+ def initialize(config)
18
+ @config = config
19
+ end
20
+
21
+ def call(data)
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "PluginManager" do
27
+ describe "#load_plugins" do
28
+ describe "プラグインディレクトリが存在するとき" do
29
+ before do
30
+ @plugin_dir = File.join(File.dirname(__FILE__), "../examples/plugins")
31
+ @manager = TestApp.new(@plugin_dir)
32
+ end
33
+
34
+ it "プラグインをロードできるべき" do
35
+ @manager.load_plugins
36
+ Fragile::Plugin.const_get("Foo")
37
+ pass
38
+ end
39
+ end
40
+ end
41
+
42
+ describe "#create_plugin" do
43
+ describe "クラスを指定したとき" do
44
+ before do
45
+ @plugin_dir = File.join(File.dirname(__FILE__), "../examples/plugins")
46
+ @manager = TestApp.new(@plugin_dir)
47
+ end
48
+
49
+ it "プラグインのインスタンスを生成できるべき" do
50
+ obj = @manager.create_plugin(Fragile::Plugin::TestPlugin, {})
51
+ assert_equal Fragile::Plugin::TestPlugin, obj.class
52
+ end
53
+ end
54
+
55
+ describe "存在しないプラグイン名を指定したとき" do
56
+ before do
57
+ @plugin_dir = File.join(File.dirname(__FILE__), "../examples/plugins")
58
+ @manager = TestApp.new(@plugin_dir)
59
+ end
60
+
61
+ it "NameError が発生するべき" do
62
+ assert_raises NameError do
63
+ @manager.create_plugin("foo_bar_hoge_fuga", {})
64
+ end
65
+ end
66
+ end
67
+
68
+ describe "存在するプラグイン名を指定したとき" do
69
+ before do
70
+ @plugin_dir = File.join(File.dirname(__FILE__), "../examples/plugins")
71
+ @manager = TestApp.new(@plugin_dir)
72
+ @manager.load_plugins
73
+ end
74
+
75
+ it "プラグインのインスタンスを生成できるべき" do
76
+ obj = @manager.create_plugin("foo", {})
77
+ assert_equal Fragile::Plugin::Foo, obj.class
78
+ end
79
+ end
80
+
81
+ describe "プラグインディレクトリが存在しないとき" do
82
+ before do
83
+ @plugin_dir = File.join(File.dirname(__FILE__), "not_exist")
84
+ @manager = TestApp.new(@plugin_dir)
85
+ end
86
+
87
+ it "何もしないべき" do
88
+ @manager.load_plugins
89
+ assert_raises NameError do
90
+ Fragile::Plugin.const_get("Foo")
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
@@ -0,0 +1,7 @@
1
+ # coding: utf-8
2
+
3
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), ".."))
4
+ $LOAD_PATH.unshift APP_ROOT
5
+ $LOAD_PATH.unshift File.join(APP_ROOT)
6
+ $LOAD_PATH.unshift File.join(APP_ROOT, 'lib')
7
+
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fragile
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - tnakamura
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Ruby Pipeline Framework
15
+ email:
16
+ - griefworker@gmail.com
17
+ executables:
18
+ - fragile
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - MIT-LICENSE
25
+ - Rakefile
26
+ - bin/fragile
27
+ - examples/example.rb
28
+ - examples/plugins/bar.rb
29
+ - examples/plugins/foo.rb
30
+ - examples/plugins/hoge.rb
31
+ - fragile.gemspec
32
+ - lib/fragile.rb
33
+ - lib/fragile/application.rb
34
+ - lib/fragile/dsl.rb
35
+ - lib/fragile/pipeline.rb
36
+ - lib/fragile/pipeline_manager.rb
37
+ - lib/fragile/plugin_manager.rb
38
+ - lib/fragile/version.rb
39
+ - test/dsl_test.rb
40
+ - test/pipeline_manager_test.rb
41
+ - test/pipeline_test.rb
42
+ - test/plugin_manager_test.rb
43
+ - test/test_helper.rb
44
+ homepage: https://github.com/tnakamura/fragile
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project: fragile
64
+ rubygems_version: 1.8.16
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Ruby Pipeline Framework
68
+ test_files: []