rbcli 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -1
  3. data/README.md +50 -6
  4. data/exe/rbcli +81 -32
  5. data/lib/rbcli/configuration/config.rb +6 -6
  6. data/lib/rbcli/configuration/configurate.rb +1 -1
  7. data/lib/rbcli/engine/load_project.rb +19 -0
  8. data/lib/rbcli/engine/parser.rb +2 -2
  9. data/lib/rbcli/logging/logging.rb +7 -4
  10. data/lib/rbcli/stateful_systems/state_storage.rb +4 -0
  11. data/lib/rbcli/version.rb +1 -1
  12. data/lib/rbcli-tool/erb_renderer.rb +43 -0
  13. data/lib/rbcli-tool/mdless_fix.rb +386 -0
  14. data/lib/rbcli-tool/project.rb +87 -0
  15. data/lib/rbcli-tool.rb +16 -0
  16. data/lib/rbcli.rb +11 -10
  17. data/rbcli.gemspec +1 -0
  18. data/skeletons/micro/executable +123 -0
  19. data/skeletons/mini/executable +241 -0
  20. data/skeletons/project/.gitignore +11 -0
  21. data/skeletons/project/.rbcli +0 -0
  22. data/skeletons/project/.rspec +3 -0
  23. data/skeletons/project/CODE_OF_CONDUCT.md +74 -0
  24. data/skeletons/project/Gemfile +6 -0
  25. data/skeletons/project/README.md +31 -0
  26. data/skeletons/project/Rakefile +6 -0
  27. data/skeletons/project/application/commands/command.rb +31 -0
  28. data/skeletons/project/application/commands/scripts/script.sh +23 -0
  29. data/skeletons/project/application/options.rb +30 -0
  30. data/skeletons/project/config/autoupdate.rb +32 -0
  31. data/skeletons/project/config/logging.rb +19 -0
  32. data/skeletons/project/config/storage.rb +34 -0
  33. data/skeletons/project/config/userspace.rb +28 -0
  34. data/skeletons/project/config/version.rb +3 -0
  35. data/skeletons/project/default_user_configs/user_defaults.yml +6 -0
  36. data/skeletons/project/exe/executable +54 -0
  37. data/skeletons/project/hooks/default_action.rb +16 -0
  38. data/skeletons/project/hooks/first_run.rb +16 -0
  39. data/skeletons/project/hooks/post_execution.rb +14 -0
  40. data/skeletons/project/hooks/pre_execution.rb +14 -0
  41. data/skeletons/project/spec/spec_helper.rb +14 -0
  42. data/skeletons/project/spec/untitled_spec.rb +9 -0
  43. data/skeletons/project/untitled.gemspec +40 -0
  44. metadata +47 -2
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #########################################################
4
+ ### <%= @vars[:cmdname] %>
5
+ #######
6
+ ## This is the main executable for <%= @vars[:cmdname] %>.
7
+ ## It's job is to load and execute the application.
8
+ #########################################################
9
+
10
+ require 'rbcli'
11
+
12
+ #########################
13
+ ## Configuration Block ##
14
+ #########################
15
+ # This block is where rbcli is configured.
16
+ # Any options marked as Optional can be commented out.
17
+ # Options marked as Multiple can be declared multiple times.
18
+ #########################
19
+
20
+ Rbcli::Configurate.me do
21
+
22
+ ####
23
+ # GENERAL
24
+ ###
25
+ # These parameters are for genreal information about your application.
26
+ ###
27
+
28
+ ## Script Name -- (Required) -- This line identifies the tool's executable on the command line.
29
+ # To change it, rename this file to the command you want and this will pick up that name automatically.
30
+ # You can change it manually if needed, but this should work for most cases.
31
+ scriptname __FILE__.split('/')[-1]
32
+
33
+ ## Version Number -- (Required)
34
+ version '0.1.0'
35
+
36
+ ## Description -- (Requierd) -- A description that will appear when the user looks at the help with -h. This can be as long as needed.
37
+ description %q{<%= @vars[:description] %>}
38
+
39
+
40
+ ####
41
+ # LOGGING
42
+ ###
43
+ # These parameters set the default logging parameters for your applicaiton. Note that a user
44
+ # can override these settings by modifying their local configuration.
45
+ # If either option is set to nil, or they are not provided, logging is disabled.
46
+ ###
47
+
48
+ ## Log Target -- (Optional) -- Set the target for logs.
49
+ # Valid values are nil, 'STDOUT', 'STDERR', or a file path (as strings).
50
+ # Default is disabled (nil).
51
+ log_target nil
52
+
53
+ ## Log Level -- (Optional) -- Set the default log_level for users.
54
+ # Valid values are nil, 0-5, or DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN.
55
+ # Default is disabled (nil).
56
+ log_level nil
57
+
58
+
59
+ ####
60
+ # USER CONFIGURATION MANAGEMENT
61
+ ###
62
+ # RBCli allows you to create a configuration file that your users can modify.
63
+ # Users will be able to generate their own file by running your tool with the `-g` option.
64
+ # To disable this feature, comment out the `config_userfile` line below.
65
+ ###
66
+
67
+ ## Config Userfile -- (Optional) -- Set location of user's config file.
68
+ #
69
+ # config_userfile <path>, merge_defaults: <optional: (true|false), default: true>, required: <optional: (true|false, default: false)
70
+ #
71
+ # If merge_defaults=true, user settings override default settings.
72
+ # If false, defaults set here are not loaded at all, and the user is required to set them.
73
+ # If required=true, application will not run if file does not exist.
74
+ config_userfile '~/.<%= @vars[:cmdname] %>', merge_defaults: true, required: false
75
+
76
+ ## Config Defaults -- (Optional, Multiple) -- Load a YAML file as part of the default config.
77
+ # This can be called multiple times, and the YAML files will be merged. User config is generated from these files.
78
+ # TODO: This line is not needed when using RBCli in standard mode. YAML files go in the `user_configs` directory instead.
79
+ #config_defaults 'defaults.yml'
80
+
81
+ ## Config Default -- (Optional, Multiple) -- Specify an individual configuration parameter and set a default value.
82
+ # These will be included in generated user config.
83
+ config_default :myopt, description: 'Testing this', default: true
84
+
85
+
86
+ ####
87
+ # AUTOUPDATE
88
+ ###
89
+ # RBCli can notify users when you have an update to your application.
90
+ # This requires your application to be published either on Rubygems.org, Github, or Github Enterprise.
91
+ # Note that only one can be enabled at a time.
92
+ # For more details on each integration, see below.
93
+ ###
94
+
95
+ ## Autoupdate, Github -- (Optional) -- Check for updates to this application at a GitHub repo.
96
+ # The repo should use version number tags in accordance to Github's best practices: https://help.github.com/articles/creating-releases/
97
+ #
98
+ # Note that the `access_token` can be overridden by the user via their configuration file, so it can be left as `nil`,
99
+ # which will require your users to enter their github tokens to use this feature.
100
+ # For instructions on generating a new access token, see: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
101
+ # The token is not needed if using a public repo.
102
+ #
103
+ # The `enterprise_hostname` setting allows you to point RBCli at a local GitHub Enterprise server.
104
+ #
105
+ # Setting `force_update: true` will halt execution if an update is available, forcing the user to update.
106
+ #
107
+ #autoupdate github_repo: '<your_user>/<your_repo>', access_token: nil, enterprise_hostname: nil, force_update: false
108
+
109
+ ## Autoupdate, Rubygems.org -- (Optional) -- Check for updates to this application on Rubygems.org
110
+ #autoupdate gem: '<your_gem>', force_update: false
111
+
112
+ ####
113
+ # Command Line Options
114
+ ###
115
+ # Here you can set global options for users on the command line.
116
+ # RBCli supports commands with syntax as follows:
117
+ # toolname [options] command [parameters] [lineitem]
118
+ #
119
+ # Here you are defining the [options]. The parameters and lineitms (subcommands) are
120
+ # defined under their command blocks.
121
+ #
122
+ # The following types are supported: `:string`, `:boolean` or `:flag`, `:integer`, and `:float`
123
+ #
124
+ # If a default value is not set, it will default to `nil`.
125
+ #
126
+ # To specify multiple options, simply copy the line and modify as desired.
127
+ #
128
+ # Once parsed, option values will be placed in a hash where they can be accessed via their names as shown above where
129
+ # they are made available to your hooks and commands.
130
+ ###
131
+
132
+ ## Option -- (Optional, Multiple) -- Add a global CLI Option
133
+ option :name, 'Give me your name', type: :string, default: 'Foo', required: false, permitted: ['Jack', 'Jill']
134
+
135
+
136
+ ####
137
+ # HOOKS
138
+ ###
139
+ # Here you can set hooks that will be run at specified points in the execution chain.
140
+ # Global CLI options are made available to many of the hooks, but command parameters and lineitems are not.
141
+ ###
142
+
143
+ ## Default Action -- (Optional) -- The default code to execute when no subcommand is given.
144
+ # If not present, the help is shown (same as -h)
145
+ default_action do |opts|
146
+ puts "Hello, #{opts[:name]}."
147
+ puts "To see the help, use -h"
148
+ end
149
+
150
+ ## Pre-Execution Hook -- (Optional) -- Allows providing a block of code that runs _before_ all commands
151
+ pre_hook do |opts|
152
+ puts 'This is a pre-command hook. It executes before the command.'
153
+ end
154
+
155
+ ## Post-Execution Hook -- (Optional) -- Allows providing a block of code that runs _after_ all commands
156
+ post_hook do |opts|
157
+ puts 'This is a post-command hook. It executes after the command.'
158
+ end
159
+
160
+ ## First-Run Hook -- (Optional) -- Allows providing a block of code that executes the first time that the application is run on a given system.
161
+ # If `halt_after_running` is set to `true` then parsing will not continue after this code is executed. All subsequent runs will not execute this code.
162
+ # This feature is dependent on the Local State Storage system, and will not run without it.
163
+ first_run halt_after_running: false do
164
+ puts "This is the first time the mytool command is run! Don't forget to generate a config file with the `-g` option before continuing."
165
+ end
166
+ end
167
+
168
+ ###############################
169
+ ## State Configuration Block ##
170
+ ###############################
171
+ # The state-related componets
172
+ # are configured here.
173
+ ###############################
174
+ Rbcli::Configurate.storage do
175
+ ###
176
+ # Local State Storage
177
+ ###
178
+ # Local state storage creates a hash that is automatically saved to a file locally for state persistance.
179
+ # It is accessible to all commands at: Rbcli.localstate[:yourkeyhere]
180
+ #
181
+ # Note that every update to the top level of this hash will trigger a save, and updating nested hashes will not.
182
+ # If you need to update nested hashes, you can trigger a save manually by calling `Rbcli.localstate.commit`.
183
+ # Please see the documentation for full usage details.
184
+ ###
185
+
186
+ #local_state '/var/mytool/localstate', force_creation: true, halt_on_error: true # (Optional) Creates a hash that is automatically saved to a file locally for state persistance. It is accessible to all commands at Rbcli.localstate[:yourkeyhere]
187
+
188
+
189
+ ###
190
+ # Remote State Storage
191
+ ###
192
+ # Remote state storage creates a hash that is automatically saved to a remote database for state persistence.
193
+ # This state can be made unique to each user, or can be shared across different users of the tool.
194
+ #
195
+ # When sharing, locking should be set to `true`. Note that RBCli uses lazy-loaded, meaning the lock will
196
+ # only be acquired when absolutely needed. This behavior can be overridden manually if desired.
197
+ # For full usage details, see the documentation.
198
+ ###
199
+
200
+ #remote_state_dynamodb table_name: 'mytable', region: 'us-east-1', force_creation: true, halt_on_error: true, locking: :auto # (Optional) Creates a hash that is automatically saved to a DynamoDB table. It is recommended to keep halt_on_error=true when using a shared state. Locking can be one of (:manual :auto :none) -- see the README for details
201
+ end
202
+
203
+ #########################
204
+ ## Command Declaration ##
205
+ #########################
206
+ # With rbcli, commands are declared by subclassing
207
+ # from Rbcli::Command. The name of the class will be
208
+ # the command that is available to the user.
209
+ #########################
210
+ class Test < Rbcli::Command # Declare a new command by subclassing Rbcli::Command
211
+ description 'This is a short description.' # (Required) Short description for the global help
212
+ usage 'This is some really long usage text description!' # (Required) Long description for the command-specific help
213
+ parameter :force, 'Force testing', type: :boolean, default: false, required: false # (Optional, Multiple) Add a command-specific CLI parameter. Can be called multiple times
214
+
215
+ config_defaults 'defaults.yml' # (Optional, Multiple) Load a YAML file as part of the default config. This can be called multiple times, and the YAML files will be merged. User config is generated from these
216
+ config_default :myopt2, description: 'Testing this again', default: true # (Optional, Multiple) Specify an individual configuration parameter and set a default value. These will also be included in generated user config
217
+
218
+ extern path: 'env | grep "^__PARAMS\|^__ARGS\|^__GLOBAL\|^__CONFIG"', envvars: {MYVAR: 'some_value'} # (Required unless `action` defined) Runs a given application, with optional environment variables, when the user runs the command.
219
+ extern envvars: {MY_OTHER_VAR: 'another_value'} do |params, args, global_opts, config| # Alternate usage. Supplying a block instead of a path allows us to modify the command based on the arguments and configuration supplied by the user.
220
+ "echo #{params[:force].to_s}__YESSS!!!"
221
+ end
222
+
223
+ action do |params, args, global_opts, config| # (Required unless `extern` defined) Block to execute if the command is called.
224
+ Rbcli::log.info { 'These logs can go to STDERR, STDOUT, or a file' } # Example log. Interface is identical to Ruby's logger
225
+ puts "\nArgs:\n#{args}" # Arguments that came after the command on the CLI (i.e.: `mytool test bar baz` will yield args=['bar', 'baz'])
226
+ puts "Params:\n#{params}" # Parameters, as described through the option statements above
227
+ puts "Global opts:\n#{global_opts}" # Global Parameters, as descirbed in the Configurate section
228
+ puts "Config:\n#{config}" # Config file values
229
+ puts "LocalState:\n#{Rbcli.local_state}" # Local persistent state storage (when available) -- if unsure use Rbcli.local_state.nil?
230
+ puts "RemoteState:\n#{Rbcli.remote_state}" # Remote persistent state storage (when available) -- if unsure use Rbcli.remote_state.nil?
231
+ puts "\nDone!!!"
232
+ end
233
+ end
234
+
235
+ #####################
236
+ ## Parse Statement ##
237
+ #####################
238
+ # When this statement is called, the CLI will be
239
+ # parsed and code executed.
240
+ #####################
241
+ Rbcli.parse # Parse CLI and execute
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
File without changes
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at akhoury@live.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in untitled.gemspec
6
+ gemspec
@@ -0,0 +1,31 @@
1
+ # <%= @vars[:cmdname] %>
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem.
4
+
5
+ You'll find your gem's Command Line entrypoint under the file `exe/<%= @vars[:cmdname] %>`, although you shouldn't need to edit this file. Instead, follow these steps to get up and running quickly:
6
+
7
+ * Review the configuration under the `config` directory
8
+ * Modify global CLI options under the `application/options.rb` file
9
+ * Generate a new command by running `rbcli generate -t command -n <name>`
10
+ * Modify the command's code under `application/commands/<name>.rb`
11
+ * Repeat the previous two steps until complete!
12
+
13
+ For more details, including advanced usage, please see the [RBCli documentation](https://github.com/akhoury6/rbcli).
14
+
15
+ TODO: Delete the text above and write your README!
16
+
17
+ ## About
18
+
19
+ <%= @vars[:description] %>
20
+
21
+ ## Development
22
+
23
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `config/version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
24
+
25
+ ## Contributing
26
+
27
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/untitled. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
28
+
29
+ ## Code of Conduct
30
+
31
+ Everyone interacting in the Untitled project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/untitled/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,31 @@
1
+ #########################
2
+ ## Command Declaration ##
3
+ #########################
4
+ # With rbcli, commands are declared by subclassing
5
+ # from Rbcli::Command. The name of the class will be
6
+ # the command that is available to the user.
7
+ #########################
8
+ class Test < Rbcli::Command # Declare a new command by subclassing Rbcli::Command
9
+ description 'This is a short description.' # (Required) Short description for the global help
10
+ usage 'This is some really long usage text description!' # (Required) Long description for the command-specific help
11
+ parameter :force, 'Force testing', type: :boolean, default: false, required: false # (Optional, Multiple) Add a command-specific CLI parameter. Can be called multiple times
12
+
13
+ config_defaults 'defaults.yml' # (Optional, Multiple) Load a YAML file as part of the default config. This can be called multiple times, and the YAML files will be merged. User config is generated from these
14
+ config_default :myopt2, description: 'Testing this again', default: true # (Optional, Multiple) Specify an individual configuration parameter and set a default value. These will also be included in generated user config
15
+
16
+ extern path: 'env | grep "^__PARAMS\|^__ARGS\|^__GLOBAL\|^__CONFIG"', envvars: {MYVAR: 'some_value'} # (Required unless `action` defined) Runs a given application, with optional environment variables, when the user runs the command.
17
+ extern envvars: {MY_OTHER_VAR: 'another_value'} do |params, args, global_opts, config| # Alternate usage. Supplying a block instead of a path allows us to modify the command based on the arguments and configuration supplied by the user.
18
+ "echo #{params[:force].to_s}__YESSS!!!"
19
+ end
20
+
21
+ action do |params, args, global_opts, config| # (Required unless `extern` defined) Block to execute if the command is called.
22
+ Rbcli::log.info { 'These logs can go to STDERR, STDOUT, or a file' } # Example log. Interface is identical to Ruby's logger
23
+ puts "\nArgs:\n#{args}" # Arguments that came after the command on the CLI (i.e.: `mytool test bar baz` will yield args=['bar', 'baz'])
24
+ puts "Params:\n#{params}" # Parameters, as described through the option statements above
25
+ puts "Global opts:\n#{global_opts}" # Global Parameters, as descirbed in the Configurate section
26
+ puts "Config:\n#{config}" # Config file values
27
+ puts "LocalState:\n#{Rbcli.local_state}" # Local persistent state storage (when available) -- if unsure use Rbcli.local_state.nil?
28
+ puts "RemoteState:\n#{Rbcli.remote_state}" # Remote persistent state storage (when available) -- if unsure use Rbcli.remote_state.nil?
29
+ puts "\nDone!!!"
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ###
4
+ # This is the RBCli script for the command {{**CMDNAME**}}
5
+ ###
6
+ #
7
+ # You can find RBCli's params, args, global_opts, and config through environment
8
+ # variables. They are passed in the formats:
9
+ #
10
+ # __PARAMS_<param_name>
11
+ # __ARGS_<arg_name>
12
+ # __GOBAL <global_opt_name>
13
+ # __CONFIG <config_name>
14
+ #
15
+ # If any of the options given had nested values in your RBCli application they
16
+ # will be passed as JSON. You can parse them using jq ( https://stedolan.github.io/jq/ )
17
+ #
18
+ # If you specified any environment variables to be set manually, they will be found unmodified.
19
+ #
20
+ ###
21
+ #
22
+
23
+ env | grep "^__PARAMS\|^__ARGS\|^__GLOBAL\|^__CONFIG"
@@ -0,0 +1,30 @@
1
+ Rbcli::Configurate.me do
2
+ ####
3
+ # Command Line Options
4
+ ###
5
+ # Here you can set global options for users on the command line.
6
+ #
7
+ # RBCli supports commands with syntax as follows:
8
+ # toolname [options] command [parameters] [lineitem]
9
+ #
10
+ # Here you are defining the [options]. The parameters and lineitms (subcommands) are
11
+ # defined under their command blocks.
12
+ #
13
+ # The following types are supported: `:string`, `:boolean` or `:flag`, `:integer`, and `:float`
14
+ #
15
+ # If a default value is not set, it will default to `nil`.
16
+ #
17
+ # To specify multiple options, simply copy the line and modify as desired.
18
+ #
19
+ # Once parsed, option values will be placed in a hash where they can be accessed via their names as shown above where
20
+ # they are made available to your hooks and commands.
21
+ ###
22
+
23
+ ## Description -- (Required) -- A description that will appear when the user looks at the help with -h.
24
+ # This should describe what the application does, and if applicable, give some common usage examples.
25
+ # It can be as long as needed. Use a heredoc if desired: <<-EOF TextGoesHere EOF
26
+ description %q{<%= @vars[:description] %>}
27
+
28
+ ## Option -- (Optional, Multiple) -- Add a global CLI Option
29
+ option :name, 'Give me your name', type: :string, default: 'Foo', required: false, permitted: ['Jack', 'Jill']
30
+ end
@@ -0,0 +1,32 @@
1
+ Rbcli::Configurate.me do
2
+ ####
3
+ # AUTOUPDATE
4
+ ###
5
+ # RBCli can notify users when you have an update to your application.
6
+ # This requires your application to be published either on Rubygems.org, Github, or Github Enterprise.
7
+ # Note that only one can be enabled at a time.
8
+ # For more details on each integration, see below.
9
+ ###
10
+
11
+ ## Autoupdate, Github -- (Optional) -- Check for updates to this application at a GitHub repo.
12
+ # The repo should use version number tags in accordance to Github's best practices: https://help.github.com/articles/creating-releases/
13
+ #
14
+ # Note that the `access_token` can be overridden by the user via their configuration file, so it can be left as `nil`,
15
+ # which will require your users to enter their github tokens to use this feature.
16
+ # For instructions on generating a new access token, see: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
17
+ # The token is not needed if using a public repo.
18
+ #
19
+ # The `enterprise_hostname` setting allows you to point RBCli at a local GitHub Enterprise server.
20
+ #
21
+ # Setting `force_update: true` will halt execution if an update is available, forcing the user to update.
22
+ # Uncomment the line below to enable
23
+
24
+ #autoupdate github_repo: '<your_user>/<your_repo>', access_token: nil, enterprise_hostname: nil, force_update: false
25
+
26
+
27
+ ## Autoupdate, Rubygems.org -- (Optional) -- Check for updates to this application on Rubygems.org
28
+ # Uncomment the line below to enable
29
+
30
+ #autoupdate gem: '<your_gem>', force_update: false
31
+
32
+ end
@@ -0,0 +1,19 @@
1
+ Rbcli::Configurate.me do
2
+ ####
3
+ # LOGGING
4
+ ###
5
+ # These parameters set the default logging parameters for your applicaiton. Note that a user
6
+ # can override these settings by modifying their local configuration.
7
+ # If either option is set to nil, or they are not provided, logging is disabled.
8
+ ###
9
+
10
+ ## Log Target -- (Optional) -- Set the target for logs.
11
+ # Valid values are nil, 'STDOUT', 'STDERR', or a file path (as strings).
12
+ # Default is disabled (nil).
13
+ log_target nil
14
+
15
+ ## Log Level -- (Optional) -- Set the default log_level for users.
16
+ # Valid values are nil, 0-5, or DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN.
17
+ # Default is disabled (nil).
18
+ log_level nil
19
+ end
@@ -0,0 +1,34 @@
1
+ ###############################
2
+ ## State Configuration Block ##
3
+ ###############################
4
+ # The state-related componets
5
+ # are configured here.
6
+ ###############################
7
+ Rbcli::Configurate.storage do
8
+ ###
9
+ # Local State Storage
10
+ ###
11
+ # Local state storage creates a hash that is automatically saved to a file locally for state persistance.
12
+ # It is accessible to all commands at: Rbcli.localstate[:yourkeyhere]
13
+ #
14
+ # Note that every update to the top level of this hash will trigger a save, and updating nested hashes will not.
15
+ # If you need to update nested hashes, you can trigger a save manually by calling `Rbcli.localstate.commit`.
16
+ # Please see the documentation for full usage details.
17
+ ###
18
+
19
+ #local_state '/var/mytool/localstate', force_creation: true, halt_on_error: true # (Optional) Creates a hash that is automatically saved to a file locally for state persistance. It is accessible to all commands at Rbcli.localstate[:yourkeyhere]
20
+
21
+
22
+ ###
23
+ # Remote State Storage
24
+ ###
25
+ # Remote state storage creates a hash that is automatically saved to a remote database for state persistence.
26
+ # This state can be made unique to each user, or can be shared across different users of the tool.
27
+ #
28
+ # When sharing, locking should be set to `true`. Note that RBCli uses lazy-loaded, meaning the lock will
29
+ # only be acquired when absolutely needed. This behavior can be overridden manually if desired.
30
+ # For full usage details, see the documentation.
31
+ ###
32
+
33
+ #remote_state_dynamodb table_name: 'mytable', region: 'us-east-1', force_creation: true, halt_on_error: true, locking: :auto # (Optional) Creates a hash that is automatically saved to a DynamoDB table. It is recommended to keep halt_on_error=true when using a shared state. Locking can be one of (:manual :auto :none) -- see the README for details
34
+ end
@@ -0,0 +1,28 @@
1
+ Rbcli::Configurate.me do
2
+ ####
3
+ # USER CONFIGURATION MANAGEMENT
4
+ ###
5
+ # RBCli allows you to create a configuration file that your users can modify.
6
+ # Users will be able to generate their own file by running your tool with the `-g` option.
7
+ # To disable this feature, comment out the `config_userfile` line below.
8
+ ###
9
+
10
+ ## Config Userfile -- (Optional) -- Set location of user's config file.
11
+ #
12
+ # config_userfile <path>, merge_defaults: <optional: (true|false), default: true>, required: <optional: (true|false, default: false)
13
+ #
14
+ # If merge_defaults=true, user settings override default settings.
15
+ # If false, defaults set here are not loaded at all, and the user is required to set them.
16
+ # If required=true, application will not run if file does not exist.
17
+ config_userfile '~/.<%= @vars[:cmdname] %>', merge_defaults: true, required: false
18
+
19
+ ## Config Defaults -- (Optional, Multiple) -- Load a YAML file as part of the default config.
20
+ # This can be called multiple times, and the YAML files will be merged. User config is generated from these files.
21
+ # RBCli's best practice is to leave this line commented, and instead, place all YAML files in
22
+ # the `default_user_configs` directory where they are loaded automatically.
23
+ #config_defaults 'defaults.yml'
24
+
25
+ ## Config Default -- (Optional, Multiple) -- Specify an individual configuration parameter and set a default value.
26
+ # These will be included in generated user config.
27
+ config_default :myopt, description: 'Testing this', default: true
28
+ end
@@ -0,0 +1,3 @@
1
+ module Project
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,6 @@
1
+ ---
2
+ # Mytool custom settings
3
+ optionA: value # We are setting this value just because
4
+ optionB: value2 # Same here
5
+ optionC: value3 # You get the picture
6
+ ...
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #########################################################
4
+ ### <%= @vars[:cmdname] %>
5
+ #######
6
+ ## This is the main executable for <%= @vars[:cmdname] %>.
7
+ ## It's job is to load and execute the application.
8
+ ##
9
+ ## You should not need to edit this file.
10
+ #########################################################
11
+
12
+ require 'rbcli'
13
+ require '../config/version'
14
+
15
+ #########################
16
+ ## Configuration Block ##
17
+ #########################
18
+ # This block is where rbcli is configured.
19
+ # Any options marked as Optional can be commented out.
20
+ # Options marked as Multiple can be declared multiple times.
21
+ #########################
22
+
23
+ Rbcli::Configurate.me do
24
+ ####
25
+ # GENERAL
26
+ ###
27
+ # These parameters are for genreal information about your application.
28
+ ###
29
+
30
+ ## Script Name -- (Required) -- This line identifies the tool's executable on the command line.
31
+ # To change it, rename this file to the command you want and this will pick up that name automatically.
32
+ # You can change it manually if needed, but this should work for most cases.
33
+ scriptname __FILE__.split('/')[-1]
34
+
35
+ ## Version Number -- (Required)
36
+ # Here we reference the same constant that we set for our Gem. If not using Rubygems you can change this to
37
+ # a version in the standard 'major.minor.patch' format (i.e.: 1.4.0)
38
+ version Project::VERSION
39
+ end
40
+
41
+ ##################
42
+ ## Load Project ##
43
+ ##################
44
+ # Here we load the project into Rbcli
45
+ ##################
46
+ Rbcli.load_project
47
+
48
+ #####################
49
+ ## Parse Statement ##
50
+ #####################
51
+ # When this statement is called, the CLI will be
52
+ # parsed and code executed.
53
+ #####################
54
+ Rbcli.parse