flow-lite 0.0.1
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/Manifest.txt +7 -0
- data/README.md +23 -0
- data/Rakefile +31 -0
- data/bin/flow +17 -0
- data/lib/flow-lite.rb +142 -0
- data/lib/flow-lite/version.rb +20 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4af502cc9764efd28671cbd3e4e498c0cc9dbd87
|
4
|
+
data.tar.gz: af96b08715862f411dfb3cdc7a2b87bc8ac4c8e6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c2edc964d13234f76c67c52989e4ff9e664164a61ba185f472d6f24a6300d1ee87cdc8ec30eb40a88258fd9beb63e133f95e852249b7f0d5b624e17430a86b31
|
7
|
+
data.tar.gz: 90a4af15059474729db047b8ad658c36cfacbcdfd0db1802ec29423d22893806eea0a9beeb371364a05f848ffbf8b82aa15333b32fbf3cfe630d8a73287e7eee
|
data/CHANGELOG.md
ADDED
data/Manifest.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# flow-lite
|
2
|
+
|
3
|
+
flow-lite gem - (yet) another (lite) workflow engine; let's you define your workflow steps in Flowfiles; incl. the flow command line tool
|
4
|
+
|
5
|
+
|
6
|
+
* home :: [github.com/rubycoco/git](https://github.com/rubycoco/git)
|
7
|
+
* bugs :: [github.com/rubycoco/git/issues](https://github.com/rubycoco/git/issues)
|
8
|
+
* gem :: [rubygems.org/gems/flow-lite](https://rubygems.org/gems/flow-lite)
|
9
|
+
* rdoc :: [rubydoc.info/gems/flow-lite](http://rubydoc.info/gems/flow-lite)
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
To be done
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
## License
|
20
|
+
|
21
|
+
The `flow-lite` scripts are dedicated to the public domain.
|
22
|
+
Use it as you please with no restrictions whatsoever.
|
23
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'hoe'
|
2
|
+
require './lib/flow-lite/version.rb'
|
3
|
+
|
4
|
+
Hoe.spec 'flow-lite' do
|
5
|
+
|
6
|
+
self.version = FlowLite::VERSION
|
7
|
+
|
8
|
+
self.summary = "flow-lite gem - (yet) another (lite) workflow engine; let's you define your workflow steps in Flowfiles; incl. the flow command line tool"
|
9
|
+
self.description = summary
|
10
|
+
|
11
|
+
self.urls = { home: 'https://github.com/rubycoco/git' }
|
12
|
+
|
13
|
+
self.author = 'Gerald Bauer'
|
14
|
+
self.email = 'ruby-talk@ruby-lang.org'
|
15
|
+
|
16
|
+
# switch extension to .markdown for gihub formatting
|
17
|
+
self.readme_file = 'README.md'
|
18
|
+
self.history_file = 'CHANGELOG.md'
|
19
|
+
|
20
|
+
self.extra_deps = [
|
21
|
+
['gitti', '>= 0.6.1' ],
|
22
|
+
['hubba', '>= 1.0.0' ],
|
23
|
+
['monos', '>= 0.5.0' ],
|
24
|
+
]
|
25
|
+
|
26
|
+
self.licenses = ['Public Domain']
|
27
|
+
|
28
|
+
self.spec_extras = {
|
29
|
+
required_ruby_version: '>= 2.2.2'
|
30
|
+
}
|
31
|
+
end
|
data/bin/flow
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
###################
|
4
|
+
# DEV TIPS:
|
5
|
+
#
|
6
|
+
# For local testing run like:
|
7
|
+
#
|
8
|
+
# ruby -Ilib bin/flow
|
9
|
+
#
|
10
|
+
# Set the executable bit in Linux. Example:
|
11
|
+
#
|
12
|
+
# % chmod a+x bin/flow
|
13
|
+
#
|
14
|
+
|
15
|
+
require 'flow-lite'
|
16
|
+
|
17
|
+
Flow::Tool.main
|
data/lib/flow-lite.rb
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'pp'
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
####################
|
7
|
+
# "prelude/prolog" add some 3rd party libs/gems
|
8
|
+
# -- our own
|
9
|
+
require 'gitti'
|
10
|
+
require 'hubba' ## todo/fix: rename to gitti-api/gitti-apis
|
11
|
+
require 'mono'
|
12
|
+
# -- some more ???
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
#####################
|
17
|
+
# our own code
|
18
|
+
require 'flow-lite/version' # note: let version always go first
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
module Flow
|
23
|
+
class Step
|
24
|
+
attr_reader :names # e.g. :list or [:list,:ls] etc.
|
25
|
+
attr_reader :block
|
26
|
+
|
27
|
+
def name() @names[0]; end ## "primary" name
|
28
|
+
|
29
|
+
def initialize( name_or_names, block )
|
30
|
+
@names = if name_or_names.is_a?( Array )
|
31
|
+
name_or_names
|
32
|
+
else
|
33
|
+
[name_or_names] ## assume single symbol (name); wrap in array
|
34
|
+
end
|
35
|
+
@names = @names.map {|name| name.to_sym } ## make sure we always use symbols
|
36
|
+
@block = block
|
37
|
+
end
|
38
|
+
end # class Step
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
class Base ## base class for flow class (auto)-constructed/build from flowfile
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
class Flowfile
|
47
|
+
## convenience method - use like Flowfile.load_file()
|
48
|
+
def self.load_file( path='./Flowfile' )
|
49
|
+
code = File.open( path, 'r:utf-8' ) { |f| f.read }
|
50
|
+
load( code )
|
51
|
+
end
|
52
|
+
|
53
|
+
## another convenience method - use like Flowfile.load()
|
54
|
+
def self.load( code )
|
55
|
+
flowfile = new
|
56
|
+
flowfile.instance_eval( code )
|
57
|
+
flowfile
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
def flow ## build flow class
|
63
|
+
@flow_class ||= build_flow_class
|
64
|
+
@flow_class.new ## todo/check: always return a new instance why? why not?
|
65
|
+
end
|
66
|
+
|
67
|
+
def build_flow_class
|
68
|
+
puts " building flow class..."
|
69
|
+
flowfile = self
|
70
|
+
klass = Class.new( Base ) do
|
71
|
+
flowfile.steps.each_with_index do |step,i|
|
72
|
+
name = step.names[0]
|
73
|
+
puts " adding step #{i+1}/#{flowfile.steps.size} >#{name}<..."
|
74
|
+
define_method( name, &step.block )
|
75
|
+
|
76
|
+
alt_names = step.names[1..-1]
|
77
|
+
alt_names.each do |alt_name|
|
78
|
+
puts " adding alias >#{alt_name}< for >#{name}<..."
|
79
|
+
alias_method( alt_name, name )
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
klass
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
def initialize( opts={} )
|
89
|
+
@opts = opts
|
90
|
+
@steps = []
|
91
|
+
end
|
92
|
+
|
93
|
+
attr_reader :steps
|
94
|
+
|
95
|
+
## "classic / basic" primitives - step
|
96
|
+
def step( name, &block )
|
97
|
+
@steps << Step.new( name, block )
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
def run( name )
|
102
|
+
name = name.to_sym ## make sure we always use symbols
|
103
|
+
if flow.respond_to?( name )
|
104
|
+
flow.send( name )
|
105
|
+
else
|
106
|
+
puts "!! ERROR: step definition >#{name}< not found; cannot run/execute - known steps include:"
|
107
|
+
pp @steps
|
108
|
+
exit 1
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end # class Flowfile
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
class Tool
|
116
|
+
def self.main( args=ARGV )
|
117
|
+
options = {}
|
118
|
+
OptionParser.new do |parser|
|
119
|
+
parser.on( '-f FILENAME', '--flowfile FILENAME' ) do |filename|
|
120
|
+
options[:flowfile] = filename
|
121
|
+
end
|
122
|
+
end.parse!( args )
|
123
|
+
|
124
|
+
path = options[:flowfile] || './Flowfile'
|
125
|
+
flowfile = Flowfile.load_file( path )
|
126
|
+
|
127
|
+
## allow multipe steps getting called - why? why not?
|
128
|
+
## flow setup clone update etc??
|
129
|
+
args.each do |arg|
|
130
|
+
flowfile.run( arg )
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end # class Tool
|
134
|
+
|
135
|
+
end # module Flow
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
# say hello
|
140
|
+
puts FlowLite.banner
|
141
|
+
|
142
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module FlowLite
|
2
|
+
|
3
|
+
MAJOR = 0 ## todo: namespace inside version or something - why? why not??
|
4
|
+
MINOR = 0
|
5
|
+
PATCH = 1
|
6
|
+
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
7
|
+
|
8
|
+
def self.version
|
9
|
+
VERSION
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.banner
|
13
|
+
"flow-lite/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.root
|
17
|
+
File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
|
18
|
+
end
|
19
|
+
|
20
|
+
end # module FlowLite
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flow-lite
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gerald Bauer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-10-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: gitti
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hubba
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: monos
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.5.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '7'
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '4.0'
|
72
|
+
- - "<"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '7'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: hoe
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.22'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.22'
|
89
|
+
description: flow-lite gem - (yet) another (lite) workflow engine; let's you define
|
90
|
+
your workflow steps in Flowfiles; incl. the flow command line tool
|
91
|
+
email: ruby-talk@ruby-lang.org
|
92
|
+
executables:
|
93
|
+
- flow
|
94
|
+
extensions: []
|
95
|
+
extra_rdoc_files:
|
96
|
+
- CHANGELOG.md
|
97
|
+
- Manifest.txt
|
98
|
+
- README.md
|
99
|
+
files:
|
100
|
+
- CHANGELOG.md
|
101
|
+
- Manifest.txt
|
102
|
+
- README.md
|
103
|
+
- Rakefile
|
104
|
+
- bin/flow
|
105
|
+
- lib/flow-lite.rb
|
106
|
+
- lib/flow-lite/version.rb
|
107
|
+
homepage: https://github.com/rubycoco/git
|
108
|
+
licenses:
|
109
|
+
- Public Domain
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options:
|
113
|
+
- "--main"
|
114
|
+
- README.md
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 2.2.2
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 2.5.2
|
130
|
+
signing_key:
|
131
|
+
specification_version: 4
|
132
|
+
summary: flow-lite gem - (yet) another (lite) workflow engine; let's you define your
|
133
|
+
workflow steps in Flowfiles; incl. the flow command line tool
|
134
|
+
test_files: []
|