atli 0.1.7 → 0.1.8

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
  SHA1:
3
- metadata.gz: 9e803318c577bd05f0beff20eb566249010e83ae
4
- data.tar.gz: 9640814f9e4de51bfc750833bd4cbcf088b32566
3
+ metadata.gz: 13e61f293aa7bde2e5ac7b0db815fbe5c7a40751
4
+ data.tar.gz: f01468bc2b2ec632e392086fe36c068c0eb412f4
5
5
  SHA512:
6
- metadata.gz: 07fda1a0696a13dabc7809ed25a501ac3082142e4a45993a7ade6b509a1a853d77b1e55e9380b7b1b19907fa3279559f46ef7ace0a8d6fa0f81471a8cf219b2a
7
- data.tar.gz: 932503e631f498ae2128a608af0221ea5e75837354e680913c2d90f5aff216808a2df201af280685e696483698a2fe0cc932b8f8e6b800d01cfa76455bdb0e08
6
+ metadata.gz: f1c315d604b47905681f2a811fc2540730c5a0607159409e6c8c84c05a838dd8385267e011ba30ba1f1369fba15a8917f4cc798738f699d7de3733abab32f9d5
7
+ data.tar.gz: 12ccd0e704f4a91e51be8b126b8d1f2657924835a9c5a2baef20d308b9168e1b1ca69acb6f7236adf87ad4e703111dd719872a46c1c38d66094fb9a048c2f20f
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  # ============================================================================
24
24
 
25
25
  # My guns
26
- spec.add_dependency "nrser", '~> 0.3.3'
26
+ spec.add_dependency "nrser", '~> 0.3.5'
27
27
 
28
28
 
29
29
  # Development Dependencies
@@ -2,6 +2,7 @@ require "set"
2
2
  require 'nrser'
3
3
  require 'semantic_logger'
4
4
  require "thor/base"
5
+ require 'thor/example'
5
6
 
6
7
 
7
8
  class Thor
@@ -198,7 +199,11 @@ class Thor
198
199
  shell.say "Usage:"
199
200
  shell.say " #{banner(command, nil, subcommand)}"
200
201
  shell.say
201
- class_options_help(shell, nil => command.options.values)
202
+
203
+ class_options_help \
204
+ shell,
205
+ command.options.values.group_by { |option| option.group }
206
+
202
207
  if command.long_description
203
208
  shell.say "Description:"
204
209
  shell.print_wrapped(command.long_description, :indent => 2)
@@ -206,6 +211,24 @@ class Thor
206
211
  shell.say command.description
207
212
  end
208
213
 
214
+ unless command.examples.empty?
215
+ shell.say "\n"
216
+ shell.say "Examples:"
217
+ shell.say "\n"
218
+
219
+ command.examples.each_with_index do |example, index|
220
+ lines = example.lines
221
+
222
+ shell.say "1. #{ lines[0] }"
223
+
224
+ lines[1..-1].each do |line|
225
+ shell.say " #{ line }"
226
+ end
227
+ end
228
+
229
+ shell.say "\n"
230
+ end
231
+
209
232
  nil
210
233
  end
211
234
  alias_method :task_help, :command_help
@@ -435,10 +458,26 @@ class Thor
435
458
  def find_shared_method_options *names, groups: nil
436
459
  groups_set = Set[*groups]
437
460
 
438
- shared_method_options.
439
- select { |name, option|
440
- names.include?( name ) || !(option.groups & groups_set).empty?
441
- }
461
+ shared_method_options.each_with_object( {} ) do |(name, option), results|
462
+ match = {}
463
+
464
+ if names.include? name
465
+ match[:name] = true
466
+ end
467
+
468
+ match_groups = option.groups & groups_set
469
+
470
+ unless match_groups.empty?
471
+ match[:groups] = match_groups
472
+ end
473
+
474
+ unless match.empty?
475
+ results[name] = {
476
+ option: option,
477
+ match: match,
478
+ }
479
+ end
480
+ end
442
481
  end
443
482
  alias_method :find_shared_options, :find_shared_method_options
444
483
 
@@ -553,8 +592,8 @@ class Thor
553
592
  #
554
593
  def include_method_options *names, groups: nil
555
594
  find_shared_method_options( *names, groups: groups ).
556
- each do |name, option|
557
- method_options[name] = option
595
+ each do |name, result|
596
+ method_options[name] = Thor::IncludedOption.new **result
558
597
  end
559
598
  end
560
599
 
@@ -650,16 +689,20 @@ class Thor
650
689
  @desc ||= nil
651
690
  @long_desc ||= nil
652
691
  @hide ||= nil
692
+
693
+ examples = @examples || []
694
+ @examples = []
653
695
 
654
696
  if @usage && @desc
655
697
  base_class = @hide ? Thor::HiddenCommand : Thor::Command
656
- commands[meth] = base_class.new(
657
- meth,
658
- @desc,
659
- @long_desc,
660
- @usage,
661
- method_options
662
- )
698
+ commands[meth] = base_class.new \
699
+ name: meth,
700
+ description: @desc,
701
+ long_description: @long_desc,
702
+ usage: @usage,
703
+ examples: examples,
704
+ options: method_options
705
+
663
706
  @usage, @desc, @long_desc, @method_options, @hide = nil
664
707
  true
665
708
  elsif all_commands[meth] || meth == "method_missing"
@@ -17,10 +17,11 @@ require 'nrser/refinements/types'
17
17
  using NRSER::Types
18
18
 
19
19
 
20
- # Declarations
20
+ # Namespace
21
21
  # =======================================================================
22
22
 
23
- module Thor::Base; end
23
+ class Thor
24
+ module Base
24
25
 
25
26
 
26
27
  # Definitions
@@ -29,7 +30,7 @@ module Thor::Base; end
29
30
  # Methods that are mixed in as module/class/singleton methods to modules
30
31
  # that include {Thor::Base}.
31
32
  #
32
- module Thor::Base::ClassMethods
33
+ module ClassMethods
33
34
 
34
35
  # Mixins
35
36
  # ==========================================================================
@@ -536,7 +537,7 @@ module Thor::Base::ClassMethods
536
537
  #
537
538
  # @return [nil]
538
539
  #
539
- def class_options_help(shell, groups = {}) #:nodoc:
540
+ def class_options_help shell, groups = {}
540
541
  # Group options by group
541
542
  class_options.each do |_, value|
542
543
  groups[value.group] ||= []
@@ -545,7 +546,10 @@ module Thor::Base::ClassMethods
545
546
 
546
547
  # Deal with default group
547
548
  global_options = groups.delete(nil) || []
548
- print_options(shell, global_options)
549
+ print_options \
550
+ shell,
551
+ global_options,
552
+ (groups.empty? ? nil : 'General')
549
553
 
550
554
  # Print all others
551
555
  groups.each do |group_name, options|
@@ -731,4 +735,11 @@ module Thor::Base::ClassMethods
731
735
 
732
736
  public # end Protected Mixin Methods ***************************************
733
737
 
734
- end # module Thor::Base::ClassMethods
738
+ end # module ClassMethods
739
+
740
+
741
+ # /Namespace
742
+ # ========================================================================
743
+
744
+ end # module Base
745
+ end # class Thor
@@ -5,14 +5,26 @@ class Thor
5
5
  :description,
6
6
  :long_description,
7
7
  :usage,
8
+ :examples,
8
9
  :options,
9
10
  :ancestor_name )
10
11
  include SemanticLogger::Loggable
11
12
 
12
13
  FILE_REGEXP = /^#{Regexp.escape(File.dirname(__FILE__))}/
13
14
 
14
- def initialize(name, description, long_description, usage, options = nil)
15
- super(name.to_s, description, long_description, usage, options || {})
15
+ def initialize name:,
16
+ description: nil,
17
+ long_description: nil,
18
+ usage: nil,
19
+ examples: [],
20
+ options: nil
21
+ super \
22
+ name.to_s,
23
+ description,
24
+ long_description,
25
+ usage,
26
+ examples,
27
+ options || {}
16
28
  end
17
29
 
18
30
  def initialize_copy(other) #:nodoc:
@@ -301,11 +313,11 @@ class Thor
301
313
  # A dynamic command that handles method missing scenarios.
302
314
  class DynamicCommand < Command
303
315
  def initialize(name, options = nil)
304
- super( name.to_s,
305
- "A dynamically-generated command",
306
- name.to_s,
307
- name.to_s,
308
- options )
316
+ super( name: name.to_s,
317
+ description: "A dynamically-generated command",
318
+ long_description: name.to_s, # why?!
319
+ usage: name.to_s,
320
+ options: options )
309
321
  end
310
322
 
311
323
  def run(instance, args = [])
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+
5
+ # Definitions
6
+ # =======================================================================
7
+
8
+ class Thor
9
+
10
+ # Add an example to the next defined command.
11
+ #
12
+ # @param [String] example
13
+ # The example text.
14
+ #
15
+ # @return [nil]
16
+ #
17
+ def self.example example
18
+ @examples ||= []
19
+ @examples << example
20
+ nil
21
+ end # #example
22
+
23
+ end # class Thor
@@ -251,7 +251,7 @@ class Thor::Group
251
251
  end
252
252
 
253
253
  def create_command(meth) #:nodoc:
254
- commands[meth.to_s] = Thor::Command.new(meth, nil, nil, nil, nil)
254
+ commands[meth.to_s] = Thor::Command.new name: meth
255
255
  true
256
256
  end
257
257
  alias_method :create_task, :create_command
@@ -1,3 +1,6 @@
1
+ # Need {String#titleize}
2
+ require 'active_support/core_ext/string/inflections'
3
+
1
4
  class Thor
2
5
  class Option < Argument #:nodoc:
3
6
  attr_reader :aliases, :group, :lazy_default, :hide
@@ -9,7 +12,7 @@ class Thor
9
12
  options[:required] = false unless options.key?(:required)
10
13
  super
11
14
  @lazy_default = options[:lazy_default]
12
- @group = options[:group].to_s.capitalize if options[:group]
15
+ @group = options[:group].to_s.titleize if options[:group]
13
16
  @aliases = Array(options[:aliases])
14
17
  @hide = options[:hide]
15
18
  end
@@ -1,5 +1,28 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ # Requirements
5
+ # ========================================================================
6
+
7
+ # Stdlib
8
+ # ------------------------------------------------------------------------
1
9
  require 'set'
2
10
 
11
+ # Deps
12
+ # ------------------------------------------------------------------------
13
+
14
+ # Need {String#titleize}
15
+ require 'active_support/core_ext/string/inflections'
16
+
17
+ # Need {NRSER::LazyAttr}
18
+ require 'nrser/meta/lazy_attr'
19
+
20
+ # Project / Package
21
+ # ------------------------------------------------------------------------
22
+
23
+ require_relative './option'
24
+
25
+
3
26
  class Thor
4
27
  # A {Thor::Option} that has an additional {#groups} attribute storing a
5
28
  # set of group symbols that the option is a part of.
@@ -15,9 +38,80 @@ class Thor
15
38
  #
16
39
  #
17
40
  def initialize name, **options
41
+ @groups = Set.new [*options[:groups]].map( &:to_sym )
42
+
43
+ # # If
44
+ # if options[:group].nil? && groups.count == 1
45
+ # options[:group] = groups.first.to_s.titleize
46
+ # end
47
+
18
48
  super name, options
49
+ end
50
+
51
+
52
+ def initialize_options
53
+ {
54
+ # {Thor::Argument} options
55
+ desc: :@description,
56
+ required: :@required,
57
+ type: :@type,
58
+ default: :@default,
59
+ banner: :@banner,
60
+ eunm: :@enum,
61
+
62
+ # {Thor::Option} options
63
+ check_default_type: :@check_default_type,
64
+ lazy_default: :@lazy_default,
65
+ group: :@group,
66
+ aliases: :@aliases,
67
+ hide: :@hide,
68
+
69
+ # {Thor::SharedOption} options
70
+ groups: :@groups,
71
+ }.transform_values &method( :instance_variable_get )
72
+ end
73
+
74
+ end
75
+
76
+
77
+ class IncludedOption < SharedOption
78
+
79
+ # The match that resulted in this option getting included.
80
+ #
81
+ # @return [Hash]
82
+ #
83
+ attr_reader :match
84
+
85
+
86
+ def initialize option:, match:
87
+ super option.name, **option.initialize_options
88
+ @match = match
89
+ end
90
+
91
+
92
+ +NRSER::LazyAttr
93
+ def group
94
+ case @group
95
+ when false
96
+ nil
97
+ when String
98
+ @group
99
+ when nil
100
+ default_group
101
+ else
102
+ logger.warn "Bad {Option#group}: #{ @group.inspect }",
103
+ option: self
104
+ nil
105
+ end
106
+ end
107
+
108
+
109
+ +NRSER::LazyAttr
110
+ def default_group
111
+ return nil unless match[:groups]
19
112
 
20
- @groups = Set.new [*options[:groups]].map( &:to_sym )
113
+ match[:groups].map { |group| group.to_s.titleize }.join ' / '
21
114
  end
115
+
22
116
  end
23
117
  end
@@ -14,7 +14,7 @@ class Thor
14
14
  #
15
15
  # @return [String]
16
16
  #
17
- VERSION = '0.1.7'
17
+ VERSION = '0.1.8'
18
18
 
19
19
 
20
20
  # The version of Thor that Atli is up to date with.
@@ -27,5 +27,5 @@ class Thor
27
27
  #
28
28
  # @return [String]
29
29
  #
30
- THOR_VERSION = '0.1.7'
30
+ THOR_VERSION = '0.1.8'
31
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Souza (Atli)
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-05-06 00:00:00.000000000 Z
13
+ date: 2018-05-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -32,14 +32,14 @@ dependencies:
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: 0.3.3
35
+ version: 0.3.5
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: 0.3.3
42
+ version: 0.3.5
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: yard
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -98,6 +98,7 @@ files:
98
98
  - lib/thor/core_ext/io_binary_read.rb
99
99
  - lib/thor/core_ext/ordered_hash.rb
100
100
  - lib/thor/error.rb
101
+ - lib/thor/example.rb
101
102
  - lib/thor/execution.rb
102
103
  - lib/thor/group.rb
103
104
  - lib/thor/invocation.rb