lib/leeroy/helpers/state.rb
require 'fcntl'
require 'multi_json'
require 'leeroy/helpers'
module Leeroy
module Helpers
module State
include Leeroy::Helpers
attr_accessor :state
def state_from_pipe(state = {}, global_options = self.global_options)
begin
state.merge(load_state)
rescue StandardError => e
raise e
end
end
def load_state
begin
logger.debug "loading state from stdin if available"
_stdin? ? MultiJson.load($stdin.read, :symbolize_keys => true) : {}
rescue StandardError => e
raise e
end
end
def dump_state
logger.debug "dumping state to stdout"
$stdout.puts self.state.dump
end
def rotate_task_metadata
logger.debug "rotating task metadata"
if self.state.metadata.task?
self.state.metadata.previous = self.state.metadata.task
end
self.state.metadata.task = self.class.to_s
end
def to_s
"#{self.metadata},#{self.data}"
end
private
# this is preposterous BS and doubtless not portable to Windows
def _stdin?
$stdin.fcntl(Fcntl::F_GETFL, 0) == 0
end
end
end
end