rein 3.1.0 → 3.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc7bf976b250a0cfaa15db1ec4a937afcdf9e6af
4
- data.tar.gz: 79dcf97dbe8bdb932f42198675c9cc229f5f9ac3
3
+ metadata.gz: 174a8d4fd2ac014ff07be51f2066f24031093af5
4
+ data.tar.gz: a87d03529fbac3e218d7f9a8bb525e168ecd9942
5
5
  SHA512:
6
- metadata.gz: 3a2353e83aeae5a7f05787725a25c553689efb27c7093315e48a900ad0ed2e35069f8c6706571cb8b41080c6e04cff484e1574e9768d4f15bf11f7f6d2458ec7
7
- data.tar.gz: 2cfeef3a3d05f9c483309fb0585bfc2733b1862dbb0b73dbccace17f652e28a606d53553f1b3cbe7d0dbbf59eea3c501cdbeb2c5bb772198db94008ba6e2bb33
6
+ metadata.gz: a1a4ee06b5194406e7505c727851d9d8d1d2e5e89e01bd0f4f4a4e27beca20a232b7ec9cad514f2b1f3eecf91e5debe31268a69e4c92a5619ea283915b6e5f1e
7
+ data.tar.gz: 43fac121fcf44b69e6ff326cf6a3b291b4c534ee4c2af0aa6b5e5a8cfa274795d6c34abdbe55045044c8e7ba8cc33cef7f4a3003e0009bb540f15344e7ef1545
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.2.0
4
+ - Add match constraint.
5
+ - Fix the rollback of change view migrations.
6
+
3
7
  ## 3.1.0
4
8
  - Add length constraint.
5
9
 
data/README.md CHANGED
@@ -24,6 +24,7 @@ advantage of reversible Rails migrations.
24
24
  * [Foreign key constraints](#foreign-key-constraints)
25
25
  * [Inclusion constraints](#inclusion-constraints)
26
26
  * [Length constraints](#length-constraints)
27
+ * [Match constraints](#match-constraints)
27
28
  * [Numericality constraints](#numericality-constraints)
28
29
  * [Presence constraints](#presence-constraints)
29
30
  * [Null constraints](#null-constraints)
@@ -195,6 +196,37 @@ To remove a length constraint:
195
196
  remove_length_constraint :books, :call_number
196
197
  ```
197
198
 
199
+ ### Match constraints
200
+
201
+ A match constraint ensures that a string column value matches (or does not match)
202
+ a POSIX-style regular expression.
203
+
204
+ For example, we can ensure that the `title` can only contain printable ASCII
205
+ characters, but not ampersands:
206
+
207
+ ```ruby
208
+ add_match_constraint :books, :title, accepts: '\A[ -~]*\Z', rejects: '&'
209
+ ```
210
+
211
+ If you only want to enforce the constraint under certain conditions,
212
+ you can pass an optional `if` option:
213
+
214
+ ```ruby
215
+ add_match_constraint :books, :title, accepts: '\A[ -~]*\Z', if: "status = 'published'"
216
+ ```
217
+
218
+ You may optionally provide a `name` option to customize the name:
219
+
220
+ ```ruby
221
+ add_match_constraint :books, :title, name: "books_title_is_valid"
222
+ ```
223
+
224
+ To remove a match constraint:
225
+
226
+ ```ruby
227
+ remove_match_constraint :books, :title
228
+ ```
229
+
198
230
  ### Numericality constraints
199
231
 
200
232
  A numericality constraint specifies the range of values that a numeric column
@@ -247,8 +279,8 @@ remove_numericality_constraint :books, :publication_month
247
279
 
248
280
  A presence constraint ensures that a string column value is non-empty.
249
281
 
250
- A `NOT NULL` constraint will be satisfied by an empty string, but sometimes may
251
- you want to ensure that there is an actual value for a string:
282
+ A `NOT NULL` constraint will be satisfied by an empty string, but sometimes you
283
+ may want to ensure that there is an actual value for a string:
252
284
 
253
285
  ```ruby
254
286
  add_presence_constraint :books, :title
data/lib/rein.rb CHANGED
@@ -2,6 +2,7 @@ require "active_record"
2
2
  require "rein/constraint/foreign_key"
3
3
  require "rein/constraint/inclusion"
4
4
  require "rein/constraint/length"
5
+ require "rein/constraint/match"
5
6
  require "rein/constraint/null"
6
7
  require "rein/constraint/numericality"
7
8
  require "rein/constraint/presence"
@@ -15,6 +16,7 @@ module ActiveRecord
15
16
  include Rein::Constraint::ForeignKey
16
17
  include Rein::Constraint::Inclusion
17
18
  include Rein::Constraint::Length
19
+ include Rein::Constraint::Match
18
20
  include Rein::Constraint::Null
19
21
  include Rein::Constraint::Numericality
20
22
  include Rein::Constraint::Presence
@@ -0,0 +1,46 @@
1
+ require "rein/util"
2
+
3
+ module Rein
4
+ module Constraint
5
+ # This module contains methods for defining regex match constraints.
6
+ module Match
7
+ include ActiveRecord::ConnectionAdapters::Quoting
8
+
9
+ OPERATORS = {
10
+ accepts: :~,
11
+ rejects: :"!~"
12
+ }.freeze
13
+
14
+ def add_match_constraint(*args)
15
+ reversible do |dir|
16
+ dir.up { _add_match_constraint(*args) }
17
+ dir.down { _remove_match_constraint(*args) }
18
+ end
19
+ end
20
+
21
+ def remove_match_constraint(*args)
22
+ reversible do |dir|
23
+ dir.up { _remove_match_constraint(*args) }
24
+ dir.down { _add_match_constraint(*args) }
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def _add_match_constraint(table, attribute, options = {})
31
+ name = Util.constraint_name(table, attribute, "match", options)
32
+ conditions = OPERATORS.slice(*options.keys).map do |key, operator|
33
+ value = options[key]
34
+ [attribute, operator, "'#{value}'"].join(" ")
35
+ end.join(" AND ")
36
+ conditions = Util.conditions_with_if(conditions, options)
37
+ execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
38
+ end
39
+
40
+ def _remove_match_constraint(table, attribute, options = {})
41
+ name = Util.constraint_name(table, attribute, "match", options)
42
+ execute("ALTER TABLE #{table} DROP CONSTRAINT #{name}")
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/rein/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rein
2
- VERSION = "3.1.0".freeze
2
+ VERSION = "3.2.0".freeze
3
3
  end
data/lib/rein/view.rb CHANGED
@@ -21,7 +21,7 @@ module Rein
21
21
  execute("CREATE VIEW #{view_name} AS #{sql}")
22
22
  end
23
23
 
24
- def _drop_view(view_name)
24
+ def _drop_view(view_name, *)
25
25
  execute("DROP VIEW #{view_name}")
26
26
  end
27
27
  end
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.1.0
4
+ version: 3.2.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-07-27 00:00:00.000000000 Z
11
+ date: 2017-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -112,28 +112,28 @@ dependencies:
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: '3.5'
115
+ version: '3.7'
116
116
  type: :development
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: '3.5'
122
+ version: '3.7'
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: rubocop
125
125
  requirement: !ruby/object:Gem::Requirement
126
126
  requirements:
127
127
  - - "~>"
128
128
  - !ruby/object:Gem::Version
129
- version: '0.47'
129
+ version: '0.51'
130
130
  type: :development
131
131
  prerelease: false
132
132
  version_requirements: !ruby/object:Gem::Requirement
133
133
  requirements:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
- version: '0.47'
136
+ version: '0.51'
137
137
  description: Rein adds bunch of methods to your ActiveRecord migrations so you can
138
138
  easily tame your database.
139
139
  email: josh.bassett@gmail.com
@@ -148,6 +148,7 @@ files:
148
148
  - lib/rein/constraint/foreign_key.rb
149
149
  - lib/rein/constraint/inclusion.rb
150
150
  - lib/rein/constraint/length.rb
151
+ - lib/rein/constraint/match.rb
151
152
  - lib/rein/constraint/null.rb
152
153
  - lib/rein/constraint/numericality.rb
153
154
  - lib/rein/constraint/presence.rb
@@ -177,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
178
  version: '0'
178
179
  requirements: []
179
180
  rubyforge_project:
180
- rubygems_version: 2.5.2
181
+ rubygems_version: 2.6.13
181
182
  signing_key:
182
183
  specification_version: 4
183
184
  summary: Database constraints made easy for ActiveRecord.