class Thinreports::Core::Format::Base

@abstract

Public Class Methods

config_accessor(*configs, &block) click to toggle source
# File lib/thinreports/core/format/base.rb, line 28
def config_accessor(*configs, &block)
  config_reader(*configs, &block)
  config_writer(*configs)
end
config_checker(check, *configs) click to toggle source
# File lib/thinreports/core/format/base.rb, line 15
def config_checker(check, *configs)
  checker = ->(val) { val == check }
  each_configs(*configs) do |m, location|
    define_read_method(:"#{m}?", location, &checker)
  end
end
config_reader(*configs, &block) click to toggle source
# File lib/thinreports/core/format/base.rb, line 9
def config_reader(*configs, &block)
  each_configs(*configs) do |m, location|
    define_read_method(m, location, &block)
  end
end
config_writer(*configs) click to toggle source
# File lib/thinreports/core/format/base.rb, line 22
def config_writer(*configs)
  each_configs(*configs) do |m, location|
    define_write_method(m, location)
  end
end
new(config, &block) click to toggle source
# File lib/thinreports/core/format/base.rb, line 55
def initialize(config, &block)
  @config = config
  block.call(self) if ::Kernel.block_given?
end

Private Class Methods

define_read_method(m, location = nil, &block) click to toggle source
# File lib/thinreports/core/format/base.rb, line 35
def define_read_method(m, location = nil, &block)
  define_method(m) do
    read(*location, &block)
  end
end
define_write_method(m, location = nil) click to toggle source
# File lib/thinreports/core/format/base.rb, line 41
def define_write_method(m, location = nil)
  define_method(:"#{m}=") do |value|
    write(value, *location)
  end
end
each_configs(*configs, &block) click to toggle source
# File lib/thinreports/core/format/base.rb, line 47
def each_configs(*configs, &block)
  c = configs.first.is_a?(::Hash) ? configs.first : (configs || [])
  c.each do |m, location|
    block.call(m, location || [m.to_s])
  end
end

Public Instance Methods

attributes() click to toggle source
# File lib/thinreports/core/format/base.rb, line 60
def attributes
  @config
end

Private Instance Methods

find(*keys) click to toggle source
# File lib/thinreports/core/format/base.rb, line 66
def find(*keys)
  if keys.empty?
    @config
  else
    keys.inject(@config) do |c, k|
      c.is_a?(::Hash) ? c[k] : (break c)
    end
  end
end
read(*keys, &block) click to toggle source
# File lib/thinreports/core/format/base.rb, line 82
def read(*keys, &block)
  value = find(*keys)
  ::Kernel.block_given? ? block.call(value) : value
end
write(value, *keys) click to toggle source
# File lib/thinreports/core/format/base.rb, line 76
def write(value, *keys)
  key = keys.pop
  owner = find(*keys)
  owner[key] = value
end