schema_plus 1.3.3 → 1.4.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +15 -24
- data/README.md +9 -6
- data/gemfiles/rails-4.1/Gemfile.base +4 -0
- data/gemfiles/rails-4.1/Gemfile.mysql2 +10 -0
- data/gemfiles/rails-4.1/Gemfile.postgresql +10 -0
- data/gemfiles/rails-4.1/Gemfile.sqlite3 +10 -0
- data/lib/schema_plus/active_record/connection_adapters/abstract_adapter.rb +9 -1
- data/lib/schema_plus/active_record/connection_adapters/mysql_adapter.rb +26 -20
- data/lib/schema_plus/active_record/connection_adapters/table_definition.rb +1 -1
- data/lib/schema_plus/version.rb +1 -1
- data/runspecs +5 -3
- metadata +6 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0d5b988ea47657ad4e1be912509f3d17c4c4e329
         | 
| 4 | 
            +
              data.tar.gz: e4fcc4ac3d1ca3003e4a9c7fc1c0a48e687dd197
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4ea4f3e69dd6fd4705146b05123e7ec245414ef77de85382a5ada63bebfce065088d4447ea9f411b82444d33c94d7a9ce6ad96a76061816a7a851023a9672e8f
         | 
| 7 | 
            +
              data.tar.gz: 9251ec18b5b5f416627162c4adecff472c22c82ac23076461d7b8d045f40744f246827da14580c17d5957efb45218a7b235d71ffbcc1092e1b7486a4547cc3f2
         | 
    
        data/.travis.yml
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            rvm:
         | 
| 2 2 | 
             
              - 1.9.3
         | 
| 3 3 | 
             
              - 2.0.0
         | 
| 4 | 
            +
              - 2.1.0
         | 
| 4 5 | 
             
              - jruby
         | 
| 5 6 | 
             
            gemfile:
         | 
| 6 7 | 
             
              - gemfiles/rails-3.2/Gemfile.postgresql
         | 
| @@ -10,48 +11,38 @@ gemfile: | |
| 10 11 | 
             
              - gemfiles/rails-4.0/Gemfile.postgresql
         | 
| 11 12 | 
             
              - gemfiles/rails-4.0/Gemfile.sqlite3
         | 
| 12 13 | 
             
              - gemfiles/rails-4.0/Gemfile.mysql2
         | 
| 13 | 
            -
              - gemfiles/rails- | 
| 14 | 
            -
              - gemfiles/rails- | 
| 15 | 
            -
              - gemfiles/rails- | 
| 14 | 
            +
              - gemfiles/rails-4.1/Gemfile.postgresql
         | 
| 15 | 
            +
              - gemfiles/rails-4.1/Gemfile.sqlite3
         | 
| 16 | 
            +
              - gemfiles/rails-4.1/Gemfile.mysql2
         | 
| 16 17 | 
             
            before_script:
         | 
| 17 18 | 
             
              - rake create_databases
         | 
| 18 19 | 
             
            after_script:
         | 
| 19 20 | 
             
              - rake drop_databases
         | 
| 20 | 
            -
            env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 21 | 
            +
            env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 21 22 | 
             
            notifications:
         | 
| 22 23 | 
             
              recipients:
         | 
| 23 24 | 
             
                - michal.lomnicki@gmail.com
         | 
| 24 25 | 
             
                - ronen@barzel.org
         | 
| 25 26 | 
             
            matrix:
         | 
| 26 | 
            -
              allow_failures:
         | 
| 27 | 
            -
                - gemfile: gemfiles/rails-edge/Gemfile.postgresql
         | 
| 28 | 
            -
                - gemfile: gemfiles/rails-edge/Gemfile.sqlite3
         | 
| 29 | 
            -
                - gemfile: gemfiles/rails-edge/Gemfile.mysql2
         | 
| 30 27 | 
             
              exclude:
         | 
| 31 28 | 
             
                - rvm: jruby
         | 
| 32 29 | 
             
                  gemfile: gemfiles/rails-3.2/Gemfile.sqlite3
         | 
| 33 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 34 | 
            -
                - rvm: jruby
         | 
| 35 | 
            -
                  gemfile: gemfiles/rails-3.2/Gemfile.mysql
         | 
| 36 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 37 | 
            -
                - rvm: jruby
         | 
| 38 | 
            -
                  gemfile: gemfiles/rails-3.2/Gemfile.mysql2
         | 
| 39 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 30 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 40 31 | 
             
                - rvm: jruby
         | 
| 41 32 | 
             
                  gemfile: gemfiles/rails-4.0/Gemfile.postgresql
         | 
| 42 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 33 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 43 34 | 
             
                - rvm: jruby
         | 
| 44 35 | 
             
                  gemfile: gemfiles/rails-4.0/Gemfile.sqlite3
         | 
| 45 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 36 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 46 37 | 
             
                - rvm: jruby
         | 
| 47 38 | 
             
                  gemfile: gemfiles/rails-4.0/Gemfile.mysql2
         | 
| 48 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 39 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 49 40 | 
             
                - rvm: jruby
         | 
| 50 | 
            -
                  gemfile: gemfiles/rails- | 
| 51 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 41 | 
            +
                  gemfile: gemfiles/rails-4.1/Gemfile.postgresql
         | 
| 42 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 52 43 | 
             
                - rvm: jruby
         | 
| 53 | 
            -
                  gemfile: gemfiles/rails- | 
| 54 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 44 | 
            +
                  gemfile: gemfiles/rails-4.1/Gemfile.sqlite3
         | 
| 45 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
| 55 46 | 
             
                - rvm: jruby
         | 
| 56 | 
            -
                  gemfile: gemfiles/rails- | 
| 57 | 
            -
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER=""'
         | 
| 47 | 
            +
                  gemfile: gemfiles/rails-4.1/Gemfile.mysql2
         | 
| 48 | 
            +
                  env: 'POSTGRES_DB_USER=postgres MYSQL_DB_USER="travis"'
         | 
    
        data/README.md
    CHANGED
    
    | @@ -17,19 +17,16 @@ For added rails DRYness see also the gems | |
| 17 17 |  | 
| 18 18 | 
             
            SchemaPlus supports all combinations of:
         | 
| 19 19 |  | 
| 20 | 
            -
            *   Rails 3.2  | 
| 20 | 
            +
            *   Rails 3.2, 4.0, and 4.1 (currently 4.1.0beta3)
         | 
| 21 21 | 
             
            *   PostgreSQL, MySQL (using mysql2 gem; mysql gem only supported with Rails
         | 
| 22 22 | 
             
                3.2), or SQLite3 (using sqlite3 >= 3.7.7 which has foreign key support)
         | 
| 23 | 
            -
            *   MRI Ruby 1.9.3 or 2. | 
| 23 | 
            +
            *   MRI Ruby 1.9.3, 2.0.0, or 2.1.0
         | 
| 24 24 |  | 
| 25 25 | 
             
            And also supports:
         | 
| 26 26 |  | 
| 27 | 
            -
            * jruby with Rails 3.2 and PostgreSQL
         | 
| 27 | 
            +
            * jruby with Rails 3.2 and PostgreSQL or MySQL
         | 
| 28 28 |  | 
| 29 29 |  | 
| 30 | 
            -
            Note: As of version 1.0.0, SchemaPlus no longer supports Rails 2.3, 3.0 and
         | 
| 31 | 
            -
            3.1, and also no longer supports MRI Ruby 1.8.7; the last version
         | 
| 32 | 
            -
            to support them was 0.4.1.  As of version 1.2.0, SchemaPlus no longer supports MRI Ruby 1.9.2
         | 
| 33 30 |  | 
| 34 31 | 
             
            ## Installation
         | 
| 35 32 |  | 
| @@ -300,6 +297,12 @@ of foreign key constraints, you can re-enable it: | |
| 300 297 |  | 
| 301 298 | 
             
            * *nothing currently waiting to be released*
         | 
| 302 299 |  | 
| 300 | 
            +
            ### 1.4.0
         | 
| 301 | 
            +
             | 
| 302 | 
            +
            * Supports jruby & mysql, thanks to [@rzenha](https://github.com/razenha)
         | 
| 303 | 
            +
            * Works with MRI ruby & rails 4.1.0beta3
         | 
| 304 | 
            +
            * Run tests against MRI 2.1.0
         | 
| 305 | 
            +
             | 
| 303 306 | 
             
            ### 1.3.3
         | 
| 304 307 |  | 
| 305 308 | 
             
            * Bug fix, dump unique index with expression (Issue #142)
         | 
| @@ -78,7 +78,15 @@ module SchemaPlus | |
| 78 78 | 
             
                    end
         | 
| 79 79 |  | 
| 80 80 | 
             
                    def _build_foreign_key(table_name, column_names, references_table_name, references_column_names, options = {}) #:nodoc:
         | 
| 81 | 
            -
                      ForeignKeyDefinition.new(options[:name] || ForeignKeyDefinition.default_name(table_name, column_names), table_name, column_names,  | 
| 81 | 
            +
                      ForeignKeyDefinition.new(options[:name] || ForeignKeyDefinition.default_name(table_name, column_names), table_name, column_names, AbstractAdapter.proper_table_name(references_table_name), references_column_names, options[:on_update], options[:on_delete], options[:deferrable])
         | 
| 82 | 
            +
                    end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                    def self.proper_table_name(name)
         | 
| 85 | 
            +
                       if ::ActiveRecord::Migration.instance_methods(false).include? :proper_table_name
         | 
| 86 | 
            +
                       proper_name = ::ActiveRecord::Migration.new.proper_table_name(name) # Rails >= 4.1
         | 
| 87 | 
            +
                     else
         | 
| 88 | 
            +
                       proper_name = ::ActiveRecord::Migrator.proper_table_name(name) # Rails <= 4.0 ; Deprecated in 4.1
         | 
| 89 | 
            +
                     end
         | 
| 82 90 | 
             
                    end
         | 
| 83 91 |  | 
| 84 92 | 
             
                    # Remove a foreign key constraint
         | 
| @@ -60,7 +60,12 @@ module SchemaPlus | |
| 60 60 | 
             
                    # implement cascade by removing foreign keys
         | 
| 61 61 | 
             
                    def drop_table(name, options={})
         | 
| 62 62 | 
             
                      reverse_foreign_keys(name).each{ |foreign_key| remove_foreign_key(foreign_key.table_name, foreign_key.name) } if options[:cascade]
         | 
| 63 | 
            -
                       | 
| 63 | 
            +
                      sql = "DROP"
         | 
| 64 | 
            +
                      sql += " TEMPORARY" if options[:temporary]
         | 
| 65 | 
            +
                      sql += " TABLE"
         | 
| 66 | 
            +
                      sql += " IF EXISTS" if options[:if_exists]
         | 
| 67 | 
            +
                      sql += " #{quote_table_name(name)}"
         | 
| 68 | 
            +
                      execute sql
         | 
| 64 69 | 
             
                    end
         | 
| 65 70 |  | 
| 66 71 | 
             
                    def remove_index_sql(table_name, options)
         | 
| @@ -82,15 +87,16 @@ module SchemaPlus | |
| 82 87 | 
             
                    end
         | 
| 83 88 |  | 
| 84 89 | 
             
                    def foreign_keys(table_name, name = nil)
         | 
| 85 | 
            -
                      results =  | 
| 90 | 
            +
                      results = select_all("SHOW CREATE TABLE #{quote_table_name(table_name)}", name)
         | 
| 86 91 |  | 
| 87 92 | 
             
                      table_name = table_name.to_s
         | 
| 88 93 | 
             
                      namespace_prefix = table_namespace_prefix(table_name)
         | 
| 89 94 |  | 
| 90 95 | 
             
                      foreign_keys = []
         | 
| 91 96 |  | 
| 92 | 
            -
                      results.each do | | 
| 93 | 
            -
                         | 
| 97 | 
            +
                      results.each do |result|
         | 
| 98 | 
            +
                        create_table_sql = result["Create Table"]
         | 
| 99 | 
            +
                        create_table_sql.lines.each do |line|
         | 
| 94 100 | 
             
                          if line =~ /^  CONSTRAINT [`"](.+?)[`"] FOREIGN KEY \([`"](.+?)[`"]\) REFERENCES [`"](.+?)[`"] \((.+?)\)( ON DELETE (.+?))?( ON UPDATE (.+?))?,?$/
         | 
| 95 101 | 
             
                            name = $1
         | 
| 96 102 | 
             
                            column_names = $2
         | 
| @@ -114,7 +120,7 @@ module SchemaPlus | |
| 114 120 | 
             
                    end
         | 
| 115 121 |  | 
| 116 122 | 
             
                    def reverse_foreign_keys(table_name, name = nil)
         | 
| 117 | 
            -
                      results =  | 
| 123 | 
            +
                      results = select_all(<<-SQL, name)
         | 
| 118 124 | 
             
                    SELECT constraint_name, table_name, column_name, referenced_table_name, referenced_column_name
         | 
| 119 125 | 
             
                      FROM information_schema.key_column_usage
         | 
| 120 126 | 
             
                     WHERE table_schema = #{table_schema_sql(table_name)}
         | 
| @@ -127,18 +133,18 @@ module SchemaPlus | |
| 127 133 | 
             
                      namespace_prefix = table_namespace_prefix(table_name)
         | 
| 128 134 |  | 
| 129 135 | 
             
                      results.each do |row|
         | 
| 130 | 
            -
                        next unless table_name_without_namespace(table_name).casecmp(row[ | 
| 131 | 
            -
                        if current_foreign_key != row[ | 
| 132 | 
            -
                            referenced_table_name = row[ | 
| 136 | 
            +
                        next unless table_name_without_namespace(table_name).casecmp(row["referenced_table_name"]) == 0
         | 
| 137 | 
            +
                        if current_foreign_key != row["constraint_name"]
         | 
| 138 | 
            +
                            referenced_table_name = row["table_name"]
         | 
| 133 139 | 
             
                            referenced_table_name = namespace_prefix + referenced_table_name if table_namespace_prefix(referenced_table_name).blank?
         | 
| 134 | 
            -
                            references_table_name = row[ | 
| 140 | 
            +
                            references_table_name = row["referenced_table_name"]
         | 
| 135 141 | 
             
                            references_table_name = namespace_prefix + references_table_name if table_namespace_prefix(references_table_name).blank?
         | 
| 136 | 
            -
                          foreign_keys << ForeignKeyDefinition.new(row[ | 
| 137 | 
            -
                          current_foreign_key = row[ | 
| 142 | 
            +
                          foreign_keys << ForeignKeyDefinition.new(row["constraint_name"], referenced_table_name, [], references_table_name, [])
         | 
| 143 | 
            +
                          current_foreign_key = row["constraint_name"]
         | 
| 138 144 | 
             
                        end
         | 
| 139 145 |  | 
| 140 | 
            -
                        foreign_keys.last.column_names << row[ | 
| 141 | 
            -
                        foreign_keys.last.references_column_names << row[ | 
| 146 | 
            +
                        foreign_keys.last.column_names << row["column_name"]
         | 
| 147 | 
            +
                        foreign_keys.last.references_column_names << row["referenced_column_name"]
         | 
| 142 148 | 
             
                      end
         | 
| 143 149 |  | 
| 144 150 | 
             
                      foreign_keys
         | 
| @@ -146,19 +152,19 @@ module SchemaPlus | |
| 146 152 |  | 
| 147 153 | 
             
                    def views(name = nil)
         | 
| 148 154 | 
             
                      views = []
         | 
| 149 | 
            -
                       | 
| 150 | 
            -
                        views << row[ | 
| 155 | 
            +
                      select_all("SELECT table_name FROM information_schema.views WHERE table_schema = SCHEMA()", name).each do |row|
         | 
| 156 | 
            +
                        views << row["table_name"]
         | 
| 151 157 | 
             
                      end
         | 
| 152 158 | 
             
                      views
         | 
| 153 159 | 
             
                    end
         | 
| 154 160 |  | 
| 155 161 | 
             
                    def view_definition(view_name, name = nil)
         | 
| 156 | 
            -
                       | 
| 157 | 
            -
                      return nil unless  | 
| 158 | 
            -
                      row =  | 
| 159 | 
            -
                      sql = row[ | 
| 162 | 
            +
                      results = select_all("SELECT view_definition, check_option FROM information_schema.views WHERE table_schema = SCHEMA() AND table_name = #{quote(view_name)}", name)
         | 
| 163 | 
            +
                      return nil unless results.any?
         | 
| 164 | 
            +
                      row = results.first
         | 
| 165 | 
            +
                      sql = row["view_definition"]
         | 
| 160 166 | 
             
                      sql.gsub!(%r{#{quote_table_name(current_database)}[.]}, '')
         | 
| 161 | 
            -
                      case row[ | 
| 167 | 
            +
                      case row["check_option"]
         | 
| 162 168 | 
             
                      when "CASCADED" then sql += " WITH CASCADED CHECK OPTION"
         | 
| 163 169 | 
             
                      when "LOCAL" then sql += " WITH LOCAL CHECK OPTION"
         | 
| 164 170 | 
             
                      end
         | 
| @@ -142,7 +142,7 @@ module SchemaPlus::ActiveRecord::ConnectionAdapters | |
| 142 142 | 
             
                end
         | 
| 143 143 |  | 
| 144 144 | 
             
                def foreign_key(column_names, references_table_name, references_column_names, options = {})
         | 
| 145 | 
            -
                  @foreign_keys << ForeignKeyDefinition.new(options[:name] || ForeignKeyDefinition.default_name(self.name, column_names), self.name, column_names,  | 
| 145 | 
            +
                  @foreign_keys << ForeignKeyDefinition.new(options[:name] || ForeignKeyDefinition.default_name(self.name, column_names), self.name, column_names, AbstractAdapter.proper_table_name(references_table_name), references_column_names, options[:on_update], options[:on_delete], options[:deferrable])
         | 
| 146 146 | 
             
                  self
         | 
| 147 147 | 
             
                end
         | 
| 148 148 |  | 
    
        data/lib/schema_plus/version.rb
    CHANGED
    
    
    
        data/runspecs
    CHANGED
    
    | @@ -5,8 +5,8 @@ require 'ostruct' | |
| 5 5 | 
             
            require 'shellwords'
         | 
| 6 6 | 
             
            require 'tempfile'
         | 
| 7 7 |  | 
| 8 | 
            -
            RUBY_VERSIONS = %W[jruby 1.9.3 2.0.0]
         | 
| 9 | 
            -
            RAILS_VERSIONS = %W[3.2  | 
| 8 | 
            +
            RUBY_VERSIONS = %W[jruby 1.9.3 2.0.0 2.1.0]
         | 
| 9 | 
            +
            RAILS_VERSIONS = %W[3.2 4.0 4.1]
         | 
| 10 10 | 
             
            DB_ADAPTERS = %W[postgresql mysql mysql2 sqlite3]
         | 
| 11 11 |  | 
| 12 12 | 
             
            o = OpenStruct.new
         | 
| @@ -68,7 +68,9 @@ combos = o.ruby_versions.product(o.rails_versions, o.db_adapters).map{|product| | |
| 68 68 | 
             
                when combo.rails >= "4" && combo.db_adapter == "mysql" then false
         | 
| 69 69 | 
             
                when combo.ruby == "jruby"
         | 
| 70 70 | 
             
                  case
         | 
| 71 | 
            -
                  when combo.rails  | 
| 71 | 
            +
                  when combo.rails > "3.2" then false
         | 
| 72 | 
            +
                  when combo.db_adapter == "postgresql" then true
         | 
| 73 | 
            +
                  when combo.db_adapter =~ /mysql/ then true
         | 
| 72 74 | 
             
                  else false
         | 
| 73 75 | 
             
                  end
         | 
| 74 76 | 
             
                else true
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: schema_plus
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ronen Barzel
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014-02- | 
| 12 | 
            +
            date: 2014-02-08 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rails
         | 
| @@ -135,6 +135,10 @@ files: | |
| 135 135 | 
             
            - gemfiles/rails-4.0/Gemfile.mysql2
         | 
| 136 136 | 
             
            - gemfiles/rails-4.0/Gemfile.postgresql
         | 
| 137 137 | 
             
            - gemfiles/rails-4.0/Gemfile.sqlite3
         | 
| 138 | 
            +
            - gemfiles/rails-4.1/Gemfile.base
         | 
| 139 | 
            +
            - gemfiles/rails-4.1/Gemfile.mysql2
         | 
| 140 | 
            +
            - gemfiles/rails-4.1/Gemfile.postgresql
         | 
| 141 | 
            +
            - gemfiles/rails-4.1/Gemfile.sqlite3
         | 
| 138 142 | 
             
            - gemfiles/rails-edge/Gemfile.base
         | 
| 139 143 | 
             
            - gemfiles/rails-edge/Gemfile.mysql2
         | 
| 140 144 | 
             
            - gemfiles/rails-edge/Gemfile.postgresql
         |