class Recolor::Converter
Attributes
models[RW]
Public Class Methods
new()
click to toggle source
# File lib/recolor/converter.rb, line 5 def initialize @models = {} end
Public Instance Methods
convert(tuple, source, destination)
click to toggle source
# File lib/recolor/converter.rb, line 9 def convert(tuple, source, destination) return tuple unless source != destination raise ArgumentError.new("No #{source} model found.") unless @models.include?(source) @steps = [] resolve(source, destination, @models) raise ArgumentError.new("Unable to convert from #{source} to #{destination}.") if @steps.empty? model = @models[source] @steps.each do |step| tuple = model.send(step, tuple) model = @models[step] end return tuple end
Private Instance Methods
resolve(source, destination, models)
click to toggle source
# File lib/recolor/converter.rb, line 31 def resolve(source, destination, models) model = models[source] models = models.reject { |name| name == source } models.keys.each do |name| if model.respond_to?(destination) @steps << destination end if @steps.include?(destination) break end if model.respond_to?(name) @steps << name resolve(name, destination, models) end end @steps = @steps.reject { |name| name == source } unless @steps.include?(destination) end