module CardmarketCLI::Entities::Unique

Makes a class unique

Public Instance Methods

uniq_attr(symbol, options = {}) click to toggle source
# File lib/cardmarket_cli/entities/unique.rb, line 8
def uniq_attr(symbol, options = {})
  options = { hash: true, plural: "#{symbol}s", index: :id }.merge! options
  def_brackets(options[:plural], options[:hash])
  def_add(options[:plural], options[:hash], options[:index])
  def_reader(options[:plural], options[:hash])
end

Private Instance Methods

def_add(plural, hash, index) click to toggle source
# File lib/cardmarket_cli/entities/unique.rb, line 35
def def_add(plural, hash, index)
  define_method :add do |item|
    instance_variable_set("@#{plural}", hash ? {} : []) unless instance_variable_defined? "@#{plural}"
    if hash
      instance_variable_get("@#{plural}")[item.send(index)] = item
    else
      instance_variable_get("@#{plural}") << item
    end
  end
  private :add
end
def_brackets(plural, hash) click to toggle source
# File lib/cardmarket_cli/entities/unique.rb, line 26
def def_brackets(plural, hash)
  return if respond_to? :[]

  define_method :[] do |id|
    instance_variable_set("@#{plural}", hash ? {} : []) unless instance_variable_defined? "@#{plural}"
    instance_variable_get("@#{plural}")[id]
  end
end
def_reader(plural, hash) click to toggle source
# File lib/cardmarket_cli/entities/unique.rb, line 17
def def_reader(plural, hash)
  return if respond_to? plural.to_s.to_sym

  define_method plural.to_s do
    instance_variable_set("@#{plural}", hash ? {} : []) unless instance_variable_defined? "@#{plural}"
    instance_variable_get("@#{plural}").dup
  end
end