activerecord-exclusive-arc 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3824d9259213c59c55ee5287cc9bd3b8e76924be405a269c6752434811c2599
4
- data.tar.gz: 2e8b6ad42b5b4cad774e7ef56e21c54fa9a0e8223fce05762ecb60cf791b4b87
3
+ metadata.gz: 315a60d914bac0fcce5129cddb165afa90604355e2c4bc9c46cad1b2d5aac79a
4
+ data.tar.gz: 5b93a4be4ddba10b47eaaaddbd5ba7cb5df072b2462114e01945e2c2f9b051d6
5
5
  SHA512:
6
- metadata.gz: 28d0736dfd28b87e367ab62d9ac1c39cc556bc76d999b390a4b6220b88ac566bcac66c6fda36b0237a5442180b44602c72e6ef837ed99a4f281b0e42da4aac81
7
- data.tar.gz: e62da6627153c7853dde9bba360ec654ea28baf088bb4db6261fc77dd88fc78d1bf4b5f5d2c2d777682d0233e7f6ab72567ed1790e8813670b4964ec69a063a8
6
+ metadata.gz: 502088f01538ad5c31fbb4052f2a03c7f4dbe5723533d452b07abb331dae7d20c6dc4b87f3c5e019731c2b6cfce43834726f4cc89febf32e971593d2ecb39e44
7
+ data.tar.gz: 74c62d1c094c033ff0224af98128fe0d65a114e1f36099845cf1d3312cbd39d34a73db71f65b275eda92746be51d063e62ca65feb31849578833951af8115976
data/README.md CHANGED
@@ -1,31 +1,31 @@
1
- ### What does it do?
1
+ ## 💫 `activerecord-exclusive-arc` 💫
2
2
 
3
- It allows an ActiveRecord model to exclusively belong to one of any number of different types of ActiveRecord
4
- models.
3
+ A RubyGem that allows an ActiveRecord model to exclusively belong to one of any number of different
4
+ types of ActiveRecord models.
5
5
 
6
- ### Doesn’t Rails already provide this?
6
+ ### Doesn’t Rails already provide a way to do this?
7
7
 
8
- It does, but there are decent arguments against the default Rails way of doing polymorphism. Consider the
9
- fact that the Ruby class name is stored in the database as a string. If you want to change the name of the
10
- Ruby class used for such reasons, you must also update the database strings that represent it. The bleeding
11
- of application-layer definitions into the database may become a liability.
8
+ It does, but there are decent arguments against the default Rails way of doing polymorphism.
9
+ Consider the fact that the Ruby class name is stored in the database as a string. If you want to
10
+ change the name of the Ruby class used for such reasons, you must also update the database strings
11
+ that represent it. The seeping of application-layer definitions into the database may become a
12
+ liability.
12
13
 
13
- Another common argument concerns referential integrity. _Foreign Key Constraints_ are a common mechanism to
14
- ensure primary keys of tables can be reliably used as foreign keys on others. This becomes harder to enforce
15
- when a column that represents a Ruby class is one of the components required for unique identification.
16
-
17
- There are also quality of life considerations, such as not being able to eager-load the `belongs_to ...
18
- polymorphic: true` relationship and the fact that polymorphic indexes require multiple columns.
14
+ Another common argument concerns referential integrity. _Foreign Key Constraints_ are a common
15
+ mechanism to ensure primary keys of database tables can be reliably used as foreign keys on others.
16
+ This becomes harder to enforce in the databse when a string column that represents a Ruby class is
17
+ one of the components required for unique identification.
19
18
 
20
19
  ### So how does this work?
21
20
 
22
- It reduces the boilerplate of managing a _Polymorphic Assication_ modeled as a pattern called an _Exclusive
23
- Arc_. This maps nicely to a database constraint, a set of optional `belongs_to` relationships, some
24
- polymorphic methods, and an `ActiveRecord` validation for good measure.
21
+ It reduces the boilerplate of managing a _Polymorphic Assication_ modeled as a pattern called an
22
+ _Exclusive Arc_, where each potential polymorphic reference has its own foreign key. This maps
23
+ nicely to a set of optional `belongs_to` relationships, some polymorphic convenience methods, and a
24
+ database check constraint with a matching `ActiveRecord` validation.
25
25
 
26
26
  ## How to use
27
27
 
28
- Firstly, in your `Gemfile`:
28
+ Firstly, add the gem to your `Gemfile` and `bundle install`:
29
29
 
30
30
  ```ruby
31
31
  gem "activerecord-exclusive-arc"
@@ -37,8 +37,8 @@ The feature set of this gem is offered via a Rails generator command:
37
37
  bin/rails g exclusive_arc <Model> <arc> <belongs_to1> <belongs_to2> ...
38
38
  ```
39
39
 
40
- This assumes you already have a `<Model>`. The `<arc>` is the name of the polymorphic association you want to
41
- establish that may either be a `<belongs_to1>`, `<belongs_to2>`, etc. Say we ran:
40
+ This assumes you already have a `<Model>`. The `<arc>` is the name of the polymorphic association
41
+ you want to establish that may either be a `<belongs_to1>`, `<belongs_to2>`, etc. Say we ran:
42
42
 
43
43
  ```
44
44
  bin/rails g exclusive_arc Comment commentable post comment
@@ -84,7 +84,8 @@ class Comment < ApplicationRecord
84
84
  end
85
85
  ```
86
86
 
87
- Continuing with our example, the generator command would also produce a migration that looks like this:
87
+ Continuing with our example, the generator command would also produce a migration that looks like
88
+ this:
88
89
 
89
90
  ```ruby
90
91
  class CommentCommentableExclusiveArc < ActiveRecord::Migration[7.0]
@@ -100,9 +101,9 @@ class CommentCommentableExclusiveArc < ActiveRecord::Migration[7.0]
100
101
  end
101
102
  ```
102
103
 
103
- The check constraint ensures `ActiveRecord` validations can’t be bypassed to break the fabeled rule - "There
104
- Can Only Be One™️". Traditional foreign key constraints can be used and the partial indexes provide improved
105
- lookup performance for each individual polymorphic assoication.
104
+ The check constraint ensures `ActiveRecord` validations can’t be bypassed to break the fabeled
105
+ rule - "There Can Only Be One". Traditional foreign key constraints can be used and the partial
106
+ indexes provide improved lookup performance for each individual polymorphic assoication.
106
107
 
107
108
  ### Exclusive Arc Options
108
109
 
@@ -114,30 +115,24 @@ Usage:
114
115
  rails generate exclusive_arc NAME [arc belongs_to1 belongs_to2 ...] [options]
115
116
 
116
117
  Options:
117
- [--skip-namespace], [--no-skip-namespace] # Skip namespace (affects only isolated engines)
118
- [--skip-collision-check], [--no-skip-collision-check] # Skip collision check
119
118
  [--optional], [--no-optional] # Exclusive arc is optional
120
119
  [--skip-foreign-key-constraints], [--no-skip-foreign-key-constraints] # Skip foreign key constraints
121
120
  [--skip-foreign-key-indexes], [--no-skip-foreign-key-indexes] # Skip foreign key partial indexes
122
121
  [--skip-check-constraint], [--no-skip-check-constraint] # Skip check constraint
123
122
 
124
- Runtime options:
125
- -f, [--force] # Overwrite files that already exist
126
- -p, [--pretend], [--no-pretend] # Run but do not make any changes
127
- -q, [--quiet], [--no-quiet] # Suppress status output
128
- -s, [--skip], [--no-skip] # Skip files that already exist
129
-
130
123
  Adds an Exclusive Arc to an ActiveRecord model and generates the migration for it
131
124
  ```
132
125
 
133
- Notably, if you want to make an Exclusive Arc optional, you can use the `--optional` flag. This will adjust
134
- the definition in your `ActiveRecord` model and loosen both the validation and database check constraint so
135
- that there can be 0 or 1 foreign keys set for the polymorphic association.
126
+ Notably, if you want to make an Exclusive Arc optional, you can use the `--optional` flag. This will
127
+ adjust the definition in your `ActiveRecord` model and loosen both the validation and database check
128
+ constraint so that there can be 0 or 1 foreign keys set for the polymorphic reference.
136
129
 
137
130
  ### Compatibility
138
131
 
139
- Currently `activerecord-exclusive-arc` is tested against a matrix of Ruby 2.7 and 3.2, Rails 6.1 and 7.0, and
140
- `postgresql` and `sqlite3` database adapters.
132
+ Currently `activerecord-exclusive-arc` is tested against a matrix of:
133
+ * Ruby 2.7 and 3.2
134
+ * Rails 6.1 and 7.0
135
+ * `postgresql` and `sqlite3` database adapters
141
136
 
142
137
  ### Contributing
143
138
 
@@ -1,3 +1,3 @@
1
1
  module ExclusiveArc
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -110,7 +110,7 @@ class ExclusiveArcGenerator < ActiveRecord::Generators::Base
110
110
  add_check_constraint(
111
111
  :#{table_name},
112
112
  "#{check_constraint}",
113
- name: :#{arc}
113
+ name: "#{arc}"
114
114
  )
115
115
  RUBY
116
116
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-exclusive-arc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - justin talbott
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-10 00:00:00.000000000 Z
11
+ date: 2023-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  requirements: []
92
- rubygems_version: 3.4.10
92
+ rubygems_version: 3.4.12
93
93
  signing_key:
94
94
  specification_version: 4
95
95
  summary: An ActiveRecord extension for polymorphic exclusive arc relationships