sequelize-rails 0.2.1 → 0.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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/CHANGELOG.md +3 -2
  4. data/Gemfile.lock +105 -103
  5. data/README.md +203 -26
  6. data/lib/sequel/rails/generators/application_record/application_record_generator.rb +26 -0
  7. data/lib/sequel/rails/generators/migration/migration_generator.rb +23 -0
  8. data/lib/sequel/rails/generators/model/model_generator.rb +11 -0
  9. data/lib/sequel/rails/minitest.rb +24 -0
  10. data/lib/sequel/rails/railtie.rb +69 -0
  11. data/lib/sequel/rails/railties/controller_runtime.rb +48 -0
  12. data/lib/sequel/rails/railties/log_subscriber.rb +155 -0
  13. data/lib/sequel/rails/translation_support.rb +15 -0
  14. data/lib/sequel/rails/version.rb +7 -0
  15. data/lib/sequel/rails.rb +38 -0
  16. data/lib/{tasks.rake → sequel/tasks.rake} +6 -6
  17. data/lib/sequelize-rails.rb +1 -1
  18. data/lib/sequelize_rails.rb +1 -29
  19. data/sequelize-rails.gemspec +2 -2
  20. data/sig/sequelize_rails.rbs +5 -3
  21. metadata +18 -15
  22. data/lib/sequelize_rails/generators/application_record/application_record_generator.rb +0 -24
  23. data/lib/sequelize_rails/generators/migration/migration_generator.rb +0 -21
  24. data/lib/sequelize_rails/generators/model/model_generator.rb +0 -9
  25. data/lib/sequelize_rails/railtie.rb +0 -66
  26. data/lib/sequelize_rails/railties/controller_runtime.rb +0 -46
  27. data/lib/sequelize_rails/railties/log_subscriber.rb +0 -153
  28. data/lib/sequelize_rails/translation_support.rb +0 -13
  29. data/lib/sequelize_rails/version.rb +0 -5
  30. /data/lib/{sequelize_rails → sequel/rails}/db_console.rb +0 -0
  31. /data/lib/{sequelize_rails → sequel/rails}/generators/application_record/templates/application_record.rb.tt +0 -0
  32. /data/lib/{sequelize_rails → sequel/rails}/generators/migration/templates/migration.rb.erb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28ba0f80f8f390c7a6e735f81466cf6de3afa6a583fa468356165dc16f6b464f
4
- data.tar.gz: aea26a334f90d64997e596fa6830f204d59bb35f58616e34795b5e0edfdf06f7
3
+ metadata.gz: 1d9b36457ef8b9c1cfc36554adb7b76a2c6262ac93fc9e6468a0c5e4eae74a04
4
+ data.tar.gz: 46a4e132f2d67a1c2aab16dcf1ec7fa39bb113f1dab39dbf2bb9a0e272af33da
5
5
  SHA512:
6
- metadata.gz: 10aff2b60e7c26aa6f3ae61292372689c77574e51c8aed46529b5a90989a3f013cb3661195ba83c48e98e3df4027e6afb0b18d91ba150b73f385acd05c81bbf5
7
- data.tar.gz: 3ad6415360fa05680722111e912d6c13be37204c76a8410e69ad18c19c2bde2a63fb9a2adf41728b6b286ae70847f1d34bdae8ff6daf58ea7f3d51ba90a7ae4e
6
+ metadata.gz: 0d4ff60a438337fe2d9f9f440a74da942b8c9aad250c8a127500cab2ef6082dd5de45c15163abaa8f25e1ce26c7c6ad772fb24edf57995ac4c6c29191512bf4c
7
+ data.tar.gz: '08f935a29a8f038fc824d407cb8d988f0d1c0745f9465e01dbbfe870c9a4c97f021a251b3750a7b4b74e91865846d4a51121039d6aac2c2a10ddce312e72a697'
data/.DS_Store ADDED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,5 +1,6 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.1.0] - 2021-12-26
3
+ ## [0.4.0] - 2023-08-16
4
4
 
5
- - Initial release
5
+ - Rake tasks will no longer attempt a database connection by default
6
+ - A new `db:connection` rake task has been added for explicitly connecting to the primary database
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sequelize-rails (0.2.0)
4
+ sequelize-rails (0.3.0)
5
5
  activerecord (>= 6.0.0)
6
6
  rails (>= 6.0.0)
7
7
  sequel (>= 5.0.0)
@@ -9,67 +9,67 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actioncable (7.0.3)
13
- actionpack (= 7.0.3)
14
- activesupport (= 7.0.3)
12
+ actioncable (7.0.4.3)
13
+ actionpack (= 7.0.4.3)
14
+ activesupport (= 7.0.4.3)
15
15
  nio4r (~> 2.0)
16
16
  websocket-driver (>= 0.6.1)
17
- actionmailbox (7.0.3)
18
- actionpack (= 7.0.3)
19
- activejob (= 7.0.3)
20
- activerecord (= 7.0.3)
21
- activestorage (= 7.0.3)
22
- activesupport (= 7.0.3)
17
+ actionmailbox (7.0.4.3)
18
+ actionpack (= 7.0.4.3)
19
+ activejob (= 7.0.4.3)
20
+ activerecord (= 7.0.4.3)
21
+ activestorage (= 7.0.4.3)
22
+ activesupport (= 7.0.4.3)
23
23
  mail (>= 2.7.1)
24
24
  net-imap
25
25
  net-pop
26
26
  net-smtp
27
- actionmailer (7.0.3)
28
- actionpack (= 7.0.3)
29
- actionview (= 7.0.3)
30
- activejob (= 7.0.3)
31
- activesupport (= 7.0.3)
27
+ actionmailer (7.0.4.3)
28
+ actionpack (= 7.0.4.3)
29
+ actionview (= 7.0.4.3)
30
+ activejob (= 7.0.4.3)
31
+ activesupport (= 7.0.4.3)
32
32
  mail (~> 2.5, >= 2.5.4)
33
33
  net-imap
34
34
  net-pop
35
35
  net-smtp
36
36
  rails-dom-testing (~> 2.0)
37
- actionpack (7.0.3)
38
- actionview (= 7.0.3)
39
- activesupport (= 7.0.3)
37
+ actionpack (7.0.4.3)
38
+ actionview (= 7.0.4.3)
39
+ activesupport (= 7.0.4.3)
40
40
  rack (~> 2.0, >= 2.2.0)
41
41
  rack-test (>= 0.6.3)
42
42
  rails-dom-testing (~> 2.0)
43
43
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
44
- actiontext (7.0.3)
45
- actionpack (= 7.0.3)
46
- activerecord (= 7.0.3)
47
- activestorage (= 7.0.3)
48
- activesupport (= 7.0.3)
44
+ actiontext (7.0.4.3)
45
+ actionpack (= 7.0.4.3)
46
+ activerecord (= 7.0.4.3)
47
+ activestorage (= 7.0.4.3)
48
+ activesupport (= 7.0.4.3)
49
49
  globalid (>= 0.6.0)
50
50
  nokogiri (>= 1.8.5)
51
- actionview (7.0.3)
52
- activesupport (= 7.0.3)
51
+ actionview (7.0.4.3)
52
+ activesupport (= 7.0.4.3)
53
53
  builder (~> 3.1)
54
54
  erubi (~> 1.4)
55
55
  rails-dom-testing (~> 2.0)
56
56
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
57
- activejob (7.0.3)
58
- activesupport (= 7.0.3)
57
+ activejob (7.0.4.3)
58
+ activesupport (= 7.0.4.3)
59
59
  globalid (>= 0.3.6)
60
- activemodel (7.0.3)
61
- activesupport (= 7.0.3)
62
- activerecord (7.0.3)
63
- activemodel (= 7.0.3)
64
- activesupport (= 7.0.3)
65
- activestorage (7.0.3)
66
- actionpack (= 7.0.3)
67
- activejob (= 7.0.3)
68
- activerecord (= 7.0.3)
69
- activesupport (= 7.0.3)
60
+ activemodel (7.0.4.3)
61
+ activesupport (= 7.0.4.3)
62
+ activerecord (7.0.4.3)
63
+ activemodel (= 7.0.4.3)
64
+ activesupport (= 7.0.4.3)
65
+ activestorage (7.0.4.3)
66
+ actionpack (= 7.0.4.3)
67
+ activejob (= 7.0.4.3)
68
+ activerecord (= 7.0.4.3)
69
+ activesupport (= 7.0.4.3)
70
70
  marcel (~> 1.0)
71
71
  mini_mime (>= 1.1.0)
72
- activesupport (7.0.3)
72
+ activesupport (7.0.4.3)
73
73
  concurrent-ruby (~> 1.0, >= 1.0.2)
74
74
  i18n (>= 1.6, < 2)
75
75
  minitest (>= 5.1)
@@ -82,118 +82,120 @@ GEM
82
82
  ast (2.4.2)
83
83
  builder (3.2.4)
84
84
  coderay (1.1.3)
85
- concurrent-ruby (1.1.10)
85
+ concurrent-ruby (1.2.2)
86
86
  crass (1.0.6)
87
- digest (3.1.0)
88
- erubi (1.10.0)
89
- globalid (1.0.0)
87
+ date (3.3.3)
88
+ erubi (1.12.0)
89
+ globalid (1.1.0)
90
90
  activesupport (>= 5.0)
91
- i18n (1.10.0)
91
+ i18n (1.12.0)
92
92
  concurrent-ruby (~> 1.0)
93
- loofah (2.18.0)
93
+ json (2.6.3)
94
+ language_server-protocol (3.17.0.3)
95
+ loofah (2.19.1)
94
96
  crass (~> 1.0.2)
95
97
  nokogiri (>= 1.5.9)
96
- mail (2.7.1)
98
+ mail (2.8.1)
97
99
  mini_mime (>= 0.1.1)
100
+ net-imap
101
+ net-pop
102
+ net-smtp
98
103
  marcel (1.0.2)
99
104
  method_source (1.0.0)
100
105
  mini_mime (1.1.2)
101
- mini_portile2 (2.8.0)
102
- minitest (5.16.0)
103
- minitest-reporters (1.5.0)
106
+ mini_portile2 (2.8.1)
107
+ minitest (5.18.0)
108
+ minitest-reporters (1.6.0)
104
109
  ansi
105
110
  builder
106
111
  minitest (>= 5.0)
107
112
  ruby-progressbar
108
- net-imap (0.2.3)
109
- digest
113
+ net-imap (0.3.4)
114
+ date
110
115
  net-protocol
111
- strscan
112
- net-pop (0.1.1)
113
- digest
116
+ net-pop (0.1.2)
114
117
  net-protocol
118
+ net-protocol (0.2.1)
115
119
  timeout
116
- net-protocol (0.1.3)
117
- timeout
118
- net-smtp (0.3.1)
119
- digest
120
+ net-smtp (0.3.3)
120
121
  net-protocol
121
- timeout
122
122
  nio4r (2.5.8)
123
- nokogiri (1.13.6)
123
+ nokogiri (1.14.2)
124
124
  mini_portile2 (~> 2.8.0)
125
125
  racc (~> 1.4)
126
126
  parallel (1.22.1)
127
- parser (3.1.2.0)
127
+ parser (3.2.1.1)
128
128
  ast (~> 2.4.1)
129
- pg (1.3.5)
130
- pry (0.14.1)
129
+ pg (1.4.6)
130
+ pry (0.14.2)
131
131
  coderay (~> 1.1)
132
132
  method_source (~> 1.0)
133
- racc (1.6.0)
134
- rack (2.2.3.1)
135
- rack-test (1.1.0)
136
- rack (>= 1.0, < 3)
137
- rails (7.0.3)
138
- actioncable (= 7.0.3)
139
- actionmailbox (= 7.0.3)
140
- actionmailer (= 7.0.3)
141
- actionpack (= 7.0.3)
142
- actiontext (= 7.0.3)
143
- actionview (= 7.0.3)
144
- activejob (= 7.0.3)
145
- activemodel (= 7.0.3)
146
- activerecord (= 7.0.3)
147
- activestorage (= 7.0.3)
148
- activesupport (= 7.0.3)
133
+ racc (1.6.2)
134
+ rack (2.2.6.4)
135
+ rack-test (2.1.0)
136
+ rack (>= 1.3)
137
+ rails (7.0.4.3)
138
+ actioncable (= 7.0.4.3)
139
+ actionmailbox (= 7.0.4.3)
140
+ actionmailer (= 7.0.4.3)
141
+ actionpack (= 7.0.4.3)
142
+ actiontext (= 7.0.4.3)
143
+ actionview (= 7.0.4.3)
144
+ activejob (= 7.0.4.3)
145
+ activemodel (= 7.0.4.3)
146
+ activerecord (= 7.0.4.3)
147
+ activestorage (= 7.0.4.3)
148
+ activesupport (= 7.0.4.3)
149
149
  bundler (>= 1.15.0)
150
- railties (= 7.0.3)
150
+ railties (= 7.0.4.3)
151
151
  rails-dom-testing (2.0.3)
152
152
  activesupport (>= 4.2.0)
153
153
  nokogiri (>= 1.6)
154
- rails-html-sanitizer (1.4.3)
155
- loofah (~> 2.3)
156
- railties (7.0.3)
157
- actionpack (= 7.0.3)
158
- activesupport (= 7.0.3)
154
+ rails-html-sanitizer (1.5.0)
155
+ loofah (~> 2.19, >= 2.19.1)
156
+ railties (7.0.4.3)
157
+ actionpack (= 7.0.4.3)
158
+ activesupport (= 7.0.4.3)
159
159
  method_source
160
160
  rake (>= 12.2)
161
161
  thor (~> 1.0)
162
162
  zeitwerk (~> 2.5)
163
163
  rainbow (3.1.1)
164
164
  rake (13.0.6)
165
- regexp_parser (2.5.0)
165
+ regexp_parser (2.7.0)
166
166
  rexml (3.2.5)
167
- rubocop (1.29.1)
167
+ rubocop (1.48.1)
168
+ json (~> 2.3)
168
169
  parallel (~> 1.10)
169
- parser (>= 3.1.0.0)
170
+ parser (>= 3.2.0.0)
170
171
  rainbow (>= 2.2.2, < 4.0)
171
172
  regexp_parser (>= 1.8, < 3.0)
172
173
  rexml (>= 3.2.5, < 4.0)
173
- rubocop-ast (>= 1.17.0, < 2.0)
174
+ rubocop-ast (>= 1.26.0, < 2.0)
174
175
  ruby-progressbar (~> 1.7)
175
- unicode-display_width (>= 1.4.0, < 3.0)
176
- rubocop-ast (1.18.0)
177
- parser (>= 3.1.1.0)
178
- rubocop-performance (1.13.3)
176
+ unicode-display_width (>= 2.4.0, < 3.0)
177
+ rubocop-ast (1.27.0)
178
+ parser (>= 3.2.1.0)
179
+ rubocop-performance (1.16.0)
179
180
  rubocop (>= 1.7.0, < 2.0)
180
181
  rubocop-ast (>= 0.4.0)
181
- ruby-progressbar (1.11.0)
182
- sequel (5.57.0)
183
- sqlite3 (1.4.4)
184
- standard (1.12.1)
185
- rubocop (= 1.29.1)
186
- rubocop-performance (= 1.13.3)
187
- strscan (3.0.3)
182
+ ruby-progressbar (1.13.0)
183
+ sequel (5.66.0)
184
+ sqlite3 (1.6.1)
185
+ mini_portile2 (~> 2.8.0)
186
+ standard (1.25.3)
187
+ language_server-protocol (~> 3.17.0.2)
188
+ rubocop (~> 1.48.1)
189
+ rubocop-performance (~> 1.16.0)
188
190
  thor (1.2.1)
189
- timeout (0.3.0)
190
- tzinfo (2.0.4)
191
+ timeout (0.3.2)
192
+ tzinfo (2.0.6)
191
193
  concurrent-ruby (~> 1.0)
192
- unicode-display_width (2.1.0)
194
+ unicode-display_width (2.4.2)
193
195
  websocket-driver (0.7.5)
194
196
  websocket-extensions (>= 0.1.0)
195
197
  websocket-extensions (0.1.5)
196
- zeitwerk (2.6.0)
198
+ zeitwerk (2.6.7)
197
199
 
198
200
  PLATFORMS
199
201
  ruby
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
- # Sequelize::Rails
1
+ # sequelize-rails
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/sequelize_rails`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ ![Gem Version](https://badge.fury.io/rb/sequelize-rails.svg)
4
+ ![Build Status](https://github.com/kenaniah/sequelize-rails/actions/workflows/ci.yml/badge.svg)
5
+ ![Code Climate](https://codeclimate.com/github/kenaniah/sequelize-rails.svg)
4
6
 
5
- TODO: Delete this and the text above, and describe your gem
7
+ This gem provides support for using [Sequel](https://sequel.jeremyevans.net/) as an ORM for Rails applications by providing features that are similar to ActiveRecord's integration with Rails. It is an alternative to [sequel-rails](https://github.com/TalentBox/sequel-rails).
6
8
 
7
- ## Installation
9
+ ## Using sequelize-rails
8
10
 
9
11
  Add this line to your application's Gemfile:
10
12
 
@@ -16,38 +18,213 @@ And then execute:
16
18
 
17
19
  $ bundle install
18
20
 
19
- Or install it yourself as:
21
+ If you are looking to replace ActiveRecord entirely, you may need to either generate your Rails app using `--skip-active-record` or manually remove references to ActiveRecord in your `Gemfile`, `config/application.rb`, and `config/environments/*.rb` files.
20
22
 
21
- $ gem install sequelize-rails
23
+ ## Features provided by `sequelize-rails`
22
24
 
23
- ## Usage
25
+ **Database Management**
24
26
 
25
- TODO: Write usage instructions here
27
+ - [x] [Connectivity](#---database-connectivity) via `config/database.yml`
28
+ - [x] [Console](#---database-console) via `rails db`
29
+ - [x] [Migrations](#---database-migrations) via `Sequel::Migration`
30
+ - [ ] [Migration Generators](#---migration-generators) via `rails generate migration` (not supported yet)
31
+ - [x] [Rake tasks](#---database-rake-tasks) via `rails db:*`
26
32
 
27
- ## Development
33
+ **Test Suite**
28
34
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
35
+ - [x] [Minitest Helpers](#---minitest-helpers)
30
36
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
37
+ **Rake Helpers**
32
38
 
33
- ## Contributing
39
+ - [x] Does not connect to the primary database in Rake (tasks by default)
40
+ - [x] Allows for explicit connection to the primary database by invoking `db:connection`
41
+
42
+ ## ✅ - Database Connectivity
43
+
44
+ This gem will automatically use your application's `config/database.yml` file to configure the available database connection(s).
45
+
46
+ ### Primary Connection
47
+
48
+ A connection to the "primary" database is automatically established when the application is loaded. This connection will by used by default for all model classes that do not specify a different connection.
49
+
50
+ The primary connection can be referenced directly via:
51
+
52
+ ```ruby
53
+ Sequel::DATABASES.first # instead of ActiveRecord::Base.connection
54
+ ```
55
+
56
+ A common convention within applications that use Sequel is to store the primary connection in the `DB` constant, which can be easily done within an initializer file via the following:
57
+
58
+ ```ruby
59
+ # config/initializers/sequel.rb
60
+ DB = Sequel::DATABASES.first unless defined?(DB)
61
+ ```
62
+
63
+ ### Additional Connections
64
+
65
+ Additional connections can be configured in your `config/database.yml` file by adding additional entries to the `databases` key. For example:
66
+
67
+ ```yaml
68
+ # config/database.yml
69
+
70
+ # ... snip ...
71
+
72
+ production:
73
+ <<: *default
74
+ database: <%= ENV["DATABASE_URL"] %>
75
+
76
+ my_replica:
77
+ <<: *default
78
+ database: <%= ENV["REPLICA_DATABASE_URL"] %>
79
+
80
+ ```
81
+
82
+ Additional connections can be retrieved via `Sequel::Rails.connect_to`, such as within the example below:
83
+
84
+ ```ruby
85
+ replica_connection = Sequel::Rails.connect_to :my_replica
86
+ ```
87
+
88
+ ### Database Connections in Rake Tasks
89
+
90
+ By default, this gem will not connect to the primary database when running Rake tasks. This is to prevent Rake tasks from accidentally depending on a database connection when one is not necessary. If you would like to connect to the primary database within a Rake task, you can do so by invoking the `db:connection` task, or by calling `Sequel::Rails.connect_to :primary` from within your task.
91
+
92
+ ```ruby
93
+ # Rakefile
94
+
95
+ # no database connections are initialized by default
96
+ task :no_db_connection do
97
+ Sequel::DATABASES # => []
98
+ Sequel::DATABASES.length # => 0
99
+ end
100
+
101
+ # connects to the primary database explicitly
102
+ task :my_task do
103
+ db = Sequel::Rails.connect_to :primary
104
+ Sequel::DATABASES # => [db]
105
+ Sequel::DATABASES.length # => 1
106
+ end
107
+
108
+ # connects to the primary database via the db:connection task
109
+ task :my_other_task => "db:connection" do
110
+ Sequel::DATABASES # => [<primary db connection here>]
111
+ Sequel::DATABASES.length # => 1
112
+ end
113
+ ```
114
+
115
+ ## ✅ - Database Console
116
+
117
+ You can connect directly to your database via the `rails db` command. This command is similar to the `rails console` command, but instead of loading your application, it will connect directly to the database.
118
+
119
+ ```bash
120
+ # connects to the primary database
121
+ $ rails db
122
+
123
+ # connects to the database of the test environment
124
+ $ rails db -e test
125
+ ```
126
+
127
+ Please note that only the `-e` flag is supported at this time. Other flags such as `--database` are not supported.
128
+
129
+ ## ✅ - Database Migrations
130
+
131
+ This gem provides support for using Sequel's migration system. Migrations are stored in the `db/migrate` directory and can be executed via the `rails db:migrate` command.
132
+
133
+ More information about Sequel's migration system can be found in the [Sequel documentation](https://sequel.jeremyevans.net/rdoc/files/doc/migration_rdoc.html).
134
+
135
+ ## 🚧 - Migration Generators
136
+
137
+ Rails supports the generation of migrations via the `rails generate migration` command. This gem does not currently support this feature, but pull requests are welcome.
138
+
139
+ ## ✅ - Database Rake Tasks
140
+
141
+ This gem provides a set of rake tasks that are similar to the ActiveRecord tasks. These tasks can be used to create, drop, migrate, and seed your database.
142
+
143
+ | Task | Description |
144
+ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
145
+ | `rails db:create` | Creates the database from `DATABASE_URL` or `config/database.yml` for the current `RAILS_ENV` (use `db:create:all` to create all databases in the config). |
146
+ | `rails db:drop` | Drops the database from `DATABASE_URL` or `config/database.yml` for the current `RAILS_ENV` (use `db:drop:all` to drop all databases in the config). |
147
+ | `rails db:migrate` | Runs database migrations |
148
+ | `rails db:migrate:redo` | Rolls back the last migration and re-runs it |
149
+ | `rails db:migrate:status` | Displays the status of the database migrations |
150
+ | `rails db:prepare` | Runs `db:setup` if the database does not exist or `db:migrate` if it does |
151
+ | `rails db:reset` | Runs `db:drop`, `db:setup` |
152
+ | `rails db:rollback` | Rolls back the last migration |
153
+ | `rails db:setup` | Runs the `db:create`, `db:migrate`, `db:seed` tasks |
154
+
155
+ ## ✅ - Minitest Helpers
156
+
157
+ ### `assert_num_queries`
158
+
159
+ This helper can be used to assert that a specific number of database queries are executed within the given block of code.
160
+
161
+ Example:
162
+
163
+ ```ruby
164
+ # asserts that exactly 2 queries are executed
165
+ assert_num_queries(2) do
166
+ u = User[id: 1234]
167
+ u.update(name: "Random User")
168
+ end
169
+
170
+ # asserts that 0 queries are executed
171
+ assert_num_queries(0) do
172
+ some_hopefully_cached_method
173
+ end
174
+
175
+ # asserts that 1 to 3 queries are executed
176
+ assert_num_queries(1..3) do
177
+ u = User.find_or_create(name: "Random User")
178
+ end
179
+
180
+ # asserts that at least 3 queries are executed
181
+ assert_num_queries(3..) do
182
+ stuff_here
183
+ end
184
+
185
+ # asserts that no more than 2 queries are executed
186
+ assert_num_queries(..2) do
187
+ other_stuff_here
188
+ end
189
+ ```
190
+
191
+ ### `assert_no_queries`
192
+
193
+ This helper can be used to assert that no database queries are executed within the given block of code.
194
+
195
+ Example:
196
+
197
+ ```ruby
198
+ # asserts that no queries are executed
199
+ assert_no_queries do
200
+ some_hopefully_cached_method
201
+ end
202
+ ```
203
+
204
+ # Contributing
34
205
 
35
206
  Bug reports and pull requests are welcome on GitHub at https://github.com/kenaniah/sequelize-rails.
36
207
 
37
- ## License
208
+ This repository contains a handful of commands that can be used to facilitate this gem's development. These are:
209
+
210
+ | Command | Description |
211
+ | -------------------------- | ---------------------------------------------------------------------------------------- |
212
+ | `bin/setup` | Installs the gem's development dependencies |
213
+ | `bin/test` | Runs the test suite for each supported Rails version |
214
+ | `bin/console` | Starts an interactive console within the gem's test Rails app (located in `test/dummy/`) |
215
+ | `bundle exec rake release` | Creates a new release of the gem (version number should be bumped first) |
216
+
217
+ # License
38
218
 
39
219
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
40
220
 
41
- ## Roadmap
42
-
43
- - [x] Support database.yml file
44
- - [x] Support `rails db` console command
45
- - [ ] Support `rails console --sandbox` (auto rollback all transactions)
46
- - [ ] Support logging
47
- - [ ] Support db rake tasks
48
- - [ ] Support multiple databases
49
- - [ ] Support reloading (disconnect all connections)
50
- - [ ] Support ActiveRecord plugins / conventions (shims)
51
- - [ ] Support PostgreSQL custom format for dump & restore
52
- - [ ] Support generators (including orm)
53
- - [ ] Support migration generator (and parsed attributes)
221
+ # Roadmap
222
+
223
+ - [ ] Support `rails console --sandbox` (auto rollback all transactions)
224
+ - [ ] Support logging
225
+ - [ ] Support db rake tasks
226
+ - [ ] Support reloading (disconnect all connections)
227
+ - [ ] Support ActiveRecord plugins / conventions (shims)
228
+ - [ ] Support PostgreSQL custom format for dump & restore
229
+ - [ ] Support generators (including orm)
230
+ - [ ] Support migration generator (and parsed attributes)
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sequel
4
+ module Rails
5
+ module Generators
6
+ class ApplicationRecordGenerator < ::Rails::Generators::Base
7
+ source_root File.expand_path("templates", __dir__)
8
+
9
+ def create_application_record
10
+ template "application_record.rb", application_record_file_name
11
+ end
12
+
13
+ private
14
+
15
+ def application_record_file_name
16
+ @application_record_file_name ||=
17
+ if namespaced?
18
+ "app/models/#{namespaced_path}/application_record.rb"
19
+ else
20
+ "app/models/application_record.rb"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sequel
4
+ module Rails
5
+ module Generators
6
+ class MigrationGenerator < ::Rails::Generators::NamedBase
7
+ include ::Rails::Generators::Migration
8
+
9
+ source_root File.expand_path("templates", __dir__)
10
+
11
+ argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
12
+
13
+ def self.next_migration_number _dirname
14
+ Time.now.strftime "%Y%m%d%H%M%S"
15
+ end
16
+
17
+ def create_migration_file
18
+ migration_template "migration.rb.erb", "db/migrate/#{file_name}.rb"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sequel
4
+ module Rails
5
+ module Generators
6
+ class ModelGenerator < ::Rails::Generators::NamedBase
7
+ source_root File.expand_path("templates", __dir__)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ module Minitest
2
+ module Assertions
3
+ def assert_num_queries(num, &block)
4
+ before = ::Sequel::Rails::Railties::LogSubscriber.count
5
+ res = yield
6
+ after = ::Sequel::Rails::Railties::LogSubscriber.count
7
+
8
+ case num
9
+ when Range
10
+ assert num.include?(after - before), "The number of database queries did not match expectations...\nExpected: #{num} (range)\n Actual: #{after - before}"
11
+ when Integer
12
+ assert num == after - before, "The number of database queries did not match expectations...\nExpected: #{num}\n Actual: #{after - before}"
13
+ else
14
+ raise ArgumentError, "Invalid argument passed to assert_num_queries: expected a Range or Integer value, but received #{num.inspect} instead."
15
+ end
16
+
17
+ res
18
+ end
19
+
20
+ def assert_no_queries(&block)
21
+ assert_num_queries(0, &block)
22
+ end
23
+ end
24
+ end