Sha256: fab5d7f54192e56fb090ddc58539fdb4f4f9a0ab69c28ff2a69349ecde9073f2
Contents?: true
Size: 1.98 KB
Versions: 3
Compression:
Stored size: 1.98 KB
Contents
module Endeca class ReaderError < ::StandardError; end module Readers def add_reader(name, &block) meta = (class << self; self; end) meta.instance_eval do define_method(name) { |*attrs| reader(*attrs, &block) } end end # Maps key/value pairs from the data structure used to initialize a # Endeca object. Allows attribute renaming. Use a block to perform data # injunction on the value as it is set. # # ==== Examples # # # Specify basic attributes # reader :title # # # Attribute renaming # reader :long_desc => :description # # # Data injunction # reader(:title => :upcased_title) { |title| title.upcase } def reader(*attrs,&block) hash = {} block ||= lambda {|x| x} hash.update(attrs.pop) if Hash === attrs.last attrs.each{ |attr| hash[attr] = attr } hash.each do |variable, method| define_method(method) do begin block.call(attributes[variable.to_s]) rescue StandardError => e raise Endeca::ReaderError, e.message end end end end # Typecasts attributes as integers. # # ==== Examples # integer_reader :id, :rating def integer_reader(*attrs) reader(*attrs) { |value| Integer(value) } end # Typecasts attributes as BigDecimal # # ==== Examples # decimal_reader :price def decimal_reader(*attrs) require 'bigdecimal' unless defined?(BigDecimal) reader(*attrs) { |value| BigDecimal(value.to_s) } end # Typecasts attributes as floats # # ==== Examples # float_reader :latitude, :longitude def float_reader(*attrs) reader(*attrs) { |value| Float(value) } end # Typecasts attributes as a Perly boolean ("0" == false, "1" == true") # # ==== Examples # boolean_reader :price def boolean_reader(*attrs) reader(*attrs) { |value| value == "1" ? true : false } end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
primedia-endeca-0.9.2 | lib/endeca/readers.rb |
primedia-endeca-0.9.3 | lib/endeca/readers.rb |
primedia-endeca-0.9.4 | lib/endeca/readers.rb |