class Crowbar::Client::Command::Proposal::Create

Implementation for the proposal create command

Public Instance Methods

execute() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 38
def execute
  validate_barclamp! args.barclamp

  request.process do |request|
    case request.code
    when 200
      say "Successfully created #{args.proposal} proposal"
    else
      err request.parsed_response["error"]
    end
  end
end
request() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 30
def request
  @request ||= Request::Proposal::Create.new(
    args.easy_merge!(
      payload: payload_content.to_hash
    )
  )
end

Protected Instance Methods

from_data() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 70
def from_data
  json = begin
    JSON.load(
      options[:data]
    )
  rescue JSON::ParserError
    err "Failed to parse JSON"
  end

  if json["id"] != args.proposal
    json["id"] = args.proposal
    say "Using id(#{json["id"]}) as proposal name"
  end

  if options[:merge]
    proposal_preload.easy_merge(
      json
    )
  else
    json
  end
end
from_editor() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 126
def from_editor
  editor = Util::Editor.new content: proposal_preload
  editor.edit!

  editor.result
rescue EditorAbortError => e
  err e.message
rescue EditorStartupError => e
  err e.message
rescue InvalidJsonError => e
  err e.message
rescue SimpleCatchableError => e
  err e.message
rescue
  err "Editing content failed"
end
from_file() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 93
def from_file
  json = begin
    file = File.read(
      options[:file]
    )

    JSON.load(
      file
    )
  rescue Errno::EACCES
    err "Failed to access file"
  rescue Errno::ENOENT
    err "Failed to read file"
  rescue JSON::ParserError
    err "Failed to parse JSON"
  rescue
    err "Failed to process file"
  end

  if json["id"] != args.proposal
    json["id"] = args.proposal
    say "Using id(#{json["id"]}) as proposal name"
  end

  if options[:merge]
    proposal_preload.easy_merge(
      json
    )
  else
    json
  end
end
payload_content() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 143
def payload_content
  case
  when options[:data]
    from_data
  when options[:file]
    from_file
  when options[:default]
    proposal_preload
  else
    from_editor
  end
end
proposal_preload() click to toggle source
# File lib/crowbar/client/command/proposal/create.rb, line 53
def proposal_preload
  result = Request::Proposal::Template.new(
    barclamp: args.barclamp
  ).process

  case result.code
  when 200
    result.parsed_response.easy_merge(
      "id" => args.proposal
    )
  when 404
    err "Failed to preload template"
  else
    err result.parsed_response["error"]
  end
end