rein 2.0.0 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0615a7f2e565c2f358a695bde5ca27c1dc38dd09
4
- data.tar.gz: 4dc8082ed6921296954d8802b296f74ca9ad2fd6
3
+ metadata.gz: 7a9c78af74657a1a1a30eddab52f82f308dd1a1c
4
+ data.tar.gz: 72b3d37a29e6d2384ab7c6bc46268544dc560271
5
5
  SHA512:
6
- metadata.gz: 662ac24aca4142d7dc22db7a5de022dd89df180c745a8d944551dabdc29ae62b0c2fd9a92a353bbd9a4c4e28debf7c500879f98e84d046d5377bb8bb285f8c63
7
- data.tar.gz: faf7c737bce89979103b5f382742982e108512e0598d041fae995c8b5c5c10fbfa73168b53b26a434b6134298921539a95861fe886b81eac202ffabe834ae727
6
+ metadata.gz: 2c0229b55c19e5fded597a3f3d0b8836ba073fac83365efcf88fbe0c2a37ab9cde6989d2db7587fd093316742c5aa4692e383c4bb021edc774596a3cc8cf2a2f
7
+ data.tar.gz: 6bc108d82d305dc4115d7944e4dc84aafc789f92ae2d1349b8ed5273b44e4e07492f75e59bfae3c83ee44d38b7d5b30232bcff695207e652157f865cbb846baf
data/CHANGELOG.md CHANGED
@@ -1,8 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.0
4
+
5
+ - Add `if` option to inclusion constraints.
6
+ - Add `name` option to constraints.
7
+ - Add null constraint.
8
+ - Ensure presence constraint enforces not null.
9
+
3
10
  ## 2.0.0
4
11
 
5
12
  - Add support for enumerated types.
6
13
  - Add `if` option to numericality constraints.
7
14
  - Add `if` option to presence constraints.
8
15
  - Fix a bug in presence contraints.
16
+
17
+ ## 1.1.0
18
+
19
+ - Update README.
20
+ - Code cleanups.
21
+ - Disable monkey patching in rspec.
22
+
23
+ ## 1.0.0
24
+
25
+ - Fix `Mysql2Adapter` for Rails 3.2.
26
+ - Add `column` option to `add_primary_key`.
File without changes
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Rein
2
2
 
3
+ [![Build Status](https://travis-ci.org/nullobject/rein.svg?branch=master)](https://travis-ci.org/nullobject/rein)
4
+
3
5
  [Data integrity](http://en.wikipedia.org/wiki/Data_integrity) is a good thing.
4
6
  Constraining the values allowed by your application at the database-level,
5
7
  rather than at the application-level, is a more robust way of ensuring your
@@ -20,10 +22,13 @@ can easily tame the data in your database.
20
22
  * [Inclusion constraints](#inclusion-constraints)
21
23
  * [Numericality constraints](#numericality-constraints)
22
24
  * [Presence constraints](#presence-constraints)
25
+ * [Null constraints](#null-constraints)
23
26
  * [Data types](#data-types)
24
27
  * [Enumerated types](#enumerated-types)
25
28
  * [Views](#views)
29
+ * [Schemas](#schemas)
26
30
  * [Example](#example)
31
+ * [Contributing](#contributing)
27
32
  * [License](#license)
28
33
 
29
34
  ## Getting started
@@ -90,7 +95,7 @@ For example, we can ensure that `state` column values can only ever be
90
95
  `available` or `on_loan`:
91
96
 
92
97
  ```ruby
93
- add_inclusion_constraint :books, :state, in: %w(available on_loan)
98
+ add_inclusion_constraint :books, :state, in: %w[available on_loan]
94
99
  ```
95
100
 
96
101
  To remove an inclusion constraint:
@@ -99,6 +104,23 @@ To remove an inclusion constraint:
99
104
  remove_inclusion_constraint :books, :state
100
105
  ```
101
106
 
107
+ You may also include an `if` option to enforce the constraint only under
108
+ certain conditions, like so:
109
+
110
+ ```ruby
111
+ add_inclusion_constraint :books, :state,
112
+ in: %w[available on_loan],
113
+ if: "deleted_at IS NULL"
114
+ ```
115
+
116
+ You may optionally provide a `name` option to customize the name:
117
+
118
+ ```ruby
119
+ add_inclusion_constraint :books, :state,
120
+ in: %w[available on_loan],
121
+ name: "books_state_is_valid"
122
+ ```
123
+
102
124
  ### Numericality constraints
103
125
 
104
126
  *(PostgreSQL only)*
@@ -124,8 +146,8 @@ Here's all the options for constraining the values:
124
146
  - `greater_than`
125
147
  - `greater_than_or_equal_to`
126
148
 
127
- You may also include an `if` option to enforce the constraint only under certain conditions,
128
- like so:
149
+ You may also include an `if` option to enforce the constraint only under
150
+ certain conditions, like so:
129
151
 
130
152
  ```ruby
131
153
  add_numericality_constraint :books, :publication_month,
@@ -134,6 +156,15 @@ add_numericality_constraint :books, :publication_month,
134
156
  if: "status = 'published'"
135
157
  ```
136
158
 
159
+ You may optionally provide a `name` option to customize the name:
160
+
161
+ ```ruby
162
+ add_numericality_constraint :books, :publication_month,
163
+ greater_than_or_equal_to: 1,
164
+ less_than_or_equal_to: 12,
165
+ name: "books_publication_month_is_valid"
166
+ ```
167
+
137
168
  To remove a numericality constraint:
138
169
 
139
170
  ```ruby
@@ -160,12 +191,39 @@ you can pass an optional `if` option:
160
191
  add_presence_constraint :books, :isbn, if: "status = 'published'"
161
192
  ```
162
193
 
194
+ You may optionally provide a `name` option to customize the name:
195
+
196
+ ```ruby
197
+ add_presence_constraint :books, :isbn, name: "books_isbn_is_valid"
198
+ ```
199
+
163
200
  To remove a presence constraint:
164
201
 
165
202
  ```ruby
166
203
  remove_presence_constraint :books, :title
167
204
  ```
168
205
 
206
+ ### Null constraints
207
+
208
+ *(PostgreSQL only)*
209
+
210
+ A null constraint ensures that a column does *not* contain a null value. This
211
+ is the same as adding `NOT NULL` to a column, the difference being that it can
212
+ be _applied conditionally_.
213
+
214
+ For example, we can add a constraint to enforce that a book has a `due_date`,
215
+ but only if it's `on_loan`:
216
+
217
+ ```ruby
218
+ add_null_constraint :books, :due_date, if: "state = 'on_loan'"
219
+ ```
220
+
221
+ To remove a null constraint:
222
+
223
+ ```ruby
224
+ remove_null_constraint :books, :due_date
225
+ ```
226
+
169
227
  ## Data types
170
228
 
171
229
  ### Enumerated types
@@ -175,7 +233,7 @@ remove_presence_constraint :books, :title
175
233
  An enum is a data type that represents a static, ordered set of values.
176
234
 
177
235
  ```ruby
178
- create_enum_type :book_type, ['paperback', 'hardcover']
236
+ create_enum_type :book_type, %w[paperback hardcover]
179
237
  ```
180
238
 
181
239
  To drop an enum type from the database:
@@ -193,64 +251,112 @@ For example, we can define an `available_books` view that returns only the
193
251
  books which are currently available:
194
252
 
195
253
  ```ruby
196
- create_view(:available_books, "SELECT * FROM books WHERE state = 'available'")
254
+ create_view :available_books, "SELECT * FROM books WHERE state = 'available'"
197
255
  ```
198
256
 
199
257
  To drop a view from the database:
200
258
 
201
259
  ```ruby
202
- drop_view(:available_books)
260
+ drop_view :available_books
203
261
  ```
204
262
 
205
- ## Example
263
+ ## Schemas
206
264
 
207
- Let's have a look at constraining database values for this simple library
208
- application.
265
+ *(PostgreSQL only)*
209
266
 
210
- Here we have a table of authors:
267
+ A database can contain one or more named schemas, which in turn contain tables.
268
+ Sometimes it might be helpful to split your database into multiple schemas to
269
+ logically group tables together.
211
270
 
212
271
  ```ruby
213
- create_table :authors do |t|
214
- t.string :name, null: false
215
- t.timestamps, null: false
216
- end
217
-
218
- # An author must have a name.
219
- add_presence_constraint :authors, :name
272
+ create_schema :archive
220
273
  ```
221
274
 
222
- We also have a table of books:
275
+ To drop a schema from the database:
223
276
 
224
277
  ```ruby
225
- create_table :books do |t|
226
- t.belongs_to :author, null: false
227
- t.string :title, null: false
228
- t.string :state, null: false
229
- t.integer :published_year, null: false
230
- t.integer :published_month, null: false
231
- t.timestamps, null: false
232
- end
278
+ drop_schema :archive
279
+ ```
233
280
 
234
- # A book should always belong to an author. The database should prevent us from
235
- # deleteing an author who has books.
236
- add_foreign_key_constraint :books, :authors, on_delete: :restrict
281
+ ## Example
237
282
 
238
- # A book must have a non-empty title.
239
- add_presence_constraint :books, :title
283
+ Let's have a look at some example migrations to constrain database values for
284
+ our simple library application:
240
285
 
241
- # State is always either "available" or "on_loan".
242
- add_inclusion_constraint :books, :state, in: %w(available on_loan)
286
+ ```ruby
287
+ class CreateAuthorsTable < ActiveRecord::Migration
288
+ def change
289
+ # The authors table contains all the authors of the books in the library.
290
+ create_table :authors do |t|
291
+ t.string :name, null: false
292
+ t.timestamps, null: false
293
+ end
294
+
295
+ # An author must have a name.
296
+ add_presence_constraint :authors, :name
297
+ end
298
+ end
243
299
 
244
- # Our library doesn't deal in classics.
245
- add_numericality_constraint :books, :published_year,
246
- greater_than_or_equal_to: 1980
300
+ class CreateBooksTable < ActiveRecord::Migration
301
+ def change
302
+ # The books table contains all the books in the library, and their state
303
+ # (i.e. whether they are on loan or available).
304
+ create_table :books do |t|
305
+ t.belongs_to :author, null: false
306
+ t.string :title, null: false
307
+ t.string :state, null: false
308
+ t.integer :published_year, null: false
309
+ t.integer :published_month, null: false
310
+ t.date :due_date
311
+ t.timestamps, null: false
312
+ end
313
+
314
+ # A book should always belong to an author. The database should
315
+ # automatically delete an author's books when we delete an author.
316
+ add_foreign_key_constraint :books, :authors, on_delete: :cascade
317
+
318
+ # A book must have a non-empty title.
319
+ add_presence_constraint :books, :title
320
+
321
+ # State is always either "available", "on_loan", or "on_hold".
322
+ add_inclusion_constraint :books, :state, in: %w[available on_loan on_hold]
323
+
324
+ # Our library doesn't deal in classics.
325
+ add_numericality_constraint :books, :published_year,
326
+ greater_than_or_equal_to: 1980
327
+
328
+ # Month is always between 1 and 12.
329
+ add_numericality_constraint :books, :published_month,
330
+ greater_than_or_equal_to: 1,
331
+ less_than_or_equal_to: 12
332
+
333
+ # A book has a due date if it is on loan.
334
+ add_null_constraint :books, :due_date, if: "state = 'on_loan'"
335
+ end
336
+ end
247
337
 
248
- # Month is always between 1 and 12.
249
- add_numericality_constraint :books, :published_month,
250
- greater_than_or_equal_to: 1,
251
- less_than_or_equal_to: 12
338
+ class CreateArchivedBooksTable < ActiveRecord::Migration
339
+ def change
340
+ # The archive schema contains all of the archived data. We want to keep
341
+ # this separate from the public schema.
342
+ create_schema :archive
343
+
344
+ # The archive.books table contains all the achived books.
345
+ create_table "archive.books" do |t|
346
+ t.belongs_to :author, null: false
347
+ t.string :title, null: false
348
+ end
349
+
350
+ # A book should always belong to an author. The database should prevent us
351
+ # from deleteing an author who has books.
352
+ add_foreign_key_constraint "archive.books", :authors, on_delete: :restrict
353
+
354
+ # A book must have a non-empty title.
355
+ add_presence_constraint "archive.books", :title
356
+ end
357
+ end
252
358
  ```
253
359
 
254
360
  ## License
255
361
 
256
- Rein is licensed under the [MIT License](/LICENSE).
362
+ Rein is licensed under the [MIT License](/LICENSE.md).
data/lib/rein.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  require "active_record"
2
2
  require "active_record/connection_adapters/abstract_mysql_adapter"
3
3
 
4
+ require "rein/constraint/options"
4
5
  require "rein/constraint/primary_key"
5
6
  require "rein/constraint/foreign_key"
6
7
  require "rein/constraint/inclusion"
8
+ require "rein/constraint/null"
7
9
  require "rein/constraint/numericality"
8
10
  require "rein/constraint/presence"
9
11
  require "rein/type/enum"
10
12
  require "rein/view"
13
+ require "rein/schema"
11
14
 
12
15
  module ActiveRecord
13
16
  module ConnectionAdapters # :nodoc:
@@ -27,10 +30,12 @@ module ActiveRecord
27
30
  include Rein::Constraint::PrimaryKey
28
31
  include Rein::Constraint::ForeignKey
29
32
  include Rein::Constraint::Inclusion
33
+ include Rein::Constraint::Null
30
34
  include Rein::Constraint::Numericality
31
35
  include Rein::Constraint::Presence
32
36
  include Rein::Type::Enum
33
37
  include Rein::View
38
+ include Rein::Schema
34
39
  end
35
40
  end
36
41
  end
@@ -1,3 +1,5 @@
1
+ require "active_support/inflector"
2
+
1
3
  module Rein
2
4
  module Constraint
3
5
  # This module contains methods for defining foreign key constraints.
@@ -5,16 +5,17 @@ module Rein
5
5
  # This module contains methods for defining inclusion constraints.
6
6
  module Inclusion
7
7
  include ActiveRecord::ConnectionAdapters::Quoting
8
+ include Rein::Constraint::Options
8
9
 
9
10
  def add_inclusion_constraint(table, attribute, options = {})
10
- name = "#{table}_#{attribute}"
11
+ name = constraint_name(table, attribute, options)
11
12
  values = options[:in].map { |value| quote(value) }.join(", ")
12
- conditions = "#{attribute} IN (#{values})"
13
+ conditions = conditions_with_if("#{attribute} IN (#{values})", options)
13
14
  execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
14
15
  end
15
16
 
16
- def remove_inclusion_constraint(table, attribute)
17
- name = "#{table}_#{attribute}"
17
+ def remove_inclusion_constraint(table, attribute, options = {})
18
+ name = constraint_name(table, attribute, options)
18
19
  execute("ALTER TABLE #{table} DROP CONSTRAINT #{name}")
19
20
  end
20
21
  end
@@ -0,0 +1,20 @@
1
+ module Rein
2
+ module Constraint
3
+ # This module contains methods for defining null constraints.
4
+ module Null
5
+ include ActiveRecord::ConnectionAdapters::Quoting
6
+ include Rein::Constraint::Options
7
+
8
+ def add_null_constraint(table, attribute, options = {})
9
+ name = constraint_name(table, attribute, options)
10
+ conditions = conditions_with_if("#{attribute} IS NOT NULL", options)
11
+ execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
12
+ end
13
+
14
+ def remove_null_constraint(table, attribute, options = {})
15
+ name = constraint_name(table, attribute, options)
16
+ execute("ALTER TABLE #{table} DROP CONSTRAINT #{name}")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -2,6 +2,8 @@ module Rein
2
2
  module Constraint
3
3
  # This module contains methods for defining numericality constraints.
4
4
  module Numericality
5
+ include Rein::Constraint::Options
6
+
5
7
  OPERATORS = {
6
8
  greater_than: :>,
7
9
  greater_than_or_equal_to: :>=,
@@ -12,22 +14,20 @@ module Rein
12
14
  }.freeze
13
15
 
14
16
  def add_numericality_constraint(table, attribute, options = {})
15
- name = "#{table}_#{attribute}"
17
+ name = constraint_name(table, attribute, options)
16
18
 
17
19
  conditions = OPERATORS.slice(*options.keys).map do |key, operator|
18
20
  value = options[key]
19
21
  [attribute, operator, value].join(" ")
20
22
  end.join(" AND ")
21
23
 
22
- if options[:if].present?
23
- conditions = "NOT (#{options[:if]}) OR (#{conditions})"
24
- end
24
+ conditions = conditions_with_if(conditions, options)
25
25
 
26
26
  execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
27
27
  end
28
28
 
29
- def remove_numericality_constraint(table, attribute)
30
- name = "#{table}_#{attribute}"
29
+ def remove_numericality_constraint(table, attribute, options = {})
30
+ name = constraint_name(table, attribute, options)
31
31
  execute("ALTER TABLE #{table} DROP CONSTRAINT #{name}")
32
32
  end
33
33
  end
@@ -0,0 +1,18 @@
1
+ module Rein
2
+ module Constraint
3
+ # This module defines methods for handling options command to several constraints.
4
+ module Options
5
+ def conditions_with_if(conditions, options = {})
6
+ if options[:if].present?
7
+ "NOT (#{options[:if]}) OR (#{conditions})"
8
+ else
9
+ conditions
10
+ end
11
+ end
12
+
13
+ def constraint_name(table, attribute, options = {})
14
+ options[:name].presence || "#{table}_#{attribute}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -3,18 +3,19 @@ module Rein
3
3
  # This module contains methods for defining presence constraints.
4
4
  module Presence
5
5
  include ActiveRecord::ConnectionAdapters::Quoting
6
+ include Rein::Constraint::Options
6
7
 
7
8
  def add_presence_constraint(table, attribute, options = {})
8
- name = "#{table}_#{attribute}"
9
- conditions = "#{attribute} !~ '^\\s*$'"
10
- if options[:if].present?
11
- conditions = "NOT (#{options[:if]}) OR (#{conditions})"
12
- end
9
+ name = constraint_name(table, attribute, options)
10
+ conditions = conditions_with_if(
11
+ "(#{attribute} IS NOT NULL) AND (#{attribute} !~ '^\\s*$')",
12
+ options
13
+ )
13
14
  execute("ALTER TABLE #{table} ADD CONSTRAINT #{name} CHECK (#{conditions})")
14
15
  end
15
16
 
16
- def remove_presence_constraint(table, attribute)
17
- name = "#{table}_#{attribute}"
17
+ def remove_presence_constraint(table, attribute, options = {})
18
+ name = constraint_name(table, attribute, options)
18
19
  execute("ALTER TABLE #{table} DROP CONSTRAINT #{name}")
19
20
  end
20
21
  end
@@ -0,0 +1,14 @@
1
+ module Rein
2
+ # This module contains methods for creating/dropping schemas.
3
+ module Schema
4
+ def create_schema(name)
5
+ sql = "CREATE SCHEMA #{name}"
6
+ execute(sql)
7
+ end
8
+
9
+ def drop_schema(name)
10
+ sql = "DROP SCHEMA #{name}"
11
+ execute(sql)
12
+ end
13
+ end
14
+ end
data/lib/rein/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rein
2
- VERSION = "2.0.0".freeze
2
+ VERSION = "2.1.0".freeze
3
3
  end
data/lib/rein/view.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Rein
2
- # This module contains methods for defining views.
2
+ # This module contains methods for creating/dropping views.
3
3
  module View
4
4
  def create_view(view_name, sql)
5
5
  sql = "CREATE VIEW #{view_name} AS #{sql}"
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: 2.0.0
4
+ version: 2.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-03-27 00:00:00.000000000 Z
11
+ date: 2017-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: 4.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 3.2.0
29
+ version: 4.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 4.0.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '6'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 4.0.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '6'
53
+ - !ruby/object:Gem::Dependency
54
+ name: appraisal
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.1'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.1'
27
67
  - !ruby/object:Gem::Dependency
28
68
  name: bundler
29
69
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +78,20 @@ dependencies:
38
78
  - - "~>"
39
79
  - !ruby/object:Gem::Version
40
80
  version: '1.14'
81
+ - !ruby/object:Gem::Dependency
82
+ name: pg
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.20'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '0.20'
41
95
  - !ruby/object:Gem::Dependency
42
96
  name: rake
43
97
  requirement: !ruby/object:Gem::Requirement
@@ -87,26 +141,21 @@ executables: []
87
141
  extensions: []
88
142
  extra_rdoc_files: []
89
143
  files:
90
- - ".gitignore"
91
- - ".rspec"
92
- - ".rubocop.yml"
93
- - ".travis.yml"
94
- - ".yardopts"
95
144
  - CHANGELOG.md
96
- - Gemfile
97
- - LICENSE
145
+ - LICENSE.md
98
146
  - README.md
99
- - Rakefile
100
147
  - lib/rein.rb
101
148
  - lib/rein/constraint/foreign_key.rb
102
149
  - lib/rein/constraint/inclusion.rb
150
+ - lib/rein/constraint/null.rb
103
151
  - lib/rein/constraint/numericality.rb
152
+ - lib/rein/constraint/options.rb
104
153
  - lib/rein/constraint/presence.rb
105
154
  - lib/rein/constraint/primary_key.rb
155
+ - lib/rein/schema.rb
106
156
  - lib/rein/type/enum.rb
107
157
  - lib/rein/version.rb
108
158
  - lib/rein/view.rb
109
- - rein.gemspec
110
159
  homepage: http://github.com/nullobject/rein
111
160
  licenses:
112
161
  - MIT
data/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- *.gem
2
- .bundle
3
- .yardoc
4
- Gemfile.lock
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.rubocop.yml DELETED
@@ -1,35 +0,0 @@
1
- AllCops:
2
- Exclude:
3
- - "bin/**/*"
4
- - "rein.gemspec"
5
-
6
- Metrics/AbcSize:
7
- Max: 27
8
-
9
- Metrics/BlockLength:
10
- ExcludedMethods: describe
11
-
12
- Metrics/CyclomaticComplexity:
13
- Max: 7
14
-
15
- Metrics/LineLength:
16
- Enabled: false
17
-
18
- Metrics/MethodLength:
19
- Max: 11
20
-
21
- Style/BlockDelimiters:
22
- Enabled: false
23
-
24
- Style/Documentation:
25
- Exclude:
26
- - "spec/**/*"
27
-
28
- Style/FrozenStringLiteralComment:
29
- Enabled: false
30
-
31
- Style/SpaceInsideHashLiteralBraces:
32
- Enabled: false
33
-
34
- Style/StringLiterals:
35
- EnforcedStyle: double_quotes
data/.travis.yml DELETED
@@ -1,2 +0,0 @@
1
- language: ruby
2
- before_install: gem install bundler -v 1.14.5
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- --markup markdown
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in rein.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
- require "rubocop/rake_task"
4
-
5
- RSpec::Core::RakeTask.new(:spec)
6
- RuboCop::RakeTask.new
7
-
8
- task default: %w(spec rubocop)
data/rein.gemspec DELETED
@@ -1,26 +0,0 @@
1
- lib = File.expand_path("../lib", __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
-
4
- require "rein/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "rein"
8
- spec.version = Rein::VERSION
9
- spec.author = "Joshua Bassett"
10
- spec.email = "josh.bassett@gmail.com"
11
- spec.summary = "Database constraints made easy for ActiveRecord."
12
- spec.description = "Rein adds bunch of methods to your ActiveRecord migrations so you can easily tame your database."
13
- spec.homepage = "http://github.com/nullobject/rein"
14
- spec.license = "MIT"
15
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
- f.match(%r{^(test|spec|features)/})
17
- end
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_runtime_dependency "activerecord", ">= 3.2.0"
21
-
22
- spec.add_development_dependency "bundler", "~> 1.14"
23
- spec.add_development_dependency "rake", "~> 12.0"
24
- spec.add_development_dependency "rspec", "~> 3.5"
25
- spec.add_development_dependency "rubocop", "~> 0.47"
26
- end