runfile 0.1.1.pre

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 140227a208cb696ecea61be2900adaa55a2e57c4
4
+ data.tar.gz: a8ebcc1b213d108fdb90661b586364860e6dbea3
5
+ SHA512:
6
+ metadata.gz: f8fc91d59ced071ec86d3bb156937b7f321872fc50f52a3269adfdc4d3227d4d086e05e187140bb397bab920fe326e6c69ce42a19f1dc7a88fed4ec58d4515e6
7
+ data.tar.gz: 1e42a00ceea31aa897dcc4905e137b2d9c24dcfcb015735c3000c43b5892835c4f1ec2d6204b676566d6cea7a292e8da2795f71cc2a93d80488f5d3a0c732b97
data/bin/run ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'runfile'
4
+ include Runfile
5
+
6
+ Runner.instance.execute ARGV
data/lib/runfile.rb ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require 'runfile/docopt_maker'
3
+ require 'runfile/action'
4
+ require 'runfile/runner'
5
+ require 'runfile/dsl'
@@ -0,0 +1,15 @@
1
+ module Runfile
2
+ class Action
3
+ attr :usage, :help
4
+
5
+ def initialize(block, usage, help)
6
+ @usage = usage
7
+ @help = help
8
+ @block = block
9
+ end
10
+
11
+ def execute(args)
12
+ @block.yield args
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,43 @@
1
+ require 'docopt'
2
+ require 'colsole'
3
+
4
+ module Runfile
5
+ include Colsole
6
+ class DocoptMaker
7
+ def initialize(version, summary, actions, options)
8
+ @version = version
9
+ @summary = summary
10
+ @actions = actions
11
+ @options = options
12
+ end
13
+
14
+ def make
15
+ width, height = detect_terminal_size
16
+ doc = "Runfile #{@version}\n"
17
+ doc += "#{@summary} \n" if @summary
18
+ doc += "\nUsage:\n";
19
+ @actions.each do |name, action|
20
+ doc += " run #{action.usage}\n"
21
+ end
22
+ doc += " run (-h | --help | --version)\n\n"
23
+ caption_printed = false
24
+ @actions.each do |name, action|
25
+ action.help or next
26
+ doc += "Commands:\n" unless caption_printed
27
+ caption_printed = true
28
+ helpline = " #{action.help}"
29
+ wrapped = word_wrap helpline, width
30
+ doc += " #{action.usage}\n#{wrapped}\n\n"
31
+ end
32
+ doc += "Options:\n"
33
+ doc += " -h --help\n Show this screen\n\n"
34
+ doc += " --version\n Show version\n\n"
35
+ @options.each do |flag, text|
36
+ helpline = " #{text}"
37
+ wrapped = word_wrap helpline, width
38
+ doc += " #{flag}\n#{wrapped}\n\n"
39
+ end
40
+ doc
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,25 @@
1
+ module Runfile
2
+ def version(ver)
3
+ Runner.instance.version = ver
4
+ end
5
+
6
+ def usage(text)
7
+ Runner.instance.last_usage = text
8
+ end
9
+
10
+ def help(text)
11
+ Runner.instance.last_help = text
12
+ end
13
+
14
+ def action(name, &block)
15
+ Runner.instance.add_action name, &block
16
+ end
17
+
18
+ def summary(text)
19
+ Runner.instance.summary = text
20
+ end
21
+
22
+ def option(flag, text)
23
+ Runner.instance.add_option flag, text
24
+ end
25
+ end
@@ -0,0 +1,58 @@
1
+ require 'docopt'
2
+
3
+ module Runfile
4
+ class Runner
5
+ attr_writer :last_usage, :last_help, :version, :summary
6
+
7
+ @@instance = nil
8
+
9
+ def initialize
10
+ @last_usage = nil
11
+ @last_help = nil
12
+ @actions = {}
13
+ @options = {}
14
+ @version = "0.0.0"
15
+ @summary = false
16
+ end
17
+
18
+ def self.instance
19
+ @@instance = self.new if @@instance.nil?
20
+ @@instance
21
+ end
22
+
23
+ def execute(argv)
24
+ File.exist? 'Runfile' or abort "Runfile not found"
25
+ load 'Runfile'
26
+ @@instance.run *argv
27
+ end
28
+
29
+ def add_action(name, &block)
30
+ @actions[name] = Action.new(block, @last_usage, @last_help)
31
+ @last_usage = nil
32
+ @last_help = nil
33
+ end
34
+
35
+ def add_option(flag, text)
36
+ @options[flag] = text
37
+ end
38
+
39
+ def run(*argv)
40
+ action = argv[0]
41
+ action and action = action.to_sym
42
+ begin
43
+ args = Docopt::docopt(docopt, version: @version, argv:argv)
44
+ @actions.has_key? action or abort "Runfile error: Action :#{action} is not defined"
45
+ @actions[action].execute args
46
+ rescue Docopt::Exit => e
47
+ puts e.message
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def docopt
54
+ maker = DocoptMaker.new(@version, @summary, @actions, @options)
55
+ maker.make
56
+ end
57
+ end
58
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: runfile
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1.pre
5
+ platform: ruby
6
+ authors:
7
+ - Danny Ben Shitrit
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colsole
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: docopt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ description: An easy way to create project specific command line utilities
42
+ email: db@dannyben.com
43
+ executables:
44
+ - run
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - bin/run
49
+ - lib/runfile.rb
50
+ - lib/runfile/action.rb
51
+ - lib/runfile/docopt_maker.rb
52
+ - lib/runfile/dsl.rb
53
+ - lib/runfile/runner.rb
54
+ homepage: http://sector-seven.net
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">"
70
+ - !ruby/object:Gem::Version
71
+ version: 1.3.1
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.4.6
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: If Rake and Docopt had a baby
78
+ test_files: []
79
+ has_rdoc: