Class: Kamaze::Project::Tools::Shell

Inherits:
BaseTool show all
Defined in:
lib/kamaze/project/tools/shell.rb

Overview

Provide a REPL (based on Pry)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from Kamaze::Project::Tools::BaseTool

Instance Attribute Details

Get banner

Returns:

  • (String)


32
33
34
35
36
37
38
39
40
41
42
# File 'lib/kamaze/project/tools/shell.rb', line 32

def banner
  return @banner if @banner

  patch = defined?(RUBY_PATCHLEVEL) ? "p#{RUBY_PATCHLEVEL}" : nil
  # almost like RUBY_DESCRIPTION
  descr = ["#{RUBY_ENGINE} #{RUBY_VERSION}#{patch}".rstrip,
           "(#{RUBY_RELEASE_DATE})",
           "[#{RUBY_PLATFORM}]"].join(' ')

  "{{green:#{descr}}}"
end

#consoleKamaze::Project::Tools::Console (protected)

Get console



62
63
64
# File 'lib/kamaze/project/tools/shell.rb', line 62

def console
  @console
end

#observer_peersHash|nil (readonly, protected) Originally defined in module Concern::Observable

Returns:

  • (Hash|nil)

#providerPry|Class|Object (protected)

Get provider

Returns:



67
68
69
# File 'lib/kamaze/project/tools/shell.rb', line 67

def provider
  @provider
end

Instance Method Details

#require_any(gem_name, req_name = nil) ⇒ Boolean (protected)

Require any gem based on Gem::Specification

Parameters:

  • gem_name (String|Symbol)
  • req_name (String|Symbol) (defaults to: nil)

Returns:

  • (Boolean)


74
75
76
77
78
79
80
81
82
83
84
# File 'lib/kamaze/project/tools/shell.rb', line 74

def require_any(gem_name, req_name = nil)
  gem_name = gem_name.to_s
  req_name ||= gem_name
  spec = Gem::Specification

  return false unless spec.find_all_by_name(gem_name).any?

  require req_name

  true
end

#setupObject



44
45
46
47
48
# File 'lib/kamaze/project/tools/shell.rb', line 44

def setup
  @console ||= Kamaze.project.tools.fetch(:console)
  @provider ||= require_any(:pry) ? Pry : nil
  @banner ||= nil
end

#startObject

Start REPL session



51
52
53
54
55
# File 'lib/kamaze/project/tools/shell.rb', line 51

def start
  require_any(:interesting_methods)
  console.stdout.puts(banner)
  provider.start
end