rails_edge_test 2.1.0 → 3.0.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/.envrc +6 -2
- data/.github/workflows/ci.yml +10 -4
- data/.gitignore +0 -1
- data/.rubocop.yml +42 -0
- data/.rubocop_todo.yml +22 -0
- data/.ruby-version +1 -0
- data/Appraisals +2 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +253 -0
- data/README.md +33 -18
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/exe/generate_edges +5 -5
- data/flake.lock +116 -0
- data/flake.nix +94 -0
- data/gemset.nix +1286 -0
- data/lib/rails_edge_test/configuration.rb +5 -9
- data/lib/rails_edge_test/dsl/action.rb +41 -37
- data/lib/rails_edge_test/dsl/controller.rb +24 -20
- data/lib/rails_edge_test/dsl/edge.rb +113 -112
- data/lib/rails_edge_test/dsl/let_handler.rb +16 -14
- data/lib/rails_edge_test/dsl.rb +2 -2
- data/lib/rails_edge_test/printers/boring.rb +27 -27
- data/lib/rails_edge_test/printers/silent.rb +13 -17
- data/lib/rails_edge_test/printers/tree.rb +42 -39
- data/lib/rails_edge_test/runner.rb +8 -5
- data/lib/rails_edge_test/version.rb +3 -1
- data/lib/rails_edge_test.rb +14 -15
- data/rails_edge_test.gemspec +18 -18
- data/shell.nix +3 -23
- metadata +16 -91
- data/nix/.bundle/config +0 -3
- data/nix/Gemfile +0 -12
- data/nix/Gemfile.lock +0 -172
- data/nix/gemset.nix +0 -554
- data/nix/sources.json +0 -14
- data/nix/sources.nix +0 -194
- data/nix/update-gemset.sh +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b1d9e151d083c503f9772ee13e6909956f2b2edb5af18e26af96324750fbffd
|
4
|
+
data.tar.gz: 82b8dee5ed37e093c00fe7b101d58c697d14edc78fa246a66880a706ace09707
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94dd2a282dacd017c57f0d0001932651af518edb8cc11f7b7d9146748096202509545d02874e2623232b44bd88f5f0415f3fa928d4aab11306bb09800848181d
|
7
|
+
data.tar.gz: 9d135a3146524f6e470d7f383ccea111a8c46249f771768f37be55a4c971848f42a9fc01329289b6bd46bbbc15d7f5a0c38e693fd55e9e84be77dfdf936e952c
|
data/.envrc
CHANGED
data/.github/workflows/ci.yml
CHANGED
@@ -15,14 +15,20 @@ jobs:
|
|
15
15
|
runs-on: ubuntu-22.04
|
16
16
|
steps:
|
17
17
|
- name: Install Nix
|
18
|
-
uses: cachix/install-nix-action@
|
18
|
+
uses: cachix/install-nix-action@v30
|
19
19
|
with:
|
20
|
-
|
20
|
+
github_access_token: ${{ secrets.GITHUB_TOKEN }}
|
21
21
|
|
22
22
|
- name: Check out repository code
|
23
|
-
uses: actions/checkout@
|
23
|
+
uses: actions/checkout@v4
|
24
24
|
with:
|
25
25
|
fetch-depth: 0
|
26
26
|
|
27
27
|
- name: Run tests
|
28
|
-
run: nix
|
28
|
+
run: nix develop --command rspec
|
29
|
+
|
30
|
+
- name: Run rubocop
|
31
|
+
run: nix develop --command rubocop
|
32
|
+
|
33
|
+
- name: Run nix formatter
|
34
|
+
run: nix fmt -- --check .
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
2
|
+
AllCops:
|
3
|
+
NewCops: enable
|
4
|
+
SuggestExtensions:
|
5
|
+
rubocop-rails: false
|
6
|
+
|
7
|
+
plugins:
|
8
|
+
- rubocop-rspec
|
9
|
+
- rubocop-rake
|
10
|
+
|
11
|
+
# This prevents us from inlining code, which we think
|
12
|
+
# is often better then having lots if out-of-order method calls
|
13
|
+
Metrics/AbcSize:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
# This prevents us from co-locating functional code, which we think
|
17
|
+
# is often better then having lots of stateless files.
|
18
|
+
Metrics/ClassLength:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
# This prevents us from inlining code, which we think
|
22
|
+
# is often better then having lots if out-of-order method calls
|
23
|
+
Metrics/MethodLength:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
# This prevents us from inlining code, which we think
|
27
|
+
# is often better then having lots if out-of-order method calls
|
28
|
+
Metrics/ModuleLength:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
# This prevents us from inlining which we like. We like inlining!
|
32
|
+
RSpec/ExampleLength:
|
33
|
+
Enabled: False
|
34
|
+
|
35
|
+
# We believe that inlining is valuable and expecting one expectation
|
36
|
+
# forces us to avoid inlining.
|
37
|
+
RSpec/MultipleExpectations:
|
38
|
+
Enabled: False
|
39
|
+
|
40
|
+
# explicit makes specs easier to read
|
41
|
+
RSpec/DescribedClass:
|
42
|
+
EnforcedStyle: explicit
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1000 --no-auto-gen-timestamp`
|
3
|
+
# using RuboCop version 1.68.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 8
|
10
|
+
# Configuration parameters: AllowedConstants.
|
11
|
+
Style/Documentation:
|
12
|
+
Exclude:
|
13
|
+
- 'spec/**/*'
|
14
|
+
- 'test/**/*'
|
15
|
+
- 'lib/rails_edge_test.rb'
|
16
|
+
- 'lib/rails_edge_test/configuration.rb'
|
17
|
+
- 'lib/rails_edge_test/dsl.rb'
|
18
|
+
- 'lib/rails_edge_test/dsl/let_handler.rb'
|
19
|
+
- 'lib/rails_edge_test/printers/boring.rb'
|
20
|
+
- 'lib/rails_edge_test/printers/silent.rb'
|
21
|
+
- 'lib/rails_edge_test/printers/tree.rb'
|
22
|
+
- 'lib/rails_edge_test/runner.rb'
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.2.6
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# The Changelog
|
2
2
|
|
3
|
+
## Version 3.0.0: Unreleased
|
4
|
+
- drops support for ruby < 3.1, rails < 7
|
5
|
+
- adds support for ruby 3.2, rails 7.2
|
6
|
+
|
3
7
|
## Version 2.1.0: August 13, 2024
|
4
8
|
- adds `delete` method for simulating delete requests
|
5
9
|
- adds `set_authenticity_token` method for setting the authenticity token in the header & session
|
data/Gemfile
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in rails_edge_test.gemspec
|
4
6
|
gemspec
|
7
|
+
|
8
|
+
gem 'rails', '>= 7.0', '< 8.0.0'
|
9
|
+
gem 'rake', '~> 13.2.1'
|
10
|
+
gem 'rspec', '~> 3.13.0'
|
11
|
+
gem 'rubocop'
|
12
|
+
gem 'rubocop-rake'
|
13
|
+
gem 'rubocop-rspec'
|
14
|
+
gem 'sqlite3', '~> 2.6.0'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,253 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rails_edge_test (3.0.0)
|
5
|
+
actionpack (>= 7.0.0, < 8.0.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actioncable (7.2.2.1)
|
11
|
+
actionpack (= 7.2.2.1)
|
12
|
+
activesupport (= 7.2.2.1)
|
13
|
+
nio4r (~> 2.0)
|
14
|
+
websocket-driver (>= 0.6.1)
|
15
|
+
zeitwerk (~> 2.6)
|
16
|
+
actionmailbox (7.2.2.1)
|
17
|
+
actionpack (= 7.2.2.1)
|
18
|
+
activejob (= 7.2.2.1)
|
19
|
+
activerecord (= 7.2.2.1)
|
20
|
+
activestorage (= 7.2.2.1)
|
21
|
+
activesupport (= 7.2.2.1)
|
22
|
+
mail (>= 2.8.0)
|
23
|
+
actionmailer (7.2.2.1)
|
24
|
+
actionpack (= 7.2.2.1)
|
25
|
+
actionview (= 7.2.2.1)
|
26
|
+
activejob (= 7.2.2.1)
|
27
|
+
activesupport (= 7.2.2.1)
|
28
|
+
mail (>= 2.8.0)
|
29
|
+
rails-dom-testing (~> 2.2)
|
30
|
+
actionpack (7.2.2.1)
|
31
|
+
actionview (= 7.2.2.1)
|
32
|
+
activesupport (= 7.2.2.1)
|
33
|
+
nokogiri (>= 1.8.5)
|
34
|
+
racc
|
35
|
+
rack (>= 2.2.4, < 3.2)
|
36
|
+
rack-session (>= 1.0.1)
|
37
|
+
rack-test (>= 0.6.3)
|
38
|
+
rails-dom-testing (~> 2.2)
|
39
|
+
rails-html-sanitizer (~> 1.6)
|
40
|
+
useragent (~> 0.16)
|
41
|
+
actiontext (7.2.2.1)
|
42
|
+
actionpack (= 7.2.2.1)
|
43
|
+
activerecord (= 7.2.2.1)
|
44
|
+
activestorage (= 7.2.2.1)
|
45
|
+
activesupport (= 7.2.2.1)
|
46
|
+
globalid (>= 0.6.0)
|
47
|
+
nokogiri (>= 1.8.5)
|
48
|
+
actionview (7.2.2.1)
|
49
|
+
activesupport (= 7.2.2.1)
|
50
|
+
builder (~> 3.1)
|
51
|
+
erubi (~> 1.11)
|
52
|
+
rails-dom-testing (~> 2.2)
|
53
|
+
rails-html-sanitizer (~> 1.6)
|
54
|
+
activejob (7.2.2.1)
|
55
|
+
activesupport (= 7.2.2.1)
|
56
|
+
globalid (>= 0.3.6)
|
57
|
+
activemodel (7.2.2.1)
|
58
|
+
activesupport (= 7.2.2.1)
|
59
|
+
activerecord (7.2.2.1)
|
60
|
+
activemodel (= 7.2.2.1)
|
61
|
+
activesupport (= 7.2.2.1)
|
62
|
+
timeout (>= 0.4.0)
|
63
|
+
activestorage (7.2.2.1)
|
64
|
+
actionpack (= 7.2.2.1)
|
65
|
+
activejob (= 7.2.2.1)
|
66
|
+
activerecord (= 7.2.2.1)
|
67
|
+
activesupport (= 7.2.2.1)
|
68
|
+
marcel (~> 1.0)
|
69
|
+
activesupport (7.2.2.1)
|
70
|
+
base64
|
71
|
+
benchmark (>= 0.3)
|
72
|
+
bigdecimal
|
73
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
74
|
+
connection_pool (>= 2.2.5)
|
75
|
+
drb
|
76
|
+
i18n (>= 1.6, < 2)
|
77
|
+
logger (>= 1.4.2)
|
78
|
+
minitest (>= 5.1)
|
79
|
+
securerandom (>= 0.3)
|
80
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
81
|
+
ast (2.4.3)
|
82
|
+
base64 (0.2.0)
|
83
|
+
benchmark (0.4.0)
|
84
|
+
bigdecimal (3.1.9)
|
85
|
+
builder (3.3.0)
|
86
|
+
concurrent-ruby (1.3.5)
|
87
|
+
connection_pool (2.5.0)
|
88
|
+
crass (1.0.6)
|
89
|
+
date (3.4.1)
|
90
|
+
diff-lcs (1.6.1)
|
91
|
+
drb (2.2.1)
|
92
|
+
erubi (1.13.1)
|
93
|
+
globalid (1.2.1)
|
94
|
+
activesupport (>= 6.1)
|
95
|
+
i18n (1.14.7)
|
96
|
+
concurrent-ruby (~> 1.0)
|
97
|
+
io-console (0.8.0)
|
98
|
+
irb (1.15.1)
|
99
|
+
pp (>= 0.6.0)
|
100
|
+
rdoc (>= 4.0.0)
|
101
|
+
reline (>= 0.4.2)
|
102
|
+
json (2.10.2)
|
103
|
+
language_server-protocol (3.17.0.4)
|
104
|
+
lint_roller (1.1.0)
|
105
|
+
logger (1.7.0)
|
106
|
+
loofah (2.24.0)
|
107
|
+
crass (~> 1.0.2)
|
108
|
+
nokogiri (>= 1.12.0)
|
109
|
+
mail (2.8.1)
|
110
|
+
mini_mime (>= 0.1.1)
|
111
|
+
net-imap
|
112
|
+
net-pop
|
113
|
+
net-smtp
|
114
|
+
marcel (1.0.4)
|
115
|
+
mini_mime (1.1.5)
|
116
|
+
mini_portile2 (2.8.8)
|
117
|
+
minitest (5.25.5)
|
118
|
+
net-imap (0.5.6)
|
119
|
+
date
|
120
|
+
net-protocol
|
121
|
+
net-pop (0.1.2)
|
122
|
+
net-protocol
|
123
|
+
net-protocol (0.2.2)
|
124
|
+
timeout
|
125
|
+
net-smtp (0.5.1)
|
126
|
+
net-protocol
|
127
|
+
nio4r (2.7.4)
|
128
|
+
nokogiri (1.18.7)
|
129
|
+
mini_portile2 (~> 2.8.2)
|
130
|
+
racc (~> 1.4)
|
131
|
+
parallel (1.26.3)
|
132
|
+
parser (3.3.7.4)
|
133
|
+
ast (~> 2.4.1)
|
134
|
+
racc
|
135
|
+
pp (0.6.2)
|
136
|
+
prettyprint
|
137
|
+
prettyprint (0.2.0)
|
138
|
+
prism (1.4.0)
|
139
|
+
psych (5.2.3)
|
140
|
+
date
|
141
|
+
stringio
|
142
|
+
racc (1.8.1)
|
143
|
+
rack (3.1.12)
|
144
|
+
rack-session (2.1.0)
|
145
|
+
base64 (>= 0.1.0)
|
146
|
+
rack (>= 3.0.0)
|
147
|
+
rack-test (2.2.0)
|
148
|
+
rack (>= 1.3)
|
149
|
+
rackup (2.2.1)
|
150
|
+
rack (>= 3)
|
151
|
+
rails (7.2.2.1)
|
152
|
+
actioncable (= 7.2.2.1)
|
153
|
+
actionmailbox (= 7.2.2.1)
|
154
|
+
actionmailer (= 7.2.2.1)
|
155
|
+
actionpack (= 7.2.2.1)
|
156
|
+
actiontext (= 7.2.2.1)
|
157
|
+
actionview (= 7.2.2.1)
|
158
|
+
activejob (= 7.2.2.1)
|
159
|
+
activemodel (= 7.2.2.1)
|
160
|
+
activerecord (= 7.2.2.1)
|
161
|
+
activestorage (= 7.2.2.1)
|
162
|
+
activesupport (= 7.2.2.1)
|
163
|
+
bundler (>= 1.15.0)
|
164
|
+
railties (= 7.2.2.1)
|
165
|
+
rails-dom-testing (2.2.0)
|
166
|
+
activesupport (>= 5.0.0)
|
167
|
+
minitest
|
168
|
+
nokogiri (>= 1.6)
|
169
|
+
rails-html-sanitizer (1.6.2)
|
170
|
+
loofah (~> 2.21)
|
171
|
+
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
172
|
+
railties (7.2.2.1)
|
173
|
+
actionpack (= 7.2.2.1)
|
174
|
+
activesupport (= 7.2.2.1)
|
175
|
+
irb (~> 1.13)
|
176
|
+
rackup (>= 1.0.0)
|
177
|
+
rake (>= 12.2)
|
178
|
+
thor (~> 1.0, >= 1.2.2)
|
179
|
+
zeitwerk (~> 2.6)
|
180
|
+
rainbow (3.1.1)
|
181
|
+
rake (13.2.1)
|
182
|
+
rdoc (6.13.1)
|
183
|
+
psych (>= 4.0.0)
|
184
|
+
regexp_parser (2.10.0)
|
185
|
+
reline (0.6.0)
|
186
|
+
io-console (~> 0.5)
|
187
|
+
rspec (3.13.0)
|
188
|
+
rspec-core (~> 3.13.0)
|
189
|
+
rspec-expectations (~> 3.13.0)
|
190
|
+
rspec-mocks (~> 3.13.0)
|
191
|
+
rspec-core (3.13.3)
|
192
|
+
rspec-support (~> 3.13.0)
|
193
|
+
rspec-expectations (3.13.3)
|
194
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
195
|
+
rspec-support (~> 3.13.0)
|
196
|
+
rspec-mocks (3.13.2)
|
197
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
198
|
+
rspec-support (~> 3.13.0)
|
199
|
+
rspec-support (3.13.2)
|
200
|
+
rubocop (1.75.1)
|
201
|
+
json (~> 2.3)
|
202
|
+
language_server-protocol (~> 3.17.0.2)
|
203
|
+
lint_roller (~> 1.1.0)
|
204
|
+
parallel (~> 1.10)
|
205
|
+
parser (>= 3.3.0.2)
|
206
|
+
rainbow (>= 2.2.2, < 4.0)
|
207
|
+
regexp_parser (>= 2.9.3, < 3.0)
|
208
|
+
rubocop-ast (>= 1.43.0, < 2.0)
|
209
|
+
ruby-progressbar (~> 1.7)
|
210
|
+
unicode-display_width (>= 2.4.0, < 4.0)
|
211
|
+
rubocop-ast (1.43.0)
|
212
|
+
parser (>= 3.3.7.2)
|
213
|
+
prism (~> 1.4)
|
214
|
+
rubocop-rake (0.7.1)
|
215
|
+
lint_roller (~> 1.1)
|
216
|
+
rubocop (>= 1.72.1)
|
217
|
+
rubocop-rspec (3.5.0)
|
218
|
+
lint_roller (~> 1.1)
|
219
|
+
rubocop (~> 1.72, >= 1.72.1)
|
220
|
+
ruby-progressbar (1.13.0)
|
221
|
+
securerandom (0.4.1)
|
222
|
+
sqlite3 (2.6.0)
|
223
|
+
mini_portile2 (~> 2.8.0)
|
224
|
+
stringio (3.1.6)
|
225
|
+
thor (1.3.2)
|
226
|
+
timeout (0.4.3)
|
227
|
+
tzinfo (2.0.6)
|
228
|
+
concurrent-ruby (~> 1.0)
|
229
|
+
unicode-display_width (3.1.4)
|
230
|
+
unicode-emoji (~> 4.0, >= 4.0.4)
|
231
|
+
unicode-emoji (4.0.4)
|
232
|
+
useragent (0.16.11)
|
233
|
+
websocket-driver (0.7.7)
|
234
|
+
base64
|
235
|
+
websocket-extensions (>= 0.1.0)
|
236
|
+
websocket-extensions (0.1.5)
|
237
|
+
zeitwerk (2.6.18)
|
238
|
+
|
239
|
+
PLATFORMS
|
240
|
+
ruby
|
241
|
+
|
242
|
+
DEPENDENCIES
|
243
|
+
rails (>= 7.0, < 8.0.0)
|
244
|
+
rails_edge_test!
|
245
|
+
rake (~> 13.2.1)
|
246
|
+
rspec (~> 3.13.0)
|
247
|
+
rubocop
|
248
|
+
rubocop-rake
|
249
|
+
rubocop-rspec
|
250
|
+
sqlite3 (~> 2.6.0)
|
251
|
+
|
252
|
+
BUNDLED WITH
|
253
|
+
2.3.27
|
data/README.md
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# RailsEdgeTest
|
2
2
|
|
3
3
|
There is a particular type of integration testing that we have found very fruitful. We:
|
4
|
-
- load up our front-end with its virtual dom,
|
5
|
-
- assert expectations by querying the virtual dom, and
|
4
|
+
- load up our front-end with its virtual dom,
|
5
|
+
- assert expectations by querying the virtual dom, and
|
6
6
|
- interact with our application by simulating events on elements in the virtual dom
|
7
7
|
|
8
8
|
We have found these browser-less integration tests to be orders of magnitude faster than typical capybara integration tests, with minimal downsides. One of the biggest drawbacks to this approach is that we must maintain the json we expect from the backend in a form that is available to these tests, typically a json file (or Elm file with a json blob). Maintaining the blob causes two problems:
|
9
|
-
1. The blob can easily become out-of-sync with our backend, and
|
9
|
+
1. The blob can easily become out-of-sync with our backend, and
|
10
10
|
2. There is no specification for how to recreate it when things do become out-of-sync.
|
11
11
|
|
12
12
|
This gem aims to solve these problems. The rails_edge_test gem allows us to:
|
13
|
-
- use Ruby code to explicitly specify each json blob our front-end tests require,
|
13
|
+
- use Ruby code to explicitly specify each json blob our front-end tests require,
|
14
14
|
- re-generate these files, as needed, with a simple rake task.
|
15
15
|
|
16
16
|
We write what we call "edge specs," Ruby files that specify the json edge between our front- and back-end by using our Rails models and controller actions directly. These are written using a DSL evocative of an RSpec spec. They allow us to generate json blob files which we commit to our repo, and access from our front-end integration tests. Over time, as our APIs develop, we can simply rerun our edge specs in order to update these json blobs based on existing specifications.
|
@@ -44,22 +44,22 @@ include RailsEdgeTest::Dsl
|
|
44
44
|
controller HomeController do
|
45
45
|
action :show do
|
46
46
|
let(:user) { create :user }
|
47
|
-
|
47
|
+
|
48
48
|
edge "first time user" do
|
49
49
|
user
|
50
50
|
perform_get
|
51
|
-
|
51
|
+
|
52
52
|
# generates Edge.HomeController.Show.FirstTimeUser with `json` function
|
53
|
-
produce_elm_file('FirstTimeUser')
|
53
|
+
produce_elm_file('FirstTimeUser')
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
edge "returning user" do
|
57
57
|
user
|
58
58
|
create :post, user: user
|
59
59
|
perform_get
|
60
|
-
|
60
|
+
|
61
61
|
# generates Edge.HomeController.Show.ReturningUser with `json` function
|
62
|
-
produce_elm_file('ReturningUser')
|
62
|
+
produce_elm_file('ReturningUser')
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -122,19 +122,35 @@ require Rails.root.join('edge', 'spec', 'edge_helper')
|
|
122
122
|
|
123
123
|
## Development
|
124
124
|
|
125
|
+
This project uses nix to manage the dev environment.
|
126
|
+
|
127
|
+
This project additionally uses
|
128
|
+
- [direnv](https://github.com/direnv/direnv)
|
129
|
+
- flakes
|
130
|
+
|
131
|
+
If you don't have flakes enabled, you can enable them by adding `experimental-features = flakes` to your `~/.config/nix/nix.conf` file.
|
132
|
+
(or running )
|
133
|
+
|
134
|
+
typing `direnv allow` loads the dev environment including a compatible ruby, sqlite, and gems.
|
135
|
+
|
136
|
+
To modify gem dependencies, use the bundle wrappers
|
137
|
+
- `bundle-lock` to update the lockfile
|
138
|
+
- `bundle-update` to update gems & the lockfile
|
139
|
+
then run `bundix` to update the `gemset.nix` file.
|
140
|
+
|
141
|
+
### Usage Without Nix
|
142
|
+
|
143
|
+
Usage without nix is unsupported but may work anyways. Try the following:
|
144
|
+
|
125
145
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
126
146
|
|
127
147
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
128
148
|
|
129
|
-
|
130
|
-
|
131
|
-
### Nix support
|
149
|
+
Note: We only support adding gems and dependencies using nix.
|
132
150
|
|
133
|
-
|
151
|
+
### Publishing
|
134
152
|
|
135
|
-
|
136
|
-
./nix/update-gemset.sh
|
137
|
-
```
|
153
|
+
To release a new version, follow the instructions in [PUBLISHING.md](PUBLISHING.md).
|
138
154
|
|
139
155
|
## Contributing
|
140
156
|
|
@@ -144,4 +160,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/NoRedI
|
|
144
160
|
## License
|
145
161
|
|
146
162
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
147
|
-
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rails_edge_test'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "rails_edge_test"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start(__FILE__)
|
data/exe/generate_edges
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'open3'
|
4
5
|
require 'rails_edge_test'
|
@@ -12,11 +13,10 @@ def find_gemfile_dir(path)
|
|
12
13
|
else
|
13
14
|
new_path = File.expand_path('..', path)
|
14
15
|
|
15
|
-
if path == new_path
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
16
|
+
raise 'Could not find directory with Gemfile' if path == new_path
|
17
|
+
|
18
|
+
find_gemfile_dir(new_path)
|
19
|
+
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
data/flake.lock
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
{
|
2
|
+
"nodes": {
|
3
|
+
"bundix": {
|
4
|
+
"inputs": {
|
5
|
+
"nixpkgs": [
|
6
|
+
"nixpkgs"
|
7
|
+
]
|
8
|
+
},
|
9
|
+
"locked": {
|
10
|
+
"lastModified": 1721093334,
|
11
|
+
"narHash": "sha256-5FghZ0HIETbc0TGcBV8uyixq5z4w/9PF5Puhujz3D1o=",
|
12
|
+
"owner": "inscapist",
|
13
|
+
"repo": "bundix",
|
14
|
+
"rev": "42c08846f7e5d91ef121239fd364feaeb22c0bbc",
|
15
|
+
"type": "github"
|
16
|
+
},
|
17
|
+
"original": {
|
18
|
+
"owner": "inscapist",
|
19
|
+
"ref": "main",
|
20
|
+
"repo": "bundix",
|
21
|
+
"type": "github"
|
22
|
+
}
|
23
|
+
},
|
24
|
+
"fu": {
|
25
|
+
"inputs": {
|
26
|
+
"systems": "systems"
|
27
|
+
},
|
28
|
+
"locked": {
|
29
|
+
"lastModified": 1726560853,
|
30
|
+
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
31
|
+
"owner": "numtide",
|
32
|
+
"repo": "flake-utils",
|
33
|
+
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
34
|
+
"type": "github"
|
35
|
+
},
|
36
|
+
"original": {
|
37
|
+
"owner": "numtide",
|
38
|
+
"repo": "flake-utils",
|
39
|
+
"type": "github"
|
40
|
+
}
|
41
|
+
},
|
42
|
+
"nixpkgs": {
|
43
|
+
"locked": {
|
44
|
+
"lastModified": 1743501102,
|
45
|
+
"narHash": "sha256-7PCBQ4aGVF8OrzMkzqtYSKyoQuU2jtpPi4lmABpe5X4=",
|
46
|
+
"owner": "nixos",
|
47
|
+
"repo": "nixpkgs",
|
48
|
+
"rev": "02f2af8c8a8c3b2c05028936a1e84daefa1171d4",
|
49
|
+
"type": "github"
|
50
|
+
},
|
51
|
+
"original": {
|
52
|
+
"owner": "nixos",
|
53
|
+
"ref": "nixos-24.11",
|
54
|
+
"repo": "nixpkgs",
|
55
|
+
"type": "github"
|
56
|
+
}
|
57
|
+
},
|
58
|
+
"nixpkgs_2": {
|
59
|
+
"locked": {
|
60
|
+
"lastModified": 1678875422,
|
61
|
+
"narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=",
|
62
|
+
"owner": "NixOS",
|
63
|
+
"repo": "nixpkgs",
|
64
|
+
"rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459",
|
65
|
+
"type": "github"
|
66
|
+
},
|
67
|
+
"original": {
|
68
|
+
"id": "nixpkgs",
|
69
|
+
"type": "indirect"
|
70
|
+
}
|
71
|
+
},
|
72
|
+
"root": {
|
73
|
+
"inputs": {
|
74
|
+
"bundix": "bundix",
|
75
|
+
"fu": "fu",
|
76
|
+
"nixpkgs": "nixpkgs",
|
77
|
+
"ruby-nix": "ruby-nix"
|
78
|
+
}
|
79
|
+
},
|
80
|
+
"ruby-nix": {
|
81
|
+
"inputs": {
|
82
|
+
"nixpkgs": "nixpkgs_2"
|
83
|
+
},
|
84
|
+
"locked": {
|
85
|
+
"lastModified": 1725677741,
|
86
|
+
"narHash": "sha256-CySXGzqycagfrWdcTwzM3Zo1MMm9uUtePYER9BvrW8s=",
|
87
|
+
"owner": "inscapist",
|
88
|
+
"repo": "ruby-nix",
|
89
|
+
"rev": "1f3756f8a713171bf891b39c0d3b1fe6d83a4a63",
|
90
|
+
"type": "github"
|
91
|
+
},
|
92
|
+
"original": {
|
93
|
+
"owner": "inscapist",
|
94
|
+
"repo": "ruby-nix",
|
95
|
+
"type": "github"
|
96
|
+
}
|
97
|
+
},
|
98
|
+
"systems": {
|
99
|
+
"locked": {
|
100
|
+
"lastModified": 1681028828,
|
101
|
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
102
|
+
"owner": "nix-systems",
|
103
|
+
"repo": "default",
|
104
|
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
105
|
+
"type": "github"
|
106
|
+
},
|
107
|
+
"original": {
|
108
|
+
"owner": "nix-systems",
|
109
|
+
"repo": "default",
|
110
|
+
"type": "github"
|
111
|
+
}
|
112
|
+
}
|
113
|
+
},
|
114
|
+
"root": "root",
|
115
|
+
"version": 7
|
116
|
+
}
|