Sha256: 7810ca71bbe307553d586c85b4176d6ac340a9bb548df2b95b2304be593520f6

Contents?: true

Size: 1.15 KB

Versions: 4

Compression:

Stored size: 1.15 KB

Contents

module SetBuilder
  module ValueMap
    
    
    
    @registered_value_maps = {}
    
    
    
    def self.registered?(name)
      name = name.to_sym
      @registered_value_maps.key?(name)
    end
    
    
    
    def self.to_s(name, value)
      name = name.to_sym
      map = @registered_value_maps[name]
      if map
        pair = map.find {|pair| pair[0] == value}
        pair ? pair[1].to_s : "(unknown)"
      else
        value.to_s
      end
    end
    
    
    
    def self.for(name)
      name = name.to_sym
      @registered_value_maps[name] || raise(ArgumentError, "A value map has not been registered for #{value}")
    end
    
    
    
    def self.register_collection(name, collection, name_method = :name, id_method = :id)
      map = collection.map {|i| [i.send(id_method).to_s, i.send(name_method)]}
      register(name, map)
    end
    
    
    
    def self.register(name, map)
      raise "map is expected to be an array of pairs" unless map.is_a?(Array)
      name = name.to_sym
      @registered_value_maps[name] = map
    end
    
    
    
    def self.to_json
      @registered_value_maps.to_json
    end
    
    
    
  end
  
  
  
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
set_builder-1.2.0.beta2 lib/set_builder/value_map.rb
set_builder-1.2.0.beta1 lib/set_builder/value_map.rb
set_builder-1.1.0 lib/set_builder/value_map.rb
set_builder-1.0.2 lib/set_builder/value_map.rb