Permalink
Browse files

Add GeneratedAttribute.

  • Loading branch information...
1 parent d4ec091 commit 75fbd7393606b9b026418229eb3eb38542753d43 @josevalim josevalim committed Jun 23, 2009
Showing with 55 additions and 0 deletions.
  1. +44 −0 railties/lib/generator/generated_attribute.rb
  2. +11 −0 railties/lib/generator/named_base.rb
@@ -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
@@ -1,4 +1,5 @@
require 'generator/base'
+require 'generator/generated_attribute'
module Rails
module Generators
@@ -7,11 +8,13 @@ class NamedBase < Base
attr_reader :class_name, :singular_name, :plural_name, :table_name,
:class_path, :file_path, :class_nesting, :class_nesting_depth
+
alias :file_name :singular_name
def initialize(*args)
super
assign_names!
+ parse_attributes! if respond_to?(:attributes)
end
protected
@@ -35,6 +38,14 @@ def assign_names!
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
# good/fun/stuff and Good::Fun::Stuff produce the same results.
#

0 comments on commit 75fbd73

Please sign in to comment.