fabrika 0.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
data/lib/fabrika.rb ADDED
@@ -0,0 +1,6 @@
1
+
2
+ require "fabrika/version"
3
+
4
+ module Fabrika
5
+
6
+ end
@@ -0,0 +1,44 @@
1
+ class Fabrika::Process
2
+
3
+ attr_accessor :steps
4
+
5
+ class << self
6
+
7
+ def steps(&block)
8
+ @step_definition = block
9
+ end
10
+
11
+ def step_definition
12
+ @step_definition
13
+ end
14
+
15
+ end
16
+
17
+ def initialize
18
+ initialize_steps
19
+ end
20
+
21
+ def add_step(name, options = {})
22
+ klass_name = options.delete(:class_name) || "#{self.class}::Steps::#{name.to_s.camelcase}"
23
+ steps[name] = klass_name.constantize.new(self, options)
24
+ end
25
+
26
+ alias :step :add_step
27
+
28
+ protected
29
+
30
+ def initialize_steps
31
+ @steps = {}
32
+ instance_eval &self.class.step_definition
33
+ end
34
+
35
+ def method_missing(name, *args)
36
+ case name.to_s
37
+ when /^(.*)_step$/
38
+ steps[$1.to_sym]
39
+ else
40
+ super
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,59 @@
1
+ class Fabrika::Step
2
+
3
+ class << self
4
+
5
+ def data(name, options = {}, &block)
6
+ raise "Block Missing" unless block_given?
7
+ define_method name do
8
+ instance_eval(&block)
9
+ end
10
+ end
11
+
12
+ def before(&block)
13
+ add_callback :before, &block
14
+ end
15
+
16
+ def after(&block)
17
+ add_callback :before, &block
18
+ end
19
+
20
+
21
+ def add_callback(event, &block)
22
+ @callbacks ||= {}
23
+ @callbacks[event] ||= []
24
+ @callbacks[event] << block
25
+ end
26
+
27
+ def callbacks
28
+ @callbacks || {}
29
+ end
30
+
31
+ end
32
+
33
+ def initialize(process, options = {})
34
+ @process, @options = process, options
35
+ end
36
+
37
+ def execute
38
+ raise "#execute called on the Process base class. Please implement this method in the sub-class."
39
+ end
40
+
41
+ def run(*args)
42
+ callbacks! :before
43
+ execute
44
+ callbacks! :after
45
+ end
46
+
47
+ protected
48
+
49
+ def callbacks!(event)
50
+ return if self.class.callbacks.empty?
51
+
52
+ self.class.callbacks[event].each do |callback|
53
+ instance_eval &callback
54
+ end
55
+ end
56
+
57
+
58
+
59
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fabrika
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Nikolay Efimov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ none: false
22
+ prerelease: false
23
+ type: :development
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ version: '1.3'
29
+ none: false
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ none: false
38
+ prerelease: false
39
+ type: :development
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ none: false
46
+ description: Mini-Framework for creating step-based processes for Rails
47
+ email:
48
+ - nik.efimov@yahoo.ca
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/fabrika.rb
54
+ - lib/fabrika/process.rb
55
+ - lib/fabrika/step.rb
56
+ homepage: ''
57
+ licenses:
58
+ - MIT
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ none: false
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>'
72
+ - !ruby/object:Gem::Version
73
+ version: 1.3.1
74
+ none: false
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 1.8.25
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: ''
81
+ test_files: []
82
+ has_rdoc: