class Pendulum::Command::Apply::Schedule

Attributes

client[RW]
color[RW]
dry_run[RW]
force[RW]
from[RW]
to[RW]

Public Class Methods

new(client, from, to, dry_run=false, force=false, color=false) click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 7
def initialize(client, from, to, dry_run=false, force=false, color=false)
  self.client  = client
  self.from    = from
  self.to      = to
  self.dry_run = dry_run
  self.force   = force
  self.color   = color
end

Public Instance Methods

apply() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 16
def apply
  case
  when will_create? then create
  when will_update? then update
  when will_delete? then delete
  end
end

Private Instance Methods

color?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 140
def color?
  color
end
colorize(message, color) click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 161
def colorize(message, color)
  return message unless color?
  h.color message, color
end
create() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 26
def create
  puts message_for_create
  client.create_schedule(to.name, to.to_params) unless dry_run?
end
default_params() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 144
def default_params
  {
    database:    '',
    query:       nil,
    retry_limit: 0,
    priority:    0,
    cron:        nil,
    timezone:    'Asia/Tokyo', # TODO: require timezone.
    delay:       0,
    result:      ''
  }
end
delete() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 39
def delete
  puts message_for_delete
  client.delete_schedule(from.name) if force? && !dry_run?
end
diff() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 60
def diff
  return {} unless will_update?

  @diff ||= begin
              default_params.merge(to.to_params).select do |k, v|
                if k == :result || k == :result_json
                  result_url_changed?(from.result_url, v)
                else
                  v != from.send(k)
                end
              end
            end
end
dry_run?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 132
def dry_run?
  dry_run
end
force?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 136
def force?
  force
end
h() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 166
def h
  @h ||= HighLine.new
end
has_diff?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 56
def has_diff?
  !diff.empty?
end
masked_diff() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 74
def masked_diff
  return diff unless diff.key?(:result)

  masked = diff.dup

  if masked[:result].start_with?('{') || diff.key?(:result_json)
    hashed_result = JSON.parse(masked[:result])
    hashed_result.delete('apikey')
    masked[:result] = hashed_result.to_json
  else
    uri = URI.parse(masked[:result])
    uri.password = '***' if uri.user
    masked[:result] = uri.to_s
  end

  masked
end
message_for(action) click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 117
def message_for(action)
  message_with_dry_run "#{action.to_s.capitalize} schedule: #{name}"
end
message_for_create() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 92
def message_for_create
  colorize message_for(:create), :cyan
end
message_for_delete() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 104
def message_for_delete
  if force?
    colorize message_for(:delete), :red
  else
    colorize message_with_dry_run("Undefined schedule (pass `--force` if you want to remove): #{name}"), :yellow
  end
end
message_for_diff() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 121
def message_for_diff
  message = masked_diff.map do |name, value|
    "  set #{name}=#{value}"
  end.join("\n")
  colorize message, :green
end
message_for_update() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 96
def message_for_update
  if force? || has_diff?
    colorize message_for(:update), :green
  else
    colorize message_with_dry_run("No change schedule: #{name}"), :blue
  end
end
message_with_dry_run(message) click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 112
def message_with_dry_run(message)
  message += ' (dry-run)' if dry_run?
  message
end
name() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 128
def name
  (from && from.name) || (to && to.name)
end
result_url_changed?(from_url, to_url) click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 157
def result_url_changed?(from_url, to_url)
  Apply::ResultURL.new(client, from_url, to_url).changed?
end
update() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 31
def update
  puts message_for_update
  puts message_for_diff if has_diff?
  if force? || has_diff?
    client.update_schedule(to.name, to.to_params) unless dry_run?
  end
end
will_create?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 44
def will_create?
  !from && to
end
will_delete?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 52
def will_delete?
  from && !to
end
will_update?() click to toggle source
# File lib/pendulum/command/apply/schedule.rb, line 48
def will_update?
  from && to
end