squared 0.4.25 → 0.5.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 +4 -4
 - data/CHANGELOG.md +62 -364
 - data/README.md +1279 -650
 - data/README.ruby.md +722 -0
 - data/lib/squared/common/base.rb +8 -9
 - data/lib/squared/common/format.rb +17 -24
 - data/lib/squared/common/prompt.rb +38 -42
 - data/lib/squared/common/shell.rb +29 -29
 - data/lib/squared/common/system.rb +34 -37
 - data/lib/squared/common/utils.rb +3 -28
 - data/lib/squared/common.rb +2 -1
 - data/lib/squared/config.rb +21 -21
 - data/lib/squared/version.rb +1 -1
 - data/lib/squared/workspace/application.rb +67 -91
 - data/lib/squared/workspace/project/base.rb +355 -476
 - data/lib/squared/workspace/project/docker.rb +175 -203
 - data/lib/squared/workspace/project/git.rb +357 -498
 - data/lib/squared/workspace/project/node.rb +138 -213
 - data/lib/squared/workspace/project/python.rb +88 -306
 - data/lib/squared/workspace/project/ruby.rb +220 -300
 - data/lib/squared/workspace/project/support/class.rb +94 -288
 - data/lib/squared/workspace/project.rb +0 -10
 - data/lib/squared/workspace/repo.rb +53 -92
 - data/lib/squared/workspace/series.rb +34 -32
 - data/lib/squared/workspace/support/data.rb +3 -2
 - data/lib/squared/workspace/support.rb +0 -1
 - data/lib/squared/workspace.rb +1 -1
 - data/squared.gemspec +5 -5
 - metadata +8 -12
 - data/lib/squared/common/class.rb +0 -110
 - data/lib/squared/workspace/support/base.rb +0 -37
 
| 
         @@ -4,16 +4,17 @@ module Squared 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Workspace
         
     | 
| 
       5 
5 
     | 
    
         
             
                module Project
         
     | 
| 
       6 
6 
     | 
    
         
             
                  class Ruby < Git
         
     | 
| 
       7 
     | 
    
         
            -
                    GEMFILE = %w[Gemfile Gemfile.lock gem.deps.rb  
     | 
| 
      
 7 
     | 
    
         
            +
                    GEMFILE = %w[Gemfile Gemfile.lock gem.deps.rb Isolate].freeze
         
     | 
| 
       8 
8 
     | 
    
         
             
                    DIR_RUBY = (GEMFILE + Rake::Application::DEFAULT_RAKEFILES + ['README.rdoc']).freeze
         
     | 
| 
       9 
9 
     | 
    
         
             
                    OPT_RUBY = {
         
     | 
| 
       10 
     | 
    
         
            -
                      ruby: %w[0=im? a c  
     | 
| 
       11 
     | 
    
         
            -
                                
     | 
| 
      
 10 
     | 
    
         
            +
                      ruby: %w[0=im? a c e=q E=bm F=qm i=bm? I=pm l n p r=bm s S w W=bm? x=pm? d|debug jit rjit v|verbose y|yydebug
         
     | 
| 
      
 11 
     | 
    
         
            +
                               backtrace-limit=i crash-report=q disable=q dump=q enable=q encoding=b external-encoding=b
         
     | 
| 
       12 
12 
     | 
    
         
             
                               internal-encoding=b parser=b].freeze,
         
     | 
| 
       13 
     | 
    
         
            -
                      rake: %w[A|all B|build-all comments n|dry-run m|multitask P|prereqs q|quiet 
     | 
| 
       14 
     | 
    
         
            -
                               N|no-search G|no-system nosearch nosystem rules s|silent g|system 
     | 
| 
       15 
     | 
    
         
            -
                               D|describe=q? e|execute=q E|execute-continue=q  
     | 
| 
       16 
     | 
    
         
            -
                               R|rakelib=p rakelibdir=p r|require=b suppress-backtrace=q T|tasks=q? t|trace=b? 
     | 
| 
      
 13 
     | 
    
         
            +
                      rake: %w[A|all B|build-all comments n|dry-run p|execute-print=q m|multitask P|prereqs q|quiet
         
     | 
| 
      
 14 
     | 
    
         
            +
                               X|no-deprecation-warnings N|no-search G|no-system nosearch nosystem rules s|silent g|system
         
     | 
| 
      
 15 
     | 
    
         
            +
                               v|verbose backtrace=b? D|describe=q? e|execute=q E|execute-continue=q job-stats=b? j|jobs=i?
         
     | 
| 
      
 16 
     | 
    
         
            +
                               I|libdir=p R|rakelib=p rakelibdir=p r|require=b suppress-backtrace=q T|tasks=q? t|trace=b?
         
     | 
| 
      
 17 
     | 
    
         
            +
                               W|where=q?].freeze,
         
     | 
| 
       17 
18 
     | 
    
         
             
                      irb: %w[d f U w E=b I=p r=b W=im? autocomplete colorize echo echo-on-assignment extra-doc-dir inf-ruby-mode
         
     | 
| 
       18 
19 
     | 
    
         
             
                              inspect multiline no-pager noautocomplete nocolorize noecho noecho-on-assignment noinspect
         
     | 
| 
       19 
20 
     | 
    
         
             
                              nomultiline noprompt noscript nosingleline noverbose regexp-completor sample-book-mode script
         
     | 
| 
         @@ -21,41 +22,38 @@ module Squared 
     | 
|
| 
       21 
22 
     | 
    
         
             
                              back-trace-limit=i context-mode=i prompt=b prompt-mode=b].freeze
         
     | 
| 
       22 
23 
     | 
    
         
             
                    }.freeze
         
     | 
| 
       23 
24 
     | 
    
         
             
                    OPT_BUNDLE = {
         
     | 
| 
       24 
     | 
    
         
            -
                      common: %w[no-color V|verbose  
     | 
| 
      
 25 
     | 
    
         
            +
                      common: %w[no-color V|verbose retry=i].freeze,
         
     | 
| 
       25 
26 
     | 
    
         
             
                      install: %w[frozen no-cache no-prune system binstubs=p? path=p standalone=q? target-rbconfig=p trust-policy=b
         
     | 
| 
       26 
27 
     | 
    
         
             
                                  with=q without=q].freeze,
         
     | 
| 
       27 
     | 
    
         
            -
                      install_base: %w[ 
     | 
| 
       28 
     | 
    
         
            -
                      update: %w[ 
     | 
| 
      
 28 
     | 
    
         
            +
                      install_base: %w[full-index quiet retry gemfile=p j|jobs=i].freeze,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      update: %w[conservative local pre redownload ruby strict bundler=b? g|group=q source=b].freeze,
         
     | 
| 
       29 
30 
     | 
    
         
             
                      outdated: %w[filter-major filter-minor filter-patch groups local parseable pre only-explicit strict
         
     | 
| 
       30 
     | 
    
         
            -
                                   update-strict group=q source=b].freeze,
         
     | 
| 
      
 31 
     | 
    
         
            +
                                   update-strict g|group=q source=b].freeze,
         
     | 
| 
       31 
32 
     | 
    
         
             
                      exec: %w[gemfile=p].freeze,
         
     | 
| 
       32 
     | 
    
         
            -
                      cache: %w[all 
     | 
| 
       33 
     | 
    
         
            -
                      check: %w[dry-run gemfile=p 
     | 
| 
      
 33 
     | 
    
         
            +
                      cache: %w[all-platforms frozen no-install no-prune quiet cache-path=p gemfile=p path=p].freeze,
         
     | 
| 
      
 34 
     | 
    
         
            +
                      check: %w[dry-run gemfile=p].freeze
         
     | 
| 
       34 
35 
     | 
    
         
             
                    }.freeze
         
     | 
| 
       35 
36 
     | 
    
         
             
                    OPT_GEM = {
         
     | 
| 
       36 
37 
     | 
    
         
             
                      common: %w[backtrace debug q|quiet no-verbose norc silent V|verbose config-file=p].freeze,
         
     | 
| 
       37 
     | 
    
         
            -
                      install: %w[version= 
     | 
| 
       38 
     | 
    
         
            -
                      install_base: %w[ 
     | 
| 
       39 
     | 
    
         
            -
                                       ignore-dependencies l|local N|no-document r|remote vendor n|bindir=p build-root=p
         
     | 
| 
       40 
     | 
    
         
            -
                                        
     | 
| 
       41 
     | 
    
         
            -
                                        
     | 
| 
      
 38 
     | 
    
         
            +
                      install: %w[version=b].freeze,
         
     | 
| 
      
 39 
     | 
    
         
            +
                      install_base: %w[f b|both clear-sources conservative default development development-all E|explain
         
     | 
| 
      
 40 
     | 
    
         
            +
                                       ignore-dependencies l|local N|no-document r|remote w|vendor n|bindir=p build-root=p
         
     | 
| 
      
 41 
     | 
    
         
            +
                                       bulk-threshold=i document=b? g|file=p? p|http-proxy=q i|install-dir=p platform=q s|source=q
         
     | 
| 
      
 42 
     | 
    
         
            +
                                       target-rbconfig=p? P|trust-policy=b without=b].freeze,
         
     | 
| 
       42 
43 
     | 
    
         
             
                      update: %w[system=b?].freeze,
         
     | 
| 
       43 
     | 
    
         
            -
                      uninstall: %w[a D I x vendor n|bindir=p i|install-dir=p platform=b v|version= 
     | 
| 
       44 
     | 
    
         
            -
                      outdated: %w[b|both clear-sources l|local r|remote B|bulk-threshold=i p|http-proxy=q? platform=q
         
     | 
| 
      
 44 
     | 
    
         
            +
                      uninstall: %w[a D I x vendor n|bindir=p i|install-dir=p platform=b v|version=b].freeze,
         
     | 
| 
      
 45 
     | 
    
         
            +
                      outdated: %w[b|both clear-sources l|local no-http-proxy r|remote B|bulk-threshold=i p|http-proxy=q? platform=q
         
     | 
| 
       45 
46 
     | 
    
         
             
                                   source=q].freeze,
         
     | 
| 
       46 
     | 
    
         
            -
                      push: %w[attestation=p host=q p|http-proxy=q?  
     | 
| 
       47 
     | 
    
         
            -
                      build: %w[ 
     | 
| 
       48 
     | 
    
         
            -
                      exec: %w[conservative g|gem= 
     | 
| 
       49 
     | 
    
         
            -
                      pristine: %w[ 
     | 
| 
       50 
     | 
    
         
            -
                                   v|version= 
     | 
| 
      
 47 
     | 
    
         
            +
                      push: %w[no-http-proxy attestation=p host=q p|http-proxy=q? key=b otp=b].freeze,
         
     | 
| 
      
 48 
     | 
    
         
            +
                      build: %w[force strict o|output=p platform=q].freeze,
         
     | 
| 
      
 49 
     | 
    
         
            +
                      exec: %w[conservative no-prerelease prerelease g|gem=v version=b].freeze,
         
     | 
| 
      
 50 
     | 
    
         
            +
                      pristine: %w[all only-executables only-missing-extensions only-plugins n|bindir=p i|install-dir=p skip=b
         
     | 
| 
      
 51 
     | 
    
         
            +
                                   v|version=b].freeze,
         
     | 
| 
       51 
52 
     | 
    
         
             
                      no: {
         
     | 
| 
       52 
53 
     | 
    
         
             
                        install: %w[env-shebang force format-executable http-proxy lock minimal-deps post-install-message prerelease
         
     | 
| 
       53 
54 
     | 
    
         
             
                                    suggestions user-install wrappers].freeze,
         
     | 
| 
       54 
55 
     | 
    
         
             
                        uninstall: %w[abort-on-dependent all check-development executables force format-executable
         
     | 
| 
       55 
56 
     | 
    
         
             
                                      ignore-dependencies user-install].freeze,
         
     | 
| 
       56 
     | 
    
         
            -
                        outdated: %w[http-proxy].freeze,
         
     | 
| 
       57 
     | 
    
         
            -
                        push: %w[http-proxy].freeze,
         
     | 
| 
       58 
     | 
    
         
            -
                        exec: %w[prerelease].freeze,
         
     | 
| 
       59 
57 
     | 
    
         
             
                        pristine: %w[env-shebang extensions].freeze
         
     | 
| 
       60 
58 
     | 
    
         
             
                      }.freeze
         
     | 
| 
       61 
59 
     | 
    
         
             
                    }.freeze
         
     | 
| 
         @@ -69,7 +67,7 @@ module Squared 
     | 
|
| 
       69 
67 
     | 
    
         
             
                      end
         
     | 
| 
       70 
68 
     | 
    
         | 
| 
       71 
69 
     | 
    
         
             
                      def bannerargs
         
     | 
| 
       72 
     | 
    
         
            -
                         
     | 
| 
      
 70 
     | 
    
         
            +
                        [:dependfile].freeze
         
     | 
| 
       73 
71 
     | 
    
         
             
                      end
         
     | 
| 
       74 
72 
     | 
    
         | 
| 
       75 
73 
     | 
    
         
             
                      def config?(val)
         
     | 
| 
         @@ -83,7 +81,7 @@ module Squared 
     | 
|
| 
       83 
81 
     | 
    
         
             
                      'install' => %i[redownload local prefer-local].freeze,
         
     | 
| 
       84 
82 
     | 
    
         
             
                      'update' => %i[patch minor major all].freeze,
         
     | 
| 
       85 
83 
     | 
    
         
             
                      'outdated' => %i[patch minor major].freeze,
         
     | 
| 
       86 
     | 
    
         
            -
                      'gem' => %i[install uninstall update pristine outdated build  
     | 
| 
      
 84 
     | 
    
         
            +
                      'gem' => %i[install uninstall update pristine outdated push build exec].freeze,
         
     | 
| 
       87 
85 
     | 
    
         
             
                      'ruby' => %i[file script version].freeze,
         
     | 
| 
       88 
86 
     | 
    
         
             
                      'exec' => nil,
         
     | 
| 
       89 
87 
     | 
    
         
             
                      'cache' => nil,
         
     | 
| 
         @@ -93,7 +91,7 @@ module Squared 
     | 
|
| 
       93 
91 
     | 
    
         
             
                      'irb' => nil
         
     | 
| 
       94 
92 
     | 
    
         
             
                    })
         
     | 
| 
       95 
93 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
                    def initialize(*, autodetect: false,  
     | 
| 
      
 94 
     | 
    
         
            +
                    def initialize(*, autodetect: false, **kwargs)
         
     | 
| 
       97 
95 
     | 
    
         
             
                      super
         
     | 
| 
       98 
96 
     | 
    
         
             
                      if @pass.include?(Ruby.ref)
         
     | 
| 
       99 
97 
     | 
    
         
             
                        initialize_ref Ruby.ref
         
     | 
| 
         @@ -104,15 +102,11 @@ module Squared 
     | 
|
| 
       104 
102 
     | 
    
         
             
                      end
         
     | 
| 
       105 
103 
     | 
    
         
             
                      dependfile_set GEMFILE
         
     | 
| 
       106 
104 
     | 
    
         
             
                      @autodetect = autodetect
         
     | 
| 
       107 
     | 
    
         
            -
                      @ 
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                                 elsif gemspec
         
     | 
| 
       110 
     | 
    
         
            -
                                   basepath(gemspec.include?('.') ? gemspec : "#{gemspec}.gemspec")
         
     | 
| 
       111 
     | 
    
         
            -
                                 end
         
     | 
| 
       112 
     | 
    
         
            -
                      return if !@output[0].nil? || !@copy.nil? || version || @autodetect || !rakefile
         
     | 
| 
      
 105 
     | 
    
         
            +
                      @rakelist = nil
         
     | 
| 
      
 106 
     | 
    
         
            +
                      return if !@output[0].nil? || !@copy.nil? || @version || @autodetect || (file = rakefile).nil?
         
     | 
| 
       113 
107 
     | 
    
         | 
| 
       114 
108 
     | 
    
         
             
                      begin
         
     | 
| 
       115 
     | 
    
         
            -
                        File.foreach( 
     | 
| 
      
 109 
     | 
    
         
            +
                        File.foreach(file) do |line|
         
     | 
| 
       116 
110 
     | 
    
         
             
                          next unless line.match?(%r{\brequire\s+(["'])bundler/gem_tasks\1})
         
     | 
| 
       117 
111 
     | 
    
         | 
| 
       118 
112 
     | 
    
         
             
                          cmd = bundle_output('exec rake').to_s
         
     | 
| 
         @@ -132,59 +126,54 @@ module Squared 
     | 
|
| 
       132 
126 
     | 
    
         | 
| 
       133 
127 
     | 
    
         
             
                    def populate(*, **)
         
     | 
| 
       134 
128 
     | 
    
         
             
                      super
         
     | 
| 
       135 
     | 
    
         
            -
                      return unless  
     | 
| 
      
 129 
     | 
    
         
            +
                      return unless outdated? && ref?(Ruby.ref)
         
     | 
| 
       136 
130 
     | 
    
         | 
| 
       137 
131 
     | 
    
         
             
                      namespace name do
         
     | 
| 
       138 
132 
     | 
    
         
             
                        Ruby.subtasks do |action, flags|
         
     | 
| 
       139 
     | 
    
         
            -
                          next if  
     | 
| 
      
 133 
     | 
    
         
            +
                          next if @pass.include?(action)
         
     | 
| 
       140 
134 
     | 
    
         | 
| 
       141 
135 
     | 
    
         
             
                          if flags.nil?
         
     | 
| 
       142 
136 
     | 
    
         
             
                            case action
         
     | 
| 
       143 
137 
     | 
    
         
             
                            when 'rake'
         
     | 
| 
       144 
138 
     | 
    
         
             
                              next unless rakefile
         
     | 
| 
       145 
139 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
                              format_desc action, nil,  
     | 
| 
      
 140 
     | 
    
         
            +
                              format_desc action, nil, 'tasks*,opts*|^index|#,pattern*'
         
     | 
| 
       147 
141 
     | 
    
         
             
                              task action, [:command] do |_, args|
         
     | 
| 
       148 
142 
     | 
    
         
             
                                if args.command == '#'
         
     | 
| 
       149 
     | 
    
         
            -
                                  format_list( 
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
                                 
     | 
| 
       152 
     | 
    
         
            -
                                   
     | 
| 
       153 
     | 
    
         
            -
                                  if  
     | 
| 
       154 
     | 
    
         
            -
                                     
     | 
| 
      
 143 
     | 
    
         
            +
                                  format_list(read_rakefile, 'rake[^N]', 'tasks', grep: args.extras, from: rakefile.to_s,
         
     | 
| 
      
 144 
     | 
    
         
            +
                                                                                  each: ->(val) { val[0] + val[1].to_s })
         
     | 
| 
      
 145 
     | 
    
         
            +
                                elsif (n, opts = indexitem(args.command))
         
     | 
| 
      
 146 
     | 
    
         
            +
                                  list = read_rakefile
         
     | 
| 
      
 147 
     | 
    
         
            +
                                  if (item = list[n - 1])
         
     | 
| 
      
 148 
     | 
    
         
            +
                                    cmd = opts ? "#{opts} #{item.first}" : item.first
         
     | 
| 
      
 149 
     | 
    
         
            +
                                  elsif exception
         
     | 
| 
      
 150 
     | 
    
         
            +
                                    indexerror n, list
         
     | 
| 
       155 
151 
     | 
    
         
             
                                  else
         
     | 
| 
       156 
     | 
    
         
            -
                                     
     | 
| 
       157 
     | 
    
         
            -
                                     
     | 
| 
       158 
     | 
    
         
            -
                                      if (item = tasks[n - 1])
         
     | 
| 
       159 
     | 
    
         
            -
                                        cmd = pre ? "#{pre} #{item.first}" : item.first
         
     | 
| 
       160 
     | 
    
         
            -
                                      elsif exception
         
     | 
| 
       161 
     | 
    
         
            -
                                        indexerror n, tasks
         
     | 
| 
       162 
     | 
    
         
            -
                                      else
         
     | 
| 
       163 
     | 
    
         
            -
                                        log.warn "rake task #{n} of #{tasks.size} (out of range)"
         
     | 
| 
       164 
     | 
    
         
            -
                                        next
         
     | 
| 
       165 
     | 
    
         
            -
                                      end
         
     | 
| 
       166 
     | 
    
         
            -
                                      if opts.empty?
         
     | 
| 
       167 
     | 
    
         
            -
                                        rake cmd
         
     | 
| 
       168 
     | 
    
         
            -
                                      else
         
     | 
| 
       169 
     | 
    
         
            -
                                        rake(cmd + shell_escape("[#{opts.join(',')}]"))
         
     | 
| 
       170 
     | 
    
         
            -
                                        opts.clear
         
     | 
| 
       171 
     | 
    
         
            -
                                      end
         
     | 
| 
       172 
     | 
    
         
            -
                                    end
         
     | 
| 
      
 152 
     | 
    
         
            +
                                    log.warn "rake task #{n} of #{list.size} (out of range)"
         
     | 
| 
      
 153 
     | 
    
         
            +
                                    next
         
     | 
| 
       173 
154 
     | 
    
         
             
                                  end
         
     | 
| 
      
 155 
     | 
    
         
            +
                                  rake(args.extras.empty? ? cmd : cmd + shell_escape("[#{args.extras.join(',')}]"))
         
     | 
| 
      
 156 
     | 
    
         
            +
                                else
         
     | 
| 
      
 157 
     | 
    
         
            +
                                  rake(opts: args.to_a)
         
     | 
| 
       174 
158 
     | 
    
         
             
                                end
         
     | 
| 
       175 
159 
     | 
    
         
             
                              end
         
     | 
| 
       176 
160 
     | 
    
         
             
                            when 'irb'
         
     | 
| 
      
 161 
     | 
    
         
            +
                              next unless (spec = basepath("#{project}.gemspec") || basepath("#{name}.gemspec"))
         
     | 
| 
      
 162 
     | 
    
         
            +
                              next unless basepath('lib').join("#{gemname = stripext(spec)}.rb").exist?
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
       177 
164 
     | 
    
         
             
                              format_desc action, nil, 'opts*,args*|:'
         
     | 
| 
       178 
165 
     | 
    
         
             
                              task action do |_, args|
         
     | 
| 
       179 
166 
     | 
    
         
             
                                args = args.to_a
         
     | 
| 
       180 
     | 
    
         
            -
                                 
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
      
 167 
     | 
    
         
            +
                                if args.last == ':'
         
     | 
| 
      
 168 
     | 
    
         
            +
                                  args.pop
         
     | 
| 
      
 169 
     | 
    
         
            +
                                  load = readline('Enter file and arguments', force: false)
         
     | 
| 
      
 170 
     | 
    
         
            +
                                end
         
     | 
| 
      
 171 
     | 
    
         
            +
                                irb(gemname, args, load: load)
         
     | 
| 
       182 
172 
     | 
    
         
             
                              end
         
     | 
| 
       183 
173 
     | 
    
         
             
                            else
         
     | 
| 
       184 
     | 
    
         
            -
                              format_desc(action, nil,  
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
                                                                        end)
         
     | 
| 
      
 174 
     | 
    
         
            +
                              format_desc(action, nil, OPT_BUNDLE[action.to_sym], after: case action
         
     | 
| 
      
 175 
     | 
    
         
            +
                                                                                         when 'cache', 'check' then nil
         
     | 
| 
      
 176 
     | 
    
         
            +
                                                                                         else 'command+' end)
         
     | 
| 
       188 
177 
     | 
    
         
             
                              task action do |_, args|
         
     | 
| 
       189 
178 
     | 
    
         
             
                                bundle(action, *args.to_a)
         
     | 
| 
       190 
179 
     | 
    
         
             
                              end
         
     | 
| 
         @@ -206,24 +195,20 @@ module Squared 
     | 
|
| 
       206 
195 
     | 
    
         
             
                                      case (filter = args.semver)
         
     | 
| 
       207 
196 
     | 
    
         
             
                                      when 'major', 'minor', 'patch', 'interactive', 'i'
         
     | 
| 
       208 
197 
     | 
    
         
             
                                        filter = 'interactive' if filter == 'i'
         
     | 
| 
       209 
     | 
    
         
            -
                                        args = args. 
     | 
| 
      
 198 
     | 
    
         
            +
                                        args = args.to_a.drop(1)
         
     | 
| 
       210 
199 
     | 
    
         
             
                                      else
         
     | 
| 
       211 
200 
     | 
    
         
             
                                        filter = nil
         
     | 
| 
       212 
201 
     | 
    
         
             
                                        args = args.to_a
         
     | 
| 
       213 
202 
     | 
    
         
             
                                      end
         
     | 
| 
       214 
203 
     | 
    
         
             
                                      gem!(flag, args, filter: filter)
         
     | 
| 
       215 
204 
     | 
    
         
             
                                    end
         
     | 
| 
       216 
     | 
    
         
            -
                                  when :build, :push, :exec 
     | 
| 
       217 
     | 
    
         
            -
                                    format_desc(action, flag, 'opts*',  
     | 
| 
       218 
     | 
    
         
            -
                                                                              when :exec then 'command,args*'
         
     | 
| 
       219 
     | 
    
         
            -
                                                                              when :push then 'file?'
         
     | 
| 
       220 
     | 
    
         
            -
                                                                              when :update then 'name*'
         
     | 
| 
       221 
     | 
    
         
            -
                                                                              end)
         
     | 
| 
      
 205 
     | 
    
         
            +
                                  when :build, :push, :exec
         
     | 
| 
      
 206 
     | 
    
         
            +
                                    format_desc(action, flag, 'opts*', before: flag == :exec ? 'command,args*' : nil)
         
     | 
| 
       222 
207 
     | 
    
         
             
                                    task flag do |_, args|
         
     | 
| 
       223 
208 
     | 
    
         
             
                                      gem! flag, args.to_a
         
     | 
| 
       224 
209 
     | 
    
         
             
                                    end
         
     | 
| 
       225 
210 
     | 
    
         
             
                                  else
         
     | 
| 
       226 
     | 
    
         
            -
                                    format_desc 
     | 
| 
      
 211 
     | 
    
         
            +
                                    format_desc action, flag, "opts*,name+#{flag == :pristine ? '|name?@version' : ''}"
         
     | 
| 
       227 
212 
     | 
    
         
             
                                    task flag do |_, args|
         
     | 
| 
       228 
213 
     | 
    
         
             
                                      args = param_guard(action, flag, args: args.to_a)
         
     | 
| 
       229 
214 
     | 
    
         
             
                                      gem! flag, args
         
     | 
| 
         @@ -235,26 +220,22 @@ module Squared 
     | 
|
| 
       235 
220 
     | 
    
         
             
                                    format_desc action, flag, 'path,opts*,args*'
         
     | 
| 
       236 
221 
     | 
    
         
             
                                    task flag, [:rb] do |_, args|
         
     | 
| 
       237 
222 
     | 
    
         
             
                                      file = args.rb
         
     | 
| 
       238 
     | 
    
         
            -
                                       
     | 
| 
       239 
     | 
    
         
            -
                                       
     | 
| 
       240 
     | 
    
         
            -
             
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
       245 
     | 
    
         
            -
             
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
     | 
    
         
            -
             
     | 
| 
       249 
     | 
    
         
            -
             
     | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
       251 
     | 
    
         
            -
                                                 c
         
     | 
| 
       252 
     | 
    
         
            -
                                               end
         
     | 
| 
       253 
     | 
    
         
            -
                                             end
         
     | 
| 
       254 
     | 
    
         
            -
                                      ruby(flag, opts, file: file, args: args)
         
     | 
| 
      
 223 
     | 
    
         
            +
                                      args = args.to_a.drop(1)
         
     | 
| 
      
 224 
     | 
    
         
            +
                                      unless file && !file.include?('*')
         
     | 
| 
      
 225 
     | 
    
         
            +
                                        values = ['Arguments']
         
     | 
| 
      
 226 
     | 
    
         
            +
                                        values.prepend('Options') unless file
         
     | 
| 
      
 227 
     | 
    
         
            +
                                        file, opts, extra = choice_index('Select a file', Dir.glob(file || '*.rb', base: path),
         
     | 
| 
      
 228 
     | 
    
         
            +
                                                                         values: values, force: true, series: !args.include?('v'))
         
     | 
| 
      
 229 
     | 
    
         
            +
                                        if file
         
     | 
| 
      
 230 
     | 
    
         
            +
                                          extra = opts
         
     | 
| 
      
 231 
     | 
    
         
            +
                                        else
         
     | 
| 
      
 232 
     | 
    
         
            +
                                          args.concat(OptionPartition.strip(opts))
         
     | 
| 
      
 233 
     | 
    
         
            +
                                        end
         
     | 
| 
      
 234 
     | 
    
         
            +
                                      end
         
     | 
| 
      
 235 
     | 
    
         
            +
                                      ruby(flag, args, file: file, args: extra)
         
     | 
| 
       255 
236 
     | 
    
         
             
                                    end
         
     | 
| 
       256 
237 
     | 
    
         
             
                                  when :script
         
     | 
| 
       257 
     | 
    
         
            -
                                    format_desc action, flag, 'opts*'
         
     | 
| 
      
 238 
     | 
    
         
            +
                                    format_desc action, flag, 'opts*,args*'
         
     | 
| 
       258 
239 
     | 
    
         
             
                                    task flag do |_, args|
         
     | 
| 
       259 
240 
     | 
    
         
             
                                      command = ENV['RUBY_E'] || readline('Enter script', force: true, multiline: ['##', ';'])
         
     | 
| 
       260 
241 
     | 
    
         
             
                                      ruby(flag, args.to_a, command: command)
         
     | 
| 
         @@ -287,7 +268,7 @@ module Squared 
     | 
|
| 
       287 
268 
     | 
    
         
             
                      end
         
     | 
| 
       288 
269 
     | 
    
         
             
                    end
         
     | 
| 
       289 
270 
     | 
    
         | 
| 
       290 
     | 
    
         
            -
                    def copy(from:  
     | 
| 
      
 271 
     | 
    
         
            +
                    def copy(from: 'lib', into: @gemdir, override: false, **kwargs)
         
     | 
| 
       291 
272 
     | 
    
         
             
                      glob = kwargs[:include]
         
     | 
| 
       292 
273 
     | 
    
         
             
                      pass = kwargs[:exclude]
         
     | 
| 
       293 
274 
     | 
    
         
             
                      if @copy && !override
         
     | 
| 
         @@ -305,16 +286,18 @@ module Squared 
     | 
|
| 
       305 
286 
     | 
    
         
             
                      on :first, :copy
         
     | 
| 
       306 
287 
     | 
    
         
             
                      dest = Pathname.new(into).realpath
         
     | 
| 
       307 
288 
     | 
    
         
             
                      print_item unless @output[0] || task_invoked?(/^copy(?::#{Ruby.ref}|$)/)
         
     | 
| 
       308 
     | 
    
         
            -
                      glob =  
     | 
| 
       309 
     | 
    
         
            -
                       
     | 
| 
       310 
     | 
    
         
            -
                        a =  
     | 
| 
      
 289 
     | 
    
         
            +
                      glob = as_a(glob || '**/*')
         
     | 
| 
      
 290 
     | 
    
         
            +
                      as_a(from).each_with_index do |val, i|
         
     | 
| 
      
 291 
     | 
    
         
            +
                        a = path + val
         
     | 
| 
       311 
292 
     | 
    
         
             
                        b = dest + val
         
     | 
| 
       312 
293 
     | 
    
         
             
                        c = glob[i] || glob.first
         
     | 
| 
       313 
294 
     | 
    
         
             
                        log.info "cp #{a + c} #{b}"
         
     | 
| 
       314 
295 
     | 
    
         
             
                        begin
         
     | 
| 
       315 
     | 
    
         
            -
                          copy_dir(a, b, c, pass: pass, verbose:  
     | 
| 
      
 296 
     | 
    
         
            +
                          copy_dir(a, b, c, pass: pass, verbose: verbose)
         
     | 
| 
       316 
297 
     | 
    
         
             
                        rescue StandardError => e
         
     | 
| 
       317 
     | 
    
         
            -
                           
     | 
| 
      
 298 
     | 
    
         
            +
                          log.error e
         
     | 
| 
      
 299 
     | 
    
         
            +
                          ret = on(:error, :copy, e)
         
     | 
| 
      
 300 
     | 
    
         
            +
                          raise if exception && ret != true
         
     | 
| 
       318 
301 
     | 
    
         
             
                        end
         
     | 
| 
       319 
302 
     | 
    
         
             
                      end
         
     | 
| 
       320 
303 
     | 
    
         
             
                      on :last, :copy
         
     | 
| 
         @@ -328,7 +311,7 @@ module Squared 
     | 
|
| 
       328 
311 
     | 
    
         
             
                      end
         
     | 
| 
       329 
312 
     | 
    
         
             
                      log.info cmd.to_s
         
     | 
| 
       330 
313 
     | 
    
         
             
                      on :first, :outdated
         
     | 
| 
       331 
     | 
    
         
            -
                      banner = format_banner 
     | 
| 
      
 314 
     | 
    
         
            +
                      banner = format_banner cmd.to_s
         
     | 
| 
       332 
315 
     | 
    
         
             
                      print_item banner if sync
         
     | 
| 
       333 
316 
     | 
    
         
             
                      pwd_set(from: :outdated) do
         
     | 
| 
       334 
317 
     | 
    
         
             
                        start = 0
         
     | 
| 
         @@ -419,7 +402,7 @@ module Squared 
     | 
|
| 
       419 
402 
     | 
    
         
             
                        end
         
     | 
| 
       420 
403 
     | 
    
         
             
                        if found > 0
         
     | 
| 
       421 
404 
     | 
    
         
             
                          begin
         
     | 
| 
       422 
     | 
    
         
            -
                            if major == 0 && dependfile.read =~ /\b(?:source\s+(["'])( 
     | 
| 
      
 405 
     | 
    
         
            +
                            if major == 0 && dependfile.read =~ /\b(?:source\s+(["'])((?~\1))\1|remote:\s+(\S+))/
         
     | 
| 
       423 
406 
     | 
    
         
             
                              status = ($2 || $3).chomp('/')
         
     | 
| 
       424 
407 
     | 
    
         
             
                              right = true
         
     | 
| 
       425 
408 
     | 
    
         
             
                            end
         
     | 
| 
         @@ -438,23 +421,14 @@ module Squared 
     | 
|
| 
       438 
421 
     | 
    
         | 
| 
       439 
422 
     | 
    
         
             
                    def install(flag, opts = [])
         
     | 
| 
       440 
423 
     | 
    
         
             
                      bundle_session 'install', "--#{flag}"
         
     | 
| 
       441 
     | 
    
         
            -
                       
     | 
| 
       442 
     | 
    
         
            -
                      if op.arg?('force')
         
     | 
| 
       443 
     | 
    
         
            -
                        op.delete('--force')
         
     | 
| 
       444 
     | 
    
         
            -
                        if flag != :redownload
         
     | 
| 
       445 
     | 
    
         
            -
                          op << '--redownload'
         
     | 
| 
       446 
     | 
    
         
            -
                        elsif (lock = basepath('Gemfile.lock')).exist?
         
     | 
| 
       447 
     | 
    
         
            -
                          config = basepath '.bundle', 'config'
         
     | 
| 
       448 
     | 
    
         
            -
                          lock.delete unless config.exist? && config.read.match?(/\bBUNDLE_FROZEN:\s+"true"/)
         
     | 
| 
       449 
     | 
    
         
            -
                        end
         
     | 
| 
       450 
     | 
    
         
            -
                      end
         
     | 
| 
      
 424 
     | 
    
         
            +
                      append_bundle opts, OPT_BUNDLE[:install_base] + OPT_BUNDLE[:install] + OPT_BUNDLE[:common]
         
     | 
| 
       451 
425 
     | 
    
         
             
                      run_rb(from: :install)
         
     | 
| 
       452 
426 
     | 
    
         
             
                    end
         
     | 
| 
       453 
427 
     | 
    
         | 
| 
       454 
428 
     | 
    
         
             
                    def update(flag, opts = [])
         
     | 
| 
       455 
429 
     | 
    
         
             
                      bundle_session 'update', "--#{flag}"
         
     | 
| 
       456 
430 
     | 
    
         
             
                      append_bundle(opts, OPT_BUNDLE[:install_base] + OPT_BUNDLE[:update] + OPT_BUNDLE[:common],
         
     | 
| 
       457 
     | 
    
         
            -
                                    append: flag == :all ? nil : /\A[a-z 
     | 
| 
      
 431 
     | 
    
         
            +
                                    append: flag == :all ? nil : /\A[a-z\-]+=/)
         
     | 
| 
       458 
432 
     | 
    
         
             
                      run_rb(from: :update)
         
     | 
| 
       459 
433 
     | 
    
         
             
                    end
         
     | 
| 
       460 
434 
     | 
    
         | 
| 
         @@ -463,23 +437,23 @@ module Squared 
     | 
|
| 
       463 
437 
     | 
    
         
             
                      when :file, :script
         
     | 
| 
       464 
438 
     | 
    
         
             
                        op = OptionPartition.new(opts, OPT_RUBY[:ruby], ruby_session, project: self, args: true)
         
     | 
| 
       465 
439 
     | 
    
         
             
                        if file
         
     | 
| 
       466 
     | 
    
         
            -
                          op. 
     | 
| 
      
 440 
     | 
    
         
            +
                          op.extras.prepend(shell_quote(path + file))
         
     | 
| 
       467 
441 
     | 
    
         
             
                        elsif command
         
     | 
| 
       468 
442 
     | 
    
         
             
                          op << quote_option('e', command, option: false)
         
     | 
| 
       469 
443 
     | 
    
         
             
                        end
         
     | 
| 
       470 
     | 
    
         
            -
                        op. 
     | 
| 
      
 444 
     | 
    
         
            +
                        op.extras << args if (args = ENV.fetch('RUBY_ARGS', args))
         
     | 
| 
       471 
445 
     | 
    
         
             
                        op.append(delim: true, escape: false, quote: false) unless op.empty?
         
     | 
| 
       472 
446 
     | 
    
         
             
                      when :version
         
     | 
| 
       473 
447 
     | 
    
         
             
                        pwd_set do
         
     | 
| 
       474 
448 
     | 
    
         
             
                          out = []
         
     | 
| 
       475 
449 
     | 
    
         
             
                          [
         
     | 
| 
       476 
     | 
    
         
            -
                            "#{ENV.fetch('RBENV_ROOT', '$HOME/.rbenv')}/bin/rbenv",
         
     | 
| 
       477 
450 
     | 
    
         
             
                            '$HOME/.rvm/bin/rvm',
         
     | 
| 
       478 
     | 
    
         
            -
                            "#{ENV.fetch('ASDF_DATA_DIR', '$HOME/.asdf')}/plugins/ruby/bin/install",
         
     | 
| 
       479 
     | 
    
         
            -
                            '/usr/bin/rbenv',
         
     | 
| 
       480 
451 
     | 
    
         
             
                            '/usr/local/rvm/bin/rvm',
         
     | 
| 
       481 
452 
     | 
    
         
             
                            '/usr/share/rvm/bin/rvm',
         
     | 
| 
      
 453 
     | 
    
         
            +
                            "#{ENV.fetch('RBENV_ROOT', '$HOME/.rbenv')}/bin/rbenv",
         
     | 
| 
      
 454 
     | 
    
         
            +
                            '/usr/bin/rbenv',
         
     | 
| 
       482 
455 
     | 
    
         
             
                            '/usr/local/share/chruby/chruby.sh',
         
     | 
| 
      
 456 
     | 
    
         
            +
                            "#{ENV.fetch('ASDF_DATA_DIR', '$HOME/.asdf')}/plugins/ruby/bin/install",
         
     | 
| 
       483 
457 
     | 
    
         
             
                            ''
         
     | 
| 
       484 
458 
     | 
    
         
             
                          ].each do |val|
         
     | 
| 
       485 
459 
     | 
    
         
             
                            next unless val.empty? || File.exist?(val.sub('$HOME', Dir.home))
         
     | 
| 
         @@ -490,8 +464,9 @@ module Squared 
     | 
|
| 
       490 
464 
     | 
    
         
             
                                             when 'rvm'
         
     | 
| 
       491 
465 
     | 
    
         
             
                                               `rvm current`[/^\S+/, 0]
         
     | 
| 
       492 
466 
     | 
    
         
             
                                             when 'rbenv'
         
     | 
| 
       493 
     | 
    
         
            -
                                                
     | 
| 
       494 
     | 
    
         
            -
             
     | 
| 
      
 467 
     | 
    
         
            +
                                               `rbenv version-name`.yield_self do |name|
         
     | 
| 
      
 468 
     | 
    
         
            +
                                                 name.match?(SEM_VER) ? "ruby #{name}" : name
         
     | 
| 
      
 469 
     | 
    
         
            +
                                               end
         
     | 
| 
       495 
470 
     | 
    
         
             
                                             when 'chruby.sh'
         
     | 
| 
       496 
471 
     | 
    
         
             
                                               chruby = session_output 'source', val
         
     | 
| 
       497 
472 
     | 
    
         
             
                                               `#{chruby.with('ruby --version')}`
         
     | 
| 
         @@ -502,14 +477,12 @@ module Squared 
     | 
|
| 
       502 
477 
     | 
    
         
             
                                               ver = nil
         
     | 
| 
       503 
478 
     | 
    
         
             
                                               `ruby --version`
         
     | 
| 
       504 
479 
     | 
    
         
             
                                             end)
         
     | 
| 
       505 
     | 
    
         
            -
                            break if workspace.windows?
         
     | 
| 
       506 
     | 
    
         
            -
             
     | 
| 
       507 
480 
     | 
    
         
             
                            unless val.empty?
         
     | 
| 
       508 
481 
     | 
    
         
             
                              out << trim.call(case cmd
         
     | 
| 
       509 
482 
     | 
    
         
             
                                               when 'chruby.sh'
         
     | 
| 
       510 
483 
     | 
    
         
             
                                                 `#{chruby.with('chruby --version')}`.sub(':', '')
         
     | 
| 
       511 
484 
     | 
    
         
             
                                               when 'install'
         
     | 
| 
       512 
     | 
    
         
            -
                                                 "asdf #{`asdf version`. 
     | 
| 
      
 485 
     | 
    
         
            +
                                                 "asdf #{`asdf version`.delete_prefix('v')}"
         
     | 
| 
       513 
486 
     | 
    
         
             
                                               else
         
     | 
| 
       514 
487 
     | 
    
         
             
                                                 `#{cmd} --version`
         
     | 
| 
       515 
488 
     | 
    
         
             
                                               end)
         
     | 
| 
         @@ -544,14 +517,16 @@ module Squared 
     | 
|
| 
       544 
517 
     | 
    
         
             
                        end
         
     | 
| 
       545 
518 
     | 
    
         
             
                        return
         
     | 
| 
       546 
519 
     | 
    
         
             
                      end
         
     | 
| 
       547 
     | 
    
         
            -
                      run_rb(banner:  
     | 
| 
      
 520 
     | 
    
         
            +
                      run_rb(banner: op.arg?('v'), from: :"ruby:#{flag}")
         
     | 
| 
       548 
521 
     | 
    
         
             
                    end
         
     | 
| 
       549 
522 
     | 
    
         | 
| 
       550 
523 
     | 
    
         
             
                    def gem!(flag, opts = [], filter: nil)
         
     | 
| 
       551 
524 
     | 
    
         
             
                      cmd = gem_session
         
     | 
| 
       552 
525 
     | 
    
         
             
                      case flag
         
     | 
| 
       553 
526 
     | 
    
         
             
                      when :outdated
         
     | 
| 
       554 
     | 
    
         
            -
                        cmd << gempwd <<  
     | 
| 
      
 527 
     | 
    
         
            +
                        cmd << gempwd << 'outdated'
         
     | 
| 
      
 528 
     | 
    
         
            +
                      when :push
         
     | 
| 
      
 529 
     | 
    
         
            +
                        cmd << 'push' << project
         
     | 
| 
       555 
530 
     | 
    
         
             
                      else
         
     | 
| 
       556 
531 
     | 
    
         
             
                        cmd << flag
         
     | 
| 
       557 
532 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -560,11 +535,19 @@ module Squared 
     | 
|
| 
       560 
535 
     | 
    
         
             
                      case flag
         
     | 
| 
       561 
536 
     | 
    
         
             
                      when :install, :update
         
     | 
| 
       562 
537 
     | 
    
         
             
                        list.concat(OPT_GEM[:install_base])
         
     | 
| 
      
 538 
     | 
    
         
            +
                        first = ['=']
         
     | 
| 
      
 539 
     | 
    
         
            +
                      when :uninstall, :pristine
         
     | 
| 
      
 540 
     | 
    
         
            +
                        first = ['=']
         
     | 
| 
       563 
541 
     | 
    
         
             
                      end
         
     | 
| 
       564 
542 
     | 
    
         
             
                      cmd.merge(preopts)
         
     | 
| 
       565 
     | 
    
         
            -
                      op = OptionPartition.new(opts, list, cmd, project: self, no: OPT_GEM[:no][flag])
         
     | 
| 
      
 543 
     | 
    
         
            +
                      op = OptionPartition.new(opts, list, cmd, project: self, no: OPT_GEM[:no][flag], first: first)
         
     | 
| 
       566 
544 
     | 
    
         
             
                      op.each do |opt|
         
     | 
| 
       567 
     | 
    
         
            -
                        if  
     | 
| 
      
 545 
     | 
    
         
            +
                        if opt =~ op.values
         
     | 
| 
      
 546 
     | 
    
         
            +
                          case $1
         
     | 
| 
      
 547 
     | 
    
         
            +
                          when 'g', 'gem'
         
     | 
| 
      
 548 
     | 
    
         
            +
                            op << (flag == :exec ? shell_option($1, $2) : quote_option($1, path + $2))
         
     | 
| 
      
 549 
     | 
    
         
            +
                          end
         
     | 
| 
      
 550 
     | 
    
         
            +
                        elsif opt.include?('=') && !%i[outdated build push exec].include?(flag)
         
     | 
| 
       568 
551 
     | 
    
         
             
                          op.errors << opt
         
     | 
| 
       569 
552 
     | 
    
         
             
                        else
         
     | 
| 
       570 
553 
     | 
    
         
             
                          op.found << opt
         
     | 
| 
         @@ -573,18 +556,17 @@ module Squared 
     | 
|
| 
       573 
556 
     | 
    
         
             
                      op.swap
         
     | 
| 
       574 
557 
     | 
    
         
             
                      case flag
         
     | 
| 
       575 
558 
     | 
    
         
             
                      when :outdated
         
     | 
| 
      
 559 
     | 
    
         
            +
                        log.info cmd.to_s
         
     | 
| 
       576 
560 
     | 
    
         
             
                        op.clear
         
     | 
| 
       577 
     | 
    
         
            -
                        cmd = cmd.done
         
     | 
| 
       578 
     | 
    
         
            -
                        log.info cmd
         
     | 
| 
       579 
561 
     | 
    
         
             
                        on :first, from
         
     | 
| 
       580 
     | 
    
         
            -
                        print_item format_banner(cmd)
         
     | 
| 
      
 562 
     | 
    
         
            +
                        print_item format_banner(cmd.to_s)
         
     | 
| 
       581 
563 
     | 
    
         
             
                        major = 0
         
     | 
| 
       582 
564 
     | 
    
         
             
                        minor = 0
         
     | 
| 
       583 
565 
     | 
    
         
             
                        patch = 0
         
     | 
| 
       584 
566 
     | 
    
         
             
                        update = []
         
     | 
| 
       585 
     | 
    
         
            -
                        pwd_set(pass: ! 
     | 
| 
      
 567 
     | 
    
         
            +
                        pwd_set(pass: !pwd.nil?, from: from) do
         
     | 
| 
       586 
568 
     | 
    
         
             
                          items = [[%w[Gem Current Latest], nil]]
         
     | 
| 
       587 
     | 
    
         
            -
                          IO.popen(cmd).each do |line|
         
     | 
| 
      
 569 
     | 
    
         
            +
                          IO.popen(cmd.done).each do |line|
         
     | 
| 
       588 
570 
     | 
    
         
             
                            if line =~ /^(\S+) \((\S+) < ([^)]+)\)$/
         
     | 
| 
       589 
571 
     | 
    
         
             
                              cur = semscan $2
         
     | 
| 
       590 
572 
     | 
    
         
             
                              lat = semscan $3
         
     | 
| 
         @@ -659,8 +641,7 @@ module Squared 
     | 
|
| 
       659 
641 
     | 
    
         
             
                                  styles = %i[yellow]
         
     | 
| 
       660 
642 
     | 
    
         
             
                                  pat = pat.last
         
     | 
| 
       661 
643 
     | 
    
         
             
                                end
         
     | 
| 
       662 
     | 
    
         
            -
                                b = b.rjust(e)
         
     | 
| 
       663 
     | 
    
         
            -
                                b = sub_style(b, *colormap(styles), pat: pat, index: 2)
         
     | 
| 
      
 644 
     | 
    
         
            +
                                b = sub_style(b.rjust(e), *colormap(styles), pat: pat, index: 2)
         
     | 
| 
       664 
645 
     | 
    
         
             
                                h = sub_style(c.rjust(f), styles: latest.flatten.compact, pat: pat, index: 2)
         
     | 
| 
       665 
646 
     | 
    
         
             
                                j += 1
         
     | 
| 
       666 
647 
     | 
    
         
             
                                if queue
         
     | 
| 
         @@ -678,15 +659,15 @@ module Squared 
     | 
|
| 
       678 
659 
     | 
    
         
             
                        else
         
     | 
| 
       679 
660 
     | 
    
         
             
                          unless update.empty?
         
     | 
| 
       680 
661 
     | 
    
         
             
                            cmd = gem_output 'update', '-f'
         
     | 
| 
       681 
     | 
    
         
            -
                             
     | 
| 
      
 662 
     | 
    
         
            +
                            option('document', prefix: 'gem', ignore: false) do |val|
         
     | 
| 
       682 
663 
     | 
    
         
             
                              cmd << case val
         
     | 
| 
       683 
664 
     | 
    
         
             
                                     when '0', 'false'
         
     | 
| 
       684 
665 
     | 
    
         
             
                                       '--no-document'
         
     | 
| 
       685 
666 
     | 
    
         
             
                                     else
         
     | 
| 
       686 
     | 
    
         
            -
                                       basic_option 
     | 
| 
      
 667 
     | 
    
         
            +
                                       basic_option 'document', val
         
     | 
| 
       687 
668 
     | 
    
         
             
                                     end
         
     | 
| 
       688 
669 
     | 
    
         
             
                            end
         
     | 
| 
       689 
     | 
    
         
            -
                             
     | 
| 
      
 670 
     | 
    
         
            +
                            option('user-install', prefix: 'gem', ignore: false) do |val|
         
     | 
| 
       690 
671 
     | 
    
         
             
                              cmd << case val
         
     | 
| 
       691 
672 
     | 
    
         
             
                                     when '0', 'false'
         
     | 
| 
       692 
673 
     | 
    
         
             
                                       '--no-user-install'
         
     | 
| 
         @@ -697,84 +678,58 @@ module Squared 
     | 
|
| 
       697 
678 
     | 
    
         
             
                            cmd.merge(update)
         
     | 
| 
       698 
679 
     | 
    
         
             
                            run(cmd, banner: false, from: :'gem:update')
         
     | 
| 
       699 
680 
     | 
    
         
             
                          end
         
     | 
| 
       700 
     | 
    
         
            -
                           
     | 
| 
      
 681 
     | 
    
         
            +
                          unless stdin?
         
     | 
| 
      
 682 
     | 
    
         
            +
                            status = print_footer("major #{major} / minor #{minor} / patch #{patch}", right: true).split("\n")
         
     | 
| 
      
 683 
     | 
    
         
            +
                            status[1] = status[1]
         
     | 
| 
      
 684 
     | 
    
         
            +
                                        .yield_self do |s|
         
     | 
| 
      
 685 
     | 
    
         
            +
                                          sub_style(s, pat: /^( +major )(\d+)(.+)$/, styles: theme[:major], index: 2)
         
     | 
| 
      
 686 
     | 
    
         
            +
                                        end
         
     | 
| 
      
 687 
     | 
    
         
            +
                                        .yield_self do |s|
         
     | 
| 
      
 688 
     | 
    
         
            +
                                          sub_style(s, pat: /^(.+)(minor )(\d+)(.+)$/, styles: theme[:active], index: 3)
         
     | 
| 
      
 689 
     | 
    
         
            +
                                        end
         
     | 
| 
      
 690 
     | 
    
         
            +
                            puts status
         
     | 
| 
      
 691 
     | 
    
         
            +
                          end
         
     | 
| 
       701 
692 
     | 
    
         
             
                        end
         
     | 
| 
       702 
693 
     | 
    
         
             
                        on :last, from
         
     | 
| 
       703 
694 
     | 
    
         
             
                        return
         
     | 
| 
       704 
     | 
    
         
            -
                      when :build
         
     | 
| 
       705 
     | 
    
         
            -
                        if op.empty?
         
     | 
| 
       706 
     | 
    
         
            -
                           
     | 
| 
       707 
     | 
    
         
            -
             
     | 
| 
       708 
     | 
    
         
            -
             
     | 
| 
       709 
     | 
    
         
            -
             
     | 
| 
       710 
     | 
    
         
            -
             
     | 
| 
       711 
     | 
    
         
            -
                         
     | 
| 
       712 
     | 
    
         
            -
             
     | 
| 
       713 
     | 
    
         
            -
             
     | 
| 
       714 
     | 
    
         
            -
                          file = basepath(if (spec = gemspec)
         
     | 
| 
       715 
     | 
    
         
            -
                                            "#{spec.name}-#{spec.version}.gem"
         
     | 
| 
       716 
     | 
    
         
            -
                                          else
         
     | 
| 
       717 
     | 
    
         
            -
                                            gems = Dir.glob(basepath('*.gem')).map { |val| File.basename(val) }
         
     | 
| 
       718 
     | 
    
         
            -
                                            choice_index('Select a file', gems, force: true)
         
     | 
| 
       719 
     | 
    
         
            -
                                          end)
         
     | 
| 
       720 
     | 
    
         
            -
                        else
         
     | 
| 
       721 
     | 
    
         
            -
                          file = op.shift
         
     | 
| 
       722 
     | 
    
         
            -
                          raise_error("unknown args: #{op.join(', ')}", hint: flag) unless op.empty?
         
     | 
| 
      
 695 
     | 
    
         
            +
                      when :build, :push
         
     | 
| 
      
 696 
     | 
    
         
            +
                        if !op.empty?
         
     | 
| 
      
 697 
     | 
    
         
            +
                          if flag == :build && op.size == 1
         
     | 
| 
      
 698 
     | 
    
         
            +
                            op << shell_quote(path + op.first)
         
     | 
| 
      
 699 
     | 
    
         
            +
                          else
         
     | 
| 
      
 700 
     | 
    
         
            +
                            raise_error("unknown args: #{op.join(', ')}", hint: flag)
         
     | 
| 
      
 701 
     | 
    
         
            +
                          end
         
     | 
| 
      
 702 
     | 
    
         
            +
                        elsif flag == :build
         
     | 
| 
      
 703 
     | 
    
         
            +
                          spec = [path + "#{project}.gemspec", path + "#{name}.gemspec", *path.glob('*.gemspec')]
         
     | 
| 
      
 704 
     | 
    
         
            +
                          op << File.basename(spec) if (spec = spec.find { |file| File.exist?(file) })
         
     | 
| 
       723 
705 
     | 
    
         
             
                        end
         
     | 
| 
       724 
     | 
    
         
            -
                        raise_error('gem not found', hint: file) unless op.exist?(file)
         
     | 
| 
       725 
     | 
    
         
            -
                        op.add_path(file)
         
     | 
| 
       726 
     | 
    
         
            -
                        run_rb(from: from, interactive: "Push #{sub_style(gemname, styles: theme[:active])}")
         
     | 
| 
       727 
     | 
    
         
            -
                        return
         
     | 
| 
       728 
706 
     | 
    
         
             
                      when :exec
         
     | 
| 
       729 
     | 
    
         
            -
                         
     | 
| 
       730 
     | 
    
         
            -
             
     | 
| 
       731 
     | 
    
         
            -
             
     | 
| 
       732 
     | 
    
         
            -
                                op << basic_option('gem', gemname)
         
     | 
| 
       733 
     | 
    
         
            -
                                1
         
     | 
| 
       734 
     | 
    
         
            -
                              else
         
     | 
| 
       735 
     | 
    
         
            -
                                op << op.shift
         
     | 
| 
       736 
     | 
    
         
            -
                                0
         
     | 
| 
       737 
     | 
    
         
            -
                              end
         
     | 
| 
       738 
     | 
    
         
            -
                        if (args = command_args(op.extras, min: min, force: min == 1 && op.empty?))
         
     | 
| 
      
 707 
     | 
    
         
            +
                        raise_error('missing command', hint: flag) if op.empty?
         
     | 
| 
      
 708 
     | 
    
         
            +
                        op << basic_option('gem', project) unless op.arg?('g', 'gem')
         
     | 
| 
      
 709 
     | 
    
         
            +
                        if (args = command_args(op.extras))
         
     | 
| 
       739 
710 
     | 
    
         
             
                          op.push(args)
         
     | 
| 
       740 
711 
     | 
    
         
             
                        end
         
     | 
| 
       741 
     | 
    
         
            -
                        op.append(quote: false)
         
     | 
| 
       742 
     | 
    
         
            -
                       
     | 
| 
       743 
     | 
    
         
            -
                         
     | 
| 
       744 
     | 
    
         
            -
             
     | 
| 
       745 
     | 
    
         
            -
             
     | 
| 
       746 
     | 
    
         
            -
                          else
         
     | 
| 
       747 
     | 
    
         
            -
                            op.append
         
     | 
| 
       748 
     | 
    
         
            -
                          end
         
     | 
| 
       749 
     | 
    
         
            -
                        end
         
     | 
| 
       750 
     | 
    
         
            -
                        op.clear(errors: true)
         
     | 
| 
       751 
     | 
    
         
            -
                      when :install, :uninstall, :pristine
         
     | 
| 
       752 
     | 
    
         
            -
                        raise_error('missing gemname', hint: flag) if op.empty?
         
     | 
| 
       753 
     | 
    
         
            -
                        if op.arg?('all')
         
     | 
| 
       754 
     | 
    
         
            -
                          if flag == :pristine
         
     | 
| 
      
 712 
     | 
    
         
            +
                        op.append(delim: true, quote: false)
         
     | 
| 
      
 713 
     | 
    
         
            +
                      else
         
     | 
| 
      
 714 
     | 
    
         
            +
                        raise_error('missing gemname', hint: flag) if op.empty? && !op.arg?('system')
         
     | 
| 
      
 715 
     | 
    
         
            +
                        if flag == :pristine
         
     | 
| 
      
 716 
     | 
    
         
            +
                          if op.arg?('all')
         
     | 
| 
       755 
717 
     | 
    
         
             
                            append_repeat 'skip', op.extras
         
     | 
| 
       756 
     | 
    
         
            -
                            op. 
     | 
| 
       757 
     | 
    
         
            -
                           
     | 
| 
      
 718 
     | 
    
         
            +
                            op.extras.clear
         
     | 
| 
      
 719 
     | 
    
         
            +
                          elsif (n = op.first.index('@'))
         
     | 
| 
      
 720 
     | 
    
         
            +
                            name = op.shift
         
     | 
| 
      
 721 
     | 
    
         
            +
                            if n == 0
         
     | 
| 
      
 722 
     | 
    
         
            +
                              op << project
         
     | 
| 
      
 723 
     | 
    
         
            +
                              ver = name[1..-1]
         
     | 
| 
      
 724 
     | 
    
         
            +
                            else
         
     | 
| 
      
 725 
     | 
    
         
            +
                              op << shell_escape(name[0, n])
         
     | 
| 
      
 726 
     | 
    
         
            +
                              ver = name[n + 1..-1]
         
     | 
| 
      
 727 
     | 
    
         
            +
                            end
         
     | 
| 
      
 728 
     | 
    
         
            +
                            op << shell_option('version', ver)
         
     | 
| 
       758 
729 
     | 
    
         
             
                            op.clear
         
     | 
| 
       759 
730 
     | 
    
         
             
                          end
         
     | 
| 
       760 
     | 
    
         
            -
                        elsif (n = op.index { |val| val.match?(/(\A|[a-z])@\d/) })
         
     | 
| 
       761 
     | 
    
         
            -
                          name = op.delete_at(n)
         
     | 
| 
       762 
     | 
    
         
            -
                          pre, ver = if (n = name.index('@')) == 0
         
     | 
| 
       763 
     | 
    
         
            -
                                       [gemname, name[1..-1]]
         
     | 
| 
       764 
     | 
    
         
            -
                                     else
         
     | 
| 
       765 
     | 
    
         
            -
                                       [name[0, n], name[(n + 1)..-1]]
         
     | 
| 
       766 
     | 
    
         
            -
                                     end
         
     | 
| 
       767 
     | 
    
         
            -
                          op.adjoin(pre, shell_option('version', ver))
         
     | 
| 
       768 
     | 
    
         
            -
                            .clear
         
     | 
| 
       769 
     | 
    
         
            -
                        elsif flag == :install
         
     | 
| 
       770 
     | 
    
         
            -
                          op.append_any
         
     | 
| 
       771 
     | 
    
         
            -
                        else
         
     | 
| 
       772 
     | 
    
         
            -
                          op.append
         
     | 
| 
       773 
731 
     | 
    
         
             
                        end
         
     | 
| 
       774 
     | 
    
         
            -
                        op.clear(errors: true)
         
     | 
| 
       775 
     | 
    
         
            -
                        op << '--' << readline('Enter command [args]', force: true) if flag == :install && op.remove(':')
         
     | 
| 
       776 
     | 
    
         
            -
                      else
         
     | 
| 
       777 
     | 
    
         
            -
                        op.append
         
     | 
| 
      
 732 
     | 
    
         
            +
                        op.append.clear(errors: true)
         
     | 
| 
       778 
733 
     | 
    
         
             
                      end
         
     | 
| 
       779 
734 
     | 
    
         
             
                      run_rb(from: from)
         
     | 
| 
       780 
735 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -784,24 +739,26 @@ module Squared 
     | 
|
| 
       784 
739 
     | 
    
         
             
                      args = case flag
         
     | 
| 
       785 
740 
     | 
    
         
             
                             when 'exec', 'cache', 'check'
         
     | 
| 
       786 
741 
     | 
    
         
             
                               list = OPT_BUNDLE[flag.to_sym] + OPT_BUNDLE[:common]
         
     | 
| 
       787 
     | 
    
         
            -
                               OptionPartition.new(args, list, cmd, project: self, args: flag ==  
     | 
| 
      
 742 
     | 
    
         
            +
                               OptionPartition.new(args, list, cmd, project: self, args: flag == :exec).extras
         
     | 
| 
       788 
743 
     | 
    
         
             
                             else
         
     | 
| 
       789 
744 
     | 
    
         
             
                               args.flatten
         
     | 
| 
       790 
745 
     | 
    
         
             
                             end
         
     | 
| 
       791 
746 
     | 
    
         
             
                      case flag
         
     | 
| 
       792 
747 
     | 
    
         
             
                      when 'exec', 'config'
         
     | 
| 
       793 
     | 
    
         
            -
                         
     | 
| 
       794 
     | 
    
         
            -
             
     | 
| 
      
 748 
     | 
    
         
            +
                        if args.empty?
         
     | 
| 
      
 749 
     | 
    
         
            +
                          cmd << readline('Enter arguments', force: true)
         
     | 
| 
      
 750 
     | 
    
         
            +
                        else
         
     | 
| 
      
 751 
     | 
    
         
            +
                          args << command_args(args)
         
     | 
| 
      
 752 
     | 
    
         
            +
                          cmd.merge(args)
         
     | 
| 
      
 753 
     | 
    
         
            +
                        end
         
     | 
| 
      
 754 
     | 
    
         
            +
                      else
         
     | 
| 
       795 
755 
     | 
    
         
             
                        option_clear args
         
     | 
| 
       796 
     | 
    
         
            -
                        args.clear
         
     | 
| 
       797 
756 
     | 
    
         
             
                      end
         
     | 
| 
       798 
     | 
    
         
            -
                      cmd.merge(args)
         
     | 
| 
       799 
757 
     | 
    
         
             
                      run(from: :"bundle:#{flag}")
         
     | 
| 
       800 
758 
     | 
    
         
             
                    end
         
     | 
| 
       801 
759 
     | 
    
         | 
| 
       802 
760 
     | 
    
         
             
                    def rake(*args, opts: [])
         
     | 
| 
       803 
     | 
    
         
            -
                      op = OptionPartition.new(opts, OPT_RUBY[:rake], [ 
     | 
| 
       804 
     | 
    
         
            -
                                               project: self)
         
     | 
| 
      
 761 
     | 
    
         
            +
                      op = OptionPartition.new(opts, OPT_RUBY[:rake], [quote_option('f', rakefile)], project: self)
         
     | 
| 
       805 
762 
     | 
    
         
             
                      args.concat(op.extras)
         
     | 
| 
       806 
763 
     | 
    
         
             
                      if args.empty?
         
     | 
| 
       807 
764 
     | 
    
         
             
                        args << nil
         
     | 
| 
         @@ -813,14 +770,14 @@ module Squared 
     | 
|
| 
       813 
770 
     | 
    
         
             
                      run_s(args, banner: false, from: :rake)
         
     | 
| 
       814 
771 
     | 
    
         
             
                    end
         
     | 
| 
       815 
772 
     | 
    
         | 
| 
       816 
     | 
    
         
            -
                    def irb(name 
     | 
| 
      
 773 
     | 
    
         
            +
                    def irb(name, opts = [], path: @path + 'lib', load: nil)
         
     | 
| 
       817 
774 
     | 
    
         
             
                      op = OptionPartition.new(opts, OPT_RUBY[:irb], session('irb'), project: self, first: [/\.rb$/])
         
     | 
| 
       818 
     | 
    
         
            -
                      r =  
     | 
| 
       819 
     | 
    
         
            -
                      r  
     | 
| 
      
 775 
     | 
    
         
            +
                      r = as_a name
         
     | 
| 
      
 776 
     | 
    
         
            +
                      r.prepend('bundler/setup') unless load
         
     | 
| 
       820 
777 
     | 
    
         
             
                      r.each { |val| op << shell_option('r', val, merge: true) }
         
     | 
| 
       821 
     | 
    
         
            -
                       
     | 
| 
       822 
     | 
    
         
            -
                      if  
     | 
| 
       823 
     | 
    
         
            -
                        op << '--' <<  
     | 
| 
      
 778 
     | 
    
         
            +
                      as_a(path).each { |val| op << quote_option('I', val, merge: true) }
         
     | 
| 
      
 779 
     | 
    
         
            +
                      if load
         
     | 
| 
      
 780 
     | 
    
         
            +
                        op << '--' << load
         
     | 
| 
       824 
781 
     | 
    
         
             
                        op.clear
         
     | 
| 
       825 
782 
     | 
    
         
             
                      else
         
     | 
| 
       826 
783 
     | 
    
         
             
                        op.append(delim: true)
         
     | 
| 
         @@ -828,29 +785,15 @@ module Squared 
     | 
|
| 
       828 
785 
     | 
    
         
             
                      run(banner: false)
         
     | 
| 
       829 
786 
     | 
    
         
             
                    end
         
     | 
| 
       830 
787 
     | 
    
         | 
| 
       831 
     | 
    
         
            -
                    def gemspec
         
     | 
| 
       832 
     | 
    
         
            -
                      return @gemspec unless @gemspec.nil?
         
     | 
| 
       833 
     | 
    
         
            -
             
     | 
| 
       834 
     | 
    
         
            -
                      @gemspec = if gemfile
         
     | 
| 
       835 
     | 
    
         
            -
                                   Gem::Specification.load(gemfile.to_s) rescue false
         
     | 
| 
       836 
     | 
    
         
            -
                                 else
         
     | 
| 
       837 
     | 
    
         
            -
                                   false
         
     | 
| 
       838 
     | 
    
         
            -
                                 end
         
     | 
| 
       839 
     | 
    
         
            -
                    end
         
     | 
| 
       840 
     | 
    
         
            -
             
     | 
| 
       841 
     | 
    
         
            -
                    def gemname
         
     | 
| 
       842 
     | 
    
         
            -
                      @gemname ||= ((spec = gemspec) ? spec.name : project)
         
     | 
| 
       843 
     | 
    
         
            -
                    end
         
     | 
| 
       844 
     | 
    
         
            -
             
     | 
| 
       845 
788 
     | 
    
         
             
                    def depend?
         
     | 
| 
       846 
789 
     | 
    
         
             
                      @depend != false && (!@depend.nil? || outdated?)
         
     | 
| 
       847 
790 
     | 
    
         
             
                    end
         
     | 
| 
       848 
791 
     | 
    
         | 
| 
       849 
792 
     | 
    
         
             
                    def copy?
         
     | 
| 
       850 
     | 
    
         
            -
                      return true if @copy.is_a?(Hash)  
     | 
| 
      
 793 
     | 
    
         
            +
                      return true if super || (@copy.is_a?(Hash) && copy.fetch(:into, nil))
         
     | 
| 
       851 
794 
     | 
    
         
             
                      return gemdir? if @gemdir
         
     | 
| 
       852 
795 
     | 
    
         | 
| 
       853 
     | 
    
         
            -
                      if version
         
     | 
| 
      
 796 
     | 
    
         
            +
                      if @version
         
     | 
| 
       854 
797 
     | 
    
         
             
                        begin
         
     | 
| 
       855 
798 
     | 
    
         
             
                          case @autodetect
         
     | 
| 
       856 
799 
     | 
    
         
             
                          when 'rvm'
         
     | 
| 
         @@ -875,46 +818,43 @@ module Squared 
     | 
|
| 
       875 
818 
     | 
    
         
             
                      return false unless @autodetect
         
     | 
| 
       876 
819 
     | 
    
         | 
| 
       877 
820 
     | 
    
         
             
                      set = lambda do |val, path|
         
     | 
| 
       878 
     | 
    
         
            -
                         
     | 
| 
       879 
     | 
    
         
            -
             
     | 
| 
       880 
     | 
    
         
            -
                        end
         
     | 
| 
       881 
     | 
    
         
            -
                        self.version = val
         
     | 
| 
      
 821 
     | 
    
         
            +
                        log.warn "using version #{val} (given #{@version})" if @version && @version != val
         
     | 
| 
      
 822 
     | 
    
         
            +
                        @version = val
         
     | 
| 
       882 
823 
     | 
    
         
             
                        @gemdir = Pathname.new(path.strip) + gempath
         
     | 
| 
       883 
824 
     | 
    
         
             
                      end
         
     | 
| 
       884 
     | 
    
         
            -
                      if version
         
     | 
| 
       885 
     | 
    
         
            -
                         
     | 
| 
       886 
     | 
    
         
            -
                        pwd_set(pass: ! 
     | 
| 
       887 
     | 
    
         
            -
                          out = `#{gem_output( 
     | 
| 
       888 
     | 
    
         
            -
                          if out =~ /#{Regexp.escape( 
     | 
| 
      
 825 
     | 
    
         
            +
                      if @version
         
     | 
| 
      
 826 
     | 
    
         
            +
                        pwd = gempwd
         
     | 
| 
      
 827 
     | 
    
         
            +
                        pwd_set(pass: !pwd.nil?) do
         
     | 
| 
      
 828 
     | 
    
         
            +
                          out = `#{gem_output(pwd, 'list --local -d', project)}`
         
     | 
| 
      
 829 
     | 
    
         
            +
                          if out =~ /#{Regexp.escape(project)} \(([^)]+)\)/
         
     | 
| 
       889 
830 
     | 
    
         
             
                            $1.split(/\s*,\s*/)
         
     | 
| 
       890 
     | 
    
         
            -
                              . 
     | 
| 
      
 831 
     | 
    
         
            +
                              .prepend(@version)
         
     | 
| 
       891 
832 
     | 
    
         
             
                              .uniq
         
     | 
| 
       892 
833 
     | 
    
         
             
                              .each do |val|
         
     | 
| 
       893 
834 
     | 
    
         
             
                                next unless out =~ /\(#{Regexp.escape(val)}(?:,[^)]+|\b)\):([^\n]+)/
         
     | 
| 
       894 
835 
     | 
    
         | 
| 
       895 
836 
     | 
    
         
             
                                set.call(val, $1)
         
     | 
| 
       896 
     | 
    
         
            -
                                 
     | 
| 
      
 837 
     | 
    
         
            +
                                break
         
     | 
| 
       897 
838 
     | 
    
         
             
                              end
         
     | 
| 
       898 
839 
     | 
    
         
             
                          end
         
     | 
| 
       899 
840 
     | 
    
         
             
                        end
         
     | 
| 
       900 
     | 
    
         
            -
             
     | 
| 
       901 
     | 
    
         
            -
                       
     | 
| 
      
 841 
     | 
    
         
            +
                      end
         
     | 
| 
      
 842 
     | 
    
         
            +
                      unless @gemdir
         
     | 
| 
       902 
843 
     | 
    
         
             
                        parse = lambda do |path|
         
     | 
| 
       903 
844 
     | 
    
         
             
                          next unless path
         
     | 
| 
       904 
845 
     | 
    
         | 
| 
       905 
     | 
    
         
            -
                          lib = Regexp.new(['', 'gems', "#{ 
     | 
| 
      
 846 
     | 
    
         
            +
                          lib = Regexp.new(['', 'gems', "#{project}-([^#{File::SEPARATOR}]+)", ''].join(File::SEPARATOR))
         
     | 
| 
       906 
847 
     | 
    
         
             
                          if (ver = path[lib, 1]) && (val = path[/\A(.+)#{gempath(ver[1])}/, 1])
         
     | 
| 
       907 
848 
     | 
    
         
             
                            set.call(ver, val)
         
     | 
| 
       908 
849 
     | 
    
         
             
                          end
         
     | 
| 
       909 
850 
     | 
    
         
             
                        end
         
     | 
| 
       910 
851 
     | 
    
         
             
                        if RUBY_VERSION >= '2.6'
         
     | 
| 
       911 
852 
     | 
    
         
             
                          target = RUBY_VERSION.start_with?('2.6') ? RubyVM : $LOAD_PATH
         
     | 
| 
       912 
     | 
    
         
            -
                          parse.call(target.resolve_feature_path( 
     | 
| 
       913 
     | 
    
         
            -
                        end
         
     | 
| 
       914 
     | 
    
         
            -
                        if !@gemdir && !pwd_set { parse.call(`#{bundle_output('show', gemname)}`) }
         
     | 
| 
       915 
     | 
    
         
            -
                          raise_error 'gems directory not found'
         
     | 
| 
      
 853 
     | 
    
         
            +
                          parse.call(target.resolve_feature_path(project)&.last)
         
     | 
| 
       916 
854 
     | 
    
         
             
                        end
         
     | 
| 
      
 855 
     | 
    
         
            +
                        pwd_set { parse.call(`#{bundle_output('show', project)}`) } unless @gemdir
         
     | 
| 
       917 
856 
     | 
    
         
             
                      end
         
     | 
| 
      
 857 
     | 
    
         
            +
                      raise_error('parse failed', hint: @version || 'path') unless @gemdir
         
     | 
| 
       918 
858 
     | 
    
         
             
                    rescue StandardError => e
         
     | 
| 
       919 
859 
     | 
    
         
             
                      log.error e
         
     | 
| 
       920 
860 
     | 
    
         
             
                      @version = nil
         
     | 
| 
         @@ -931,7 +871,7 @@ module Squared 
     | 
|
| 
       931 
871 
     | 
    
         
             
                    private
         
     | 
| 
       932 
872 
     | 
    
         | 
| 
       933 
873 
     | 
    
         
             
                    def run_rb(**kwargs)
         
     | 
| 
       934 
     | 
    
         
            -
                      run(banner: !@session 
     | 
| 
      
 874 
     | 
    
         
            +
                      run(banner: !@session.include?('--quiet'), **kwargs)
         
     | 
| 
       935 
875 
     | 
    
         
             
                    end
         
     | 
| 
       936 
876 
     | 
    
         | 
| 
       937 
877 
     | 
    
         
             
                    def append_bundle(opts, list, target: @session, append: nil)
         
     | 
| 
         @@ -951,7 +891,6 @@ module Squared 
     | 
|
| 
       951 
891 
     | 
    
         
             
                      else
         
     | 
| 
       952 
892 
     | 
    
         
             
                        op.clear
         
     | 
| 
       953 
893 
     | 
    
         
             
                      end
         
     | 
| 
       954 
     | 
    
         
            -
                      op
         
     | 
| 
       955 
894 
     | 
    
         
             
                    end
         
     | 
| 
       956 
895 
     | 
    
         | 
| 
       957 
896 
     | 
    
         
             
                    def ruby_session(*cmd, **kwargs)
         
     | 
| 
         @@ -993,73 +932,54 @@ module Squared 
     | 
|
| 
       993 
932 
     | 
    
         
             
                      session_output('rake', *cmd, **kwargs)
         
     | 
| 
       994 
933 
     | 
    
         
             
                    end
         
     | 
| 
       995 
934 
     | 
    
         | 
| 
      
 935 
     | 
    
         
            +
                    def read_rakefile
         
     | 
| 
      
 936 
     | 
    
         
            +
                      return @rakelist if @rakelist
         
     | 
| 
      
 937 
     | 
    
         
            +
             
     | 
| 
      
 938 
     | 
    
         
            +
                      ret = []
         
     | 
| 
      
 939 
     | 
    
         
            +
                      pwd = rakepwd
         
     | 
| 
      
 940 
     | 
    
         
            +
                      pwd_set(pass: !pwd.nil?) do
         
     | 
| 
      
 941 
     | 
    
         
            +
                        IO.popen(rake_output(pwd, '-AT').to_s).each do |line|
         
     | 
| 
      
 942 
     | 
    
         
            +
                          next unless line =~ /^rake ((?:[^\[: ]+:?)+)(\[[^\]]+\])?/
         
     | 
| 
      
 943 
     | 
    
         
            +
             
     | 
| 
      
 944 
     | 
    
         
            +
                          ret << [$1, $2]
         
     | 
| 
      
 945 
     | 
    
         
            +
                        end
         
     | 
| 
      
 946 
     | 
    
         
            +
                      end
         
     | 
| 
      
 947 
     | 
    
         
            +
                      @rakelist = ret
         
     | 
| 
      
 948 
     | 
    
         
            +
                    end
         
     | 
| 
      
 949 
     | 
    
         
            +
             
     | 
| 
       996 
950 
     | 
    
         
             
                    def preopts
         
     | 
| 
       997 
951 
     | 
    
         
             
                      verbosetype > 1 && !session_arg?('quiet') ? ['--verbose'] : []
         
     | 
| 
       998 
952 
     | 
    
         
             
                    end
         
     | 
| 
       999 
953 
     | 
    
         | 
| 
      
 954 
     | 
    
         
            +
                    def gemdir?
         
     | 
| 
      
 955 
     | 
    
         
            +
                      !@gemdir.nil? && @gemdir.exist? && !@gemdir.empty?
         
     | 
| 
      
 956 
     | 
    
         
            +
                    end
         
     | 
| 
      
 957 
     | 
    
         
            +
             
     | 
| 
       1000 
958 
     | 
    
         
             
                    def variables
         
     | 
| 
       1001 
     | 
    
         
            -
                      (super + %i[autodetect]).freeze
         
     | 
| 
      
 959 
     | 
    
         
            +
                      (super + %i[version autodetect]).freeze
         
     | 
| 
       1002 
960 
     | 
    
         
             
                    end
         
     | 
| 
       1003 
961 
     | 
    
         | 
| 
       1004 
962 
     | 
    
         
             
                    def rakefile
         
     | 
| 
       1005 
     | 
    
         
            -
                      return  
     | 
| 
      
 963 
     | 
    
         
            +
                      return unless (file = Rake::Application::DEFAULT_RAKEFILES.find { |val| basepath(val).exist? })
         
     | 
| 
       1006 
964 
     | 
    
         | 
| 
       1007 
     | 
    
         
            -
                       
     | 
| 
       1008 
     | 
    
         
            -
                      @rakefile = file ? basepath(file) : false
         
     | 
| 
      
 965 
     | 
    
         
            +
                      path + file
         
     | 
| 
       1009 
966 
     | 
    
         
             
                    end
         
     | 
| 
       1010 
967 
     | 
    
         | 
| 
       1011 
968 
     | 
    
         
             
                    def rakepwd
         
     | 
| 
       1012 
     | 
    
         
            -
                      return unless  
     | 
| 
      
 969 
     | 
    
         
            +
                      return unless Rake::VERSION >= '13.0.4'
         
     | 
| 
       1013 
970 
     | 
    
         | 
| 
       1014 
971 
     | 
    
         
             
                      quote_option 'C', path
         
     | 
| 
       1015 
972 
     | 
    
         
             
                    end
         
     | 
| 
       1016 
973 
     | 
    
         | 
| 
       1017 
     | 
    
         
            -
                    def raketasks
         
     | 
| 
       1018 
     | 
    
         
            -
                      @raketasks ||= [].tap do |ret|
         
     | 
| 
       1019 
     | 
    
         
            -
                        opt = rakepwd
         
     | 
| 
       1020 
     | 
    
         
            -
                        pwd_set(pass: !opt.nil?) do
         
     | 
| 
       1021 
     | 
    
         
            -
                          IO.popen(rake_output(opt, '-AT').to_s).each do |line|
         
     | 
| 
       1022 
     | 
    
         
            -
                            next unless line =~ /^rake ((?:[^\[: ]+:?)+)(\[[^\]]+\])?/
         
     | 
| 
       1023 
     | 
    
         
            -
             
     | 
| 
       1024 
     | 
    
         
            -
                            ret << [$1, $2]
         
     | 
| 
       1025 
     | 
    
         
            -
                          end
         
     | 
| 
       1026 
     | 
    
         
            -
                        end
         
     | 
| 
       1027 
     | 
    
         
            -
                      end
         
     | 
| 
       1028 
     | 
    
         
            -
                    end
         
     | 
| 
       1029 
     | 
    
         
            -
             
     | 
| 
       1030 
974 
     | 
    
         
             
                    def gempwd
         
     | 
| 
       1031 
     | 
    
         
            -
                      return unless  
     | 
| 
      
 975 
     | 
    
         
            +
                      return unless Gem::VERSION >= '3.4.2'
         
     | 
| 
       1032 
976 
     | 
    
         | 
| 
       1033 
977 
     | 
    
         
             
                      quote_option 'C', path
         
     | 
| 
       1034 
978 
     | 
    
         
             
                    end
         
     | 
| 
       1035 
979 
     | 
    
         | 
| 
       1036 
     | 
    
         
            -
                    def  
     | 
| 
       1037 
     | 
    
         
            -
                       
     | 
| 
       1038 
     | 
    
         
            -
             
     | 
| 
       1039 
     | 
    
         
            -
                      @gemfile = [project, name].map! { |val| basepath("#{val}.gemspec") }
         
     | 
| 
       1040 
     | 
    
         
            -
                                                .concat(Dir.glob(basepath('*.gemspec')))
         
     | 
| 
       1041 
     | 
    
         
            -
                                                .find { |file| File.exist?(file) } || false
         
     | 
| 
      
 980 
     | 
    
         
            +
                    def gempath(val = @version)
         
     | 
| 
      
 981 
     | 
    
         
            +
                      File.join('gems', "#{project}-#{val}")
         
     | 
| 
       1042 
982 
     | 
    
         
             
                    end
         
     | 
| 
       1043 
     | 
    
         
            -
             
     | 
| 
       1044 
     | 
    
         
            -
                    def gemlib
         
     | 
| 
       1045 
     | 
    
         
            -
                      @gemlib ||= begin
         
     | 
| 
       1046 
     | 
    
         
            -
                        lib = Set.new(['lib'])
         
     | 
| 
       1047 
     | 
    
         
            -
                        if (spec = gemspec)
         
     | 
| 
       1048 
     | 
    
         
            -
                          lib.merge(spec.require_paths || [])
         
     | 
| 
       1049 
     | 
    
         
            -
                        end
         
     | 
| 
       1050 
     | 
    
         
            -
                        lib.select { |file| basepath(file).exist? }
         
     | 
| 
       1051 
     | 
    
         
            -
                      end
         
     | 
| 
       1052 
     | 
    
         
            -
                    end
         
     | 
| 
       1053 
     | 
    
         
            -
             
     | 
| 
       1054 
     | 
    
         
            -
                    def gempath(val = version)
         
     | 
| 
       1055 
     | 
    
         
            -
                      File.join('gems', "#{gemname}-#{val}")
         
     | 
| 
       1056 
     | 
    
         
            -
                    end
         
     | 
| 
       1057 
     | 
    
         
            -
             
     | 
| 
       1058 
     | 
    
         
            -
                    def gemdir?
         
     | 
| 
       1059 
     | 
    
         
            -
                      !@gemdir.nil? && @gemdir.exist? && !@gemdir.empty?
         
     | 
| 
       1060 
     | 
    
         
            -
                    end
         
     | 
| 
       1061 
     | 
    
         
            -
             
     | 
| 
       1062 
     | 
    
         
            -
                    alias read_rakefile raketasks
         
     | 
| 
       1063 
983 
     | 
    
         
             
                  end
         
     | 
| 
       1064 
984 
     | 
    
         | 
| 
       1065 
985 
     | 
    
         
             
                  Application.implement Ruby
         
     |