Class: BrainDamage::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/generators/brain_damage/lib/resource.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(initializers, options = {}) ⇒ Resource

Returns a new instance of Resource.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/generators/brain_damage/lib/resource.rb', line 17

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



146
147
148
# File 'lib/generators/brain_damage/lib/resource.rb', line 146

def method_missing(method, *args, &block)
  @generator.send method, *args, &block
end

Instance Attribute Details

#columnsObject

Returns the value of attribute columns.



9
10
11
# File 'lib/generators/brain_damage/lib/resource.rb', line 9

def columns
  @columns
end

#controllerObject (readonly)

Returns the value of attribute controller.



10
11
12
# File 'lib/generators/brain_damage/lib/resource.rb', line 10

def controller
  @controller
end

#fieldsObject (readonly)

Returns the value of attribute fields.



11
12
13
# File 'lib/generators/brain_damage/lib/resource.rb', line 11

def fields
  @fields
end

#migrationObject (readonly)

Returns the value of attribute migration.



14
15
16
# File 'lib/generators/brain_damage/lib/resource.rb', line 14

def migration
  @migration
end

#modelObject (readonly)

Returns the value of attribute model.



12
13
14
# File 'lib/generators/brain_damage/lib/resource.rb', line 12

def model
  @model
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/generators/brain_damage/lib/resource.rb', line 6

def name
  @name
end

#parametizerObject (readonly)

Returns the value of attribute parametizer.



15
16
17
# File 'lib/generators/brain_damage/lib/resource.rb', line 15

def parametizer
  @parametizer
end

#rootObject (readonly)

Returns the value of attribute root.



8
9
10
# File 'lib/generators/brain_damage/lib/resource.rb', line 8

def root
  @root
end

#viewsObject (readonly)

Returns the value of attribute views.



13
14
15
# File 'lib/generators/brain_damage/lib/resource.rb', line 13

def views
  @views
end

Instance Method Details

#column_relation_type(column_name) ⇒ Object



41
42
43
44
# File 'lib/generators/brain_damage/lib/resource.rb', line 41

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

#describe(name) {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:



56
57
58
59
# File 'lib/generators/brain_damage/lib/resource.rb', line 56

def describe(name)
  self.name = name
  yield self if block_given?
end

#describe_controller {|@controller| ... } ⇒ Object

Yields:



76
77
78
# File 'lib/generators/brain_damage/lib/resource.rb', line 76

def describe_controller
  yield @controller if block_given?
end

#describe_field(name) {|| ... } ⇒ Object

Yields:

  • ()


61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/generators/brain_damage/lib/resource.rb', line 61

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| ... } ⇒ Object

Yields:



80
81
82
# File 'lib/generators/brain_damage/lib/resource.rb', line 80

def describe_model
  yield @model if block_given?
end

#describe_views {|@views| ... } ⇒ Object

Yields:



84
85
86
87
# File 'lib/generators/brain_damage/lib/resource.rb', line 84

def describe_views
  ensure_every_column_is_described
  yield @views if block_given?
end

#displayable_and_inputable_fields(identifier = :default) ⇒ Object



117
118
119
# File 'lib/generators/brain_damage/lib/resource.rb', line 117

def displayable_and_inputable_fields(identifier = :default)
  inputable_fields(identifier) & displayable_fields(identifier)
end

#displayable_fields(identifier = :default) ⇒ Object



103
104
105
106
107
# File 'lib/generators/brain_damage/lib/resource.rb', line 103

def displayable_fields(identifier = :default)
  sort_fields(fields.values.select{ |field|
                field.displayable? identifier
              })
end

#ensure_every_column_has_its_generated_attribute_objectObject



140
141
142
143
144
# File 'lib/generators/brain_damage/lib/resource.rb', line 140

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_describedObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/generators/brain_damage/lib/resource.rb', line 121

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) ⇒ Object



89
90
91
92
93
# File 'lib/generators/brain_damage/lib/resource.rb', line 89

def inputable_fields(identifier = :default)
  sort_fields(fields.values.select{ |field|
                field.inputable? identifier
              })
end

#setup(generator) ⇒ Object



36
37
38
39
# File 'lib/generators/brain_damage/lib/resource.rb', line 36

def setup(generator)
  @generator = generator
  ensure_every_column_has_its_generated_attribute_object
end

#sort_fields(fields) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/generators/brain_damage/lib/resource.rb', line 109

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_fieldsObject



99
100
101
# File 'lib/generators/brain_damage/lib/resource.rb', line 99

def undisplayable_fields
  fields.values.reject(&:displayable?)
end

#uninputable_fieldsObject



95
96
97
# File 'lib/generators/brain_damage/lib/resource.rb', line 95

def uninputable_fields
  fields.values.reject(&:inputable?)
end