baf 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fdbb678fca1424651ded0c54c5983915b3ca7d04
4
+ data.tar.gz: bd7557646c1eff5b19daa9aa6f21b3cd9cd49953
5
+ SHA512:
6
+ metadata.gz: 7385fda52a9b80301c0b5fdfd5bb3fb732debcde8d7aee68f5eb77c129f96052d3b93a1df938b73546126d374cc55e1f0fd7f0f9fabd560b7c0e9f2bbc72cc76
7
+ data.tar.gz: d487f12253679abf4b5b7bef4c6c3fdb3b266aae1fbcae2ccdcb4b32eaf544cb7d61709a59a2867ea393031f8d1906d37a8e176acfb6389fce31e25de64c4611
@@ -0,0 +1,11 @@
1
+ require 'forwardable'
2
+ require 'optparse'
3
+
4
+ require 'baf/cli'
5
+ require 'baf/env'
6
+ require 'baf/option_registrant'
7
+
8
+ module Baf
9
+ Error = Class.new(::StandardError)
10
+ ArgumentError = Class.new(Error)
11
+ end
@@ -0,0 +1,71 @@
1
+ module Baf
2
+ class CLI
3
+ ArgumentError = Class.new(ArgumentError)
4
+
5
+ EX_USAGE = 64
6
+ EX_SOFTWARE = 70
7
+
8
+ class << self
9
+ def flag *args, registrant: OptionRegistrant
10
+ registrant.register_flag env, option_parser, *args
11
+ end
12
+
13
+ def option *args, registrant: OptionRegistrant
14
+ registrant.register_option env, option_parser, Option.new(*args)
15
+ end
16
+
17
+ def run arguments, stdout: $stdout, stderr: $stderr
18
+ cli = new env(stdout), option_parser, arguments
19
+ cli.parse_arguments!
20
+ cli.run
21
+ rescue ArgumentError => e
22
+ stderr.puts e
23
+ exit EX_USAGE
24
+ rescue StandardError => e
25
+ stderr.puts "#{e.class.name}: #{e}"
26
+ stderr.puts e.backtrace.map { |l| ' %s' % l }
27
+ exit EX_SOFTWARE
28
+ end
29
+
30
+ protected
31
+
32
+ Option = Struct.new('Option', :short, :long, :arg, :desc)
33
+
34
+ def env output = nil
35
+ @env ||= Env.new(output)
36
+ end
37
+
38
+ def option_parser
39
+ @option_parser ||= OptionParser.new
40
+ end
41
+ end
42
+
43
+ attr_reader :arguments, :env, :option_parser
44
+
45
+ def initialize env, option_parser, arguments
46
+ @env = env
47
+ @option_parser = option_parser
48
+ @arguments = arguments
49
+ setup_default_options option_parser
50
+ end
51
+
52
+ def parse_arguments!
53
+ option_parser.parse! arguments
54
+ rescue OptionParser::InvalidOption
55
+ raise ArgumentError, option_parser
56
+ end
57
+
58
+ def run
59
+ end
60
+
61
+ protected
62
+
63
+ def setup_default_options option_parser
64
+ option_parser.separator ''
65
+ option_parser.separator 'options:'
66
+ option_parser.on_tail '-h', '--help', 'print this message' do
67
+ env.print option_parser
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,10 @@
1
+ module Baf
2
+ class Env
3
+ extend Forwardable
4
+ def_delegator :@output, :print
5
+
6
+ def initialize output
7
+ @output = output
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,34 @@
1
+ module Baf
2
+ class OptionRegistrant
3
+ class << self
4
+ def register_flag env, parser, short, long
5
+ define_env_flag env, long
6
+ parser.on "-#{short}", "--#{long}", "enable #{long} mode" do
7
+ env.send :"#{long}=", true
8
+ end
9
+ end
10
+
11
+ def register_option env, parser, opt
12
+ define_env_accessor env, opt.long
13
+ parser.on "-#{opt.short}", "--#{opt.long} #{opt.arg}", opt.desc do |v|
14
+ env.send :"#{opt.long}=", v
15
+ end
16
+ end
17
+
18
+ protected
19
+
20
+ def define_env_accessor env, name
21
+ (class << env; self end).send :attr_accessor, name
22
+ end
23
+
24
+ def define_env_flag env, name
25
+ define_env_accessor env, name
26
+ env.send :"#{name}=", false
27
+ env.define_singleton_method :"#{name}?" do
28
+ instance_variable_get :"@#{name}"
29
+ end
30
+ env.instance_variable_set :"@#{name}", false
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ require 'aruba/api'
2
+ require 'aruba/cucumber/hooks'
3
+
4
+ require 'baf/testing/cucumber/steps/execution'
5
+ require 'baf/testing/cucumber/steps/output'
@@ -0,0 +1,38 @@
1
+ def program_run check: false, opts: nil, args: nil
2
+ cmd = %w[ruby baf]
3
+ cmd << opts if opts
4
+ cmd << args.split(' ') if args
5
+ run_simple cmd.join(' '), fail_on_error: false
6
+ program_run_check if check
7
+ end
8
+
9
+ def program_run_check status: 0
10
+ expect(last_command_started).to have_exit_status status
11
+ rescue RSpec::Expectations::ExpectationNotMetError => e
12
+ if ENV.key? 'BAF_TEST_DEBUG'
13
+ fail RSpec::Expectations::ExpectationNotMetError, <<-eoh
14
+ #{e.message} Output was:
15
+ ```\n#{last_command_started.output.lines.map { |l| " #{l}" }.join} ```
16
+ eoh
17
+ else
18
+ raise
19
+ end
20
+ end
21
+
22
+
23
+ When /^I( successfully)? run the program$/ do |check|
24
+ program_run check: !!check
25
+ end
26
+
27
+ When /^I( successfully)? run the program with arguments (.+)$/ do |check, args|
28
+ program_run check: !!check, args: args
29
+ end
30
+
31
+ When /^I( successfully)? run the program with options? (-.+)$/ do |check, opts|
32
+ program_run check: !!check, opts: opts
33
+ end
34
+
35
+
36
+ Then /^the exit status must be (\d+)$/ do |exit_status|
37
+ program_run_check status: exit_status.to_i
38
+ end
@@ -0,0 +1,22 @@
1
+ def build_regexp pattern, options
2
+ Regexp.new(pattern, options.each_char.inject(0) do |m, e|
3
+ m | case e
4
+ when ?i then Regexp::IGNORECASE
5
+ when ?m then Regexp::MULTILINE
6
+ when ?x then Regexp::EXTENDED
7
+ end
8
+ end)
9
+ end
10
+
11
+
12
+ Then /^the output must contain exactly:$/ do |content|
13
+ expect(last_command_started.output).to eq unescape_text content + $/
14
+ end
15
+
16
+ Then /^the output must contain exactly "([^"]+)"$/ do |content|
17
+ expect(last_command_started.output).to eq unescape_text content
18
+ end
19
+
20
+ Then /^the output must match \/([^\/]+)\/([a-z]*)$/ do |pattern, options|
21
+ expect(last_command_started.output).to match build_regexp(pattern, options)
22
+ end
@@ -0,0 +1,3 @@
1
+ module Baf
2
+ VERSION = '0.0.2'.freeze
3
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: baf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Thibault Jouan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aruba
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.11'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '0.12'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.11'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.12'
33
+ - !ruby/object:Gem::Dependency
34
+ name: cucumber
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '10.4'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '10.4'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.4'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.4'
75
+ description: Basic Application Framework
76
+ email: tj@a13.fr
77
+ executables: []
78
+ extensions: []
79
+ extra_rdoc_files: []
80
+ files:
81
+ - lib/baf.rb
82
+ - lib/baf/cli.rb
83
+ - lib/baf/env.rb
84
+ - lib/baf/option_registrant.rb
85
+ - lib/baf/testing/cucumber.rb
86
+ - lib/baf/testing/cucumber/steps/execution.rb
87
+ - lib/baf/testing/cucumber/steps/output.rb
88
+ - lib/baf/version.rb
89
+ homepage: https://rubygems.org/gems/baf
90
+ licenses:
91
+ - BSD-3-Clause
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.5.1
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: Basic Application Framework
113
+ test_files: []
114
+ has_rdoc: