Sha256: 15fbe9a8763674fe0d09d5d4bcea06e7fb0cf070437cdf9ac076e3d4dae8d15a
Contents?: true
Size: 1.85 KB
Versions: 1
Compression:
Stored size: 1.85 KB
Contents
require 'comma/extractor' module Comma class DataExtractor < Extractor class ExtractValueFromInstance def initialize(instance) @instance = instance end def extract(sym, &block) yield_block_with_value(extract_value(sym), &block) end private def yield_block_with_value(value, &block) block ? yield(value) : value end def extract_value(method) extraction_object.send(method) end def extraction_object @instance end end class ExtractValueFromAssociationOfInstance < ExtractValueFromInstance def initialize(instance, association_name) super(instance) @association_name = association_name end private def extraction_object @instance.send(@association_name) || null_association end def null_association @null_association ||= Class.new(Class.const_defined?(:BasicObject) ? ::BasicObject : ::Object) do def method_missing(symbol, *args, &block) nil end end.new end end def method_missing(sym, *args, &block) @results << ExtractValueFromInstance.new(@instance).extract(sym, &block) if args.blank? args.each do |arg| case arg when Hash arg.each do |k, v| @results << ExtractValueFromAssociationOfInstance.new(@instance, sym).extract(k, &block) end when Symbol @results << ExtractValueFromAssociationOfInstance.new(@instance, sym).extract(arg, &block) when String @results << ExtractValueFromInstance.new(@instance).extract(sym, &block) else raise "Unknown data symbol #{arg.inspect}" end end end def __static_column__(header = nil, &block) @results << (block ? yield(@instance) : nil) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
comma-4.2.0 | lib/comma/data_extractor.rb |