class Squasher::Render

Attributes

config[R]
name[R]

Public Class Methods

new(name, config) click to toggle source
# File lib/squasher/render.rb, line 11
def initialize(name, config)
  @name = name
  @config = config
end
render(*args) click to toggle source
# File lib/squasher/render.rb, line 5
def self.render(*args)
  new(*args).render
end

Public Instance Methods

each_schema_line(&block) click to toggle source
# File lib/squasher/render.rb, line 20
def each_schema_line(&block)
  File.open(config.schema_file, 'r') do |stream|
    if @config.set?(:sql)
      stream_structure(stream, &block)
    else
      stream_schema(stream, &block)
    end
  end
end
render() click to toggle source
# File lib/squasher/render.rb, line 16
def render
  ERB.new(template("#{ name }.rb"), nil, '-').result(binding)
end

Private Instance Methods

stream_schema(stream) { |line| ... } click to toggle source
# File lib/squasher/render.rb, line 49
def stream_schema(stream)
  inside_schema = false

  stream.each_line do |raw_line|
    if inside_schema
      # reach the end of schema
      break if raw_line.index("end") == 0
      line = raw_line.gsub(/\A\s{,2}(.*)\s+\z/, '\1')
      if line.include?('create_table')
        line.gsub!(/(create_table.*),.* do/, '\1 do')
      end
      yield line
    else
      inside_schema = true if raw_line.include?("ActiveRecord::Schema")
    end
  end
end
stream_structure(stream) { |'execute %q{'| ... } click to toggle source
# File lib/squasher/render.rb, line 32
def stream_structure(stream)
  yield 'execute %q{'
  skip_mode = false
  ignored_table = ['ar_internal_metadata', 'schema_migrations']
  stream.each_line do |line|
    skip_mode = true if ignored_table.any? { |t| line.include?(t) }

    if skip_mode
      skip_mode = false if line.include?(';')
      next
    end

    yield line.gsub(/\A\s{,2}(.*)\s+\z/, '\1')
  end
  yield '}'
end
template(name) click to toggle source
# File lib/squasher/render.rb, line 67
def template(name)
  path = File.join(File.dirname(__FILE__), "templates/#{ name }.erb")
  template = File.open(path, "rb")
  content = template.read
  template.close
  content
end