Skip to content

Commit

Permalink
flexibilize data structures ODFReport can handle
Browse files Browse the repository at this point in the history
now you can pass objects & hashes
  • Loading branch information
sandrods committed Dec 29, 2011
1 parent 834f690 commit 9122487
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions lib/odf-report/field.rb
Expand Up @@ -6,15 +6,15 @@ class Field

def initialize(opts, &block)
@name = opts[:name]
@data_field = opts[:data_field]

unless @value = opts[:value]

if data_field = opts[:data_field]
@block = lambda { |item| item.send(data_field)}
elsif block_given?
if block_given?
@block = block

else
@block = lambda { |item| item.send(@name)}
@block = lambda { |item| self.extract_value(item) }
end

end
Expand All @@ -36,6 +36,22 @@ def to_placeholder
end
end

def extract_value(data_item)
key = @data_field || @name

if data_item.is_a?(Hash)
data_item[key] || data_item[key.to_s.downcase] || data_item[key.to_s.upcase] || data_item[key.to_s.downcase.to_sym]

elsif data_item.respond_to?(key.to_s.downcase.to_sym)
data_item.send(key.to_s.downcase.to_sym)

else
raise "Can't find field [#{key}] in this #{data_item.class}"

end

end

end

end

0 comments on commit 9122487

Please sign in to comment.