byggvir 0.0.2 → 0.0.3
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 +4 -4
- data/README.md +3 -14
- data/lib/byggvir.rb +9 -3
- data/lib/byggvir/simple.rb +1 -0
- data/lib/byggvir/static.rb +24 -6
- data/lib/byggvir/version.rb +1 -1
- data/test/cli.rb~ +3 -0
- metadata +13 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 128d5803e389bf983050284063499d06f33d5b11
|
4
|
+
data.tar.gz: 14c01506592e0f90e601a07b25091f0ffab6566e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3bf53ab112c99a4115652063ab2d7c388da471f9ef75a9121714bf229ad600c686644618f856749bd103c60591477a4ebc2d4875b62879a08cb34cfdf998812
|
7
|
+
data.tar.gz: 89555404be353f42bbed45a4643c7c08c19ac4605f69d401d562d3edd6da02816e97fdebaed76f9f52a3760fd3109c1dee34c8339592668c96aaf4d8203d7fdc
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@ byggvir
|
|
3
3
|
|
4
4
|
Byggvir is designed to be the simplest possible command line processing for ruby 2.1
|
5
5
|
|
6
|
-
Just require byggvir/simple and off you go!
|
6
|
+
Just require byggvir/simple and off you go!
|
7
7
|
|
8
8
|
```ruby
|
9
9
|
require 'byggvir/simple'
|
@@ -19,17 +19,6 @@ cat_zoo -c "Mr Buttons,spot" -d 5.0
|
|
19
19
|
cat_zoo -c Mephistopheles,Drunky -d 5
|
20
20
|
```
|
21
21
|
|
22
|
-
Byggvir::cli will apply to the function you specify
|
23
|
-
|
24
|
-
```ruby
|
25
|
-
require 'byggvir'
|
26
|
-
|
27
|
-
Byggvir::cli,
|
28
|
-
def cat_master(cats:)
|
29
|
-
|
30
|
-
end
|
31
|
-
```
|
32
|
-
|
33
22
|
Byggvir/multiple will match multiple subfunctions
|
34
23
|
```bash
|
35
24
|
pet dog -n 5
|
@@ -42,9 +31,9 @@ require 'byggvir'
|
|
42
31
|
class Pet < Byggvir::Multiple
|
43
32
|
doc "The number of dogs",
|
44
33
|
def dog(number:)
|
45
|
-
|
34
|
+
|
46
35
|
end
|
47
|
-
|
36
|
+
|
48
37
|
doc "The number of cats",
|
49
38
|
def cat(number:)
|
50
39
|
|
data/lib/byggvir.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
1
|
require 'byggvir/static'
|
2
2
|
class Byggvir
|
3
|
-
def self.cli(fun)
|
4
|
-
::Byggvir.wrap(self,cli)
|
5
|
-
end
|
6
3
|
class TestObject
|
7
4
|
end
|
8
5
|
class Multiple
|
9
6
|
class << self
|
7
|
+
def create_binaries()
|
8
|
+
directory = File.mkdir(File.basedir($0)+"/bin")
|
9
|
+
list_existing_methods.each{""}
|
10
|
+
end
|
11
|
+
|
10
12
|
def doc(doc,name=nil)
|
11
13
|
::Byggvir.error!("doc has to end with a comma, #{caller[1..1]}") unless name.class == Symbol
|
12
14
|
@docs||={}
|
13
15
|
@docs[name]=doc
|
14
16
|
end
|
17
|
+
|
18
|
+
# List existing commands
|
15
19
|
def commands(inst)
|
16
20
|
unless @docs
|
17
21
|
@docs = (inst.methods.to_set - TestObject.new.methods.to_set).map{|meth|
|
@@ -21,6 +25,8 @@ class Byggvir
|
|
21
25
|
longest = @docs.keys.map(&:length).max
|
22
26
|
@docs.map{ |k,v| Kernel.sprintf("% #{longest+1}s : %s",k,v)}.join("\n")
|
23
27
|
end
|
28
|
+
|
29
|
+
# Instantiate a multiple function object
|
24
30
|
def new(*args)
|
25
31
|
inst=super(*args)
|
26
32
|
::Byggvir.error!("Please specify a method, One of: \n#{commands(inst)}") unless ARGV.length>0
|
data/lib/byggvir/simple.rb
CHANGED
data/lib/byggvir/static.rb
CHANGED
@@ -5,40 +5,58 @@ class Byggvir
|
|
5
5
|
def self.error!(err)
|
6
6
|
$stderr.puts("#{$0}:#{err}");$stderr.flush;Process.exit!(-1);
|
7
7
|
end
|
8
|
+
|
9
|
+
# get method parameters as hash
|
8
10
|
def self.parameters(method)
|
9
11
|
method #map argument types
|
10
12
|
.parameters
|
11
13
|
.map{|ty, na| [na.to_s, ty]}
|
12
14
|
.to_h
|
13
15
|
end
|
16
|
+
|
17
|
+
# parse arguments
|
18
|
+
def self.interpret(arg)
|
19
|
+
data = YAML.load("---\n[#{arg}]")
|
20
|
+
data.class == Array && data.length == 1 ? data[0] : data
|
21
|
+
end
|
22
|
+
|
23
|
+
# wrap a function
|
14
24
|
def self.wrap(instance,method)
|
15
25
|
name = method.name
|
16
26
|
arguments = ::Byggvir.parameters(method)
|
27
|
+
# Check that function has no non-keyword arguments
|
17
28
|
if (badarg = (arguments.values.to_set - [:keyreq, :key].to_set)).empty?
|
18
|
-
required_arguments = arguments
|
29
|
+
required_arguments = arguments
|
30
|
+
.select{|k,v| v == :keyreq}
|
31
|
+
.keys
|
32
|
+
.map(&:to_sym)
|
33
|
+
.to_set
|
34
|
+
# Single-letter arguments, first letter, except for duplicates
|
19
35
|
short = arguments
|
20
36
|
.keys
|
21
37
|
.map{|k| {(?- + k[0]) => k}} #prepend dash
|
22
|
-
.reduce{|old, new| old.merge(new){|k, o, n| nil}}
|
38
|
+
.reduce({}){|old, new| old.merge(new){|k, o, n| nil}} #Drop duplicates
|
23
39
|
.select{|k, v| v != nil}
|
24
40
|
.invert
|
25
41
|
opts = GetoptLong.new(*arguments.map{|k, v| ["--#{k}", short[k], GetoptLong::REQUIRED_ARGUMENT].compact})
|
26
42
|
opts.quiet = true
|
43
|
+
|
44
|
+
# Use getoptlong to parse arguments,
|
27
45
|
call = {}
|
28
|
-
unwrap = proc {|w| (w.class == Array && w.length == 1)?w[0]:w }
|
29
46
|
begin
|
30
|
-
opts.each{|opt, arg| call[opt[2..-1].to_sym] =
|
47
|
+
opts.each{|opt, arg| call[opt[2..-1].to_sym] = ::Byggvir.interpret(arg)}
|
31
48
|
rescue GetoptLong::InvalidOption => ex
|
32
49
|
::Byggvir.error!(ex.to_s)
|
33
50
|
else
|
34
|
-
if
|
51
|
+
# Call function if all arguments are present
|
52
|
+
if (missing_arguments = (required_arguments - call.keys.to_set)).empty?
|
35
53
|
instance.send(name,**call)
|
36
54
|
else
|
37
55
|
::Byggvir.error!("Missing arguments to #{name}: #{missing_arguments.to_a.join(?,)}")
|
38
56
|
end
|
39
57
|
end
|
40
58
|
else
|
41
|
-
::Byggvir.error!("
|
59
|
+
::Byggvir.error!("#{name} is not defined correctly, bad arguments #{badarg}\nByggvir can only use optional or mandatory keyword arguments like def(something: other:val)")
|
42
60
|
end
|
43
61
|
end
|
44
62
|
end
|
data/lib/byggvir/version.rb
CHANGED
data/test/cli.rb~
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: byggvir
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Kleiner
|
@@ -17,22 +17,23 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
-
- README.md
|
21
|
-
- lib/byggvir.rb
|
22
20
|
- lib/byggvir/simple.rb
|
23
21
|
- lib/byggvir/static.rb
|
24
22
|
- lib/byggvir/version.rb
|
23
|
+
- lib/byggvir.rb
|
24
|
+
- README.md
|
25
25
|
- test/doctest.rb
|
26
|
-
- test/doctest.rb~
|
27
26
|
- test/easy.rb
|
28
|
-
- test/easy.rb~
|
29
27
|
- test/failing.rb
|
30
|
-
- test/failing.rb~
|
31
28
|
- test/multiple.rb
|
32
|
-
- test/multiple.rb~
|
33
29
|
- test/test.rb
|
34
|
-
- test/testfrompe.rb~
|
35
30
|
- test/update_local.rb
|
31
|
+
- test/cli.rb~
|
32
|
+
- test/doctest.rb~
|
33
|
+
- test/easy.rb~
|
34
|
+
- test/failing.rb~
|
35
|
+
- test/multiple.rb~
|
36
|
+
- test/testfrompe.rb~
|
36
37
|
- test/update_local.rb~
|
37
38
|
homepage: https://github.com/cultureulterior/byggvir
|
38
39
|
licenses:
|
@@ -44,21 +45,22 @@ require_paths:
|
|
44
45
|
- lib
|
45
46
|
required_ruby_version: !ruby/object:Gem::Requirement
|
46
47
|
requirements:
|
47
|
-
- - '
|
48
|
+
- - '>='
|
48
49
|
- !ruby/object:Gem::Version
|
49
50
|
version: '2.1'
|
50
51
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
|
-
- -
|
53
|
+
- - '>='
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: '0'
|
55
56
|
requirements: []
|
56
57
|
rubyforge_project:
|
57
|
-
rubygems_version: 2.
|
58
|
+
rubygems_version: 2.0.14
|
58
59
|
signing_key:
|
59
60
|
specification_version: 3
|
60
61
|
summary: Command line tool for ruby2.1
|
61
62
|
test_files:
|
63
|
+
- test/cli.rb~
|
62
64
|
- test/doctest.rb
|
63
65
|
- test/doctest.rb~
|
64
66
|
- test/easy.rb
|