class BrainDamage::Resource

Attributes

columns[R]
controller[R]
fields[R]
migration[R]
model[R]
name[RW]
parametizer[R]
root[R]
views[R]

Public Class Methods

new(initializers, options = {}) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 16
def initialize(initializers, options = {})
  @columns = {}
  @fields = {}
  @root = options[:root]

  @parametizer = BrainDamage::Parametizer.new self
  @migration = BrainDamage::Migration.new self
  @controller = BrainDamage::ControllerGenerator.new self
  @model = BrainDamage::ModelGenerator.new self
  @views = BrainDamage::ViewsGenerator.new self
  @closed_for_field_description = false

  initializers.each do |initializer|
    instance_eval initializer.read, initializer.path if initializer.is_a? File
  end

  ensure_every_column_is_described
end

Public Instance Methods

column_relation_type(column_name) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 40
def column_relation_type(column_name)
  return @columns[column_name][:type] if @columns[column_name] and Relation.is_valid_relation? @columns[column_name][:type]
  nil
end
columns=(column_hash) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 45
def columns=(column_hash)
  column_hash.each do |name, options|
    if options.is_a? Symbol
      @columns[name] = { type: options }
    else
      @columns[name] = options
    end
  end
end
describe(name) { |self| ... } click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 55
def describe(name)
  self.name = name
  yield self if block_given?
end
describe_controller() { |controller| ... } click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 75
def describe_controller
  yield @controller if block_given?
end
describe_field(name) { |fields| ... } click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 60
def describe_field(name)
  if @closed_for_field_description
    puts "ERROR: Trying to describe field #{name} after field description has been closed.
  Are you trying to describe a field after describing the views?"
    return
  end

  @fields[name] = Field.new(name: name, resource: self) unless @fields[name]
  yield @fields[name] if block_given?

  unless @fields[name].relation
    @fields[name].relation = {}
  end
end
describe_model() { |model| ... } click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 79
def describe_model
  yield @model if block_given?
end
describe_views() { |views| ... } click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 83
def describe_views
  ensure_every_column_is_described
  yield @views if block_given?
end
displayable_and_inputable_fields(identifier = :default) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 116
def displayable_and_inputable_fields(identifier = :default)
  inputable_fields(identifier) & displayable_fields(identifier)
end
displayable_fields(identifier = :default) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 102
def displayable_fields(identifier = :default)
  sort_fields(fields.values.select{ |field|
                field.displayable? identifier
              })
end
ensure_every_column_has_its_generated_attribute_object() click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 139
def ensure_every_column_has_its_generated_attribute_object
  attributes.each do |attribute|
    @fields[attribute.name.to_sym].generated_attribute = attribute
  end
end
ensure_every_column_is_described() click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 120
def ensure_every_column_is_described
  (@columns.keys - @fields.keys).each do |column_name|
    describe_field column_name do |field|
      field.display = :default
      field.input = :default
    end
  end

  uninputable_fields.each do |field|
    field.input = :default unless field.input(:default) == false
  end

  undisplayable_fields.each do |field|
    field.display = :default unless field.display(:default) == false
  end

  @closed_for_field_description = true
end
inputable_fields(identifier = :default) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 88
def inputable_fields(identifier = :default)
  sort_fields(fields.values.select{ |field|
                field.inputable? identifier
              })
end
method_missing(method, *args, &block) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 145
def method_missing(method, *args, &block)
  @generator.send method, *args, &block
end
setup(generator) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 35
def setup(generator)
  @generator = generator
  ensure_every_column_has_its_generated_attribute_object
end
sort_fields(fields) click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 108
def sort_fields(fields)
  names = @columns.keys
  fields.sort { |field_a, field_b|
    (names.index(field_a.name) || 999) <=>
      (names.index(field_b.name) || 999)
  }
end
undisplayable_fields() click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 98
def undisplayable_fields
  fields.values.reject(&:displayable?)
end
uninputable_fields() click to toggle source
# File lib/generators/brain_damage/lib/resource.rb, line 94
def uninputable_fields
  fields.values.reject(&:inputable?)
end