mrujs_rails 0.0.6 → 0.1.0.pre.beta.14
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/README.md +52 -7
- data/Rakefile +4 -0
- data/lib/mrujs_rails.rb +1 -0
- data/lib/mrujs_rails/assertions.rb +45 -0
- data/lib/mrujs_rails/controller.rb +13 -0
- data/lib/mrujs_rails/engine.rb +23 -1
- data/lib/mrujs_rails/redirection.rb +43 -0
- data/lib/mrujs_rails/version.rb +1 -1
- data/lib/tasks/mrujs_rails_tasks.rake +6 -4
- metadata +16 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d8d955fbddbe962a7033fc776c25ef83954f755847610f90cad2978cd81935d
|
4
|
+
data.tar.gz: 9f86695adad081d1f65a1ba8b27f0a6cc7ccc4ea025e6bc857dfcf8493334ee2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 017f96373ddc46c41111e8e901b85ef7f78bac687ef16f127296a44534c443ab47dea958321493227e4cfca787665550f4be4ddbc5683227e9d414f5d5842e51
|
7
|
+
data.tar.gz: 70b21b20741ba26aba60ef5e0332ab2373fc44698b5c270ab726790ffff70672248f8c1b58ca25bce04305383354116a5d857c7a1a40b3674df3dc8bfd390cab
|
data/README.md
CHANGED
@@ -38,7 +38,13 @@ yarn add mrujs
|
|
38
38
|
// ... other stuff
|
39
39
|
|
40
40
|
import mrujs from "mrujs";
|
41
|
-
|
41
|
+
mrujs.start();
|
42
|
+
|
43
|
+
// If you want it to work like Rails ujs.
|
44
|
+
import Rails from "mrujs";
|
45
|
+
Rails.start()
|
46
|
+
|
47
|
+
// mrujs is available globally as window.Rails or window.mrujs
|
42
48
|
```
|
43
49
|
|
44
50
|
3. Using on a form
|
@@ -123,7 +129,8 @@ const AJAX_EVENTS = {
|
|
123
129
|
|
124
130
|
/**
|
125
131
|
* After any fetch request, regardless of outcome
|
126
|
-
*
|
132
|
+
* `event.detail.response`
|
133
|
+
* `event.detail.error` if any found
|
127
134
|
*/
|
128
135
|
ajaxComplete: `ajax:complete`,
|
129
136
|
|
@@ -282,9 +289,25 @@ Example:
|
|
282
289
|
</form>
|
283
290
|
```
|
284
291
|
|
292
|
+
## Anchor methods
|
293
|
+
|
294
|
+
Sometimes you want to add additional methods to your links. Heres how to
|
295
|
+
do that:
|
296
|
+
|
297
|
+
```html
|
298
|
+
<a data-method="delete" href="/logout">
|
299
|
+
```
|
300
|
+
|
301
|
+
This will create a form, append it to the body, and then submit the form
|
302
|
+
with a hidden value with the method value set to "delete" so the server
|
303
|
+
knows to perform a delete.
|
304
|
+
|
285
305
|
## Roadmap
|
286
306
|
|
287
|
-
- [
|
307
|
+
- [x] - add support for `data-method="<REQUEST_TYPE>"` for non-forms
|
308
|
+
it.
|
309
|
+
- [x] - `data-response='type'` for forms.
|
310
|
+
- [x] - Alias `window.Rails` to `window.mrujs` (Allows drop in
|
288
311
|
replacement)
|
289
312
|
- [ ] - Allow the use of `data-confirm=""`
|
290
313
|
- [ ] - Provide a confirm dialog for `data-confirm`
|
@@ -316,11 +339,8 @@ sure you want to logout?" data-use-alert="true">
|
|
316
339
|
|
317
340
|
</details>
|
318
341
|
|
319
|
-
- [ ] - add support for `data-method="<REQUEST_TYPE>"` for non-forms
|
320
|
-
- [ ] - Asset pipeline, if someone would like to add support im open to
|
321
|
-
it.
|
322
|
-
- [x] - `data-response='type'` for forms.
|
323
342
|
- [ ] - Other UJS features deemed necessary.
|
343
|
+
- [ ] - Asset pipeline, if someone would like to add support im open to
|
324
344
|
|
325
345
|
## Developing locally
|
326
346
|
|
@@ -349,3 +369,28 @@ yarn start
|
|
349
369
|
yarn test
|
350
370
|
```
|
351
371
|
|
372
|
+
## Rails
|
373
|
+
|
374
|
+
There is also a Rails gem / dummy server attached.
|
375
|
+
|
376
|
+
### Installation
|
377
|
+
|
378
|
+
Top level:
|
379
|
+
|
380
|
+
`bundle install`
|
381
|
+
|
382
|
+
### Starting
|
383
|
+
|
384
|
+
Must be run within the `test/ruby/dummy` directory.
|
385
|
+
|
386
|
+
`cd test/ruby/dummy && bundle exec rails server`
|
387
|
+
|
388
|
+
### Tests
|
389
|
+
|
390
|
+
From any where _outside_ of the `test/ruby/dummy` directory:
|
391
|
+
|
392
|
+
`bundle exec rake test`
|
393
|
+
|
394
|
+
## Gem usage
|
395
|
+
|
396
|
+
...Coming soon
|
data/Rakefile
CHANGED
data/lib/mrujs_rails.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
module MrujsRails
|
2
|
+
module Assertions
|
3
|
+
def assert_redirected_to(options = {}, message = nil)
|
4
|
+
if turbolinks_request?
|
5
|
+
assert_turbolinks_visited(options, message)
|
6
|
+
else
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def assert_turbolinks_visited(options = {}, message = nil)
|
12
|
+
assert_response :ok, message
|
13
|
+
assert_equal Mime[:turbolinks], response.media_type
|
14
|
+
|
15
|
+
visit_location = turbolinks_visit_location_and_action[:location]
|
16
|
+
|
17
|
+
redirect_is = normalize_argument_to_redirection(visit_location)
|
18
|
+
redirect_expected = normalize_argument_to_redirection(options)
|
19
|
+
|
20
|
+
message ||= "Expected response to be a Turbolinks visit to <#{redirect_expected}> but was a visit to <#{redirect_is}>"
|
21
|
+
assert_operator redirect_expected, :===, redirect_is, message
|
22
|
+
end
|
23
|
+
|
24
|
+
# Rough heuristic to detect whether this was a Turbolinks request:
|
25
|
+
# non-GET request with a text/javascript response.
|
26
|
+
#
|
27
|
+
# Technically we'd check that Turbolinks-Referrer request header is
|
28
|
+
# also set, but that'd require us to pass the header from post/patch/etc
|
29
|
+
# test methods by overriding them to provide a `turbolinks:` option.
|
30
|
+
#
|
31
|
+
# We can't check `request.xhr?` here, either, since the X-Requested-With
|
32
|
+
# header is cleared after controller action processing to prevent it
|
33
|
+
# from leaking into subsequent requests.
|
34
|
+
def turbolinks_request?
|
35
|
+
!request.get? && response.media_type == Mime[:turbolinks]
|
36
|
+
end
|
37
|
+
|
38
|
+
def turbolinks_visit_location_and_action
|
39
|
+
{
|
40
|
+
location: response.headers["TURBOLINKS-REDIRECT-LOCATION"],
|
41
|
+
action: response.headers["TURBOLINKS-REDIRECT-ACTION"]
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/mrujs_rails/engine.rb
CHANGED
@@ -1,5 +1,27 @@
|
|
1
|
+
require "mrujs_rails/version"
|
2
|
+
require "mrujs_rails/controller"
|
3
|
+
require "mrujs_rails/assertions"
|
4
|
+
|
1
5
|
module MrujsRails
|
2
6
|
class Engine < ::Rails::Engine
|
3
|
-
|
7
|
+
config.turbolinks = ActiveSupport::OrderedOptions.new
|
8
|
+
config.turbolinks.auto_include = true
|
9
|
+
|
10
|
+
# allows us to use a turbolinks mimetype, perhaps this should be mrujs?
|
11
|
+
initializer "turbolinks.mimetype" do
|
12
|
+
Mime::Type.register "text/turbolinks", :turbolinks
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "mrujs_rails.test_assertions" do
|
16
|
+
ActiveSupport.on_load(:active_support_test_case) do
|
17
|
+
include ::MrujsRails::Assertions
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
initializer "mrujs_rails" do |app|
|
22
|
+
ActiveSupport.on_load(:action_controller) do
|
23
|
+
include ::MrujsRails::Controller if app.config.turbolinks.auto_include
|
24
|
+
end
|
25
|
+
end
|
4
26
|
end
|
5
27
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module MrujsRails
|
2
|
+
module Redirection
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
before_action :set_turbolinks_location_header_from_session if respond_to?(:before_action)
|
7
|
+
end
|
8
|
+
|
9
|
+
def redirect_to(url = {}, options = {})
|
10
|
+
# turbolinks = options.delete(:turbolinks)
|
11
|
+
|
12
|
+
super.tap do
|
13
|
+
if request.xhr? && !request.get?
|
14
|
+
visit_location_with_turbolinks(location, turbolinks)
|
15
|
+
elsif request.headers["Turbolinks-Referrer"]
|
16
|
+
store_turbolinks_location_in_session(location)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def visit_location_with_turbolinks(location, action)
|
24
|
+
action = action.to_s
|
25
|
+
visit_action = action == "advance" ? action : "replace"
|
26
|
+
|
27
|
+
response.content_type = Mime[:turbolinks]
|
28
|
+
response.headers["X-Xhr-Redirect"] = location
|
29
|
+
response.headers["TURBOLINKS-REDIRECT-ACTION"] = visit_action
|
30
|
+
response.headers["TURBOLINKS-REDIRECT-LOCATION"] = location
|
31
|
+
end
|
32
|
+
|
33
|
+
def store_turbolinks_location_in_session(location)
|
34
|
+
session[:_turbolinks_location] = location if session
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_turbolinks_location_header_from_session
|
38
|
+
if session && session[:_turbolinks_location]
|
39
|
+
response.headers["Turbolinks-Location"] = session.delete(:_turbolinks_location)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/mrujs_rails/version.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
desc "Used for internal testing, do not touch this."
|
2
|
+
namespace :mrujs do
|
3
|
+
task test_precompile: :environment do
|
4
|
+
system("cd test/ruby/dummy && bundle exec rails assets:precompile")
|
5
|
+
end
|
6
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mrujs_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.1.0.pre.beta.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ParamagicDev
|
@@ -9,28 +9,28 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-05-
|
12
|
+
date: 2021-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 6.1.3
|
21
18
|
- - ">="
|
22
19
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
20
|
+
version: '5.2'
|
21
|
+
- - "<="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '7'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- - "~>"
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: 6.1.3
|
31
28
|
- - ">="
|
32
29
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
30
|
+
version: '5.2'
|
31
|
+
- - "<="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '7'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: standardrb
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,7 +56,10 @@ files:
|
|
56
56
|
- README.md
|
57
57
|
- Rakefile
|
58
58
|
- lib/mrujs_rails.rb
|
59
|
+
- lib/mrujs_rails/assertions.rb
|
60
|
+
- lib/mrujs_rails/controller.rb
|
59
61
|
- lib/mrujs_rails/engine.rb
|
62
|
+
- lib/mrujs_rails/redirection.rb
|
60
63
|
- lib/mrujs_rails/version.rb
|
61
64
|
- lib/tasks/mrujs_rails_tasks.rake
|
62
65
|
homepage: https://github.com/paramagicdev/mrujs
|
@@ -77,11 +80,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
80
|
version: '0'
|
78
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
82
|
requirements:
|
80
|
-
- - "
|
83
|
+
- - ">"
|
81
84
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
85
|
+
version: 1.3.1
|
83
86
|
requirements: []
|
84
|
-
rubygems_version: 3.
|
87
|
+
rubygems_version: 3.2.15
|
85
88
|
signing_key:
|
86
89
|
specification_version: 4
|
87
90
|
summary: A rails plugin for mrujs to make Turbolinks work.
|