class AwDatapipe::PipelineObject

Attributes

id[R]
name[RW]
pipeline[RW]

Public Class Methods

build(params) click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 7
def self.build(params)
  new(params)
end
new(params) click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 11
def initialize(params)
  @id = params.delete(:id) || params[:name].underscore.to_sym ||
    raise(ArgumentError, ":id or :name required: #{params.inspect}")
  params.each_pair { |k, v| send "#{k}=", v }
end

Public Instance Methods

dependencies() click to toggle source

Iterates through struct members, recursively collecting any PipelineObjects. Recursion ensures dependencies sorted before dependents.

# File lib/aw_datapipe/pipeline_object.rb, line 19
def dependencies
  members.each_with_object([]) do |attr_name, depends|
    value = send(attr_name)
    value = pipeline.objects.fetch(value) if value.is_a?(Symbol)
    depends << value.dependencies << value if value.is_a?(PipelineObject)
  end.flatten
end
inspect() click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 27
def inspect
  "#<#{type} #{to_hash}>"
end
source(indent_level = 1) click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 35
def source(indent_level = 1)
  "#{self.class.name}.build(" << [:id, :name, *members].map do |member|
    "\n" << indent(indent_level) << member_source(member)
  end.join(",") << ")"
end
to_hash() click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 31
def to_hash
  Hash[each_pair.select { |k, v| v != nil }].merge(id: id, name: name)
end
type() click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 41
def type
  self.class.name.split('::').last
end

Protected Instance Methods

indent(indent_level) click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 47
def indent(indent_level)
  " " * 2 * indent_level
end
member_source(member) click to toggle source
# File lib/aw_datapipe/pipeline_object.rb, line 51
def member_source(member)
  value = send member
  value = ?' << value.gsub("'", "\\\\'") << ?' if value.is_a?(String)
  value = ":#{value}" if member == :id
  "#{member}: #{value}"
end