rein 3.0.0 → 3.1.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/CHANGELOG.md +3 -0
- data/README.md +49 -0
- data/lib/rein.rb +2 -0
- data/lib/rein/constraint/length.rb +49 -0
- data/lib/rein/version.rb +1 -1
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: cc7bf976b250a0cfaa15db1ec4a937afcdf9e6af
         | 
| 4 | 
            +
              data.tar.gz: 79dcf97dbe8bdb932f42198675c9cc229f5f9ac3
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3a2353e83aeae5a7f05787725a25c553689efb27c7093315e48a900ad0ed2e35069f8c6706571cb8b41080c6e04cff484e1574e9768d4f15bf11f7f6d2458ec7
         | 
| 7 | 
            +
              data.tar.gz: 2cfeef3a3d05f9c483309fb0585bfc2733b1862dbb0b73dbccace17f652e28a606d53553f1b3cbe7d0dbbf59eea3c501cdbeb2c5bb772198db94008ba6e2bb33
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -23,6 +23,7 @@ advantage of reversible Rails migrations. | |
| 23 23 | 
             
              * [Constraint types](#constraint-types)
         | 
| 24 24 | 
             
                * [Foreign key constraints](#foreign-key-constraints)
         | 
| 25 25 | 
             
                * [Inclusion constraints](#inclusion-constraints)
         | 
| 26 | 
            +
                * [Length constraints](#length-constraints)
         | 
| 26 27 | 
             
                * [Numericality constraints](#numericality-constraints)
         | 
| 27 28 | 
             
                * [Presence constraints](#presence-constraints)
         | 
| 28 29 | 
             
                * [Null constraints](#null-constraints)
         | 
| @@ -146,6 +147,54 @@ add_inclusion_constraint :books, :state, | |
| 146 147 | 
             
              name: "books_state_is_valid"
         | 
| 147 148 | 
             
            ```
         | 
| 148 149 |  | 
| 150 | 
            +
            ### Length constraints
         | 
| 151 | 
            +
             | 
| 152 | 
            +
            A length constraint specifies the range of values that the length of a string
         | 
| 153 | 
            +
            column value can take.
         | 
| 154 | 
            +
             | 
| 155 | 
            +
            For example, we can ensure that the `call_number` can only ever be a
         | 
| 156 | 
            +
            value between 1 and 255:
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            ```ruby
         | 
| 159 | 
            +
            add_length_constraint :books, :call_number,
         | 
| 160 | 
            +
              greater_than_or_equal_to: 1,
         | 
| 161 | 
            +
              less_than_or_equal_to: 255
         | 
| 162 | 
            +
            ```
         | 
| 163 | 
            +
             | 
| 164 | 
            +
            Here's all the options for constraining the values:
         | 
| 165 | 
            +
             | 
| 166 | 
            +
            - `equal_to`
         | 
| 167 | 
            +
            - `not_equal_to`
         | 
| 168 | 
            +
            - `less_than`
         | 
| 169 | 
            +
            - `less_than_or_equal_to`
         | 
| 170 | 
            +
            - `greater_than`
         | 
| 171 | 
            +
            - `greater_than_or_equal_to`
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            You may also include an `if` option to enforce the constraint only under
         | 
| 174 | 
            +
            certain conditions, like so:
         | 
| 175 | 
            +
             | 
| 176 | 
            +
            ```ruby
         | 
| 177 | 
            +
            add_length_constraint :books, :call_number,
         | 
| 178 | 
            +
              greater_than_or_equal_to: 1,
         | 
| 179 | 
            +
              less_than_or_equal_to: 12,
         | 
| 180 | 
            +
              if: "status = 'published'"
         | 
| 181 | 
            +
            ```
         | 
| 182 | 
            +
             | 
| 183 | 
            +
            You may optionally provide a `name` option to customize the name:
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            ```ruby
         | 
| 186 | 
            +
            add_length_constraint :books, :call_number,
         | 
| 187 | 
            +
              greater_than_or_equal_to: 1,
         | 
| 188 | 
            +
              less_than_or_equal_to: 12,
         | 
| 189 | 
            +
              name: "books_call_number_is_valid"
         | 
| 190 | 
            +
            ```
         | 
| 191 | 
            +
             | 
| 192 | 
            +
            To remove a length constraint:
         | 
| 193 | 
            +
             | 
| 194 | 
            +
            ```ruby
         | 
| 195 | 
            +
            remove_length_constraint :books, :call_number
         | 
| 196 | 
            +
            ```
         | 
| 197 | 
            +
             | 
| 149 198 | 
             
            ### Numericality constraints
         | 
| 150 199 |  | 
| 151 200 | 
             
            A numericality constraint specifies the range of values that a numeric column
         | 
    
        data/lib/rein.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            require "active_record"
         | 
| 2 2 | 
             
            require "rein/constraint/foreign_key"
         | 
| 3 3 | 
             
            require "rein/constraint/inclusion"
         | 
| 4 | 
            +
            require "rein/constraint/length"
         | 
| 4 5 | 
             
            require "rein/constraint/null"
         | 
| 5 6 | 
             
            require "rein/constraint/numericality"
         | 
| 6 7 | 
             
            require "rein/constraint/presence"
         | 
| @@ -13,6 +14,7 @@ module ActiveRecord | |
| 13 14 | 
             
              class Migration # :nodoc:
         | 
| 14 15 | 
             
                include Rein::Constraint::ForeignKey
         | 
| 15 16 | 
             
                include Rein::Constraint::Inclusion
         | 
| 17 | 
            +
                include Rein::Constraint::Length
         | 
| 16 18 | 
             
                include Rein::Constraint::Null
         | 
| 17 19 | 
             
                include Rein::Constraint::Numericality
         | 
| 18 20 | 
             
                include Rein::Constraint::Presence
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            require "rein/util"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Rein
         | 
| 4 | 
            +
              module Constraint
         | 
| 5 | 
            +
                # This module contains methods for defining length constraints.
         | 
| 6 | 
            +
                module Length
         | 
| 7 | 
            +
                  OPERATORS = {
         | 
| 8 | 
            +
                    greater_than: :>,
         | 
| 9 | 
            +
                    greater_than_or_equal_to: :>=,
         | 
| 10 | 
            +
                    equal_to: :"=",
         | 
| 11 | 
            +
                    not_equal_to: :"!=",
         | 
| 12 | 
            +
                    less_than: :<,
         | 
| 13 | 
            +
                    less_than_or_equal_to: :<=
         | 
| 14 | 
            +
                  }.freeze
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def add_length_constraint(*args)
         | 
| 17 | 
            +
                    reversible do |dir|
         | 
| 18 | 
            +
                      dir.up { _add_length_constraint(*args) }
         | 
| 19 | 
            +
                      dir.down { _remove_length_constraint(*args) }
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def remove_length_constraint(*args)
         | 
| 24 | 
            +
                    reversible do |dir|
         | 
| 25 | 
            +
                      dir.up { _remove_length_constraint(*args) }
         | 
| 26 | 
            +
                      dir.down { _add_length_constraint(*args) }
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  private
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def _add_length_constraint(table, attribute, options = {})
         | 
| 33 | 
            +
                    name = Util.constraint_name(table, attribute, "length", options)
         | 
| 34 | 
            +
                    attribute_length = "length(#{attribute})"
         | 
| 35 | 
            +
                    conditions = OPERATORS.slice(*options.keys).map do |key, operator|
         | 
| 36 | 
            +
                      value = options[key]
         | 
| 37 | 
            +
                      [attribute_length, operator, value].join(" ")
         | 
| 38 | 
            +
                    end.join(" AND ")
         | 
| 39 | 
            +
                    conditions = Util.conditions_with_if(conditions, options)
         | 
| 40 | 
            +
                    execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def _remove_length_constraint(table, attribute, options = {})
         | 
| 44 | 
            +
                    name = Util.constraint_name(table, attribute, "length", options)
         | 
| 45 | 
            +
                    execute("ALTER TABLE #{table} DROP CONSTRAINT #{name}")
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
    
        data/lib/rein/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rein
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Joshua Bassett
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017- | 
| 11 | 
            +
            date: 2017-07-27 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         | 
| @@ -147,6 +147,7 @@ files: | |
| 147 147 | 
             
            - lib/rein.rb
         | 
| 148 148 | 
             
            - lib/rein/constraint/foreign_key.rb
         | 
| 149 149 | 
             
            - lib/rein/constraint/inclusion.rb
         | 
| 150 | 
            +
            - lib/rein/constraint/length.rb
         | 
| 150 151 | 
             
            - lib/rein/constraint/null.rb
         | 
| 151 152 | 
             
            - lib/rein/constraint/numericality.rb
         | 
| 152 153 | 
             
            - lib/rein/constraint/presence.rb
         | 
| @@ -176,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 176 177 | 
             
                  version: '0'
         | 
| 177 178 | 
             
            requirements: []
         | 
| 178 179 | 
             
            rubyforge_project: 
         | 
| 179 | 
            -
            rubygems_version: 2. | 
| 180 | 
            +
            rubygems_version: 2.5.2
         | 
| 180 181 | 
             
            signing_key: 
         | 
| 181 182 | 
             
            specification_version: 4
         | 
| 182 183 | 
             
            summary: Database constraints made easy for ActiveRecord.
         |