simple-cli 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4e7286cc589a5fcc4c98b61f5cc4967a609458c9
4
+ data.tar.gz: cd3b2fa51ad21a07ea348a1f5987961f85b92174
5
+ SHA512:
6
+ metadata.gz: 059f1af84110d1977b95f842032a88c3302147f65bf0ca2c55d6481bb258268c9204a583a14baade03da4db5a44be5f8b6bcfb39bcf5c4b98f462f39197bf07f
7
+ data.tar.gz: db1efaa0dd5abb8bdb51e12bc2eb59d77ce5b57eca17721b46893f3bacf557c17755137a67b697585c96bc3798d01c1c7b59d7efc6209b8251142890c3f28437
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ coverage
2
+ rdoc
3
+ pkg
4
+ log/test.log
data/.rubocop.yml ADDED
@@ -0,0 +1,35 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Exclude:
4
+ - 'spec/**/*'
5
+ - 'test/**/*'
6
+ - 'bin/**/*'
7
+ - 'tasks/release.rake'
8
+ - '*.gemspec'
9
+ - 'Gemfile'
10
+ - 'Rakefile'
11
+
12
+ Metrics/LineLength:
13
+ Max: 115
14
+
15
+ Style/SpecialGlobalVars:
16
+ Enabled: false
17
+
18
+ Style/StringLiterals:
19
+ EnforcedStyle: double_quotes
20
+ ConsistentQuotesInMultiline: false
21
+
22
+ Style/ClassAndModuleChildren:
23
+ Enabled: false
24
+
25
+ Style/ModuleFunction:
26
+ Enabled: false
27
+
28
+ Style/FrozenStringLiteralComment:
29
+ Enabled: false
30
+
31
+ Style/Documentation:
32
+ Enabled: false
33
+
34
+ Style/MutableConstant:
35
+ Enabled: false
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in {gemname}.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,42 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ simple-cli (0.1.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.3)
10
+ docile (1.1.5)
11
+ json (2.1.0)
12
+ rake (11.3.0)
13
+ rspec (3.7.0)
14
+ rspec-core (~> 3.7.0)
15
+ rspec-expectations (~> 3.7.0)
16
+ rspec-mocks (~> 3.7.0)
17
+ rspec-core (3.7.0)
18
+ rspec-support (~> 3.7.0)
19
+ rspec-expectations (3.7.0)
20
+ diff-lcs (>= 1.2.0, < 2.0)
21
+ rspec-support (~> 3.7.0)
22
+ rspec-mocks (3.7.0)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.7.0)
25
+ rspec-support (3.7.0)
26
+ simplecov (0.15.1)
27
+ docile (~> 1.1.0)
28
+ json (>= 1.8, < 3)
29
+ simplecov-html (~> 0.10.0)
30
+ simplecov-html (0.10.2)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ rake (~> 11)
37
+ rspec (~> 3.7)
38
+ simple-cli!
39
+ simplecov (~> 0)
40
+
41
+ BUNDLED WITH
42
+ 1.13.6
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ Dir.glob("tasks/*.rake").each { |r| import r }
2
+
3
+ task :default do
4
+ sh "rspec"
5
+ sh "rubocop"
6
+ end
data/bin/rake ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require "pathname"
10
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require "rubygems"
14
+ require "bundler/setup"
15
+
16
+ load Gem.bin_path("rake", "rake")
data/lib/simple-cli.rb ADDED
@@ -0,0 +1 @@
1
+ require "simple/cli"
data/lib/simple/cli.rb ADDED
@@ -0,0 +1,40 @@
1
+ module Simple; end
2
+ module Simple::CLI; end
3
+
4
+ require_relative "cli/helpers"
5
+ require_relative "cli/runner"
6
+ require_relative "cli/adapter"
7
+ require_relative "cli/logger"
8
+
9
+ require "pp"
10
+
11
+ module Simple::CLI
12
+ DEBUG = true
13
+
14
+ def self.included(base)
15
+ base.extend(::Simple::CLI::Adapter)
16
+ base.include(::Simple::CLI::Helpers)
17
+ end
18
+
19
+ extend ::Simple::CLI::Logger
20
+ def logger
21
+ Simple::CLI::Logger.logger
22
+ end
23
+
24
+ # Simple::CLI.run! is called from Runner.run. It is called with a method
25
+ # name, which is derived from the command passed in via the command line,
26
+ # and parsed arguments.
27
+ #
28
+ # The default implementation just calls the respective method on self.
29
+ # Implementations might override this method to provide some before/after
30
+ # functionality.
31
+ def run!(command, *args)
32
+ send(command, *args)
33
+ end
34
+
35
+ # Print help on a subcommand
36
+ def help(subcommand = nil)
37
+ # This method is a dummy. It is necessary to provide a stub for the purpose
38
+ # of documentation - BUT THIS METHOD WILL NEVER BE CALLED.
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ module Simple::CLI::Adapter
2
+ def run!(*args)
3
+ args = ARGV if args.empty?
4
+
5
+ Simple::CLI::Runner.run(self, *args)
6
+ end
7
+ end
@@ -0,0 +1,88 @@
1
+ require "open3"
2
+
3
+ # Helpers are mixed into all CLI modules. They implement the following methods,
4
+ # mostly to help with integrating external commands:
5
+ #
6
+ # - sys
7
+ # - sys!
8
+ # - sh!
9
+ # - die!
10
+ #
11
+ module Simple::CLI::Helpers
12
+ def die!(msg)
13
+ STDERR.puts msg
14
+ exit 1
15
+ end
16
+
17
+ def sh!(cmd, *args)
18
+ command = Command.new(cmd, *args)
19
+ result = command.sh
20
+ command.check_success!
21
+ first_line, more = result.split("\n", 2)
22
+ if more == ""
23
+ first_line
24
+ else
25
+ result
26
+ end
27
+ end
28
+
29
+ def sys(cmd, *args)
30
+ command = Command.new(cmd, *args)
31
+ command.run
32
+ command.success?
33
+ end
34
+
35
+ def sys!(cmd, *args)
36
+ command = Command.new(cmd, *args)
37
+ command.run
38
+ command.check_success!
39
+ true
40
+ end
41
+
42
+ class Command
43
+ def initialize(cmd, *args)
44
+ @cmd = cmd
45
+ @args = [ cmd ] + args
46
+ end
47
+
48
+ def sh
49
+ STDERR.puts "> #{self}"
50
+ stdout_str, @process_status = Open3.capture2(*@args, binmode: true)
51
+ stdout_str
52
+ end
53
+
54
+ def run
55
+ STDERR.puts "> #{self}"
56
+ rv = if @args.length > 1
57
+ system to_s
58
+ else
59
+ system *@args
60
+ end
61
+
62
+ @process_status = $?
63
+ rv
64
+ end
65
+
66
+ def success?
67
+ @process_status.success?
68
+ end
69
+
70
+ def check_success!
71
+ return if @process_status.success?
72
+ raise "#{@cmd} failed with #{@process_status.exitstatus}: #{self}"
73
+ end
74
+
75
+ # Returns the command as a single string, escaping things as necessary.
76
+ def to_s
77
+ require "shellwords"
78
+
79
+ escaped_args = @args.map do |arg|
80
+ escaped = Shellwords.escape(arg)
81
+ next escaped if escaped == arg
82
+ next escaped if arg.include?("'")
83
+ "'#{arg}'"
84
+ end
85
+ escaped_args.join(" ")
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,22 @@
1
+ require "logger"
2
+
3
+ module Simple::CLI::Logger
4
+ def logger=(logger)
5
+ @logger = logger
6
+ end
7
+
8
+ def logger
9
+ @logger ||= build_default_logger
10
+ end
11
+
12
+ private
13
+
14
+ def build_default_logger
15
+ logger = Logger.new(STDOUT)
16
+ logger.formatter = proc do |severity, datetime, progname, msg|
17
+ "#{severity}: #{msg}\n"
18
+ end
19
+ logger.level = Logger::INFO
20
+ logger
21
+ end
22
+ end
@@ -0,0 +1,160 @@
1
+ class Simple::CLI::Runner
2
+ end
3
+
4
+ require_relative "runner/command_help"
5
+ require_relative "runner/autocompletion"
6
+
7
+ # A Runner object manages running a CLI application module with a set
8
+ # of string arguments (usually taken from ARGV)
9
+ class Simple::CLI::Runner
10
+ include Autocompletion
11
+
12
+ def self.run(app, *args)
13
+ new(app).run(*args)
14
+ end
15
+
16
+ def initialize(app)
17
+ @app = app
18
+ end
19
+
20
+ def extract_default_flags!(args)
21
+ args.reject! do |arg|
22
+ case arg
23
+ when "-v", "--verbose" then
24
+ logger.level = Logger::DEBUG
25
+ when "-q", "--quiet" then
26
+ logger.level = Logger::WARN
27
+ end
28
+ end
29
+ end
30
+
31
+ def run(*args)
32
+ extract_default_flags!(args)
33
+
34
+ @instance = Object.new.extend(@app)
35
+ command_name = args.shift || help!
36
+ command = string_to_command(command_name)
37
+
38
+ if command == :help
39
+ do_help!(*args)
40
+ elsif command == :autocomplete
41
+ autocomplete *args
42
+ elsif command == :autocomplete_bash
43
+ autocomplete_bash *args
44
+ elsif commands.include?(command)
45
+ @instance.run! command, *args_with_options(args)
46
+ else
47
+ help!
48
+ end
49
+ rescue StandardError => e
50
+ on_exception(e)
51
+ end
52
+
53
+ def do_help!(subcommand = nil)
54
+ if !subcommand
55
+ help!
56
+ else
57
+ help_subcommand!(subcommand)
58
+ end
59
+ end
60
+
61
+ def help_subcommand!(subcommand)
62
+ edoc = CommandHelp.new(@app, subcommand)
63
+
64
+ puts <<~MSG
65
+ #{help_for_command(subcommand)}
66
+
67
+ #{edoc.full}
68
+ MSG
69
+ end
70
+
71
+ def logger
72
+ Simple::CLI.logger
73
+ end
74
+
75
+ def on_exception(e)
76
+ raise(e) if Simple::CLI::DEBUG
77
+
78
+ case e
79
+ when ArgumentError
80
+ logger.error "#{e}\n\n"
81
+ help!
82
+ else
83
+ msg = e.to_s
84
+ msg += " (#{e.class.name})" unless $!.class.name == "RuntimeError"
85
+ logger.error msg
86
+ exit 2
87
+ end
88
+ end
89
+
90
+ def args_with_options(args)
91
+ r = []
92
+ options = {}
93
+ while arg = args.shift
94
+ case arg
95
+ when /^--(.*)=(.*)/ then options[$1.to_sym] = $2
96
+ when /^--no-(.*)/ then options[$1.to_sym] = false
97
+ when /^--(.*)/ then options[$1.to_sym] = true
98
+ else r << arg
99
+ end
100
+ end
101
+
102
+ r << options unless options.empty?
103
+ r
104
+ end
105
+
106
+ def command_to_string(sym)
107
+ sym.to_s.gsub("_", ":")
108
+ end
109
+
110
+ def string_to_command(s)
111
+ s.gsub(":", "_").to_sym
112
+ end
113
+
114
+ def commands
115
+ @app.public_instance_methods(false).grep(/^[_a-zA-Z0-9]+$/) + [:help]
116
+ end
117
+
118
+ def help_for_command(sym)
119
+ if sym == "autocomplete"
120
+ autocomplete_help
121
+ return
122
+ end
123
+
124
+ command_name = command_to_string(sym)
125
+ CommandHelp.new(@app, sym).interface(binary_name, command_name)
126
+ end
127
+
128
+ def binary_name
129
+ $0.gsub(/.*\//, "")
130
+ end
131
+
132
+ def help!
133
+ STDERR.puts "Usage:\n\n"
134
+ command_helps = commands.inject({}) do |hsh, sym|
135
+ hsh.update sym => help_for_command(sym)
136
+ end
137
+ max_command_helps_length = command_helps.values.map(&:length).max
138
+
139
+ commands.sort.each do |sym|
140
+ command_help = command_helps.fetch(sym)
141
+ command_help = "%-#{max_command_helps_length}s" % command_help
142
+ edoc = CommandHelp.new(@app, sym)
143
+ head = "# #{edoc.head}" if edoc.head
144
+ STDERR.puts " #{command_help} #{ head }"
145
+ end
146
+
147
+ STDERR.puts "\n"
148
+
149
+ STDERR.puts <<~DOC
150
+ Default options include:
151
+
152
+ #{binary_name} [ --verbose | -v ] # run on DEBUG log level
153
+ #{binary_name} [ --quiet | -q ] # run on WARN log level
154
+ #{binary_name} help autocomplete # print information on autocompletion.
155
+
156
+ DOC
157
+
158
+ exit 1
159
+ end
160
+ end
@@ -0,0 +1,80 @@
1
+ module Simple::CLI::Runner::Autocompletion
2
+ CommandHelp = Simple::CLI::Runner::CommandHelp
3
+
4
+ def autocomplete(subcommand=nil, cur=nil)
5
+ completions = if !cur
6
+ autocomplete_subcommands(subcommand)
7
+ else
8
+ autocomplete_subcommand_options(subcommand, cur)
9
+ end
10
+ puts completions.join("\n")
11
+ end
12
+
13
+ def filter_completions(completions, prefix:)
14
+ completions.select do |completion|
15
+ !prefix || completion.start_with?(prefix)
16
+ end
17
+ end
18
+
19
+ def autocomplete_subcommands(cur)
20
+ completions = filter_completions commands.map(&:to_s), prefix: cur
21
+ if completions == [ cur ]
22
+ autocomplete_subcommand_options(cur, nil)
23
+ else
24
+ completions
25
+ end
26
+ end
27
+
28
+ def autocomplete_subcommand_options(subcommand, cur)
29
+ completions = if subcommand == "help"
30
+ commands.map(&:to_s) + [ "autocomplete" ]
31
+ else
32
+ CommandHelp.option_names(@app, subcommand)
33
+ end
34
+
35
+ filter_completions completions, prefix: cur
36
+ end
37
+
38
+ def autocomplete_help
39
+ STDERR.puts <<~DOC
40
+ #{binary_name} supports autocompletion. To enable autocompletion please run
41
+
42
+ eval "$(#{$0} autocomplete:bash)"
43
+ DOC
44
+
45
+ exit 1
46
+ end
47
+
48
+ def autocomplete_bash
49
+ puts AUTOCOMPLETE_SHELL_CODE.gsub(/{{BINARY}}/, binary_name)
50
+ end
51
+
52
+ # The shell function function is executed in the current shell environment.
53
+ # When it is executed,
54
+ #
55
+ # - $1 is the name of the command whose arguments are being completed,
56
+ # - $2 is the word being completed, and
57
+ # - $3 is the word preceding the word being completed
58
+ #
59
+ # When it finishes, the possible completions are retrieved from the value of the COMPREPLY array variable.
60
+ #
61
+ # see https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html
62
+ #
63
+ AUTOCOMPLETE_SHELL_CODE = <<~BASH
64
+ _{{BINARY}}()
65
+ {
66
+ local cmd=$1
67
+ local cur=$2
68
+
69
+ if [[ $COMP_CWORD == 1 ]]; then
70
+ COMPREPLY=( $("$cmd" autocomplete "$cur" ))
71
+ else
72
+ local subcommand=${COMP_WORDS[1]}
73
+ COMPREPLY=( $("$cmd" autocomplete "$subcommand" "$cur" ))
74
+ fi
75
+
76
+ return 0
77
+ }
78
+ complete -F _{{BINARY}} {{BINARY}}
79
+ BASH
80
+ end
@@ -0,0 +1,103 @@
1
+ class Simple::CLI::Runner::CommandHelp
2
+ def self.option_names(app, subcommand)
3
+ new(app, subcommand).option_names
4
+ rescue NameError
5
+ []
6
+ end
7
+
8
+ def initialize(mod, method)
9
+ @mod, @method = mod, method
10
+ end
11
+
12
+ # First line of the help as read from the method comments.
13
+ def head
14
+ comments.first
15
+ end
16
+
17
+ # Full help as read from the method comments
18
+ def full
19
+ comments.join("\n") if comments.first
20
+ end
21
+
22
+ def option_names
23
+ method = @mod.instance_method(@method)
24
+
25
+ method.parameters.map do |mode, name|
26
+ case mode
27
+ when :key then name
28
+ when :keyreq then name
29
+ end
30
+ end.compact.map do |name|
31
+ [ "--#{name}", "--#{name}=" ]
32
+ end.flatten.uniq
33
+ end
34
+
35
+ # A help string constructed from the commands method signature.
36
+ def interface(binary_name, command_name)
37
+ method = @mod.instance_method(@method)
38
+
39
+ options = []
40
+ args = []
41
+
42
+ method.parameters.each do |mode, name|
43
+ case mode
44
+ when :req then args << "<#{name}>"
45
+ when :key then options << "[ --#{name}[=<#{name}>] ]"
46
+ when :keyreq then options << "--#{name}[=<#{name}>]"
47
+ when :opt then args << "[ <#{name}> ]"
48
+ when :rest then args << "[ <#{name}> .. ]"
49
+ end
50
+ end
51
+
52
+ help = "#{binary_name} #{command_name}"
53
+ help << " #{options.join(' ')}" unless options.empty?
54
+ help << " #{args.join(' ')}" unless args.empty?
55
+ help
56
+ end
57
+
58
+ private
59
+
60
+ def comments
61
+ @comments ||= begin
62
+ file, line = @mod.instance_method(@method).source_location
63
+ extract_comments(from: parsed_source(file), before_line: line)
64
+ end
65
+ end
66
+
67
+ # reads the source \a file and turns each non-comment into :code and each comment
68
+ # into a string without the leading comment markup.
69
+ def parsed_source(file)
70
+ File.readlines(file).map do |line|
71
+ case line
72
+ when /^\s*# ?(.*)$/ then $1
73
+ when /^\s*end/ then :end
74
+ else nil
75
+ end
76
+ end
77
+ end
78
+
79
+ def extract_comments(from:, before_line:)
80
+ parsed_source = from
81
+
82
+ # go down from before_line until we see a line which is either a comment
83
+ # or an :end. Note that the line at before_line-1 should be the first
84
+ # line of the method definition in question.
85
+ last_line = before_line-1
86
+ while last_line >= 0 && !parsed_source[last_line] do
87
+ last_line -= 1
88
+ end
89
+
90
+ first_line = last_line
91
+ while first_line >= 0 && parsed_source[first_line] do
92
+ first_line -= 1
93
+ end
94
+ first_line += 1
95
+
96
+ comments = parsed_source[first_line .. last_line]
97
+ if comments.include?(:end)
98
+ []
99
+ else
100
+ parsed_source[first_line .. last_line]
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,5 @@
1
+ module Simple
2
+ module CLI
3
+ VERSION = "0.1.1"
4
+ end
5
+ end
data/log/.gitkeep ADDED
File without changes
@@ -0,0 +1,36 @@
1
+ # This file is part of the sinatra-sse ruby gem.
2
+ #
3
+ # Copyright (c) 2016, 2017 @radiospiel, mediapeers Gem
4
+ # Distributed under the terms of the modified BSD license, see LICENSE.BSD
5
+
6
+ lib = File.expand_path('../lib', __FILE__)
7
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
8
+ require 'simple/cli/version'
9
+
10
+ Gem::Specification.new do |gem|
11
+ gem.name = "simple-cli"
12
+ gem.version = Simple::CLI::VERSION
13
+
14
+ gem.authors = [ "radiospiel", "mediapeers GmbH" ]
15
+ gem.email = "eno@radiospiel.org"
16
+ gem.homepage = "http://github.com/radiospiel/simple-cli"
17
+ gem.summary = "Simple CLI builder for ruby"
18
+
19
+ gem.description = "Simple CLI builder"
20
+
21
+ gem.files = `git ls-files`.split($/)
22
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
23
+ gem.require_paths = %w(lib)
24
+
25
+ # executables are used for development purposes only
26
+ gem.executables = []
27
+
28
+ gem.required_ruby_version = '~> 2.3'
29
+
30
+ # optional gems (required by some of the parts)
31
+
32
+ # development gems
33
+ gem.add_development_dependency 'rake', '~> 11'
34
+ gem.add_development_dependency 'rspec', '~> 3.7'
35
+ gem.add_development_dependency 'simplecov', '~> 0'
36
+ end
data/spec/.keep ADDED
File without changes
@@ -0,0 +1,21 @@
1
+ %w(auth authentication authorization).each do |library_name|
2
+ path = File.expand_path("../../#{library_name}/lib", __FILE__)
3
+ $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
4
+ end
5
+
6
+ ENV["RACK_ENV"] = "test"
7
+ ENV["RAILS_ENV"] = "test"
8
+
9
+ require "rspec"
10
+
11
+ Dir.glob("./spec/support/**/*.rb").sort.each { |path| load path }
12
+
13
+ require "simple/cli"
14
+
15
+ RSpec.configure do |config|
16
+ config.run_all_when_everything_filtered = true
17
+ config.filter_run focus: (ENV["CI"] != "true")
18
+ config.expect_with(:rspec) { |c| c.syntax = :expect }
19
+ config.include FactoryGirl::Syntax::Methods
20
+ config.order = "random"
21
+ end
@@ -0,0 +1,89 @@
1
+ require 'bundler'
2
+ Bundler.setup
3
+
4
+ GEM_ROOT = File.expand_path('../../', __FILE__)
5
+ GEM_SPEC = "simple-cli.gemspec"
6
+
7
+ require 'simple/cli/version'
8
+ VERSION_FILE_PATH = 'lib/simple/cli/version.rb'
9
+
10
+ class VersionNumberTracker
11
+ class << self
12
+ def update_version_file(old_version_number, new_version_number)
13
+ old_line = "VERSION = \"#{old_version_number}\""
14
+ new_line = "VERSION = \"#{new_version_number}\""
15
+ update = File.read(VERSION_FILE_PATH).gsub(old_line, new_line)
16
+ File.open(VERSION_FILE_PATH, 'w') { |file| file.puts update }
17
+ new_version_number
18
+ end
19
+
20
+ def auto_version_bump
21
+ old_version_number = Simple::CLI::VERSION
22
+ old = old_version_number.split('.')
23
+ current = old[0..-2] << old[-1].next
24
+ new_version_number = current.join('.')
25
+
26
+ update_version_file(old_version_number, new_version_number)
27
+ end
28
+
29
+ def manual_version_bump
30
+ update_version_file(Simple::CLI::VERSION, ENV['VERSION'])
31
+ end
32
+
33
+ def update_version_number
34
+ @version = ENV['VERSION'] ? manual_version_bump : auto_version_bump
35
+ end
36
+
37
+ attr_reader :version
38
+ end
39
+ end
40
+
41
+ namespace :release do
42
+ task :version do
43
+ VersionNumberTracker.update_version_number
44
+ end
45
+
46
+ task :build do
47
+ Dir.chdir(GEM_ROOT) do
48
+ sh("gem build #{GEM_SPEC}")
49
+ end
50
+ end
51
+
52
+ desc "Commit changes"
53
+ task :commit do
54
+ Dir.chdir(GEM_ROOT) do
55
+ version = VersionNumberTracker.version
56
+ sh("git add #{VERSION_FILE_PATH}")
57
+ sh("git commit -m \"bump to v#{version}\"")
58
+ sh("git tag -a v#{version} -m \"Tag\"")
59
+ end
60
+ end
61
+
62
+ desc "Push code and tags"
63
+ task :push do
64
+ sh('git push origin master')
65
+ sh('git push --tags')
66
+ end
67
+
68
+ desc "Cleanup"
69
+ task :clean do
70
+ Dir.glob(File.join(GEM_ROOT, '*.gem')).each { |f| FileUtils.rm_rf(f) }
71
+ end
72
+
73
+ desc "Push Gem to gemfury"
74
+ task :push_to_rubygems do
75
+ Dir.chdir(GEM_ROOT) { sh("gem push #{Dir.glob('*.gem').first}") }
76
+ end
77
+
78
+ task default: [
79
+ 'version',
80
+ 'clean',
81
+ 'build',
82
+ 'commit',
83
+ 'push',
84
+ 'push_to_rubygems'
85
+ ]
86
+ end
87
+
88
+ desc "Clean, build, commit and push"
89
+ task release: 'release:default'
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - radiospiel
8
+ - mediapeers GmbH
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-02-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '11'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '11'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rspec
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '3.7'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '3.7'
42
+ - !ruby/object:Gem::Dependency
43
+ name: simplecov
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ description: Simple CLI builder
57
+ email: eno@radiospiel.org
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rubocop.yml"
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - Rakefile
67
+ - bin/rake
68
+ - lib/simple-cli.rb
69
+ - lib/simple/cli.rb
70
+ - lib/simple/cli/adapter.rb
71
+ - lib/simple/cli/helpers.rb
72
+ - lib/simple/cli/logger.rb
73
+ - lib/simple/cli/runner.rb
74
+ - lib/simple/cli/runner/autocompletion.rb
75
+ - lib/simple/cli/runner/command_help.rb
76
+ - lib/simple/cli/version.rb
77
+ - log/.gitkeep
78
+ - simple-cli.gemspec
79
+ - spec/.keep
80
+ - spec/spec_helper.rb
81
+ - tasks/release.rake
82
+ homepage: http://github.com/radiospiel/simple-cli
83
+ licenses: []
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '2.3'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.5.1
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Simple CLI builder for ruby
105
+ test_files:
106
+ - spec/.keep
107
+ - spec/spec_helper.rb