datamapper 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +31 -1
- data/MIT-LICENSE +1 -1
- data/README +9 -1
- data/example.rb +23 -15
- data/lib/data_mapper.rb +5 -0
- data/lib/data_mapper/adapters/abstract_adapter.rb +9 -207
- data/lib/data_mapper/adapters/mysql_adapter.rb +132 -108
- data/lib/data_mapper/adapters/postgresql_adapter.rb +242 -0
- data/lib/data_mapper/adapters/sql/coersion.rb +74 -0
- data/lib/data_mapper/adapters/sql/commands/advanced_load_command.rb +140 -0
- data/lib/data_mapper/adapters/sql/commands/conditions.rb +161 -0
- data/lib/data_mapper/adapters/sql/commands/delete_command.rb +113 -0
- data/lib/data_mapper/adapters/sql/commands/load_command.rb +296 -0
- data/lib/data_mapper/adapters/sql/commands/save_command.rb +141 -0
- data/lib/data_mapper/adapters/sql/commands/table_exists_command.rb +33 -0
- data/lib/data_mapper/adapters/sql/mappings/column.rb +91 -0
- data/lib/data_mapper/adapters/sql/mappings/schema.rb +30 -0
- data/lib/data_mapper/adapters/sql/mappings/table.rb +143 -0
- data/lib/data_mapper/adapters/sql/quoting.rb +38 -0
- data/lib/data_mapper/adapters/sql_adapter.rb +163 -0
- data/lib/data_mapper/adapters/sqlite3_adapter.rb +155 -116
- data/lib/data_mapper/associations.rb +2 -0
- data/lib/data_mapper/associations/advanced_has_many_association.rb +55 -0
- data/lib/data_mapper/associations/belongs_to_association.rb +2 -2
- data/lib/data_mapper/associations/has_many_association.rb +3 -3
- data/lib/data_mapper/associations/has_one_association.rb +2 -2
- data/lib/data_mapper/base.rb +30 -11
- data/lib/data_mapper/callbacks.rb +4 -1
- data/lib/data_mapper/database.rb +8 -41
- data/lib/data_mapper/identity_map.rb +23 -3
- data/lib/data_mapper/session.rb +34 -186
- data/lib/data_mapper/{extensions → support}/active_record_impersonation.rb +16 -12
- data/lib/data_mapper/support/blank.rb +35 -0
- data/lib/data_mapper/support/connection_pool.rb +2 -1
- data/lib/data_mapper/support/string.rb +27 -0
- data/lib/data_mapper/support/struct.rb +26 -0
- data/lib/data_mapper/validations/unique_validator.rb +1 -3
- data/lib/data_mapper/validations/validation_helper.rb +1 -1
- data/performance.rb +24 -7
- data/profile_data_mapper.rb +24 -2
- data/rakefile.rb +2 -2
- data/spec/basic_finder.rb +2 -2
- data/spec/belongs_to.rb +1 -1
- data/spec/delete_command_spec.rb +9 -0
- data/spec/fixtures/zoos.yaml +4 -0
- data/spec/has_many.rb +1 -1
- data/spec/load_command_spec.rb +44 -0
- data/spec/models/zoo.rb +2 -0
- data/spec/save_command_spec.rb +13 -0
- data/spec/spec_helper.rb +10 -1
- data/spec/support/string_spec.rb +7 -0
- data/spec/validates_confirmation_of.rb +1 -1
- data/spec/validates_format_of.rb +1 -1
- data/spec/validates_length_of.rb +1 -1
- data/spec/validations.rb +1 -1
- metadata +23 -20
- data/lib/data_mapper/extensions/callback_helpers.rb +0 -35
- data/lib/data_mapper/loaded_set.rb +0 -45
- data/lib/data_mapper/mappings/column.rb +0 -78
- data/lib/data_mapper/mappings/schema.rb +0 -28
- data/lib/data_mapper/mappings/table.rb +0 -99
- data/lib/data_mapper/queries/conditions.rb +0 -141
- data/lib/data_mapper/queries/connection.rb +0 -34
- data/lib/data_mapper/queries/create_table_statement.rb +0 -38
- data/lib/data_mapper/queries/delete_statement.rb +0 -17
- data/lib/data_mapper/queries/drop_table_statement.rb +0 -17
- data/lib/data_mapper/queries/insert_statement.rb +0 -29
- data/lib/data_mapper/queries/reader.rb +0 -42
- data/lib/data_mapper/queries/result.rb +0 -19
- data/lib/data_mapper/queries/select_statement.rb +0 -103
- data/lib/data_mapper/queries/table_exists_statement.rb +0 -17
- data/lib/data_mapper/queries/truncate_table_statement.rb +0 -17
- data/lib/data_mapper/queries/update_statement.rb +0 -25
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            describe DataMapper::Adapters::Sql::Commands::SaveCommand do
         | 
| 2 | 
            +
              
         | 
| 3 | 
            +
              it "should create a new row" do
         | 
| 4 | 
            +
                Zoo.create({ :name => 'bob' })
         | 
| 5 | 
            +
              end
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              it "should update an existing row" do
         | 
| 8 | 
            +
                dallas = Zoo[:name => 'Dallas']
         | 
| 9 | 
            +
                dallas.name = 'bob'
         | 
| 10 | 
            +
                dallas.save
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -15,6 +15,14 @@ when 'sqlite3' then | |
| 15 15 | 
             
                log_stream 'spec.log'
         | 
| 16 16 | 
             
                log_level Logger::DEBUG
         | 
| 17 17 | 
             
              end
         | 
| 18 | 
            +
            when 'postgresql' then
         | 
| 19 | 
            +
              DataMapper::Database.setup do
         | 
| 20 | 
            +
                adapter  'postgresql'
         | 
| 21 | 
            +
                database 'data_mapper_1'
         | 
| 22 | 
            +
                username 'postgres'
         | 
| 23 | 
            +
                log_stream 'spec.log'
         | 
| 24 | 
            +
                log_level Logger::DEBUG
         | 
| 25 | 
            +
              end
         | 
| 18 26 | 
             
            else
         | 
| 19 27 | 
             
              DataMapper::Database.setup do
         | 
| 20 28 | 
             
                adapter 'mysql'
         | 
| @@ -48,6 +56,7 @@ def fixtures(name) | |
| 48 56 | 
             
              entry = YAML::load_file(File.dirname(__FILE__) + "/fixtures/#{name}.yaml")
         | 
| 49 57 | 
             
              klass = Kernel::const_get(Inflector.classify(Inflector.singularize(name)))
         | 
| 50 58 |  | 
| 59 | 
            +
              database.schema[klass].create!
         | 
| 51 60 | 
             
              klass.truncate!
         | 
| 52 61 |  | 
| 53 62 | 
             
              (entry.kind_of?(Array) ? entry : [entry]).each do |hash|
         | 
| @@ -58,4 +67,4 @@ end | |
| 58 67 | 
             
            # Pre-fill the database so non-destructive tests don't need to reload fixtures.
         | 
| 59 68 | 
             
            Dir[File.dirname(__FILE__) + "/fixtures/*.yaml"].each do |path|
         | 
| 60 69 | 
             
              fixtures(File::basename(path).sub(/\.yaml$/, ''))
         | 
| 61 | 
            -
            end
         | 
| 70 | 
            +
            end
         | 
    
        data/spec/validates_format_of.rb
    CHANGED
    
    
    
        data/spec/validates_length_of.rb
    CHANGED
    
    
    
        data/spec/validations.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.9.0 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: datamapper
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0.1. | 
| 7 | 
            -
            date: 2007- | 
| 6 | 
            +
              version: 0.1.1
         | 
| 7 | 
            +
            date: 2007-08-12 00:00:00 -05:00
         | 
| 8 8 | 
             
            summary: An Object/Relational Mapper for Ruby
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| @@ -42,39 +42,38 @@ files: | |
| 42 42 | 
             
            - lib/data_mapper/callbacks.rb
         | 
| 43 43 | 
             
            - lib/data_mapper/database.rb
         | 
| 44 44 | 
             
            - lib/data_mapper/identity_map.rb
         | 
| 45 | 
            -
            - lib/data_mapper/loaded_set.rb
         | 
| 46 45 | 
             
            - lib/data_mapper/session.rb
         | 
| 47 46 | 
             
            - lib/data_mapper/unit_of_work.rb
         | 
| 48 47 | 
             
            - lib/data_mapper/adapters/abstract_adapter.rb
         | 
| 49 48 | 
             
            - lib/data_mapper/adapters/mysql_adapter.rb
         | 
| 49 | 
            +
            - lib/data_mapper/adapters/postgresql_adapter.rb
         | 
| 50 | 
            +
            - lib/data_mapper/adapters/sql_adapter.rb
         | 
| 50 51 | 
             
            - lib/data_mapper/adapters/sqlite3_adapter.rb
         | 
| 52 | 
            +
            - lib/data_mapper/adapters/sql/coersion.rb
         | 
| 53 | 
            +
            - lib/data_mapper/adapters/sql/quoting.rb
         | 
| 54 | 
            +
            - lib/data_mapper/adapters/sql/commands/advanced_load_command.rb
         | 
| 55 | 
            +
            - lib/data_mapper/adapters/sql/commands/conditions.rb
         | 
| 56 | 
            +
            - lib/data_mapper/adapters/sql/commands/delete_command.rb
         | 
| 57 | 
            +
            - lib/data_mapper/adapters/sql/commands/load_command.rb
         | 
| 58 | 
            +
            - lib/data_mapper/adapters/sql/commands/save_command.rb
         | 
| 59 | 
            +
            - lib/data_mapper/adapters/sql/commands/table_exists_command.rb
         | 
| 60 | 
            +
            - lib/data_mapper/adapters/sql/mappings/column.rb
         | 
| 61 | 
            +
            - lib/data_mapper/adapters/sql/mappings/schema.rb
         | 
| 62 | 
            +
            - lib/data_mapper/adapters/sql/mappings/table.rb
         | 
| 63 | 
            +
            - lib/data_mapper/associations/advanced_has_many_association.rb
         | 
| 51 64 | 
             
            - lib/data_mapper/associations/belongs_to_association.rb
         | 
| 52 65 | 
             
            - lib/data_mapper/associations/has_and_belongs_to_many_association.rb
         | 
| 53 66 | 
             
            - lib/data_mapper/associations/has_many_association.rb
         | 
| 54 67 | 
             
            - lib/data_mapper/associations/has_one_association.rb
         | 
| 55 | 
            -
            - lib/data_mapper/ | 
| 56 | 
            -
            - lib/data_mapper/ | 
| 57 | 
            -
            - lib/data_mapper/mappings/column.rb
         | 
| 58 | 
            -
            - lib/data_mapper/mappings/schema.rb
         | 
| 59 | 
            -
            - lib/data_mapper/mappings/table.rb
         | 
| 60 | 
            -
            - lib/data_mapper/queries/conditions.rb
         | 
| 61 | 
            -
            - lib/data_mapper/queries/connection.rb
         | 
| 62 | 
            -
            - lib/data_mapper/queries/create_table_statement.rb
         | 
| 63 | 
            -
            - lib/data_mapper/queries/delete_statement.rb
         | 
| 64 | 
            -
            - lib/data_mapper/queries/drop_table_statement.rb
         | 
| 65 | 
            -
            - lib/data_mapper/queries/insert_statement.rb
         | 
| 66 | 
            -
            - lib/data_mapper/queries/reader.rb
         | 
| 67 | 
            -
            - lib/data_mapper/queries/result.rb
         | 
| 68 | 
            -
            - lib/data_mapper/queries/select_statement.rb
         | 
| 69 | 
            -
            - lib/data_mapper/queries/table_exists_statement.rb
         | 
| 70 | 
            -
            - lib/data_mapper/queries/truncate_table_statement.rb
         | 
| 71 | 
            -
            - lib/data_mapper/queries/update_statement.rb
         | 
| 68 | 
            +
            - lib/data_mapper/support/active_record_impersonation.rb
         | 
| 69 | 
            +
            - lib/data_mapper/support/blank.rb
         | 
| 72 70 | 
             
            - lib/data_mapper/support/blank_slate.rb
         | 
| 73 71 | 
             
            - lib/data_mapper/support/connection_pool.rb
         | 
| 74 72 | 
             
            - lib/data_mapper/support/enumerable.rb
         | 
| 75 73 | 
             
            - lib/data_mapper/support/inflector.rb
         | 
| 76 74 | 
             
            - lib/data_mapper/support/proc.rb
         | 
| 77 75 | 
             
            - lib/data_mapper/support/string.rb
         | 
| 76 | 
            +
            - lib/data_mapper/support/struct.rb
         | 
| 78 77 | 
             
            - lib/data_mapper/support/symbol.rb
         | 
| 79 78 | 
             
            - lib/data_mapper/support/weak_hash.rb
         | 
| 80 79 | 
             
            - lib/data_mapper/validations/confirmation_validator.rb
         | 
| @@ -89,10 +88,13 @@ files: | |
| 89 88 | 
             
            - lib/data_mapper/validations/formats/email.rb
         | 
| 90 89 | 
             
            - spec/basic_finder.rb
         | 
| 91 90 | 
             
            - spec/belongs_to.rb
         | 
| 91 | 
            +
            - spec/delete_command_spec.rb
         | 
| 92 92 | 
             
            - spec/has_and_belongs_to_many.rb
         | 
| 93 93 | 
             
            - spec/has_many.rb
         | 
| 94 94 | 
             
            - spec/legacy.rb
         | 
| 95 | 
            +
            - spec/load_command_spec.rb
         | 
| 95 96 | 
             
            - spec/new_record.rb
         | 
| 97 | 
            +
            - spec/save_command_spec.rb
         | 
| 96 98 | 
             
            - spec/spec_helper.rb
         | 
| 97 99 | 
             
            - spec/sub_select.rb
         | 
| 98 100 | 
             
            - spec/symbolic_operators.rb
         | 
| @@ -108,6 +110,7 @@ files: | |
| 108 110 | 
             
            - spec/models/post.rb
         | 
| 109 111 | 
             
            - spec/models/sales_person.rb
         | 
| 110 112 | 
             
            - spec/models/zoo.rb
         | 
| 113 | 
            +
            - spec/support/string_spec.rb
         | 
| 111 114 | 
             
            - spec/fixtures/animals.yaml
         | 
| 112 115 | 
             
            - spec/fixtures/exhibits.yaml
         | 
| 113 116 | 
             
            - spec/fixtures/fruit.yaml
         | 
| @@ -1,35 +0,0 @@ | |
| 1 | 
            -
            require 'data_mapper/callbacks'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module DataMapper
         | 
| 4 | 
            -
              module Extensions
         | 
| 5 | 
            -
                
         | 
| 6 | 
            -
                module CallbackHelpers
         | 
| 7 | 
            -
                
         | 
| 8 | 
            -
                  def self.included(base)
         | 
| 9 | 
            -
                    base.extend(ClassMethods)
         | 
| 10 | 
            -
                    
         | 
| 11 | 
            -
                    # declare helpers for the standard callbacks
         | 
| 12 | 
            -
                    Callbacks::EVENTS.each do |name|
         | 
| 13 | 
            -
                      base.class_eval <<-EOS
         | 
| 14 | 
            -
                        def self.#{name}(string = nil, &block)
         | 
| 15 | 
            -
                          if string.nil?
         | 
| 16 | 
            -
                            callbacks.add(:#{name}, &block)
         | 
| 17 | 
            -
                          else
         | 
| 18 | 
            -
                            callbacks.add(:#{name}, string)
         | 
| 19 | 
            -
                          end
         | 
| 20 | 
            -
                        end
         | 
| 21 | 
            -
                      EOS
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
                  
         | 
| 25 | 
            -
                  module ClassMethods
         | 
| 26 | 
            -
                    
         | 
| 27 | 
            -
                    def callbacks
         | 
| 28 | 
            -
                      @callbacks ||= Callbacks.new
         | 
| 29 | 
            -
                    end
         | 
| 30 | 
            -
                  end
         | 
| 31 | 
            -
                  
         | 
| 32 | 
            -
                end
         | 
| 33 | 
            -
                
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
            end
         | 
| @@ -1,45 +0,0 @@ | |
| 1 | 
            -
            require 'data_mapper/support/enumerable'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module DataMapper
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              # LoadedSet's purpose is to give a common reference for the results of a query,
         | 
| 6 | 
            -
              # so that they can be manipulated by the DataMapper, behind-the-scenes, as a set.
         | 
| 7 | 
            -
              class LoadedSet
         | 
| 8 | 
            -
                
         | 
| 9 | 
            -
                # Provides a reference to the database that originally loaded the instances.
         | 
| 10 | 
            -
                attr_reader :database
         | 
| 11 | 
            -
                # Provides an Enumerable of the instances loaded in the set.
         | 
| 12 | 
            -
                attr_reader :instances
         | 
| 13 | 
            -
                
         | 
| 14 | 
            -
                def initialize(database)
         | 
| 15 | 
            -
                  @database = database
         | 
| 16 | 
            -
                  @instances = [] # ObjectIdCollection.new
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
                
         | 
| 19 | 
            -
                # Not sure if this is necessary yet...
         | 
| 20 | 
            -
                # In other words: Does it make sense to allow portions of a set to be
         | 
| 21 | 
            -
                # garbage-collected?
         | 
| 22 | 
            -
                #
         | 
| 23 | 
            -
                # If so, then this isn't good enough because it's likely to
         | 
| 24 | 
            -
                # throw errors. If it's not, then letting Ruby itself track the
         | 
| 25 | 
            -
                # references with a simple Array is probably more effecient.
         | 
| 26 | 
            -
                class ObjectIdCollection
         | 
| 27 | 
            -
                  
         | 
| 28 | 
            -
                  include Enumerable
         | 
| 29 | 
            -
                  include Support::Enumerable
         | 
| 30 | 
            -
                  
         | 
| 31 | 
            -
                  def initialize
         | 
| 32 | 
            -
                    @object_ids = []
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
                  
         | 
| 35 | 
            -
                  def each
         | 
| 36 | 
            -
                    @object_ids.map { |id| yield ObjectSpace::_id2ref(id) }
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
                  
         | 
| 39 | 
            -
                  def <<(object)
         | 
| 40 | 
            -
                    @object_ids << object.object_id
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
              end
         | 
| 44 | 
            -
             | 
| 45 | 
            -
            end
         | 
| @@ -1,78 +0,0 @@ | |
| 1 | 
            -
            module DataMapper
         | 
| 2 | 
            -
              module Mappings
         | 
| 3 | 
            -
                
         | 
| 4 | 
            -
                # TODO: There are of course many more options to add here.
         | 
| 5 | 
            -
                # Ordinal, Length/Size, Nullability are just a few.
         | 
| 6 | 
            -
                class Column
         | 
| 7 | 
            -
                
         | 
| 8 | 
            -
                  attr_accessor :name, :type, :options
         | 
| 9 | 
            -
                
         | 
| 10 | 
            -
                  def initialize(database, name, type, options = {})
         | 
| 11 | 
            -
                    @database = database
         | 
| 12 | 
            -
                    @name, @type, @options = name.to_sym, type, options
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
                
         | 
| 15 | 
            -
                  def lazy=(value)
         | 
| 16 | 
            -
                    @options[:lazy] = value
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                
         | 
| 19 | 
            -
                  # Determines if the field should be lazy loaded.
         | 
| 20 | 
            -
                  # You can set this explicitly, or accept the default,
         | 
| 21 | 
            -
                  # which is false for all but text fields.
         | 
| 22 | 
            -
                  def lazy?
         | 
| 23 | 
            -
                    @options[:lazy] || (type == :text)
         | 
| 24 | 
            -
                  end
         | 
| 25 | 
            -
                  
         | 
| 26 | 
            -
                  def nullable?
         | 
| 27 | 
            -
                    @options[:nullable] || true
         | 
| 28 | 
            -
                  end
         | 
| 29 | 
            -
                  
         | 
| 30 | 
            -
                  def key?
         | 
| 31 | 
            -
                    @options[:key] || false
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
                
         | 
| 34 | 
            -
                  def to_sym
         | 
| 35 | 
            -
                    @name
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                  
         | 
| 38 | 
            -
                  def instance_variable_name
         | 
| 39 | 
            -
                    @instance_variable_name || (@instance_variable_name = "@#{@name.to_s.gsub(/\?$/, '')}".freeze)
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
                  
         | 
| 42 | 
            -
                  def to_s
         | 
| 43 | 
            -
                    @name.to_s
         | 
| 44 | 
            -
                  end
         | 
| 45 | 
            -
                  
         | 
| 46 | 
            -
                  def type_cast_value(value)
         | 
| 47 | 
            -
                    @database.type_cast_value(type, value)
         | 
| 48 | 
            -
                  end
         | 
| 49 | 
            -
                  
         | 
| 50 | 
            -
                  def column_name
         | 
| 51 | 
            -
                    @column_name || (@column_name = (@options.has_key?(:column) ? @options[:column].to_s : name.to_s.gsub(/\?$/, '')).freeze)
         | 
| 52 | 
            -
                  end
         | 
| 53 | 
            -
                  
         | 
| 54 | 
            -
                  def to_sql
         | 
| 55 | 
            -
                    @to_sql || (@to_sql = @database.quote_column_name(column_name).freeze)
         | 
| 56 | 
            -
                  end
         | 
| 57 | 
            -
                  
         | 
| 58 | 
            -
                  def size
         | 
| 59 | 
            -
                    @size || begin
         | 
| 60 | 
            -
                      return @size = @options[:size] if @options.has_key?(:size)
         | 
| 61 | 
            -
                      return @size = @options[:length] if @options.has_key?(:length)
         | 
| 62 | 
            -
                      
         | 
| 63 | 
            -
                      @size = case type
         | 
| 64 | 
            -
                        when :integer then 4
         | 
| 65 | 
            -
                        when :string, :class then 50
         | 
| 66 | 
            -
                        else nil
         | 
| 67 | 
            -
                      end
         | 
| 68 | 
            -
                    end
         | 
| 69 | 
            -
                  end
         | 
| 70 | 
            -
                  
         | 
| 71 | 
            -
                  def inspect
         | 
| 72 | 
            -
                    "#<%s:0x%x @name=%s, @type=%s, @options=%s>" % [self.class.name, (object_id * 2), to_sql, type.inspect, options.inspect]
         | 
| 73 | 
            -
                  end
         | 
| 74 | 
            -
                  
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
                
         | 
| 77 | 
            -
              end
         | 
| 78 | 
            -
            end
         | 
| @@ -1,28 +0,0 @@ | |
| 1 | 
            -
            require 'data_mapper/mappings/table'
         | 
| 2 | 
            -
                
         | 
| 3 | 
            -
            module DataMapper
         | 
| 4 | 
            -
              module Mappings
         | 
| 5 | 
            -
                
         | 
| 6 | 
            -
                class Schema
         | 
| 7 | 
            -
                
         | 
| 8 | 
            -
                  def initialize(database)
         | 
| 9 | 
            -
                    @database = database
         | 
| 10 | 
            -
                    @tables = Hash.new { |h,k| h[k] = Table.new(@database, k) }
         | 
| 11 | 
            -
                  end
         | 
| 12 | 
            -
                
         | 
| 13 | 
            -
                  def [](klass)
         | 
| 14 | 
            -
                    @tables[klass]
         | 
| 15 | 
            -
                  rescue
         | 
| 16 | 
            -
                    raise "#{klass.inspect} can't be mapped to a table"
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                  
         | 
| 19 | 
            -
                  def each
         | 
| 20 | 
            -
                    @tables.values.each do |table|
         | 
| 21 | 
            -
                      yield table
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
                
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
                
         | 
| 27 | 
            -
              end
         | 
| 28 | 
            -
            end
         | 
| @@ -1,99 +0,0 @@ | |
| 1 | 
            -
            require 'data_mapper/mappings/column'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module DataMapper
         | 
| 4 | 
            -
              module Mappings
         | 
| 5 | 
            -
                
         | 
| 6 | 
            -
                class Table
         | 
| 7 | 
            -
                  
         | 
| 8 | 
            -
                  attr_reader :klass
         | 
| 9 | 
            -
                  
         | 
| 10 | 
            -
                  def initialize(database, klass)
         | 
| 11 | 
            -
                    unless database.kind_of?(DataMapper::Database) && klass.kind_of?(Class)
         | 
| 12 | 
            -
                      raise "Database and klass are required: #{ { :database => database, :klass => klass }.inspect }"
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
                    
         | 
| 15 | 
            -
                    @database = database
         | 
| 16 | 
            -
                    @klass = klass
         | 
| 17 | 
            -
                    @columns = []
         | 
| 18 | 
            -
                    @columns_hash = Hash.new { |h,k| h[k] = @columns.find { |c| c.name == k } }
         | 
| 19 | 
            -
                    @columns_by_column_name = Hash.new { |h,k| h[k.to_s] = @columns.find { |c| c.column_name == k.to_s } }
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                  
         | 
| 22 | 
            -
                  def columns
         | 
| 23 | 
            -
                    key if @key.nil?
         | 
| 24 | 
            -
                    @columns
         | 
| 25 | 
            -
                  end
         | 
| 26 | 
            -
                  
         | 
| 27 | 
            -
                  def key
         | 
| 28 | 
            -
                    if @key.nil?
         | 
| 29 | 
            -
                      key_column = @columns.find { |c| c.key? }
         | 
| 30 | 
            -
                      @key = if key_column.nil?
         | 
| 31 | 
            -
                        add_column(:id, :integer, :key => true)
         | 
| 32 | 
            -
                        @klass.send(:attr_reader, :id) unless @klass.methods.include?(:id)
         | 
| 33 | 
            -
                        @columns.last
         | 
| 34 | 
            -
                      else
         | 
| 35 | 
            -
                        key_column
         | 
| 36 | 
            -
                      end
         | 
| 37 | 
            -
                    end
         | 
| 38 | 
            -
                      
         | 
| 39 | 
            -
                    @key
         | 
| 40 | 
            -
                  end
         | 
| 41 | 
            -
                  
         | 
| 42 | 
            -
                  def add_column(column_name, type, options)
         | 
| 43 | 
            -
                    column = @columns.find { |c| c.name == column_name.to_sym }
         | 
| 44 | 
            -
                    
         | 
| 45 | 
            -
                    if column.nil?
         | 
| 46 | 
            -
                      reset_derived_columns!
         | 
| 47 | 
            -
                      column = Column.new(@database, column_name, type, options)
         | 
| 48 | 
            -
                      @columns << column
         | 
| 49 | 
            -
                    end
         | 
| 50 | 
            -
                    
         | 
| 51 | 
            -
                    return column
         | 
| 52 | 
            -
                  end
         | 
| 53 | 
            -
                  
         | 
| 54 | 
            -
                  def [](column_name)
         | 
| 55 | 
            -
                    return key if column_name == :id
         | 
| 56 | 
            -
                    @columns_hash[column_name.kind_of?(Symbol) ? column_name : column_name.to_sym]
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
                  
         | 
| 59 | 
            -
                  def find_by_column_name(column_name)
         | 
| 60 | 
            -
                    @columns_by_column_name[column_name.kind_of?(String) ? column_name : column_name.to_s]
         | 
| 61 | 
            -
                  end
         | 
| 62 | 
            -
                  
         | 
| 63 | 
            -
                  def name
         | 
| 64 | 
            -
                    @name || begin
         | 
| 65 | 
            -
                      @name = if @klass.superclass != DataMapper::Base
         | 
| 66 | 
            -
                        @database[@klass.superclass].name
         | 
| 67 | 
            -
                      else
         | 
| 68 | 
            -
                        Inflector.tableize(@klass.name)
         | 
| 69 | 
            -
                      end.freeze
         | 
| 70 | 
            -
                    end
         | 
| 71 | 
            -
                  end
         | 
| 72 | 
            -
                  
         | 
| 73 | 
            -
                  def name=(value)
         | 
| 74 | 
            -
                    @name = value
         | 
| 75 | 
            -
                  end
         | 
| 76 | 
            -
                  
         | 
| 77 | 
            -
                  def default_foreign_key
         | 
| 78 | 
            -
                    @default_foreign_key || (@default_foreign_key = "#{Inflector.underscore(Inflector.singularize(name))}_id".freeze)
         | 
| 79 | 
            -
                  end
         | 
| 80 | 
            -
                  
         | 
| 81 | 
            -
                  def to_sql
         | 
| 82 | 
            -
                    @to_sql || (@to_sql = @database.quote_table_name(name).freeze)
         | 
| 83 | 
            -
                  end
         | 
| 84 | 
            -
                  
         | 
| 85 | 
            -
                  def inspect
         | 
| 86 | 
            -
                    "#<%s:0x%x @klass=%s, @name=%s, @columns=%s>" % [self.class.name, (object_id * 2), @klass.name, to_sql, @columns.inspect]
         | 
| 87 | 
            -
                  end
         | 
| 88 | 
            -
                  
         | 
| 89 | 
            -
                  private
         | 
| 90 | 
            -
                  def reset_derived_columns!
         | 
| 91 | 
            -
                    @columns_hash.clear
         | 
| 92 | 
            -
                    @columns_by_column_name.clear
         | 
| 93 | 
            -
                    @key = nil
         | 
| 94 | 
            -
                  end
         | 
| 95 | 
            -
                  
         | 
| 96 | 
            -
                end
         | 
| 97 | 
            -
                
         | 
| 98 | 
            -
              end  
         | 
| 99 | 
            -
            end
         |