atli 0.1.2 → 0.1.3

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: 5861afa66188c1398592fbe2c11f918ae6c65362
4
- data.tar.gz: 82d992373be7e149b6ac38f28d026fdf14fe7902
3
+ metadata.gz: 17320147d3f8b501e297a58c94b4c7d4eee07005
4
+ data.tar.gz: 1945e98ecebe7600c4e968a24f6676650cd22ce2
5
5
  SHA512:
6
- metadata.gz: b12a02bdc6bed10d119cb8386c2d1c113fee8fd4b8cf10e16fecb0f272c5ab0e90de694524e5ad0c49042ca198f353454e069968b7001dec2645bbf68b9b3e9e
7
- data.tar.gz: 7d84ddc3300f2c6a2c29837724f4e56512f13d77f293cf613521c1253361d3c5a66f907c078286c988568414943eba45a52510c710b9b6d59da8b63d4595bc51
6
+ metadata.gz: 7092d41e483671cd9069517f316bb8349696bcc0b8fb9d0537e42dc4e356b44249db4755a41af76edbbc984cc82ca1a0d0ba244ee5972a9ab371ab5cfacd1b5a
7
+ data.tar.gz: f5ac08027334f1aa8864e869cb2a4aac8e009b6fb794dc35c872fcde18ebdfc1d01d5eac16ecaca464e942936a13e6dd972d758612ae5a88f487a667d9341779
data/.yardopts CHANGED
@@ -1,7 +1,6 @@
1
1
  --protected
2
+ --output-dir doc/site
2
3
  --markup rdoc
3
- lib/*.rb
4
- lib/**/*.rb
5
4
  -
6
5
  LICENSE.md
7
6
  README.md
@@ -21,10 +21,41 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  # Dependencies
23
23
  # ============================================================================
24
+
25
+ # My guns
26
+ spec.add_dependency "nrser", '>= 0.2.0.pre.2'
27
+
28
+
29
+ # Development Dependencies
30
+ # ----------------------------------------------------------------------------
24
31
  #
25
- # NOTE Development dependencies are in `//Gemfile`
32
+ # NOTE Development dependencies that came from Thor are in `//Gemfile`
26
33
  #
27
34
 
28
- # My guns
29
- spec.add_dependency "nrser", '>= 0.2.0.pre.1'
35
+ ### Yard
36
+ #
37
+ # I'm not used to dealing with RDoc docstrings, and want to still write doc
38
+ # files in Markdown, but it's been funky to get them to work together...
39
+ #
40
+ # When things get funky:
41
+ #
42
+ # 1. `qb yard/clean`
43
+ # 2. `bundle exec yard doc`
44
+ # 3. `locd site restart yard.atli`
45
+ #
46
+
47
+ # Doc site generation with `yard`
48
+ spec.add_development_dependency 'yard', '~> 0.9.12'
49
+
50
+ # This being installed *seems* to help Yard do the right things with
51
+ # markdown files...
52
+ spec.add_development_dependency 'redcarpet', '~> 3.4'
53
+
54
+ # These... do not seem to work or help...
55
+ #
56
+ # GitHub-Flavored Markdown (GFM) for use with `yard`
57
+ # spec.add_development_dependency 'github-markup', '~> 1.6'
58
+ # Provider for `commonmarker`, the new GFM lib
59
+ # spec.add_development_dependency 'yard-commonmarker', '~> 0.3.0'
60
+
30
61
  end
@@ -6,8 +6,6 @@ require "thor/base"
6
6
  using NRSER
7
7
 
8
8
  class Thor
9
- # Atli - add {.logger} and {#logger} methods
10
- include SemanticLogger::Loggable
11
9
 
12
10
  class << self
13
11
  # Allows for custom "Command" package naming.
@@ -406,7 +404,7 @@ class Thor
406
404
 
407
405
  # Find shared options given names and groups.
408
406
  #
409
- # @param [*<Symbol>] *names
407
+ # @param [*<Symbol>] names
410
408
  # Individual shared option names to include.
411
409
  #
412
410
  # @param [nil | Symbol | Enumerable<Symbol>] groups:
@@ -545,229 +543,230 @@ class Thor
545
543
 
546
544
  # END Atli Public Class Methods ******************************************
547
545
 
546
+
547
+ protected # Class Methods
548
+ # ============================================================================
548
549
 
549
- protected
550
-
551
- def stop_on_unknown_option #:nodoc:
552
- @stop_on_unknown_option ||= Set.new
553
- end
554
-
555
- # help command has the required check disabled by default.
556
- def disable_required_check #:nodoc:
557
- @disable_required_check ||= Set.new([:help])
558
- end
559
-
560
- # The method responsible for dispatching given the args.
561
- def dispatch(meth, given_args, given_opts, config) #:nodoc: # rubocop:disable MethodLength
562
- meth ||= retrieve_command_name(given_args)
563
- command = all_commands[normalize_command_name(meth)]
564
-
565
- if !command && config[:invoked_via_subcommand]
566
- # We're a subcommand and our first argument didn't match any of our
567
- # commands. So we put it back and call our default command.
568
- given_args.unshift(meth)
569
- command = all_commands[normalize_command_name(default_command)]
550
+ def stop_on_unknown_option #:nodoc:
551
+ @stop_on_unknown_option ||= Set.new
570
552
  end
571
553
 
572
- if command
573
- args, opts = Thor::Options.split(given_args)
574
- if stop_on_unknown_option?(command) && !args.empty?
575
- # given_args starts with a non-option, so we treat everything as
576
- # ordinary arguments
577
- args.concat opts
578
- opts.clear
579
- end
580
- else
581
- args = given_args
582
- opts = nil
583
- command = dynamic_command_class.new(meth)
554
+ # help command has the required check disabled by default.
555
+ def disable_required_check #:nodoc:
556
+ @disable_required_check ||= Set.new([:help])
584
557
  end
585
558
 
586
- opts = given_opts || opts || []
587
- config[:current_command] = command
588
- config[:command_options] = command.options
559
+ # The method responsible for dispatching given the args.
560
+ def dispatch(meth, given_args, given_opts, config) #:nodoc: # rubocop:disable MethodLength
561
+ meth ||= retrieve_command_name(given_args)
562
+ command = all_commands[normalize_command_name(meth)]
589
563
 
590
- instance = new(args, opts, config)
591
- yield instance if block_given?
592
- args = instance.args
593
- trailing = args[Range.new(arguments.size, -1)]
594
- instance.invoke_command(command, trailing || [])
595
- end
596
-
597
-
598
- # The banner for this class. You can customize it if you are invoking the
599
- # thor class by another ways which is not the Thor::Runner. It receives
600
- # the command that is going to be invoked and a boolean which indicates if
601
- # the namespace should be displayed as arguments.
602
- #
603
- # @param [Thor::Command] command
604
- # The command to render the banner for.
605
- #
606
- # @param [nil | ?] namespace
607
- # *Atli*: this argument is _not_ _used_ _at_ _all_. I don't know what it
608
- # could or should be, but it doesn't seem like it matters at all :/
609
- #
610
- # @param [Boolean] subcommand
611
- # Should be +true+ if the command was invoked as a sub-command; passed
612
- # on to {Command#formatted_usage} so it can render correctly.
613
- #
614
- # @return [String]
615
- # The banner for the command.
616
- #
617
- def banner(command, namespace = nil, subcommand = false)
618
- "#{basename} #{command.formatted_usage(self, $thor_runner, subcommand)}"
619
- end
620
-
621
-
622
- def baseclass #:nodoc:
623
- Thor
624
- end
564
+ if !command && config[:invoked_via_subcommand]
565
+ # We're a subcommand and our first argument didn't match any of our
566
+ # commands. So we put it back and call our default command.
567
+ given_args.unshift(meth)
568
+ command = all_commands[normalize_command_name(default_command)]
569
+ end
625
570
 
626
- def dynamic_command_class #:nodoc:
627
- Thor::DynamicCommand
628
- end
571
+ if command
572
+ args, opts = Thor::Options.split(given_args)
573
+ if stop_on_unknown_option?(command) && !args.empty?
574
+ # given_args starts with a non-option, so we treat everything as
575
+ # ordinary arguments
576
+ args.concat opts
577
+ opts.clear
578
+ end
579
+ else
580
+ args = given_args
581
+ opts = nil
582
+ command = dynamic_command_class.new(meth)
583
+ end
629
584
 
630
- def create_command(meth) #:nodoc:
631
- @usage ||= nil
632
- @desc ||= nil
633
- @long_desc ||= nil
634
- @hide ||= nil
635
-
636
- if @usage && @desc
637
- base_class = @hide ? Thor::HiddenCommand : Thor::Command
638
- commands[meth] = base_class.new(
639
- meth,
640
- @desc,
641
- @long_desc,
642
- @usage,
643
- method_options
644
- )
645
- @usage, @desc, @long_desc, @method_options, @hide = nil
646
- true
647
- elsif all_commands[meth] || meth == "method_missing"
648
- true
649
- else
650
- puts "[WARNING] Attempted to create command #{meth.inspect} without usage or description. " \
651
- "Call desc if you want this method to be available as command or declare it inside a " \
652
- "no_commands{} block. Invoked from #{caller[1].inspect}."
653
- false
654
- end
655
- end
656
- alias_method :create_task, :create_command
585
+ opts = given_opts || opts || []
586
+ config[:current_command] = command
587
+ config[:command_options] = command.options
657
588
 
658
- def initialize_added #:nodoc:
659
- class_options.merge!(method_options)
660
- @method_options = nil
661
- end
589
+ instance = new(args, opts, config)
590
+ yield instance if block_given?
591
+ args = instance.args
592
+ trailing = args[Range.new(arguments.size, -1)]
593
+ instance.invoke_command(command, trailing || [])
594
+ end
595
+
596
+
597
+ # The banner for this class. You can customize it if you are invoking the
598
+ # thor class by another ways which is not the Thor::Runner. It receives
599
+ # the command that is going to be invoked and a boolean which indicates if
600
+ # the namespace should be displayed as arguments.
601
+ #
602
+ # @param [Thor::Command] command
603
+ # The command to render the banner for.
604
+ #
605
+ # @param [nil | ?] namespace
606
+ # *Atli*: this argument is _not_ _used_ _at_ _all_. I don't know what it
607
+ # could or should be, but it doesn't seem like it matters at all :/
608
+ #
609
+ # @param [Boolean] subcommand
610
+ # Should be +true+ if the command was invoked as a sub-command; passed
611
+ # on to {Command#formatted_usage} so it can render correctly.
612
+ #
613
+ # @return [String]
614
+ # The banner for the command.
615
+ #
616
+ def banner(command, namespace = nil, subcommand = false)
617
+ "#{basename} #{command.formatted_usage(self, $thor_runner, subcommand)}"
618
+ end
619
+
620
+
621
+ def baseclass #:nodoc:
622
+ Thor
623
+ end
662
624
 
663
- # Retrieve the command name from given args.
664
- def retrieve_command_name(args) #:nodoc:
665
- meth = args.first.to_s unless args.empty?
666
- args.shift if meth && (map[meth] || meth !~ /^\-/)
667
- end
668
- alias_method :retrieve_task_name, :retrieve_command_name
625
+ def dynamic_command_class #:nodoc:
626
+ Thor::DynamicCommand
627
+ end
669
628
 
670
- # receives a (possibly nil) command name and returns a name that is in
671
- # the commands hash. In addition to normalizing aliases, this logic
672
- # will determine if a shortened command is an unambiguous substring of
673
- # a command or alias.
674
- #
675
- # +normalize_command_name+ also converts names like +animal-prison+
676
- # into +animal_prison+.
677
- def normalize_command_name(meth) #:nodoc:
678
- return default_command.to_s.tr("-", "_") unless meth
629
+ def create_command(meth) #:nodoc:
630
+ @usage ||= nil
631
+ @desc ||= nil
632
+ @long_desc ||= nil
633
+ @hide ||= nil
634
+
635
+ if @usage && @desc
636
+ base_class = @hide ? Thor::HiddenCommand : Thor::Command
637
+ commands[meth] = base_class.new(
638
+ meth,
639
+ @desc,
640
+ @long_desc,
641
+ @usage,
642
+ method_options
643
+ )
644
+ @usage, @desc, @long_desc, @method_options, @hide = nil
645
+ true
646
+ elsif all_commands[meth] || meth == "method_missing"
647
+ true
648
+ else
649
+ puts "[WARNING] Attempted to create command #{meth.inspect} without usage or description. " \
650
+ "Call desc if you want this method to be available as command or declare it inside a " \
651
+ "no_commands{} block. Invoked from #{caller[1].inspect}."
652
+ false
653
+ end
654
+ end
655
+ alias_method :create_task, :create_command
679
656
 
680
- possibilities = find_command_possibilities(meth)
681
-
682
- if possibilities.size > 1
683
- raise AmbiguousTaskError,
684
- "Ambiguous command #{meth} matches [#{possibilities.join(', ')}]"
657
+ def initialize_added #:nodoc:
658
+ class_options.merge!(method_options)
659
+ @method_options = nil
685
660
  end
686
661
 
687
- if possibilities.empty?
688
- meth ||= default_command
689
- elsif map[meth]
690
- meth = map[meth]
691
- else
692
- meth = possibilities.first
662
+ # Retrieve the command name from given args.
663
+ def retrieve_command_name(args) #:nodoc:
664
+ meth = args.first.to_s unless args.empty?
665
+ args.shift if meth && (map[meth] || meth !~ /^\-/)
693
666
  end
667
+ alias_method :retrieve_task_name, :retrieve_command_name
668
+
669
+ # receives a (possibly nil) command name and returns a name that is in
670
+ # the commands hash. In addition to normalizing aliases, this logic
671
+ # will determine if a shortened command is an unambiguous substring of
672
+ # a command or alias.
673
+ #
674
+ # +normalize_command_name+ also converts names like +animal-prison+
675
+ # into +animal_prison+.
676
+ def normalize_command_name(meth) #:nodoc:
677
+ return default_command.to_s.tr("-", "_") unless meth
678
+
679
+ possibilities = find_command_possibilities(meth)
680
+
681
+ if possibilities.size > 1
682
+ raise AmbiguousTaskError,
683
+ "Ambiguous command #{meth} matches [#{possibilities.join(', ')}]"
684
+ end
694
685
 
695
- meth.to_s.tr("-", "_") # treat foo-bar as foo_bar
696
- end
697
- alias_method :normalize_task_name, :normalize_command_name
698
-
699
- # this is the logic that takes the command name passed in by the user
700
- # and determines whether it is an unambiguous substrings of a command or
701
- # alias name.
702
- def find_command_possibilities(meth)
703
- len = meth.to_s.length
704
- possibilities = all_commands.merge(map).keys.select { |n|
705
- meth == n[0, len]
706
- }.sort
707
- unique_possibilities = possibilities.map { |k| map[k] || k }.uniq
708
-
709
- if possibilities.include?(meth)
710
- [meth]
711
- elsif unique_possibilities.size == 1
712
- unique_possibilities
713
- else
714
- possibilities
686
+ if possibilities.empty?
687
+ meth ||= default_command
688
+ elsif map[meth]
689
+ meth = map[meth]
690
+ else
691
+ meth = possibilities.first
692
+ end
693
+
694
+ meth.to_s.tr("-", "_") # treat foo-bar as foo_bar
715
695
  end
716
- end
717
- alias_method :find_task_possibilities, :find_command_possibilities
696
+ alias_method :normalize_task_name, :normalize_command_name
697
+
698
+ # this is the logic that takes the command name passed in by the user
699
+ # and determines whether it is an unambiguous substrings of a command or
700
+ # alias name.
701
+ def find_command_possibilities(meth)
702
+ len = meth.to_s.length
703
+ possibilities = all_commands.merge(map).keys.select { |n|
704
+ meth == n[0, len]
705
+ }.sort
706
+ unique_possibilities = possibilities.map { |k| map[k] || k }.uniq
707
+
708
+ if possibilities.include?(meth)
709
+ [meth]
710
+ elsif unique_possibilities.size == 1
711
+ unique_possibilities
712
+ else
713
+ possibilities
714
+ end
715
+ end
716
+ alias_method :find_task_possibilities, :find_command_possibilities
718
717
 
719
- def subcommand_help(cmd)
720
- logger.trace __method__.to_s,
721
- cmd: cmd,
722
- caller: caller
723
-
724
- desc "help [COMMAND]", "Describe subcommands or one specific subcommand"
725
-
726
- # Atli - This used to be {#class_eval} (maybe to support really old
727
- # Rubies? Who knows...) but that made it really hard to find in
728
- # stack traces, so I switched it to {#define_method}.
729
- #
730
- define_method :help do |*args|
718
+ def subcommand_help(cmd)
719
+ logger.trace __method__.to_s,
720
+ cmd: cmd,
721
+ caller: caller
731
722
 
732
- # Add the `is_subcommand = true` trailing arg
733
- case args[-1]
734
- when true
735
- # pass
736
- when false
737
- # Weird, `false` was explicitly passed... whatever, set it to `true`
738
- args[-1] = true
739
- else
740
- # "Normal" case, append it
741
- args << true
723
+ desc "help [COMMAND]", "Describe subcommands or one specific subcommand"
724
+
725
+ # Atli - This used to be {#class_eval} (maybe to support really old
726
+ # Rubies? Who knows...) but that made it really hard to find in
727
+ # stack traces, so I switched it to {#define_method}.
728
+ #
729
+ define_method :help do |*args|
730
+
731
+ # Add the `is_subcommand = true` trailing arg
732
+ case args[-1]
733
+ when true
734
+ # pass
735
+ when false
736
+ # Weird, `false` was explicitly passed... whatever, set it to `true`
737
+ args[-1] = true
738
+ else
739
+ # "Normal" case, append it
740
+ args << true
741
+ end
742
+
743
+ super( *args )
742
744
  end
743
745
 
744
- super *args
745
746
  end
747
+ alias_method :subtask_help, :subcommand_help
746
748
 
747
- end
748
- alias_method :subtask_help, :subcommand_help
749
-
750
- # Atli Protected Class Methods
751
- # ========================================================================
749
+ # Atli Protected Class Methods
750
+ # ======================================================================
751
+
752
+ # Build a Thor::SharedOption and add it to Thor.shared_method_options.
753
+ #
754
+ # The Thor::SharedOption is returned.
755
+ #
756
+ # ==== Parameters
757
+ # name<Symbol>:: The name of the argument.
758
+ # options<Hash>:: Described in both class_option and method_option,
759
+ # with the additional `:groups` shared option keyword.
760
+ def build_shared_option(name, options)
761
+ shared_method_options[name] = Thor::SharedOption.new(
762
+ name,
763
+ options.merge(:check_default_type => check_default_type?)
764
+ )
765
+ end # #build_shared_option
752
766
 
753
- # Build a Thor::SharedOption and add it to Thor.shared_method_options.
754
- #
755
- # The Thor::SharedOption is returned.
756
- #
757
- # ==== Parameters
758
- # name<Symbol>:: The name of the argument.
759
- # options<Hash>:: Described in both class_option and method_option,
760
- # with the additional `:groups` shared option keyword.
761
- def build_shared_option(name, options)
762
- shared_method_options[name] = Thor::SharedOption.new(
763
- name,
764
- options.merge(:check_default_type => check_default_type?)
765
- )
766
- end # #build_shared_option
767
+ # END protected Class Methods ********************************************
767
768
 
768
- # END protected Class Methods **********************************************
769
-
770
- end # class << self
769
+ end # class << self ********************************************************
771
770
 
772
771
 
773
772
  protected # Instance Methods
@@ -796,8 +795,7 @@ class Thor
796
795
  options.slice( *name_set ).sym_keys
797
796
  end
798
797
 
799
- # END protected Instance Methods *******************************************
800
- public
798
+ public # END protected Instance Methods ************************************
801
799
 
802
800
 
803
801
  # After this, {.method_added} hook is installed and defined methods become
@@ -806,7 +804,7 @@ class Thor
806
804
 
807
805
 
808
806
  # Commands
809
- # ============================================================================
807
+ # ==========================================================================
810
808
 
811
809
  map HELP_MAPPINGS => :help
812
810