rossta/lionel_richie

View on GitHub
lib/lionel/export_builder.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Lionel
  class ExportBuilder

    def self.build(&block)
      new.configure(&block)
    end

    def self.default
      build do
        A { id }
        B { name }
        C { url }
      end
    end

    def configure(&block)
      instance_eval(&block)
      self
    end

    def columns
      @columns ||= {}
    end

    def method_missing(sym, *args, &block)
      column_name = sym.to_s.upcase
      if column_name =~ /\A[A-Z]+\z/
        columns[sym.to_s.upcase] = block_given? ? block : lambda { args.first }
      else
        raise ColumnNameError.new("Method '#{sym}' does not represent a valid Google Spreadsheet column name")
      end
    end

  end
end