Class: Snaptoken::Commands::BaseCommand

Inherits:
Object
  • Object
show all
Defined in:
lib/snaptoken/commands/base_command.rb

Direct Known Subclasses

Deploy, Diff, Doc, Fancy, Help, Pieces, Ref, Repo, Undiff, Unrepo

Constant Summary collapse

ERROR_MSG =
{
  config: {
    true: "You are not in a leg working directory.",
    false: "You are already in a leg working directory."
  },
  steps_folder: {
    true: "There is no steps folder.",
    false: "There is already a steps folder."
  },
  steps: {
    true: "There are no steps in the steps folder."
  },
  repo: {
    true: "There is no repo folder.",
    false: "There is already a repo folder."
  },
  diff: {
    true: "There is no steps.diff file."
  },
  doc: {
    true: "There is no doc folder."
  },
  doc_out: {
    true: "There are no doc output files."
  },
  ftp: {
    true: "There is no ftp.yml file."
  }
}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args, config) ⇒ BaseCommand

Returns a new instance of BaseCommand.



2
3
4
5
# File 'lib/snaptoken/commands/base_command.rb', line 2

def initialize(args, config)
  @args = args
  @config = config
end

Class Method Details

.inherited(subclass) ⇒ Object



11
12
13
# File 'lib/snaptoken/commands/base_command.rb', line 11

def self.inherited(subclass)
  Snaptoken::Commands::LIST << subclass
end

.nameObject

Raises:

  • (NotImplementedError)


7
# File 'lib/snaptoken/commands/base_command.rb', line 7

def self.name; raise NotImplementedError; end

.summaryObject

Raises:

  • (NotImplementedError)


8
# File 'lib/snaptoken/commands/base_command.rb', line 8

def self.summary; raise NotImplementedError; end

Instance Method Details

#current_or_latest_stepObject



98
99
100
# File 'lib/snaptoken/commands/base_command.rb', line 98

def current_or_latest_step
  current_step || latest_step
end

#current_stepObject



88
89
90
91
92
# File 'lib/snaptoken/commands/base_command.rb', line 88

def current_step
  if @config[:step_path]
    Snaptoken::Step.from_folder_name(File.basename(@config[:step_path]))
  end
end

#latest_stepObject



94
95
96
# File 'lib/snaptoken/commands/base_command.rb', line 94

def latest_step
  steps.last
end

#needs!(*whats) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/snaptoken/commands/base_command.rb', line 45

def needs!(*whats)
  options = whats.pop if whats.last.is_a? Hash
  options ||= {}

  yes = Array(whats).flatten.map { |w| [w, true] }
  no = Array(options[:not]).map { |w| [w, false] }

  (yes + no).each do |what, v|
    valid = false
    case what
    when :config
      valid = true if @config
    when :steps_folder
      valid = true if File.exist?(File.join(@config[:path], "steps"))
    when :steps
      valid = true if steps.length > 0
    when :repo
      valid = true if File.exist?(File.join(@config[:path], "repo"))
    when :diff
      valid = true if File.exist?(File.join(@config[:path], "steps.diff"))
    when :doc
      valid = true if File.exist?(File.join(@config[:path], "doc"))
    when :doc_out
      valid = true if File.exist?(File.join(@config[:path], "doc/html_out"))
    when :ftp
      valid = true if File.exist?(File.join(@config[:path], "ftp.yml"))
    else
      raise NotImplementedError
    end

    if valid != v
      puts "Error: " + ERROR_MSG[what][v.to_s.to_sym]
      exit!
    end
  end
end

#runObject

Raises:

  • (NotImplementedError)


9
# File 'lib/snaptoken/commands/base_command.rb', line 9

def run; raise NotImplementedError; end

#select_step(step, &block) ⇒ Object



106
107
108
109
# File 'lib/snaptoken/commands/base_command.rb', line 106

def select_step(step, &block)
  puts "Selecting step: #{step.folder_name}"
  FileUtils.cd(step_path(step), &block)
end

#step_path(step) ⇒ Object



102
103
104
# File 'lib/snaptoken/commands/base_command.rb', line 102

def step_path(step)
  File.join(@config[:path], "steps", step.folder_name)
end

#stepsObject



82
83
84
85
86
# File 'lib/snaptoken/commands/base_command.rb', line 82

def steps
  @steps ||= Dir[File.join(@config[:path], "steps/*")].map do |f|
    Snaptoken::Step.from_folder_name(File.basename(f)) if File.directory?(f)
  end.compact.sort_by(&:number)
end