Add GeneratedAttribute.

This commit is contained in:
José Valim 2009-06-23 18:12:37 +02:00
parent d4ec091580
commit 75fbd73936
2 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,44 @@
module Rails
module Generators
class GeneratedAttribute
attr_accessor :name, :type, :column
def initialize(name, type)
@name, @type = name, type.to_sym
@column = ActiveRecord::ConnectionAdapters::Column.new(@name, nil, @type)
end
def field_type
@field_type ||= case type
when :integer, :float, :decimal then :text_field
when :datetime, :timestamp, :time then :datetime_select
when :date then :date_select
when :string then :text_field
when :text then :text_area
when :boolean then :check_box
else
:text_field
end
end
def default
@default ||= case type
when :integer then 1
when :float then 1.5
when :decimal then "9.99"
when :datetime, :timestamp, :time then Time.now.to_s(:db)
when :date then Date.today.to_s(:db)
when :string then "MyString"
when :text then "MyText"
when :boolean then false
else
""
end
end
def reference?
[ :references, :belongs_to ].include?(self.type)
end
end
end
end

View File

@ -1,4 +1,5 @@
require 'generator/base' require 'generator/base'
require 'generator/generated_attribute'
module Rails module Rails
module Generators module Generators
@ -7,11 +8,13 @@ module Rails
attr_reader :class_name, :singular_name, :plural_name, :table_name, attr_reader :class_name, :singular_name, :plural_name, :table_name,
:class_path, :file_path, :class_nesting, :class_nesting_depth :class_path, :file_path, :class_nesting, :class_nesting_depth
alias :file_name :singular_name alias :file_name :singular_name
def initialize(*args) def initialize(*args)
super super
assign_names! assign_names!
parse_attributes! if respond_to?(:attributes)
end end
protected protected
@ -35,6 +38,14 @@ module Rails
end end
end end
# Convert attributes hash into an array with GeneratedAttribute objects.
#
def parse_attributes!
attributes.map! do |name, type|
Rails::Generator::GeneratedAttribute.new(name, type)
end
end
# Extract modules from filesystem-style or ruby-style path. Both # Extract modules from filesystem-style or ruby-style path. Both
# good/fun/stuff and Good::Fun::Stuff produce the same results. # good/fun/stuff and Good::Fun::Stuff produce the same results.
# #