thor-addons 0.1.6 → 1.0.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
  SHA256:
3
- metadata.gz: 0637e70de16cdaca1968148540bc7919e001497e8c60d5212a6a5cc2bc760678
4
- data.tar.gz: 1f53c76ebc9e27064fb9660c7123a740420ebe4e186884995bb4c694f0dbc66e
3
+ metadata.gz: '0805d43eb2a94a29a350e4d325f786627dbf24aea71e8d7bf481519901a9698a'
4
+ data.tar.gz: 89c2db5f9e7c866da3c40beec05e670b74d7a72a8bebfadc3d9dbd73621da1db
5
5
  SHA512:
6
- metadata.gz: 0bbd51f8c4ff0a3ca464f3e3f3d6fa45053b20d874f4f094338d9743135749eec3e0fa3fa222cb4d78e7ae8d5a954e23d221caa7c2dd6b326e5c3c97be7f4cfb
7
- data.tar.gz: 5af2e01103e9fa9b2603303260b873fddf52a3da26a7cb02b59bfbabb0a88d245a153bcbc8b4a0b1c0efe692e34ceea005c0738161030e27589a935b1de74e9f
6
+ metadata.gz: 7147d625670b7c69be63866b31d5a09a73e54521786c7af166704ceb7067988def0dacf97bb440dd2175243fe865e096efe3e73c1422c45078444036f3d59c79
7
+ data.tar.gz: 3af249f36fee8007549a23ba780d1bb184e64996fc4117a7b6a6734d66495f4d86ac2efc332e99606a4b8803c756aa3f2eee6dc15bb77689cbb83081bcdceb33
data/.rubocop.yml ADDED
@@ -0,0 +1,18 @@
1
+ Style/StringLiterals:
2
+ EnforcedStyle: double_quotes
3
+
4
+ Layout/MultilineMethodCallIndentation:
5
+ EnforcedStyle: indented
6
+
7
+ Naming/FileName:
8
+ Exclude:
9
+ - lib/thor-addons.rb
10
+ - spec/lib/thor-addons_spec.rb
11
+
12
+ # disable for now
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Metrics/BlockLength:
17
+ Exclude:
18
+ - "spec/**/*"
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.1
data/.travis.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.3
4
- - 2.3.1
3
+ - 2.5.1
4
+ - 2.4.4
5
+ - 2.3.7
6
+ before_script:
7
+ - bundle exec rubocop
5
8
  notifications:
6
9
  email: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ 1.0.0 (14/04/2018)
2
+
3
+ IMPROVEMENTS:
4
+
5
+ * Convert ENV vars to correct type
6
+ * Fail if type is incorrect
7
+ * add rubocop
8
+
1
9
  0.1.5 (13/03/2018)
2
10
 
3
11
  BUG FIXES:
data/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.3.3
1
+ FROM ruby:2.5.1
2
2
 
3
3
  ENV WORKDIR /thor-addons
4
4
 
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gemspec
data/README.md CHANGED
@@ -7,7 +7,7 @@ Extend [Thor](https://github.com/erikhuda/thor) with useful Add-ons
7
7
 
8
8
  ### Installation
9
9
 
10
- ```
10
+ ```shell
11
11
  gem install thor-addons
12
12
  ```
13
13
 
@@ -20,7 +20,7 @@ The `Options` module allows you to read the CLI options from a configuration fil
20
20
 
21
21
  include the Options module to your Thor class.
22
22
 
23
- ```
23
+ ```ruby
24
24
  require 'thor'
25
25
  require 'thor_addons'
26
26
 
@@ -39,7 +39,7 @@ end
39
39
 
40
40
  In the example above the `--bar` option will be read from the configuration file `--config-file`
41
41
 
42
- ```
42
+ ```ruby
43
43
  foo:
44
44
  bar: "zip"
45
45
  ```
@@ -48,7 +48,7 @@ and via the environment variable `BAR`
48
48
 
49
49
  if you want to disable the configuration file you need to set in your class
50
50
 
51
- ```
51
+ ```ruby
52
52
  def with_config_file?
53
53
  false
54
54
  end
@@ -56,7 +56,7 @@ end
56
56
 
57
57
  and for disabling the environment variables
58
58
 
59
- ```
59
+ ```ruby
60
60
  def with_env?
61
61
  false
62
62
  end
@@ -64,8 +64,9 @@ end
64
64
 
65
65
  you can also have environment variables aliases, by setting
66
66
 
67
- ```
67
+ ```ruby
68
68
  def envs_aliases
69
+ # source => alias
69
70
  { "BAR" => "MY_BAR" }
70
71
  end
71
72
  ```
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
data/lib/ext/string.rb ADDED
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ class String
4
+ TRUES = %w[t true on y yes 1].freeze
5
+ FALSES = %w[f false off n no 0].freeze
6
+
7
+ def to_b(invalid_value_behaviour: proc { nil })
8
+ value = strip.downcase
9
+ return true if TRUES.include?(value)
10
+ return false if FALSES.include?(value)
11
+
12
+ invalid_value_behaviour.call
13
+ end
14
+
15
+ def to_a(delimiter: " ")
16
+ split(delimiter)
17
+ end
18
+
19
+ def to_h(arr_sep: " ", key_sep: ":")
20
+ split(arr_sep).each_with_object({}) do |e, hsh|
21
+ key, value = e.split(key_sep)
22
+
23
+ hsh[key] = value
24
+ end
25
+ end
26
+
27
+ def to_n
28
+ return to_f if self =~ /[0-9]+\.[0-9]+/
29
+
30
+ to_i
31
+ end
32
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThorAddons
4
+ module Helpers
5
+ class Defaults
6
+ def self.load(klass, config)
7
+ options = klass.class_options.dup
8
+ options.merge!(config[:class_options]) if config[:class_options]
9
+ options.merge!(config[:command_options]) if config[:command_options]
10
+
11
+ options.each_with_object({}) do |(name, obj), hsh|
12
+ value = obj.respond_to?(:default) ? obj.default : nil
13
+ type = obj.respond_to?(:type) ? obj.type : :string
14
+
15
+ hsh[name] = { value: value, type: type }
16
+ end
17
+ end
18
+
19
+ def self.add(hash, defaults)
20
+ hash.each_with_object({}) do |(k, v), hsh|
21
+ hsh[k] = v.nil? ? defaults[k][:value] : v
22
+ end
23
+ end
24
+
25
+ def self.remove(hash, defaults)
26
+ hash.each_with_object({}) do |(k, v), hsh|
27
+ hsh[k] = nil
28
+
29
+ hsh[k] = v unless defaults[k][:value] == v
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThorAddons
4
+ module Helpers
5
+ class OptionType
6
+ attr_reader :option, :type
7
+
8
+ def initialize(option, type)
9
+ @option = option
10
+ @type = type
11
+
12
+ raise TypeError, "Invalid type: '#{type}'" unless
13
+ TYPE_CLASS_MAP.keys.include?(type)
14
+ end
15
+
16
+ TYPE_CLASS_MAP = {
17
+ array: [Array],
18
+ boolean: [TrueClass, FalseClass],
19
+ hash: [Hash],
20
+ numeric: [Integer, Float],
21
+ string: [String]
22
+ }.freeze
23
+
24
+ def valid?
25
+ TYPE_CLASS_MAP[type].any? { |klass| option.is_a?(klass) }
26
+ end
27
+
28
+ def convert_string
29
+ case type
30
+ when :boolean then option.to_b
31
+ when :array then option.to_a
32
+ when :hash then option.to_h
33
+ when :numeric then option.to_n
34
+ else option
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThorAddons
4
+ module Helpers
5
+ class OptionsConfigFile
6
+ def self.parse_config_file(config_file)
7
+ YAML.load_file(config_file) || {}
8
+ rescue Errno::ENOENT, Psych::SyntaxError
9
+ STDERR.puts("[WARN] Unable to parse 'config_file' '#{config_file}'.")
10
+ {}
11
+ end
12
+
13
+ def self.extract_command_data(data, command)
14
+ data_hash = data["global"] || {}
15
+
16
+ return data_hash if command.nil? || data[command].nil?
17
+
18
+ data_hash.merge(data[command])
19
+ end
20
+
21
+ def self.get_command_config_data(data, invocations, current_command_name)
22
+ invocations ||= {}
23
+ commands = (invocations.values.flatten << current_command_name)
24
+
25
+ command_options = extract_command_data(data, commands.shift)
26
+
27
+ commands.each do |cmd|
28
+ should_break = command_options[cmd].nil?
29
+ command_options.merge!(extract_command_data(command_options, cmd))
30
+
31
+ %W[#{cmd} global].each { |k| command_options.delete(k) }
32
+
33
+ break if should_break
34
+ end
35
+
36
+ command_options
37
+ end
38
+
39
+ def self.parse(config_file, invocations, current_command_name, defaults)
40
+ data = parse_config_file(config_file)
41
+ opts = get_command_config_data(data, invocations, current_command_name)
42
+
43
+ config_opts = opts.each_with_object({}) do |(key, value), hsh|
44
+ if defaults.keys.map(&:to_s).include?(key.to_s)
45
+ hsh[key] = value
46
+ else
47
+ STDERR.puts("[WARN] rejecting invalid config file option: '#{key}'")
48
+ end
49
+ end
50
+
51
+ OptionsHash.new(config_opts)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThorAddons
4
+ module Helpers
5
+ class OptionsENV
6
+ private_class_method def self.get_from_env_or_alias(env, envs_aliases)
7
+ return ENV[env] unless ENV[env].nil? && envs_aliases.keys.include?(env)
8
+
9
+ ENV[envs_aliases[env]]
10
+ end
11
+
12
+ def self.parse(defaults, envs_aliases)
13
+ opts = defaults.keys.each_with_object({}) do |option, hsh|
14
+ value = get_from_env_or_alias(option.to_s.upcase, envs_aliases)
15
+
16
+ next if value.nil?
17
+
18
+ hsh[option] = OptionType.new(value, defaults[option][:type])
19
+ .convert_string
20
+ end
21
+
22
+ OptionsHash.new(opts)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThorAddons
4
+ module Helpers
5
+ class OptionsHash < ::SymbolizedHash
6
+ private def value_empty?(value)
7
+ value.is_a?(NilClass) || (value.respond_to?(:empty?) && value.empty?)
8
+ end
9
+
10
+ def merge(new_hash)
11
+ new_hash.each_with_object(dup) do |(key, value), self_dup|
12
+ next if value_empty?(value) || !value_empty?(self_dup[key])
13
+
14
+ self_dup[key] = value
15
+ end
16
+ end
17
+
18
+ def merge!(options)
19
+ replace(merge(options))
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,13 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThorAddons
2
4
  module Options
3
- attr_reader :current_command_name, :defaults, :invoked_via_subcommand, :invocations
5
+ attr_reader :defaults, :invocations, :current_command_name
4
6
 
5
7
  def initialize(args = [], local_options = {}, config = {})
6
- @current_command_name = config[:current_command] ? config[:current_command].name : nil
7
- @defaults = load_defaults(config.dup)
8
- @invoked_via_subcommand = config[:invoked_via_subcommand]
8
+ @defaults = Helpers::Defaults.load(self.class, config.dup)
9
9
  @invocations = config[:invocations]
10
10
 
11
+ if config[:current_command].respond_to?(:name)
12
+ @current_command_name = config[:current_command].name
13
+ end
14
+
11
15
  super(args, local_options, config)
12
16
  end
13
17
 
@@ -19,126 +23,52 @@ module ThorAddons
19
23
  true
20
24
  end
21
25
 
22
- def options
23
- original = hash_with_indifferent_access(super)
24
- config_file = original[:config_file]
25
-
26
- return original unless with_env? || with_config_file?
27
-
28
- new_options = remove_defaults(original)
29
-
30
- if with_config_file? && !config_file.nil?
31
- merge(new_options, options_from_config(config_file))
32
- end
33
-
34
- if with_env?
35
- merge(new_options, options_from_env)
36
- end
37
-
38
- hash_with_indifferent_access(add_defaults(new_options))
39
- end
40
-
41
- private
42
-
43
- def merge(options_a, options_b)
44
- options_b.each do |key, value|
45
- next if value.to_s.empty? || !options_a[key].to_s.empty?
46
-
47
- options_a[key] = value
48
- end
49
-
50
- options_a
51
- end
52
-
53
26
  def envs_aliases
54
27
  {}
55
28
  end
56
29
 
57
- def options_from_env
58
- opts = {}
59
- defaults.keys.inject({}) do |memo, option|
60
- env = option.to_s.upcase
61
- opts[option] = ENV[env] unless ENV[env].nil?
62
-
63
- next unless envs_aliases.keys.include?(env) && opts[option].nil? && ENV[envs_aliases[env]]
64
-
65
- opts[option] = ENV[envs_aliases[env]]
66
- end
67
-
68
- hash_with_indifferent_access(opts)
69
- end
70
-
71
- def options_from_config(config_file)
72
- unless File.file?(config_file)
73
- STDERR.puts("[WARNING] Unable to read 'config_file' '#{config_file}' not found.")
74
- return {}
75
- end
76
-
77
- data = YAML.load_file(config_file)
78
- command_options = {}
79
- global = data["global"] || {}
80
-
81
- return hash_with_indifferent_access(global) if current_command_name.nil?
82
-
83
- if invoked_via_subcommand
84
- first_invoked, *remaining_invoked = invocations.values.flatten
85
- command_options = data[first_invoked] unless data[first_invoked].nil?
30
+ def options
31
+ original = Helpers::OptionsHash.new(super)
86
32
 
87
- remaining_invoked.each do |subcommand|
88
- break if command_options[subcommand].nil?
33
+ return original unless with_env? || with_config_file?
89
34
 
90
- subcommand_data = command_options[subcommand]
35
+ new_options = Helpers::Defaults.remove(original, defaults)
36
+ update_options!(new_options, original[:config_file])
91
37
 
92
- command_options.delete(subcommand)
93
- command_options.merge!(subcommand_data)
94
- end
95
- else
96
- command_options = data[current_command_name] unless data[current_command_name].nil?
97
- end
38
+ opts = Helpers::OptionsHash.new(
39
+ Helpers::Defaults.add(new_options, defaults)
40
+ )
98
41
 
99
- hash_with_indifferent_access(global.merge(command_options))
42
+ validate_options(opts)
100
43
  end
101
44
 
102
- def add_defaults(hash)
103
- hash.inject({}) do |memo, (k, v)|
104
- memo[k] = v.nil? ? defaults[k] : v
105
-
106
- memo
107
- end
45
+ private def update_options!(opts, cfg_file)
46
+ update_config_options!(opts, cfg_file) if with_config_file? && cfg_file
47
+ update_env_options!(opts) if with_env?
108
48
  end
109
49
 
110
- def remove_defaults(hash)
111
- hash.inject({}) do |memo, (k, v)|
112
- if defaults[k] == v
113
- memo[k] = nil
114
- else
115
- memo[k] = v
116
- end
117
-
118
- memo
119
- end
50
+ private def update_config_options!(opts, cfg_file)
51
+ opts.merge!(
52
+ Helpers::OptionsConfigFile.parse(
53
+ cfg_file,
54
+ invocations,
55
+ current_command_name,
56
+ defaults
57
+ )
58
+ )
120
59
  end
121
60
 
122
- def load_defaults(config)
123
- parse_options = self.class.class_options.dup
124
- parse_options.merge!(config[:class_options]) if config[:class_options]
125
- parse_options.merge!(config[:command_options]) if config[:command_options]
61
+ private def update_env_options!(opts)
62
+ opts.merge!(Helpers::OptionsENV.parse(defaults, envs_aliases))
63
+ end
126
64
 
127
- options_hash = parse_options.inject({}) do |memo, (key, value)|
128
- begin
129
- memo[key] = value.default
130
- rescue NoMethodError
131
- memo[key] = nil
132
- end
65
+ private def validate_options(opts)
66
+ opts.each do |key, value|
67
+ type = defaults[key][:type]
68
+ is_valid = Helpers::OptionType.new(value, type).valid?
133
69
 
134
- memo
70
+ raise TypeError, "'#{key}' should be a #{type}" unless is_valid
135
71
  end
136
-
137
- hash_with_indifferent_access(options_hash)
138
- end
139
-
140
- def hash_with_indifferent_access(hash)
141
- ::SymbolizedHash.new(hash)
142
72
  end
143
73
  end
144
74
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ThorAddons
2
- VERSION = "0.1.6"
4
+ VERSION = "1.0.0"
3
5
  end
data/lib/thor-addons.rb CHANGED
@@ -1,7 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "yaml"
2
- require "thor"
3
- require "thor"
4
4
  require "symbolized"
5
+ require "thor"
5
6
 
6
- require "thor-addons/version"
7
+ require "ext/string"
8
+ require "thor-addons/helpers/defaults"
9
+ require "thor-addons/helpers/option_type"
10
+ require "thor-addons/helpers/options_config_file"
11
+ require "thor-addons/helpers/options_env"
12
+ require "thor-addons/helpers/options_hash"
7
13
  require "thor-addons/options"
14
+ require "thor-addons/version"
data/thor-addons.gemspec CHANGED
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require "thor-addons/version"
5
6
 
@@ -9,18 +10,23 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ["Jacopo Scrinzi"]
10
11
  spec.email = ["scrinzi.jcopo@gmail.com"]
11
12
 
12
- spec.summary = %q{Thor CLI Add-ons}
13
- spec.description = %q{Useful Add-ons Thor CLI}
13
+ spec.summary = "Thor CLI Add-ons"
14
+ spec.description = "Useful Add-ons Thor CLI"
14
15
  spec.homepage = "https://github.com/eredi93/thor-addons"
15
16
  spec.license = "MIT"
16
17
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_dependency "thor", "~> 0.19"
20
+ spec.files = `git ls-files -z`.split("\x0")
21
+ .reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+
21
23
  spec.add_dependency "symbolized", "~> 0.0.1"
24
+ spec.add_dependency "thor", "~> 0.19"
22
25
 
23
26
  spec.add_development_dependency "bundler"
27
+ spec.add_development_dependency "climate_control"
28
+ spec.add_development_dependency "gem-release"
24
29
  spec.add_development_dependency "rake"
25
30
  spec.add_development_dependency "rspec"
31
+ spec.add_development_dependency "rubocop"
26
32
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thor-addons
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacopo Scrinzi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-13 00:00:00.000000000 Z
11
+ date: 2018-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thor
14
+ name: symbolized
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.19'
19
+ version: 0.0.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.19'
26
+ version: 0.0.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: symbolized
28
+ name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.1
33
+ version: '0.19'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.1
40
+ version: '0.19'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: climate_control
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: gem-release
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rake
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +108,20 @@ dependencies:
80
108
  - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  description: Useful Add-ons Thor CLI
84
126
  email:
85
127
  - scrinzi.jcopo@gmail.com
@@ -88,6 +130,8 @@ extensions: []
88
130
  extra_rdoc_files: []
89
131
  files:
90
132
  - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - ".ruby-version"
91
135
  - ".travis.yml"
92
136
  - CHANGELOG.md
93
137
  - CONTRIBUTING.md
@@ -96,7 +140,13 @@ files:
96
140
  - LICENSE.md
97
141
  - README.md
98
142
  - Rakefile
143
+ - lib/ext/string.rb
99
144
  - lib/thor-addons.rb
145
+ - lib/thor-addons/helpers/defaults.rb
146
+ - lib/thor-addons/helpers/option_type.rb
147
+ - lib/thor-addons/helpers/options_config_file.rb
148
+ - lib/thor-addons/helpers/options_env.rb
149
+ - lib/thor-addons/helpers/options_hash.rb
100
150
  - lib/thor-addons/options.rb
101
151
  - lib/thor-addons/version.rb
102
152
  - thor-addons.gemspec