module Rabbit::Source::Base

Attributes

base[R]
encoding[RW]
force_modified[RW]
tmp_base[R]

Public Class Methods

append_features(klass) click to toggle source
Calls superclass method
# File lib/rabbit/source/base.rb, line 9
def self.append_features(klass)
  super
  klass.send(:include, GetText)
end
new(encoding, logger) click to toggle source
# File lib/rabbit/source/base.rb, line 17
def initialize(encoding, logger)
  @encoding = encoding
  @logger = logger
  @source = nil
  @force_modified = false
  init_base
end

Public Instance Methods

base=(new_value) click to toggle source
# File lib/rabbit/source/base.rb, line 90
def base=(new_value)
  if new_value.nil?
    init_base
  else
    set_base(new_value)
  end
end
extension() click to toggle source
# File lib/rabbit/source/base.rb, line 98
def extension
  nil
end
full_path(path) click to toggle source
# File lib/rabbit/source/base.rb, line 63
def full_path(path)
  if @base_uri.nil? or @base_uri.relative?
    ::File.join(@base, path)
  else
    uri = @base_uri.dup
    uri.path = @base_uri.path + "/" unless /\/$/ =~ @base_uri.path
    (uri + path).to_s
  end
end
modified?() click to toggle source
# File lib/rabbit/source/base.rb, line 55
def modified?
  @force_modified or need_read?
end
need_read?() click to toggle source
# File lib/rabbit/source/base.rb, line 59
def need_read?
  @source.nil?
end
old?(current, get_latest_method_name) click to toggle source
# File lib/rabbit/source/base.rb, line 79
def old?(current, get_latest_method_name)
  current.nil? or
    (current and __send__(get_latest_method_name) > current)
end
open_full_path(path, mode="rb") { |f| ... } click to toggle source
# File lib/rabbit/source/base.rb, line 73
def open_full_path(path, mode="rb")
  open(full_path(path), mode) do |f|
    yield f
  end
end
read() click to toggle source
# File lib/rabbit/source/base.rb, line 33
def read
  if need_read?
    @source = _read
    case @encoding
    when nil
      enc = guess_encoding(@source)
    when Encoding
      enc = @encoding
    else
      enc = Encoding.find(@encoding)
    end

    case enc
    when Encoding::UTF_8, Encoding::ASCII_8BIT
      @source.force_encoding(enc)
    else
      @source = @source.encode(Encoding::UTF_8, enc)
    end
  end
  @source
end
reset() click to toggle source
# File lib/rabbit/source/base.rb, line 30
def reset
end
source=(new_source) click to toggle source
# File lib/rabbit/source/base.rb, line 25
def source=(new_source)
  source_type = self.class.name.split("::").last.downcase
  raise ImmutableSourceTypeError.new(source_type)
end
tmp_dir_name() click to toggle source
# File lib/rabbit/source/base.rb, line 84
def tmp_dir_name
  dir = ::File.join(@tmp_base, TMP_DIR_NAME)
  FileUtils.mkdir_p(dir) unless ::File.exist?(dir)
  dir
end

Private Instance Methods

extract_extension(path) click to toggle source
# File lib/rabbit/source/base.rb, line 142
def extract_extension(path)
  components = ::File.basename(path).split(/\./)
  return nil if components.size < 2
  components.last
end
guess_encoding(str) click to toggle source
# File lib/rabbit/source/base.rb, line 131
def guess_encoding(str)
  return Encoding::UTF_8 if utf8_encoding?(str)

  require 'nkf'
  NKF.guess(str)
end
init_base() click to toggle source
# File lib/rabbit/source/base.rb, line 103
def init_base
  set_base(".")
end
parse_uri(str) click to toggle source
# File lib/rabbit/source/base.rb, line 123
def parse_uri(str)
  begin
    ::URI.parse(str)
  rescue ::URI::InvalidURIError
    nil
  end
end
set_base(new_value) click to toggle source
# File lib/rabbit/source/base.rb, line 107
def set_base(new_value)
  if ::File::ALT_SEPARATOR
    new_value = new_value.gsub(::File::ALT_SEPARATOR, ::File::SEPARATOR)
  end
  @base = new_value
  @base_uri = parse_uri(@base)
  if @base_uri.nil? or @base_uri.scheme.nil?
    @tmp_base = @base
  else
    @tmp_base = "."
  end
  unless ::File.writable?(@tmp_base)
    @tmp_base = Dir.tmpdir
  end
end
utf8_encoding?(string) click to toggle source
# File lib/rabbit/source/base.rb, line 138
def utf8_encoding?(string)
  string.dup.force_encoding(Encoding::UTF_8).valid_encoding?
end