simple_workflow 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +66 -63
- data/Rakefile +4 -4
- data/lib/simple_workflow/controller.rb +6 -12
- data/lib/simple_workflow/helper.rb +15 -16
- data/lib/simple_workflow/middleware.rb +15 -6
- data/lib/simple_workflow/test_helper.rb +1 -1
- data/lib/simple_workflow/version.rb +1 -1
- data/lib/simple_workflow.rb +3 -1
- data/test/controller_test.rb +9 -16
- data/test/helper_test.rb +15 -2
- data/test/middleware_test.rb +19 -23
- data/test/test_helper.rb +1 -1
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d83a47aa996c464e96be5e71195bbb00ec40047
|
4
|
+
data.tar.gz: 2b55806fd6574b7994e8b5ecf3d050f64177aba1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d84f201c4fa11d82737ad2c30d10ab074955e509337cc3477a6dd2de34621b781e36f6f00f3840d5b327669a20c65e64d265ce8f9a0457ebd2f158cb0f14426
|
7
|
+
data.tar.gz: 76dc75ecd93c8ccc7efebcc64dca28b27ec939c3b469bb223dc51cecf1fd499268a30ed587b8f2e290f62a814076c4993c068700c9ac6668a6b3d8766931a04e
|
data/Gemfile.lock
CHANGED
@@ -1,110 +1,111 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simple_workflow (1.
|
5
|
-
rails (
|
4
|
+
simple_workflow (1.3.0)
|
5
|
+
rails (>= 4, < 5.1)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
|
11
|
-
actionpack (=
|
12
|
-
|
13
|
-
|
10
|
+
actioncable (5.0.1)
|
11
|
+
actionpack (= 5.0.1)
|
12
|
+
nio4r (~> 1.2)
|
13
|
+
websocket-driver (~> 0.6.1)
|
14
|
+
actionmailer (5.0.1)
|
15
|
+
actionpack (= 5.0.1)
|
16
|
+
actionview (= 5.0.1)
|
17
|
+
activejob (= 5.0.1)
|
14
18
|
mail (~> 2.5, >= 2.5.4)
|
15
|
-
rails-dom-testing (~>
|
16
|
-
actionpack (
|
17
|
-
actionview (=
|
18
|
-
activesupport (=
|
19
|
-
rack (~>
|
20
|
-
rack-test (~> 0.6.
|
21
|
-
rails-dom-testing (~>
|
19
|
+
rails-dom-testing (~> 2.0)
|
20
|
+
actionpack (5.0.1)
|
21
|
+
actionview (= 5.0.1)
|
22
|
+
activesupport (= 5.0.1)
|
23
|
+
rack (~> 2.0)
|
24
|
+
rack-test (~> 0.6.3)
|
25
|
+
rails-dom-testing (~> 2.0)
|
22
26
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
23
|
-
actionview (
|
24
|
-
activesupport (=
|
27
|
+
actionview (5.0.1)
|
28
|
+
activesupport (= 5.0.1)
|
25
29
|
builder (~> 3.1)
|
26
30
|
erubis (~> 2.7.0)
|
27
|
-
rails-dom-testing (~>
|
31
|
+
rails-dom-testing (~> 2.0)
|
28
32
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
29
|
-
activejob (
|
30
|
-
activesupport (=
|
31
|
-
globalid (>= 0.3.
|
32
|
-
activemodel (
|
33
|
-
activesupport (=
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
activejob (5.0.1)
|
34
|
+
activesupport (= 5.0.1)
|
35
|
+
globalid (>= 0.3.6)
|
36
|
+
activemodel (5.0.1)
|
37
|
+
activesupport (= 5.0.1)
|
38
|
+
activerecord (5.0.1)
|
39
|
+
activemodel (= 5.0.1)
|
40
|
+
activesupport (= 5.0.1)
|
41
|
+
arel (~> 7.0)
|
42
|
+
activesupport (5.0.1)
|
43
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
40
44
|
i18n (~> 0.7)
|
41
|
-
json (~> 1.7, >= 1.7.7)
|
42
45
|
minitest (~> 5.1)
|
43
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
44
46
|
tzinfo (~> 1.1)
|
45
47
|
ansi (1.5.0)
|
46
|
-
arel (
|
48
|
+
arel (7.1.4)
|
47
49
|
ast (2.3.0)
|
48
50
|
builder (3.2.2)
|
49
|
-
concurrent-ruby (1.0.
|
50
|
-
concurrent-ruby (1.0.2-java)
|
51
|
+
concurrent-ruby (1.0.3)
|
51
52
|
docile (1.1.5)
|
52
53
|
erubis (2.7.0)
|
53
54
|
globalid (0.3.7)
|
54
55
|
activesupport (>= 4.1.0)
|
55
56
|
i18n (0.7.0)
|
56
|
-
json (
|
57
|
-
json (
|
57
|
+
json (2.0.2)
|
58
|
+
json (2.0.2-java)
|
58
59
|
loofah (2.0.3)
|
59
60
|
nokogiri (>= 1.5.9)
|
60
61
|
mail (2.6.4)
|
61
62
|
mime-types (>= 1.16, < 4)
|
63
|
+
method_source (0.8.2)
|
62
64
|
mime-types (3.1)
|
63
65
|
mime-types-data (~> 3.2015)
|
64
66
|
mime-types-data (3.2016.0521)
|
65
67
|
mini_portile2 (2.1.0)
|
66
|
-
minitest (5.
|
67
|
-
minitest-reporters (1.1.
|
68
|
+
minitest (5.10.1)
|
69
|
+
minitest-reporters (1.1.13)
|
68
70
|
ansi
|
69
71
|
builder
|
70
72
|
minitest (>= 5.0)
|
71
73
|
ruby-progressbar
|
74
|
+
nio4r (1.2.1)
|
72
75
|
nokogiri (1.6.8.1)
|
73
76
|
mini_portile2 (~> 2.1.0)
|
74
|
-
|
75
|
-
parser (2.3.1.4)
|
77
|
+
parser (2.3.3.1)
|
76
78
|
ast (~> 2.2)
|
77
79
|
powerpack (0.1.1)
|
78
|
-
rack (
|
80
|
+
rack (2.0.1)
|
79
81
|
rack-test (0.6.3)
|
80
82
|
rack (>= 1.0)
|
81
|
-
rails (
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
83
|
+
rails (5.0.1)
|
84
|
+
actioncable (= 5.0.1)
|
85
|
+
actionmailer (= 5.0.1)
|
86
|
+
actionpack (= 5.0.1)
|
87
|
+
actionview (= 5.0.1)
|
88
|
+
activejob (= 5.0.1)
|
89
|
+
activemodel (= 5.0.1)
|
90
|
+
activerecord (= 5.0.1)
|
91
|
+
activesupport (= 5.0.1)
|
89
92
|
bundler (>= 1.3.0, < 2.0)
|
90
|
-
railties (=
|
91
|
-
sprockets-rails
|
92
|
-
rails-
|
93
|
-
activesupport (>= 4.2.0.
|
94
|
-
rails-dom-testing (1.0.7)
|
95
|
-
activesupport (>= 4.2.0.beta, < 5.0)
|
93
|
+
railties (= 5.0.1)
|
94
|
+
sprockets-rails (>= 2.0.0)
|
95
|
+
rails-dom-testing (2.0.1)
|
96
|
+
activesupport (>= 4.2.0, < 6.0)
|
96
97
|
nokogiri (~> 1.6.0)
|
97
|
-
rails-deprecated_sanitizer (>= 1.0.1)
|
98
98
|
rails-html-sanitizer (1.0.3)
|
99
99
|
loofah (~> 2.0)
|
100
|
-
railties (
|
101
|
-
actionpack (=
|
102
|
-
activesupport (=
|
100
|
+
railties (5.0.1)
|
101
|
+
actionpack (= 5.0.1)
|
102
|
+
activesupport (= 5.0.1)
|
103
|
+
method_source
|
103
104
|
rake (>= 0.8.7)
|
104
105
|
thor (>= 0.18.1, < 2.0)
|
105
106
|
rainbow (2.1.0)
|
106
|
-
rake (
|
107
|
-
rubocop (0.
|
107
|
+
rake (12.0.0)
|
108
|
+
rubocop (0.46.0)
|
108
109
|
parser (>= 2.3.1.1, < 3.0)
|
109
110
|
powerpack (~> 0.1)
|
110
111
|
rainbow (>= 1.99.1, < 3.0)
|
@@ -116,19 +117,21 @@ GEM
|
|
116
117
|
json (>= 1.8, < 3)
|
117
118
|
simplecov-html (~> 0.10.0)
|
118
119
|
simplecov-html (0.10.0)
|
119
|
-
sprockets (3.7.
|
120
|
+
sprockets (3.7.1)
|
120
121
|
concurrent-ruby (~> 1.0)
|
121
122
|
rack (> 1, < 3)
|
122
123
|
sprockets-rails (3.2.0)
|
123
124
|
actionpack (>= 4.0)
|
124
125
|
activesupport (>= 4.0)
|
125
126
|
sprockets (>= 3.0.0)
|
126
|
-
thor (0.19.
|
127
|
+
thor (0.19.4)
|
127
128
|
thread_safe (0.3.5)
|
128
|
-
thread_safe (0.3.5-java)
|
129
129
|
tzinfo (1.2.2)
|
130
130
|
thread_safe (~> 0.1)
|
131
|
-
unicode-display_width (1.1.
|
131
|
+
unicode-display_width (1.1.2)
|
132
|
+
websocket-driver (0.6.4)
|
133
|
+
websocket-extensions (>= 0.1.0)
|
134
|
+
websocket-extensions (0.1.2)
|
132
135
|
|
133
136
|
PLATFORMS
|
134
137
|
java
|
data/Rakefile
CHANGED
@@ -3,8 +3,8 @@ require 'rake/clean'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
require File.dirname(__FILE__) + '/lib/simple_workflow/version'
|
5
5
|
|
6
|
-
GEM_FILE = "simple_workflow-#{SimpleWorkflow::VERSION}.gem"
|
7
|
-
GEM_SPEC_FILE = 'simple_workflow.gemspec'
|
6
|
+
GEM_FILE = "simple_workflow-#{SimpleWorkflow::VERSION}.gem".freeze
|
7
|
+
GEM_SPEC_FILE = 'simple_workflow.gemspec'.freeze
|
8
8
|
|
9
9
|
CLEAN.include('simple_workflow-*.gem', 'tmp')
|
10
10
|
|
@@ -13,10 +13,10 @@ task default: :test
|
|
13
13
|
desc 'Generate a gem'
|
14
14
|
task gem: GEM_FILE
|
15
15
|
|
16
|
-
file(GEM_FILE => GEM_SPEC_FILE)
|
16
|
+
file(GEM_FILE => GEM_SPEC_FILE) do
|
17
17
|
puts "Generating #{GEM_FILE}"
|
18
18
|
`gem build #{GEM_SPEC_FILE}`
|
19
|
-
|
19
|
+
end
|
20
20
|
|
21
21
|
desc 'Push the gem to RubyGems'
|
22
22
|
task release: :gem do
|
@@ -16,7 +16,7 @@ module SimpleWorkflow::Controller
|
|
16
16
|
|
17
17
|
def rjs_redirect_to(options)
|
18
18
|
@options = options
|
19
|
-
render :
|
19
|
+
render template: 'redirect', layout: false, formats: :js
|
20
20
|
end
|
21
21
|
|
22
22
|
def store_detour(options, post = false)
|
@@ -25,17 +25,12 @@ module SimpleWorkflow::Controller
|
|
25
25
|
store_detour_in_session(session, options)
|
26
26
|
end
|
27
27
|
|
28
|
-
def store_detour_from_params
|
29
|
-
end
|
30
|
-
deprecate :store_detour_from_params,
|
31
|
-
deprecator: ActiveSupport::Deprecation.new('1.2', 'SimpleWorkflow') # TODO(uwe)
|
32
|
-
|
33
28
|
def back(response_status_and_flash)
|
34
29
|
return false if session[:detours].nil?
|
35
30
|
detour = pop_detour(session)
|
36
31
|
post = detour.delete(:request_method) == :post
|
37
32
|
if post
|
38
|
-
|
33
|
+
save_flash(response_status_and_flash)
|
39
34
|
redirect_to_post(detour)
|
40
35
|
else
|
41
36
|
redirect_to detour, response_status_and_flash
|
@@ -46,10 +41,10 @@ module SimpleWorkflow::Controller
|
|
46
41
|
end
|
47
42
|
|
48
43
|
def back_or_redirect_to(options = {}, response_status_and_flash = {})
|
49
|
-
back(response_status_and_flash)
|
44
|
+
back(response_status_and_flash) || redirect_to(options, response_status_and_flash)
|
50
45
|
end
|
51
46
|
|
52
|
-
def
|
47
|
+
def save_flash(response_status_and_flash)
|
53
48
|
if (alert = response_status_and_flash.delete(:alert))
|
54
49
|
flash[:alert] = alert
|
55
50
|
end
|
@@ -62,11 +57,11 @@ module SimpleWorkflow::Controller
|
|
62
57
|
flash.update(other_flashes)
|
63
58
|
end
|
64
59
|
end
|
65
|
-
private :
|
60
|
+
private :save_flash
|
66
61
|
|
67
62
|
def redirect_to_post(options)
|
68
63
|
url = url_for options
|
69
|
-
render :
|
64
|
+
render text: <<EOF, layout: false
|
70
65
|
<html>
|
71
66
|
<body onload="document.getElementById('form').submit()">
|
72
67
|
<form id="form" action="#{url}" method="POST">
|
@@ -75,5 +70,4 @@ module SimpleWorkflow::Controller
|
|
75
70
|
</html>
|
76
71
|
EOF
|
77
72
|
end
|
78
|
-
|
79
73
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module SimpleWorkflow::Helper
|
2
2
|
def image_button_to(image_source, title, options, html_options = {})
|
3
|
-
image_submit_tag image_source, {:
|
4
|
-
|
5
|
-
|
3
|
+
image_submit_tag image_source, { class: 'image-submit', alt: title, title: title,
|
4
|
+
id: "#{title}_#{options[:id]}", name: title,
|
5
|
+
onclick: "form.action='#{url_for(options)}'" }.update(html_options)
|
6
6
|
end
|
7
7
|
|
8
8
|
def detour_to(title, options = nil, html_options = nil, &block)
|
@@ -33,44 +33,44 @@ module SimpleWorkflow::Helper
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def origin_options
|
36
|
-
params.reject { |k,
|
36
|
+
params.reject { |k, _v| [:detour, :return_from_detour].include? k.to_sym }
|
37
37
|
end
|
38
38
|
|
39
39
|
def image_detour_to(image_source, title, url_options, image_options = nil, link_options = nil)
|
40
|
-
image_options ||= {:
|
41
|
-
image_options.update :
|
40
|
+
image_options ||= { class: 'image-submit' }
|
41
|
+
image_options.update alt: title, title: title
|
42
42
|
detour_to image_tag(image_source, image_options), url_options, link_options
|
43
43
|
end
|
44
44
|
|
45
45
|
def image_link_to(image_source, title, url_options, image_options = nil, link_options = nil)
|
46
46
|
if link_options == true
|
47
|
-
link_options = {:
|
47
|
+
link_options = { method: :post }
|
48
48
|
elsif link_options == false
|
49
49
|
link_options = nil
|
50
50
|
end
|
51
|
-
image_options ||= {:
|
52
|
-
image_options.update :
|
51
|
+
image_options ||= { class: 'image-submit' }
|
52
|
+
image_options.update alt: title, title: title
|
53
53
|
link_to image_tag(image_source, image_options), url_options, link_options
|
54
54
|
end
|
55
55
|
|
56
56
|
def image_link_to_remote(image_source, title, link_options, image_options = nil, html_options = {})
|
57
57
|
if html_options == true
|
58
|
-
html_options = {:
|
58
|
+
html_options = { method: :post }
|
59
59
|
elsif html_options == false
|
60
60
|
html_options = {}
|
61
61
|
end
|
62
|
-
image_options ||= {:
|
63
|
-
image_options.update :
|
64
|
-
link_to image_tag(image_source, image_options), link_options, html_options.merge(:
|
62
|
+
image_options ||= { class: 'image-submit' }
|
63
|
+
image_options.update alt: title, title: title
|
64
|
+
link_to image_tag(image_source, image_options), link_options, html_options.merge(remote: true)
|
65
65
|
end
|
66
66
|
|
67
67
|
def detour?
|
68
|
-
|
68
|
+
!session[:detours].nil?
|
69
69
|
end
|
70
70
|
|
71
71
|
def back_or_link_to(title, options = nil, html_options = nil)
|
72
72
|
if session[:detours]
|
73
|
-
options = {:
|
73
|
+
options = { return_from_detour: true }.update(session[:detours].last)
|
74
74
|
|
75
75
|
# FIXME(uwe): Write a test to prove this line is needed.
|
76
76
|
options['id'] ||= nil
|
@@ -80,5 +80,4 @@ module SimpleWorkflow::Helper
|
|
80
80
|
end
|
81
81
|
link_to(title, options, html_options) if options
|
82
82
|
end
|
83
|
-
|
84
83
|
end
|
@@ -45,11 +45,11 @@ class SimpleWorkflow::Middleware
|
|
45
45
|
cookie_jar = cookie_jar(env)
|
46
46
|
encryptor = encryptor(env)
|
47
47
|
loop do
|
48
|
-
ser_val = cookie_jar
|
48
|
+
ser_val = serialize_session(cookie_jar, session.to_hash)
|
49
49
|
session_size = encryptor.encrypt_and_sign(ser_val).size
|
50
|
-
wf_ser_val = cookie_jar
|
50
|
+
wf_ser_val = serialize_session(cookie_jar, session[:detours])
|
51
51
|
workflow_size = encryptor.encrypt_and_sign(wf_ser_val).size
|
52
|
-
break unless workflow_size >= 2048 || (session_size >= 3072 && session[:detours] && session[:detours].
|
52
|
+
break unless workflow_size >= 2048 || (session_size >= 3072 && session[:detours] && !session[:detours].empty?)
|
53
53
|
Rails.logger.warn "Workflow too large (#{workflow_size}/#{session_size}). Dropping oldest detour."
|
54
54
|
session[:detours].shift
|
55
55
|
reset_workflow(session) if session[:detours].empty?
|
@@ -67,14 +67,24 @@ class SimpleWorkflow::Middleware
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
if ActionPack::VERSION::MAJOR == 5
|
71
|
+
def serialize_session(cookie_jar, session)
|
72
|
+
cookie_jar.send(:serialize, session)
|
73
|
+
end
|
74
|
+
else # Rails 4.x
|
75
|
+
def serialize_session(cookie_jar, session)
|
76
|
+
cookie_jar.send(:serialize, nil, session)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
70
80
|
def encryptor(env)
|
71
81
|
return @simple_workflow_encryptor if @simple_workflow_encryptor
|
72
82
|
@simple_workflow_encryptor = cookie_jar(env).instance_variable_get(:@encryptor)
|
73
83
|
return @simple_workflow_encryptor if @simple_workflow_encryptor
|
74
84
|
Rails.logger.warn 'simple_workflow: Could not get encryptor from the cookie jar'
|
75
85
|
secret_key_base = Rails.application.config.secret_key_base ||
|
76
|
-
|
77
|
-
|
86
|
+
Rails.application.config.secret_token ||
|
87
|
+
SecureRandom.hex(64)
|
78
88
|
key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: 1000)
|
79
89
|
key_generator = ActiveSupport::CachingKeyGenerator.new(key_generator)
|
80
90
|
secret = key_generator.generate_key('encrypted cookie')
|
@@ -90,5 +100,4 @@ class SimpleWorkflow::Middleware
|
|
90
100
|
pop_detour(session(env))
|
91
101
|
end
|
92
102
|
end
|
93
|
-
|
94
103
|
end
|
data/lib/simple_workflow.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
unless $LOAD_PATH.include?(File.dirname(__FILE__)) || $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
end
|
2
4
|
|
3
5
|
require 'action_controller'
|
4
6
|
|
data/test/controller_test.rb
CHANGED
@@ -6,41 +6,34 @@ class ControllerTest < MiniTest::Test
|
|
6
6
|
attr_accessor :cookies, :logger, :session
|
7
7
|
|
8
8
|
def setup
|
9
|
-
options = {encrypted_cookie_salt: 'salt1', encrypted_signed_cookie_salt: 'salt2', secret_key_base: 'secret_key_base'}
|
10
|
-
|
9
|
+
options = { encrypted_cookie_salt: 'salt1', encrypted_signed_cookie_salt: 'salt2', secret_key_base: 'secret_key_base' }
|
10
|
+
if Rails.gem_version < Gem::Version.new('5')
|
11
|
+
@cookies = ActionDispatch::Cookies::CookieJar.new(ActiveSupport::KeyGenerator.new('secret'), nil, false, options)
|
12
|
+
end
|
11
13
|
@logger = Rails.logger
|
12
14
|
@session = {}
|
13
15
|
@bad_route = false
|
14
16
|
# TODO(uwe): Remove when we stop testing Rails 4.1
|
15
|
-
if Rails.version !~ /^4\.1\./
|
16
|
-
Rails.app_class = TestApp
|
17
|
-
end
|
17
|
+
Rails.app_class = TestApp if Rails.version !~ /^4\.1\./
|
18
18
|
# ODOT
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_store_detour
|
22
|
-
location = {controller: :mycontroller, action: :myaction}
|
22
|
+
location = { controller: :mycontroller, action: :myaction }
|
23
23
|
|
24
24
|
store_detour(location)
|
25
25
|
|
26
|
-
assert_equal({detours: [location]}, session)
|
27
|
-
end
|
28
|
-
|
29
|
-
# TODO(uwe): Remove. The method does nothing. Just a stub for compatability.
|
30
|
-
def test_deprecated_store_detour_from_params
|
31
|
-
store_detour_from_params
|
32
|
-
assert_equal({}, session)
|
26
|
+
assert_equal({ detours: [location] }, session)
|
33
27
|
end
|
34
|
-
# ODOT
|
35
28
|
|
36
29
|
def test_back
|
37
|
-
store_detour(
|
30
|
+
store_detour(controller: :mycontroller, action: :myaction)
|
38
31
|
back({})
|
39
32
|
assert_equal({}, session)
|
40
33
|
end
|
41
34
|
|
42
35
|
def test_back_with_invalid_detour # not route
|
43
|
-
store_detour(
|
36
|
+
store_detour(controller: :mycontroller, action: :missing_in_action)
|
44
37
|
@bad_route = true
|
45
38
|
back({})
|
46
39
|
assert_equal({}, session)
|
data/test/helper_test.rb
CHANGED
@@ -8,6 +8,15 @@ class HelperTest < MiniTest::Test
|
|
8
8
|
with_detour('')
|
9
9
|
end
|
10
10
|
|
11
|
+
def test_detour_to
|
12
|
+
assert_equal [
|
13
|
+
'Link Text',
|
14
|
+
'Link target?detour%5Baction%5D=myaction&detour%5Bcontroller%5D=mycontroller&detour%5Bid%5D=42&detour%5Bquery%5D%5Bnested%5D=criterium',
|
15
|
+
{ id: 'link_tag_id', title: 'Link title' }
|
16
|
+
],
|
17
|
+
detour_to('Link Text', 'Link target', id: 'link_tag_id', title: 'Link title')
|
18
|
+
end
|
19
|
+
|
11
20
|
def test_image_button_to
|
12
21
|
assert_equal [
|
13
22
|
'my_image.png', {
|
@@ -16,19 +25,23 @@ class HelperTest < MiniTest::Test
|
|
16
25
|
onclick: "form.action='{:id=>\"image_tag_id\"}'"
|
17
26
|
}
|
18
27
|
],
|
19
|
-
image_button_to('my_image.png', 'Link Title', {id: 'image_tag_id'}, title: 'Image title')
|
28
|
+
image_button_to('my_image.png', 'Link Title', { id: 'image_tag_id' }, title: 'Image title')
|
20
29
|
end
|
21
30
|
|
22
31
|
private
|
23
32
|
|
24
33
|
def params
|
25
|
-
{controller: 'mycontroller', action: 'myaction', id: 42, query: {nested: 'criterium'}}
|
34
|
+
{ controller: 'mycontroller', action: 'myaction', id: 42, query: { nested: 'criterium' } }
|
26
35
|
end
|
27
36
|
|
28
37
|
def url_for(options)
|
29
38
|
options.to_s
|
30
39
|
end
|
31
40
|
|
41
|
+
def link_to(*options)
|
42
|
+
options
|
43
|
+
end
|
44
|
+
|
32
45
|
def image_submit_tag(*args)
|
33
46
|
args
|
34
47
|
end
|
data/test/middleware_test.rb
CHANGED
@@ -21,10 +21,10 @@ class MiddlewareTest < MiniTest::Test
|
|
21
21
|
status, headers, response = @stack.call env
|
22
22
|
|
23
23
|
assert_equal 200, status
|
24
|
-
assert_equal
|
24
|
+
assert_equal env, headers
|
25
25
|
assert_equal 'app response', response
|
26
|
-
assert_equal
|
27
|
-
|
26
|
+
assert_equal [], headers['rack.session'].to_hash.keys
|
27
|
+
assert_nil headers['rack.session'].to_hash['detours']
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_detour
|
@@ -36,27 +36,25 @@ class MiddlewareTest < MiniTest::Test
|
|
36
36
|
assert_equal(env, headers)
|
37
37
|
assert_equal 'app response', response
|
38
38
|
assert_equal(%w(session_id detours), headers['rack.session'].to_hash.keys)
|
39
|
-
assert_equal([{'controller' => 'test'}], headers['rack.session'].to_hash['detours'])
|
39
|
+
assert_equal([{ 'controller' => 'test' }], headers['rack.session'].to_hash['detours'])
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_detour_cleanup
|
43
|
-
_, env,
|
43
|
+
_, env, = @stack.call env_for('/?detour[controller]=test_first')
|
44
44
|
(50..99).each do |i|
|
45
|
-
_, env,
|
45
|
+
_, env, = @stack.call env_for("/?detour[controller]=test_#{i}",
|
46
46
|
'rack.session' => env['rack.session'],
|
47
|
-
'rack.session.options' => env['rack.session.options']
|
48
|
-
)
|
47
|
+
'rack.session.options' => env['rack.session.options'])
|
49
48
|
end
|
50
49
|
status, env, response = @stack.call env_for('/?detour[controller]=test_last',
|
51
50
|
'rack.session' => env['rack.session'],
|
52
|
-
'rack.session.options' => env['rack.session.options']
|
53
|
-
)
|
51
|
+
'rack.session.options' => env['rack.session.options'])
|
54
52
|
|
55
53
|
assert_equal 200, status
|
56
54
|
assert_equal 'app response', response
|
57
55
|
assert_equal(%w(session_id detours), env['rack.session'].to_hash.keys)
|
58
56
|
|
59
|
-
assert_equal([{'controller' => 'test_57'}, {'controller' => 'test_58'}, {'controller' => 'test_59'}, {'controller' => 'test_60'}, {'controller' => 'test_61'}, {'controller' => 'test_62'}, {'controller' => 'test_63'}, {'controller' => 'test_64'}, {'controller' => 'test_65'}, {'controller' => 'test_66'}, {'controller' => 'test_67'}, {'controller' => 'test_68'}, {'controller' => 'test_69'}, {'controller' => 'test_70'}, {'controller' => 'test_71'}, {'controller' => 'test_72'}, {'controller' => 'test_73'}, {'controller' => 'test_74'}, {'controller' => 'test_75'}, {'controller' => 'test_76'}, {'controller' => 'test_77'}, {'controller' => 'test_78'}, {'controller' => 'test_79'}, {'controller' => 'test_80'}, {'controller' => 'test_81'}, {'controller' => 'test_82'}, {'controller' => 'test_83'}, {'controller' => 'test_84'}, {'controller' => 'test_85'}, {'controller' => 'test_86'}, {'controller' => 'test_87'}, {'controller' => 'test_88'}, {'controller' => 'test_89'}, {'controller' =>
|
57
|
+
assert_equal([{ 'controller' => 'test_57' }, { 'controller' => 'test_58' }, { 'controller' => 'test_59' }, { 'controller' => 'test_60' }, { 'controller' => 'test_61' }, { 'controller' => 'test_62' }, { 'controller' => 'test_63' }, { 'controller' => 'test_64' }, { 'controller' => 'test_65' }, { 'controller' => 'test_66' }, { 'controller' => 'test_67' }, { 'controller' => 'test_68' }, { 'controller' => 'test_69' }, { 'controller' => 'test_70' }, { 'controller' => 'test_71' }, { 'controller' => 'test_72' }, { 'controller' => 'test_73' }, { 'controller' => 'test_74' }, { 'controller' => 'test_75' }, { 'controller' => 'test_76' }, { 'controller' => 'test_77' }, { 'controller' => 'test_78' }, { 'controller' => 'test_79' }, { 'controller' => 'test_80' }, { 'controller' => 'test_81' }, { 'controller' => 'test_82' }, { 'controller' => 'test_83' }, { 'controller' => 'test_84' }, { 'controller' => 'test_85' }, { 'controller' => 'test_86' }, { 'controller' => 'test_87' }, { 'controller' => 'test_88' }, { 'controller' => 'test_89' }, { 'controller' => 'test_90' }, { 'controller' => 'test_91' }, { 'controller' => 'test_92' }, { 'controller' => 'test_93' }, { 'controller' => 'test_94' }, { 'controller' => 'test_95' }, { 'controller' => 'test_96' }, { 'controller' => 'test_97' }, { 'controller' => 'test_98' }, { 'controller' => 'test_99' }, { 'controller' => 'test_last' }],
|
60
58
|
env['rack.session'].to_hash['detours'])
|
61
59
|
end
|
62
60
|
|
@@ -73,30 +71,28 @@ class MiddlewareTest < MiniTest::Test
|
|
73
71
|
end
|
74
72
|
|
75
73
|
def test_return_from_detour
|
76
|
-
_, headers1,
|
74
|
+
_, headers1, = @stack.call env_for('/?detour[controller]=test_first')
|
77
75
|
env = env_for('/?return_from_detour=true',
|
78
76
|
'rack.session' => headers1['rack.session'],
|
79
|
-
'rack.session.options' => headers1['rack.session.options']
|
80
|
-
)
|
77
|
+
'rack.session.options' => headers1['rack.session.options'])
|
81
78
|
status, headers, response = @stack.call env
|
82
79
|
|
83
80
|
assert_equal 200, status
|
84
|
-
assert_equal
|
81
|
+
assert_equal env, headers
|
85
82
|
assert_equal 'app response', response
|
86
|
-
assert_equal
|
87
|
-
|
83
|
+
assert_equal ['session_id'], headers['rack.session'].to_hash.keys
|
84
|
+
assert_nil headers['rack.session'].to_hash['detours']
|
88
85
|
end
|
89
86
|
|
90
87
|
private
|
91
88
|
|
92
|
-
def env_for(url, opts={})
|
89
|
+
def env_for(url, opts = {})
|
93
90
|
default_opts = {
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
91
|
+
ActionDispatch::Cookies::COOKIES_SERIALIZER => :json,
|
92
|
+
ActionDispatch::Cookies::GENERATOR_KEY => ActiveSupport::KeyGenerator.new('secret'),
|
93
|
+
ActionDispatch::Cookies::SECRET_KEY_BASE => 'secret',
|
94
|
+
# ActionDispatch::Cookies::SECRET_TOKEN => 'secret',
|
98
95
|
}
|
99
96
|
Rack::MockRequest.env_for(url, default_opts.update(opts))
|
100
97
|
end
|
101
|
-
|
102
98
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Uwe Kubosch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
22
|
+
version: '5.1'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
32
|
+
version: '5.1'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: simplecov
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|