class ActiveMusicbrainz::Model::Factory

Public Class Methods

define(&block) click to toggle source
# File lib/active_musicbrainz/models/factory.rb, line 4
def self.define &block
  factory = new
  factory.instance_eval &block if block_given?
  factory
end

Public Instance Methods

model(table_name, &block) click to toggle source
# File lib/active_musicbrainz/models/factory.rb, line 10
def model table_name, &block
  klass = model_class table_name
  klass.class_eval &block if block_given?
  klass
end

Private Instance Methods

build_model_class(table_name) click to toggle source
# File lib/active_musicbrainz/models/factory.rb, line 30
def build_model_class table_name
  klass = Class.new ActiveRecord::Base do
    self.table_name = table_name
    self.inheritance_column = :_sti_type
    include Base
  end
  Model.const_set camelize_table_name(table_name), klass
end
camelize_table_name(term, uppercase_first_letter = true) click to toggle source
# File lib/active_musicbrainz/models/factory.rb, line 18
def camelize_table_name(term, uppercase_first_letter = true)
  string = term.to_s
  string = string.sub(/^[a-z\d]*/) { $&.capitalize }
  string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
end
model_class(table_name) click to toggle source
# File lib/active_musicbrainz/models/factory.rb, line 24
def model_class table_name
  Model.const_get camelize_table_name(table_name)
rescue NameError
  build_model_class table_name
end