drysql 0.2.0 → 0.2.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/lib/associations.rb +19 -11
- data/lib/base.rb +0 -8
- data/lib/connection_adapters/oracle_adapter.rb +8 -5
- metadata +8 -8
    
        data/lib/associations.rb
    CHANGED
    
    | @@ -21,9 +21,7 @@ module ActiveRecord | |
| 21 21 | 
             
                    logger.info("DRYSQL >> Cleared cached schema for: #{self}")
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 |  | 
| 24 | 
            -
             | 
| 25 | 
            -
                    !(reflections.detect {|key, reflection| key.to_s.singularize == class_name_symbol.to_s.singularize}).nil?
         | 
| 26 | 
            -
                  end
         | 
| 24 | 
            +
             | 
| 27 25 |  | 
| 28 26 | 
             
                  private
         | 
| 29 27 |  | 
| @@ -31,7 +29,7 @@ module ActiveRecord | |
| 31 29 | 
             
                    def generate_belongs_to_associations
         | 
| 32 30 | 
             
                      foreign_keys = table_constraints.select {|constraint| constraint.foreign_key?}
         | 
| 33 31 | 
             
                      foreign_keys.each do |foreign_key| 
         | 
| 34 | 
            -
                        belongs_to_class_name = (class_name(foreign_key.referenced_table_name)) | 
| 32 | 
            +
                        belongs_to_class_name = association_class_name_from_table_name(class_name(foreign_key.referenced_table_name))
         | 
| 35 33 | 
             
                        self.send(:belongs_to, :"#{belongs_to_class_name}", :foreign_key=>foreign_key.column_name.to_a[0])
         | 
| 36 34 | 
             
                        logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} belongs_to :#{belongs_to_class_name}, :foreign_key=>#{foreign_key.column_name.to_a[0]}")
         | 
| 37 35 | 
             
                      end
         | 
| @@ -42,11 +40,11 @@ module ActiveRecord | |
| 42 40 | 
             
                    def generate_has_many_associations
         | 
| 43 41 | 
             
                      foreign_constraints.each do |foreign_constraint|
         | 
| 44 42 | 
             
                        if foreign_constraint_column_is_unique?(foreign_constraint)
         | 
| 45 | 
            -
                          has_one_class_name = (class_name(foreign_constraint.table_name)) | 
| 43 | 
            +
                          has_one_class_name = association_class_name_from_table_name(class_name(foreign_constraint.table_name))
         | 
| 46 44 | 
             
                          self.send(:has_one, :"#{has_one_class_name}", :foreign_key=>foreign_constraint.column_name.to_a[0])
         | 
| 47 45 | 
             
                          logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_one :#{has_one_class_name}, :foreign_key=>#{foreign_constraint.column_name.to_a[0]}")
         | 
| 48 46 | 
             
                        else
         | 
| 49 | 
            -
                          has_many_class_name = (class_name(foreign_constraint.table_name)). | 
| 47 | 
            +
                          has_many_class_name = association_class_name_from_table_name(class_name(foreign_constraint.table_name)).pluralize
         | 
| 50 48 | 
             
                          self.send(:has_many, :"#{has_many_class_name}", :foreign_key=>foreign_constraint.column_name.to_a[0])
         | 
| 51 49 | 
             
                          logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_many :#{has_many_class_name}, :foreign_key=>#{foreign_constraint.column_name.to_a[0]}")
         | 
| 52 50 | 
             
                        end
         | 
| @@ -80,15 +78,25 @@ module ActiveRecord | |
| 80 78 | 
             
                      has_many_associations.each do |association|
         | 
| 81 79 | 
             
                        # FIXME the singularization is a hack. We should be able to figure the exact class name without relying
         | 
| 82 80 | 
             
                        #            on naming conventions
         | 
| 83 | 
            -
                        foreign_class = instance_eval(association[0].to_s.camelize.singularize)
         | 
| 81 | 
            +
                        foreign_class = instance_eval(association[0].to_s.camelize.singularize)            
         | 
| 84 82 | 
             
                        eligible_foreign_keys = foreign_class.table_constraints.select {|c| c.foreign_key? && c.referenced_table_name.upcase != table_name.upcase}
         | 
| 85 | 
            -
                        eligible_foreign_keys.select {|key| ! | 
| 86 | 
            -
                          has_many_class_name =  | 
| 87 | 
            -
                          self.send(:has_many, has_many_class_name, :through=>association[0])
         | 
| 88 | 
            -
                          logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_many  | 
| 83 | 
            +
                        eligible_foreign_keys.select {|key| !is_associated_with(association_class_name_from_table_name(key.referenced_table_name))}.each do |fk|
         | 
| 84 | 
            +
                          has_many_class_name = association_class_name_from_table_name(class_name(fk.referenced_table_name)).pluralize
         | 
| 85 | 
            +
                          self.send(:has_many, :"#{has_many_class_name}", :through=>association[0])
         | 
| 86 | 
            +
                          logger.info("DRYSQL >> GENERATED ASSOCIATION: #{self.name} has_many :#{has_many_class_name}, :through=>:#{association[0]}")             
         | 
| 89 87 | 
             
                        end
         | 
| 90 88 | 
             
                      end
         | 
| 91 89 | 
             
                    end
         | 
| 90 | 
            +
                    
         | 
| 91 | 
            +
                    
         | 
| 92 | 
            +
                    def is_associated_with(class_name_symbol)
         | 
| 93 | 
            +
                      !(reflections.detect {|key, reflection| key.to_s.singularize == class_name_symbol.to_s.singularize}).nil?
         | 
| 94 | 
            +
                    end
         | 
| 95 | 
            +
                    
         | 
| 96 | 
            +
                    
         | 
| 97 | 
            +
                    def association_class_name_from_table_name(table_name)
         | 
| 98 | 
            +
                      Inflector.underscore(Inflector.demodulize(class_name(table_name)))
         | 
| 99 | 
            +
                    end
         | 
| 92 100 |  | 
| 93 101 | 
             
                end  # end of class methods
         | 
| 94 102 |  | 
    
        data/lib/base.rb
    CHANGED
    
    | @@ -156,14 +156,6 @@ module ActiveRecord | |
| 156 156 | 
             
                      reflections.select {|key, reflection| reflection.macro == :has_many}
         | 
| 157 157 | 
             
                    end
         | 
| 158 158 |  | 
| 159 | 
            -
                    def symbolized_class_name_from_table_name(table_name)
         | 
| 160 | 
            -
                      (class_name(table_name)).downcaseFirstLetter.to_sym
         | 
| 161 | 
            -
                    end
         | 
| 162 | 
            -
                  
         | 
| 163 | 
            -
                    def pluralized_symbolized_class_name_from_table_name(table_name)
         | 
| 164 | 
            -
                      (class_name(table_name)).downcaseFirstLetter.pluralize.to_sym
         | 
| 165 | 
            -
                    end
         | 
| 166 | 
            -
                    
         | 
| 167 159 | 
             
                    def construct_table_name_from_class_name(class_name)
         | 
| 168 160 | 
             
                      name = "#{table_name_prefix}#{undecorated_table_name(class_name)}#{table_name_suffix}"
         | 
| 169 161 | 
             
                    end
         | 
| @@ -93,25 +93,28 @@ module ActiveRecord | |
| 93 93 | 
             
                  end
         | 
| 94 94 |  | 
| 95 95 | 
             
                  def constraints(table_name, name = nil)#:nodoc:
         | 
| 96 | 
            -
                    constraints = [] | 
| 96 | 
            +
                    constraints = []    
         | 
| 97 | 
            +
                    upcase_table_name = table_name.upcase   
         | 
| 97 98 | 
             
                    sql = "select UC.constraint_name, UC.constraint_type, UC.table_name, COL.column_name, \
         | 
| 98 99 | 
             
                      REF.r_constraint_name as referenced_constraint_name, REF.constraint_name as foreign_constraint_name, \
         | 
| 99 100 | 
             
                      REF.delete_rule as foreign_delete_rule, COLREF.table_name as foreign_table_name, COLREF.column_name as foreign_column_name from \
         | 
| 100 101 | 
             
                      (select owner, constraint_name, constraint_type, table_name, r_owner, r_constraint_name \
         | 
| 101 | 
            -
                      from all_constraints where table_name='#{ | 
| 102 | 
            -
                      (select constraint_name, table_name, column_name from all_cons_columns where table_name='#{ | 
| 102 | 
            +
                      from all_constraints where table_name='#{upcase_table_name}') UC inner join \
         | 
| 103 | 
            +
                      (select constraint_name, table_name, column_name from all_cons_columns where table_name='#{upcase_table_name}') COL on \
         | 
| 103 104 | 
             
                      (COL.constraint_name = UC.constraint_name) left join all_constraints REF on \
         | 
| 104 105 | 
             
                      (UC.constraint_name=REF.constraint_name OR UC.constraint_name=REF.r_constraint_name) left join all_cons_columns COLREF on \
         | 
| 105 | 
            -
                      (not COLREF.table_name='#{ | 
| 106 | 
            +
                      (not COLREF.table_name='#{upcase_table_name}' AND (REF.constraint_name=COLREF.constraint_name OR REF.r_constraint_name=COLREF.constraint_name))"
         | 
| 106 107 |  | 
| 107 108 | 
             
                    results = select_all(sql, name)     
         | 
| 108 109 | 
             
                    constraint_name_hash = {}
         | 
| 109 110 | 
             
                    results.each do |row| 
         | 
| 110 111 | 
             
                      # The author(s) of the Oracle adapter chose to selectively downcase column names for
         | 
| 111 | 
            -
                      # "cleanliness" within our Rails code. I had to follow suit with constraint column names
         | 
| 112 | 
            +
                      # "cleanliness" within our Rails code. I had to follow suit with constraint column & table names
         | 
| 112 113 | 
             
                      # so that model objects could look up their data values using the generated column accessor methods
         | 
| 113 114 | 
             
                      column_name = oracle_downcase(row['column_name'])
         | 
| 114 115 | 
             
                      unless row['foreign_column_name'].nil? then row['foreign_column_name'] = oracle_downcase(row['foreign_column_name']) end
         | 
| 116 | 
            +
                      unless row['table_name'].nil? then row['table_name'] = oracle_downcase(row['table_name']) end
         | 
| 117 | 
            +
                      unless row['foreign_table_name'].nil? then row['foreign_table_name'] = oracle_downcase(row['foreign_table_name']) end
         | 
| 115 118 | 
             
                      constraint_name = row['constraint_name']
         | 
| 116 119 | 
             
                      foreign_constraint_name = row['foreign_constraint_name']
         | 
| 117 120 |  | 
    
        metadata
    CHANGED
    
    | @@ -3,8 +3,8 @@ rubygems_version: 0.8.11 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: drysql
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0.2. | 
| 7 | 
            -
            date: 2007- | 
| 6 | 
            +
              version: 0.2.1
         | 
| 7 | 
            +
            date: 2007-02-08 00:00:00 -05:00
         | 
| 8 8 | 
             
            summary: Dynamic, Reflective, Invisible Object-Relational Mapping for Ruby
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| @@ -28,18 +28,18 @@ cert_chain: | |
| 28 28 | 
             
            authors: 
         | 
| 29 29 | 
             
            - Bryan Evans
         | 
| 30 30 | 
             
            files: 
         | 
| 31 | 
            -
            - lib/validations.rb
         | 
| 32 | 
            -
            - lib/dependencies.rb
         | 
| 33 31 | 
             
            - lib/associations.rb
         | 
| 34 | 
            -
            - lib/drysql.rb
         | 
| 35 32 | 
             
            - lib/base.rb
         | 
| 33 | 
            +
            - lib/dependencies.rb
         | 
| 34 | 
            +
            - lib/drysql.rb
         | 
| 35 | 
            +
            - lib/validations.rb
         | 
| 36 36 | 
             
            - lib/helpers/string.rb
         | 
| 37 | 
            -
            - lib/connection_adapters/ | 
| 37 | 
            +
            - lib/connection_adapters/abstract_adapter.rb
         | 
| 38 | 
            +
            - lib/connection_adapters/ibm_db2_adapter.rb
         | 
| 38 39 | 
             
            - lib/connection_adapters/mysql_adapter.rb
         | 
| 39 40 | 
             
            - lib/connection_adapters/oracle_adapter.rb
         | 
| 41 | 
            +
            - lib/connection_adapters/postgresql_adapter.rb
         | 
| 40 42 | 
             
            - lib/connection_adapters/sqlserver_adapter.rb
         | 
| 41 | 
            -
            - lib/connection_adapters/abstract_adapter.rb
         | 
| 42 | 
            -
            - lib/connection_adapters/ibm_db2_adapter.rb
         | 
| 43 43 | 
             
            - lib/connection_adapters/abstract/schema_definitions.rb
         | 
| 44 44 | 
             
            - README
         | 
| 45 45 | 
             
            test_files: []
         |