diff options
author | José Valim <jose.valim@gmail.com> | 2009-12-21 11:21:27 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2009-12-21 11:21:27 +0100 |
commit | 5f34421c77b4cd873baadbbca877a93de5a4d602 (patch) | |
tree | 8182bb1c53864ab06079e14116a61d66e9617f7d /activeresource/lib/active_resource/schema.rb | |
parent | cf7b94c013d4e824433a018001474e71ddd81a99 (diff) | |
parent | f09ad263cabe2e781c1994b85375fee8deba4317 (diff) | |
download | rails-5f34421c77b4cd873baadbbca877a93de5a4d602.tar.gz rails-5f34421c77b4cd873baadbbca877a93de5a4d602.tar.bz2 rails-5f34421c77b4cd873baadbbca877a93de5a4d602.zip |
Merge branch 'master' of git://github.com/rails/rails
Diffstat (limited to 'activeresource/lib/active_resource/schema.rb')
-rw-r--r-- | activeresource/lib/active_resource/schema.rb | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/activeresource/lib/active_resource/schema.rb b/activeresource/lib/active_resource/schema.rb new file mode 100644 index 0000000000..8368b652c2 --- /dev/null +++ b/activeresource/lib/active_resource/schema.rb @@ -0,0 +1,55 @@ +require 'active_resource/exceptions' + +module ActiveResource # :nodoc: + class Schema # :nodoc: + # attributes can be known to be one of these types. They are easy to + # cast to/from. + KNOWN_ATTRIBUTE_TYPES = %w( string integer float ) + + # An array of attribute definitions, representing the attributes that + # have been defined. + attr_accessor :attrs + + # The internals of an Active Resource Schema are very simple - + # unlike an Active Record TableDefinition (on which it is based). + # It provides a set of convenience methods for people to define their + # schema using the syntax: + # schema do + # string :foo + # integer :bar + # end + # + # The schema stores the name and type of each attribute. That is then + # read out by the schema method to populate the actual + # Resource's schema + def initialize + @attrs = {} + end + + def attribute(name, type, options = {}) + raise ArgumentError, "Unknown Attribute type: #{type.inspect} for key: #{name.inspect}" unless type.nil? || Schema::KNOWN_ATTRIBUTE_TYPES.include?(type.to_s) + + the_type = type.to_s + # TODO: add defaults + #the_attr = [type.to_s] + #the_attr << options[:default] if options.has_key? :default + @attrs[name.to_s] = the_type + self + end + + # The following are the attribute types supported by Active Resource + # migrations. + # TODO: We should eventually support all of these: + # %w( string text integer float decimal datetime timestamp time date binary boolean ).each do |attr_type| + KNOWN_ATTRIBUTE_TYPES.each do |attr_type| + class_eval <<-EOV + def #{attr_type.to_s}(*args) + options = args.extract_options! + attr_names = args + + attr_names.each { |name| attribute(name, '#{attr_type}', options) } + end + EOV + end + end +end |