class Undies::Source

Attributes

data[R]
layout[R]
source[R]

Public Class Methods

new(*args, &block) click to toggle source
# File lib/undies/source.rb, line 7
def initialize(*args, &block)
  named = args.first.kind_of?(NamedSource) ? args.first : nil
  args << block if block
  self.args = named ? named.args.compact : args
end

Public Instance Methods

==(other_source) click to toggle source
# File lib/undies/source.rb, line 29
def ==(other_source)
  self.source == other_source.source &&
  self.layout_sources == other_source.layout_sources
end
args=(values) click to toggle source
# File lib/undies/source.rb, line 34
def args=(values)
  proc, opts, file = [
    values.last.kind_of?(::Proc)   ? values.pop : nil,
    values.last.kind_of?(::Hash)   ? values.pop : {},
    values.last.kind_of?(::String) ? values.pop : nil
  ]

  self.source = file || proc
  self.layout = opts[:layout]
end
file?() click to toggle source
# File lib/undies/source.rb, line 13
def file?
  !@source.kind_of?(::Proc)
end
layout=(value) click to toggle source
# File lib/undies/source.rb, line 58
def layout=(value)
  @layout = case value
  when Source, NilClass
    value
  when ::Proc
    Source.new(&value)
  when ::String, NamedSource
    Source.new(value)
  else
    raise ArgumentError, "invalid layout"
  end
end
layout_sources() click to toggle source
# File lib/undies/source.rb, line 25
def layout_sources
  self.layouts.collect{|l| l.source}
end
layouts() click to toggle source
# File lib/undies/source.rb, line 17
def layouts
  if layout
    [self.layout, self.layout.layouts].flatten.compact
  else
    []
  end
end
source=(value) click to toggle source
# File lib/undies/source.rb, line 45
def source=(value)
  if value.nil?
    raise ArgumentError, "source name, file, or block required"
  end
  @data = if value.kind_of?(::Proc)
    value
  else
    raise ArgumentError, "no source file '#{value}'" if !File.exists?(value.to_s)
    File.send(File.respond_to?(:binread) ? :binread : :read, value.to_s)
  end
  @source = value
end