runfile 0.1.2 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b145578577cc500e75a76396084f5c708f3ffc19
4
- data.tar.gz: d3f5047c705832d2184c8975b0f55dfb7149354e
3
+ metadata.gz: 87351dfdba90ed54e90de8659791d79242b993ee
4
+ data.tar.gz: d0fea602beebde2f9f47d754ceddcd9961d16bea
5
5
  SHA512:
6
- metadata.gz: 075be67037b4a3bb1680f0c90188332a4ca757f6f2672052496551a5bd8b8d763928e68d5ae304395e0f96306f3d7e058f21b6d3d310c706fd57811be589d674
7
- data.tar.gz: 64f564a08e4e93deb4ba3ec4afcb371dc7788a68b7c1bf819efd37ff57f2bf4b526f138bac7aae0f89d76c208aabae1deffd841d6bbd45a58217eef52eed45b3
6
+ metadata.gz: 01b40937adcc3301f2afe3143a7f85bae625a19c95a631d7f11774b4aca28328fe9f6dc738eeebc2b6c0dd43e0b13408111721d3eb62e23ea64e0acb782e4096
7
+ data.tar.gz: 06d21eab94577ec842795941c335621d198162965e30e2e49b079aebab2fae9ef159a5fd6064e9cbab9e57a3813ada6324fd7f700dcfae5a34f857379621c0e0
data/lib/runfile/dsl.rb CHANGED
@@ -35,7 +35,13 @@ module Runfile
35
35
  Runner.instance.add_action name, &block
36
36
  end
37
37
 
38
- def command(name)
38
+ # Define a new command namespace
39
+ def command(name=nil)
39
40
  Runner.instance.namespace = name
40
41
  end
42
+
43
+ # Cross-call another action
44
+ def call(command_string)
45
+ Runner.instance.cross_call command_string
46
+ end
41
47
  end
@@ -9,7 +9,7 @@ module Runfile
9
9
 
10
10
  @@instance = nil
11
11
 
12
- # Initialize all variables to a sensible default.
12
+ # Initialize all variables to sensible defaults.
13
13
  def initialize
14
14
  @last_usage = nil
15
15
  @last_help = nil
@@ -28,7 +28,7 @@ module Runfile
28
28
 
29
29
  # Load and execute a Runfile call.
30
30
  def execute(argv)
31
- File.exist? 'Runfile' or abort "Runfile not found"
31
+ File.exist? 'Runfile' or handle_no_runfile argv
32
32
  load 'Runfile'
33
33
  @@instance.run *argv
34
34
  end
@@ -57,14 +57,26 @@ module Runfile
57
57
  def run(*argv)
58
58
  action = find_action argv
59
59
  begin
60
- args = Docopt::docopt(docopt, version: @version, argv:argv)
61
- action or abort "Runfile error: Action not found"
62
- @actions[action].execute args
60
+ docopt_exec action, argv
63
61
  rescue Docopt::Exit => e
64
62
  puts e.message
65
63
  end
66
64
  end
67
65
 
66
+ # Invoke action from another action. Used by the DSL's #call
67
+ # function. Expects to get a single string that looks as if
68
+ # it was typed in the command prompt.
69
+ def cross_call(command_string)
70
+ argv = command_string.split /\s(?=(?:[^"]|"[^"]*")*$)/
71
+ action = find_action argv
72
+ begin
73
+ docopt_exec action, argv
74
+ rescue Docopt::Exit => e
75
+ puts "Cross call failed: #{command_string}"
76
+ abort e.message
77
+ end
78
+ end
79
+
68
80
  private
69
81
 
70
82
  # Dynamically generate the docopt document.
@@ -73,6 +85,16 @@ module Runfile
73
85
  maker.make
74
86
  end
75
87
 
88
+ # Call the docopt parser and execute the action with the
89
+ # parsed arguments.
90
+ # This should always be called in a begin...rescue block and
91
+ # you should handle the Docopt::Exit exception.
92
+ def docopt_exec(action, argv)
93
+ args = Docopt::docopt(docopt, version: @version, argv:argv)
94
+ action or abort "Runfile error: Action not found"
95
+ @actions[action].execute args
96
+ end
97
+
76
98
  # Inspect the first two arguments in the argv and look for
77
99
  # a matching action or command_action.
78
100
  # We give priority to the second form (:make_jam) in order to
@@ -89,5 +111,19 @@ module Runfile
89
111
  end
90
112
  return false
91
113
  end
114
+
115
+ # Handle the case when `run` is called without a Runfile
116
+ # present. We will let the user know they can type `run make`
117
+ # to create a new sample Runfile.
118
+ def handle_no_runfile(argv)
119
+ if argv[0] == "make"
120
+ sample = File.dirname(__FILE__) + "/../../examples/template/Runfile"
121
+ dest = Dir.pwd + "/Runfile"
122
+ File.write(dest, File.read(sample))
123
+ abort "Runfile created."
124
+ else
125
+ abort "Runfile not found.\nUse 'run make' to create one."
126
+ end
127
+ end
92
128
  end
93
129
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runfile
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-15 00:00:00.000000000 Z
11
+ date: 2015-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colsole