strong_form 0.0.1
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 +7 -0
- data/AGPL-LICENSE +661 -0
- data/Rakefile +28 -0
- data/lib/strong_form.rb +5 -0
- data/lib/strong_form/finder.rb +16 -0
- data/lib/strong_form/form.rb +56 -0
- data/lib/strong_form/nested_form.rb +38 -0
- data/lib/strong_form/railtie.rb +31 -0
- data/lib/strong_form/record.rb +16 -0
- data/lib/strong_form/tag.rb +12 -0
- data/lib/strong_form/version.rb +3 -0
- data/lib/tasks/strong_form_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/base_controller.rb +22 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/address.rb +6 -0
- data/spec/dummy/app/models/tag.rb +3 -0
- data/spec/dummy/app/models/user.rb +7 -0
- data/spec/dummy/app/views/base/_address_fields.html.haml +10 -0
- data/spec/dummy/app/views/base/_tag_fields.html.haml +2 -0
- data/spec/dummy/app/views/base/_user_fields.html.haml +4 -0
- data/spec/dummy/app/views/base/basic_form.html.haml +2 -0
- data/spec/dummy/app/views/base/deep_fields_for.html.haml +8 -0
- data/spec/dummy/app/views/base/fields_for.html.haml +8 -0
- data/spec/dummy/app/views/base/nested_form_gem.html.haml +7 -0
- data/spec/dummy/app/views/layouts/application.html.haml +10 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +27 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +57 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20150626095843_create_users.rb +12 -0
- data/spec/dummy/db/migrate/20150626104120_create_addresses.rb +13 -0
- data/spec/dummy/db/migrate/20150626132542_create_tags.rb +11 -0
- data/spec/dummy/db/schema.rb +44 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +55 -0
- data/spec/dummy/log/test.log +13928 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/2LhrvKfMxngd4BdL-T9u1PoK7r2yCrsF0F7Kfd3Ah_E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/51piSq8D_vSYzuo29rqbhXeezoY2DCrHKutZ4oxBHhg.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/5G4z0ygg3o4YrC8hdVviqeaSPwFizCPEz9C_aP3xEf4.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/6HZK27_4B_5JmRqd-_qY4A4hlMpkUhe5T2NBYDBhhtY.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/7ujPiNFNHPEE5v8dU7pWT1mFTAIzzANjE_WnhuOn5aQ.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/BzvE8UQ9KacHmD--VP941KFQNmtCCtrawpZ0I-RiJ_I.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/D2r9R9v7HN8bhcRxAk9Fq198KPyRMlGc6pTeXk7akFY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/K_5SG-ud7IMx-4BeZy5hmsicHUiqJlF0tZQjyR3NNEU.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/QEdR93qQ7nm2SXxevYI5Jq-kZ1bMKqprrz_1CIog8cY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/SJbwTdB2TakRdPR0nH-X3xfT67Q2hf09i_4vNn90Ntw.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/_yOk6c3S7xX6EByWm0rTZ3-h6G5R-0Ge65s1mE62K6A.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/e7M8G17FmxSeoA5Hsf5--bxNsxEVKc7QeyJ0xpag8Dk.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/eFzh__t_QtfMtE7gJNX9lWmkNGR1gwr-qeBFKqaapzE.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/eOkP0DI4t_W9XXjhMLYN1h9XQHVX47uYT5mxUaf5d8c.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/fCdygUQVvilffWkcrZOOmWAmg7_SGBAllsGphcjPUgI.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/h46aLbOd8j7U9bu77JY1Q_My7hoRoFram5quuS5mTNY.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/mdlk4FrQ_MAYAufc3sZP3Womvzc2ygzcE3wI8h-HtG8.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/nFFtnxQpd52C5Kw2pAiHS8UAeTmmHYy1bKqAvX9URXg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/o5l8KQJq6xdUXyLhmo54-Hq3b4IBPiejD7IVebnzsfg.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/qzaJT3HFRBZRH91xzxTdWOj3bMvepjEc7g8K9lDSq2E.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/ugAO4WRjF1KW12RW1b9zwLT8jfn5FBDPuO3cPg3ETKM.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/xRuy4fW0E5CWWpAMIAzcxNKri0l5BRWXNdikJDAGbZc.cache +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/xm4K2DO5jy_tnB04EtEXjdEZC3rMAvHvZGHmpC4tFeQ.cache +1 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/v3.0/yy6a1dwFUwRlNVthC-5nAYk3ICpfyp79q5qfO0FHibQ.cache +1 -0
- data/spec/examples.txt +52 -0
- data/spec/features/strong_form_spec.rb +338 -0
- data/spec/models/user_spec.rb +46 -0
- data/spec/rails_helper.rb +53 -0
- data/spec/spec_helper.rb +92 -0
- metadata +317 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<style>
|
|
7
|
+
body {
|
|
8
|
+
background-color: #EFEFEF;
|
|
9
|
+
color: #2E2F30;
|
|
10
|
+
text-align: center;
|
|
11
|
+
font-family: arial, sans-serif;
|
|
12
|
+
margin: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
div.dialog {
|
|
16
|
+
width: 95%;
|
|
17
|
+
max-width: 33em;
|
|
18
|
+
margin: 4em auto 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
div.dialog > div {
|
|
22
|
+
border: 1px solid #CCC;
|
|
23
|
+
border-right-color: #999;
|
|
24
|
+
border-left-color: #999;
|
|
25
|
+
border-bottom-color: #BBB;
|
|
26
|
+
border-top: #B00100 solid 4px;
|
|
27
|
+
border-top-left-radius: 9px;
|
|
28
|
+
border-top-right-radius: 9px;
|
|
29
|
+
background-color: white;
|
|
30
|
+
padding: 7px 12% 0;
|
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
h1 {
|
|
35
|
+
font-size: 100%;
|
|
36
|
+
color: #730E15;
|
|
37
|
+
line-height: 1.5em;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
div.dialog > p {
|
|
41
|
+
margin: 0 0 1em;
|
|
42
|
+
padding: 1em;
|
|
43
|
+
background-color: #F7F7F7;
|
|
44
|
+
border: 1px solid #CCC;
|
|
45
|
+
border-right-color: #999;
|
|
46
|
+
border-left-color: #999;
|
|
47
|
+
border-bottom-color: #999;
|
|
48
|
+
border-bottom-left-radius: 4px;
|
|
49
|
+
border-bottom-right-radius: 4px;
|
|
50
|
+
border-top-color: #DADADA;
|
|
51
|
+
color: #666;
|
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
|
|
57
|
+
<body>
|
|
58
|
+
<!-- This file lives in public/404.html -->
|
|
59
|
+
<div class="dialog">
|
|
60
|
+
<div>
|
|
61
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
|
62
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
|
63
|
+
</div>
|
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
65
|
+
</div>
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<style>
|
|
7
|
+
body {
|
|
8
|
+
background-color: #EFEFEF;
|
|
9
|
+
color: #2E2F30;
|
|
10
|
+
text-align: center;
|
|
11
|
+
font-family: arial, sans-serif;
|
|
12
|
+
margin: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
div.dialog {
|
|
16
|
+
width: 95%;
|
|
17
|
+
max-width: 33em;
|
|
18
|
+
margin: 4em auto 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
div.dialog > div {
|
|
22
|
+
border: 1px solid #CCC;
|
|
23
|
+
border-right-color: #999;
|
|
24
|
+
border-left-color: #999;
|
|
25
|
+
border-bottom-color: #BBB;
|
|
26
|
+
border-top: #B00100 solid 4px;
|
|
27
|
+
border-top-left-radius: 9px;
|
|
28
|
+
border-top-right-radius: 9px;
|
|
29
|
+
background-color: white;
|
|
30
|
+
padding: 7px 12% 0;
|
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
h1 {
|
|
35
|
+
font-size: 100%;
|
|
36
|
+
color: #730E15;
|
|
37
|
+
line-height: 1.5em;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
div.dialog > p {
|
|
41
|
+
margin: 0 0 1em;
|
|
42
|
+
padding: 1em;
|
|
43
|
+
background-color: #F7F7F7;
|
|
44
|
+
border: 1px solid #CCC;
|
|
45
|
+
border-right-color: #999;
|
|
46
|
+
border-left-color: #999;
|
|
47
|
+
border-bottom-color: #999;
|
|
48
|
+
border-bottom-left-radius: 4px;
|
|
49
|
+
border-bottom-right-radius: 4px;
|
|
50
|
+
border-top-color: #DADADA;
|
|
51
|
+
color: #666;
|
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
|
|
57
|
+
<body>
|
|
58
|
+
<!-- This file lives in public/422.html -->
|
|
59
|
+
<div class="dialog">
|
|
60
|
+
<div>
|
|
61
|
+
<h1>The change you wanted was rejected.</h1>
|
|
62
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
|
63
|
+
</div>
|
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
65
|
+
</div>
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<style>
|
|
7
|
+
body {
|
|
8
|
+
background-color: #EFEFEF;
|
|
9
|
+
color: #2E2F30;
|
|
10
|
+
text-align: center;
|
|
11
|
+
font-family: arial, sans-serif;
|
|
12
|
+
margin: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
div.dialog {
|
|
16
|
+
width: 95%;
|
|
17
|
+
max-width: 33em;
|
|
18
|
+
margin: 4em auto 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
div.dialog > div {
|
|
22
|
+
border: 1px solid #CCC;
|
|
23
|
+
border-right-color: #999;
|
|
24
|
+
border-left-color: #999;
|
|
25
|
+
border-bottom-color: #BBB;
|
|
26
|
+
border-top: #B00100 solid 4px;
|
|
27
|
+
border-top-left-radius: 9px;
|
|
28
|
+
border-top-right-radius: 9px;
|
|
29
|
+
background-color: white;
|
|
30
|
+
padding: 7px 12% 0;
|
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
h1 {
|
|
35
|
+
font-size: 100%;
|
|
36
|
+
color: #730E15;
|
|
37
|
+
line-height: 1.5em;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
div.dialog > p {
|
|
41
|
+
margin: 0 0 1em;
|
|
42
|
+
padding: 1em;
|
|
43
|
+
background-color: #F7F7F7;
|
|
44
|
+
border: 1px solid #CCC;
|
|
45
|
+
border-right-color: #999;
|
|
46
|
+
border-left-color: #999;
|
|
47
|
+
border-bottom-color: #999;
|
|
48
|
+
border-bottom-left-radius: 4px;
|
|
49
|
+
border-bottom-right-radius: 4px;
|
|
50
|
+
border-top-color: #DADADA;
|
|
51
|
+
color: #666;
|
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
</head>
|
|
56
|
+
|
|
57
|
+
<body>
|
|
58
|
+
<!-- This file lives in public/500.html -->
|
|
59
|
+
<div class="dialog">
|
|
60
|
+
<div>
|
|
61
|
+
<h1>We're sorry, but something went wrong.</h1>
|
|
62
|
+
</div>
|
|
63
|
+
<p>If you are the application owner check the logs for more information.</p>
|
|
64
|
+
</div>
|
|
65
|
+
</body>
|
|
66
|
+
</html>
|
|
File without changes
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/javascripts/application.js?type=application/javascript&id=3871d18d8934e89f8c7f092d13cf4005e87f9fa7286650c774ca1f639ca041d0:ET
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/stylesheets/application.css?type=text/css&id=bd0f65dedf719ecb27c84784a1b8c94e9d6856fb3b2ccebbd0e270f3a20c9422:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=544fa04b5e64df08247cc09e148bdfcbf74834034d6b52e03cf61a8a938f5176:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%Ѱč@�����6H�uZoX�Z�gbh0W��V
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/javascripts/application.js?type=application/javascript&id=d492d8f0bb3bdfd371c01156b5f69bd4bea7479500b59487318e1428d2e2dde8:ET
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/stylesheets/application.css?type=text/css&id=3d86d1eb4ddc15dbe6fbf799150a06de91a10873a3e6873e6b4b151b58fbe74d:ET
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=26ff20112fcbc73544df76613a167d759bf9cdb75bbc1290c0bc63ac507ef77b:ET
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/stylesheets/application.css?type=text/css&pipeline=self&id=bb3aba1d0dce2016b29fd6688e025e55eb12ad3a7bf92222a0300d3fc1f94bab:ET
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
I"�file:///Users/markus/svn/gem-strong-form/spec/dummy/app/assets/javascripts/application.js?type=application/javascript&pipeline=self&id=68010392710123cd519e39ee26abfeba4d6e031eca6c8e2767c36f94a37c8d84:ET
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%��Rm�v�S3.��O�L���ڹc�ƕq�=_j�
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"%�W\�yho9S���ƫ˥��)|�~���(���
|
data/spec/examples.txt
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
example_id | status | run_time |
|
|
2
|
+
---------------------------------------------- | ------ | --------------- |
|
|
3
|
+
./spec/features/strong_form_spec.rb[1:1:1:1] | passed | 0.00347 seconds |
|
|
4
|
+
./spec/features/strong_form_spec.rb[1:1:1:2] | passed | 0.00362 seconds |
|
|
5
|
+
./spec/features/strong_form_spec.rb[1:1:1:3] | passed | 0.00354 seconds |
|
|
6
|
+
./spec/features/strong_form_spec.rb[1:1:1:4] | passed | 0.00366 seconds |
|
|
7
|
+
./spec/features/strong_form_spec.rb[1:1:2:1] | passed | 0.00479 seconds |
|
|
8
|
+
./spec/features/strong_form_spec.rb[1:1:2:2] | passed | 0.14378 seconds |
|
|
9
|
+
./spec/features/strong_form_spec.rb[1:1:2:3] | passed | 0.00388 seconds |
|
|
10
|
+
./spec/features/strong_form_spec.rb[1:1:2:4] | passed | 0.00408 seconds |
|
|
11
|
+
./spec/features/strong_form_spec.rb[1:2:1:1:1] | passed | 0.00576 seconds |
|
|
12
|
+
./spec/features/strong_form_spec.rb[1:2:1:1:2] | passed | 0.00599 seconds |
|
|
13
|
+
./spec/features/strong_form_spec.rb[1:2:1:1:3] | passed | 0.00628 seconds |
|
|
14
|
+
./spec/features/strong_form_spec.rb[1:2:1:1:4] | passed | 0.00593 seconds |
|
|
15
|
+
./spec/features/strong_form_spec.rb[1:2:1:1:5] | passed | 0.00586 seconds |
|
|
16
|
+
./spec/features/strong_form_spec.rb[1:2:1:1:6] | passed | 0.00583 seconds |
|
|
17
|
+
./spec/features/strong_form_spec.rb[1:2:2:1:1] | passed | 0.00649 seconds |
|
|
18
|
+
./spec/features/strong_form_spec.rb[1:2:2:1:2] | passed | 0.00675 seconds |
|
|
19
|
+
./spec/features/strong_form_spec.rb[1:2:2:1:3] | passed | 0.00602 seconds |
|
|
20
|
+
./spec/features/strong_form_spec.rb[1:2:2:1:4] | passed | 0.03 seconds |
|
|
21
|
+
./spec/features/strong_form_spec.rb[1:2:2:2:1] | passed | 0.00754 seconds |
|
|
22
|
+
./spec/features/strong_form_spec.rb[1:2:2:2:2] | passed | 0.00761 seconds |
|
|
23
|
+
./spec/features/strong_form_spec.rb[1:2:3:1:1] | passed | 0.0061 seconds |
|
|
24
|
+
./spec/features/strong_form_spec.rb[1:2:3:1:2] | passed | 0.00794 seconds |
|
|
25
|
+
./spec/features/strong_form_spec.rb[1:2:3:1:3] | passed | 0.00648 seconds |
|
|
26
|
+
./spec/features/strong_form_spec.rb[1:2:3:1:4] | passed | 0.00688 seconds |
|
|
27
|
+
./spec/features/strong_form_spec.rb[1:2:3:2:1] | passed | 0.00628 seconds |
|
|
28
|
+
./spec/features/strong_form_spec.rb[1:2:3:2:2] | passed | 0.00641 seconds |
|
|
29
|
+
./spec/features/strong_form_spec.rb[1:3:1:1:1] | passed | 0.0104 seconds |
|
|
30
|
+
./spec/features/strong_form_spec.rb[1:3:1:1:2] | passed | 0.01235 seconds |
|
|
31
|
+
./spec/features/strong_form_spec.rb[1:3:2:1:1] | passed | 0.01065 seconds |
|
|
32
|
+
./spec/features/strong_form_spec.rb[1:3:2:1:2] | passed | 0.00964 seconds |
|
|
33
|
+
./spec/features/strong_form_spec.rb[1:4:1] | passed | 0.00881 seconds |
|
|
34
|
+
./spec/features/strong_form_spec.rb[1:4:2:1:1] | passed | 0.00892 seconds |
|
|
35
|
+
./spec/features/strong_form_spec.rb[1:4:2:1:2] | passed | 0.00898 seconds |
|
|
36
|
+
./spec/features/strong_form_spec.rb[1:4:2:2:1] | passed | 0.00937 seconds |
|
|
37
|
+
./spec/features/strong_form_spec.rb[1:4:3:1:1] | passed | 0.00824 seconds |
|
|
38
|
+
./spec/features/strong_form_spec.rb[1:4:3:1:2] | passed | 0.01065 seconds |
|
|
39
|
+
./spec/features/strong_form_spec.rb[1:4:3:2:1] | passed | 0.01426 seconds |
|
|
40
|
+
./spec/features/strong_form_spec.rb[1:4:4:1:1] | passed | 0.00833 seconds |
|
|
41
|
+
./spec/features/strong_form_spec.rb[1:4:4:1:2] | passed | 0.00957 seconds |
|
|
42
|
+
./spec/features/strong_form_spec.rb[1:4:4:1:3] | passed | 0.00933 seconds |
|
|
43
|
+
./spec/features/strong_form_spec.rb[1:4:4:1:4] | passed | 0.0092 seconds |
|
|
44
|
+
./spec/features/strong_form_spec.rb[1:4:4:1:5] | passed | 0.00932 seconds |
|
|
45
|
+
./spec/features/strong_form_spec.rb[1:4:4:1:6] | passed | 0.00863 seconds |
|
|
46
|
+
./spec/features/strong_form_spec.rb[1:4:4:2:1] | passed | 0.00875 seconds |
|
|
47
|
+
./spec/features/strong_form_spec.rb[1:4:5:1:1] | passed | 0.02441 seconds |
|
|
48
|
+
./spec/models/user_spec.rb[1:1:1:1] | passed | 0.00069 seconds |
|
|
49
|
+
./spec/models/user_spec.rb[1:1:2:1] | passed | 0.00037 seconds |
|
|
50
|
+
./spec/models/user_spec.rb[1:1:2:2] | passed | 0.00035 seconds |
|
|
51
|
+
./spec/models/user_spec.rb[1:1:2:3] | passed | 0.00074 seconds |
|
|
52
|
+
./spec/models/user_spec.rb[1:1:2:4] | passed | 0.00139 seconds |
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
require 'rails_helper'
|
|
2
|
+
|
|
3
|
+
def all_user_attributes
|
|
4
|
+
%i(first_name last_name gender description)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def all_addresses_attributes
|
|
8
|
+
%i(street city country description)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def all_tags_attributes
|
|
12
|
+
%i(name description)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
RSpec.describe 'strong form' do
|
|
16
|
+
describe 'basic form' do
|
|
17
|
+
subject { visit '/basic_form' }
|
|
18
|
+
|
|
19
|
+
context 'without permitted attributes' do
|
|
20
|
+
before(:each) { subject }
|
|
21
|
+
|
|
22
|
+
all_user_attributes.each do |attr|
|
|
23
|
+
it "should enable #{attr}" do
|
|
24
|
+
expect(page.find('[name="user[' + attr.to_s + ']"]')[:disabled])
|
|
25
|
+
.to be_falsy
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context 'with permitted attributes' do
|
|
31
|
+
before(:each) do
|
|
32
|
+
new_user = User.new
|
|
33
|
+
allow(User).to receive(:new) do
|
|
34
|
+
new_user.permitted_attributes = [:last_name]
|
|
35
|
+
new_user
|
|
36
|
+
end
|
|
37
|
+
subject
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
(all_user_attributes - %i(last_name)).each do |attr|
|
|
41
|
+
it "should disable #{attr}" do
|
|
42
|
+
expect(page.find('[name="user[' + attr.to_s + ']"]')[:disabled])
|
|
43
|
+
.to be_truthy
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'should enable last_name' do
|
|
48
|
+
expect(page.find('[name="user[last_name]"]')[:disabled])
|
|
49
|
+
.to be_falsy
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'nested form' do
|
|
55
|
+
subject { visit '/fields_for' }
|
|
56
|
+
|
|
57
|
+
context 'without permitted attributes' do
|
|
58
|
+
before(:each) { subject }
|
|
59
|
+
|
|
60
|
+
describe 'has_many association' do
|
|
61
|
+
all_addresses_attributes.each do |attr|
|
|
62
|
+
it "should enable address #{attr}" do
|
|
63
|
+
expect(page.find(
|
|
64
|
+
'[name="user[addresses_attributes][0][' + attr.to_s + ']"]'
|
|
65
|
+
)[:disabled])
|
|
66
|
+
.to be_falsy
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
all_tags_attributes.each do |attr|
|
|
71
|
+
it "should enable tag #{attr}" do
|
|
72
|
+
expect(page.find('[name="user[tag_attributes][' + attr.to_s + ']"]')[:disabled])
|
|
73
|
+
.to be_falsy
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
context 'with permitted attributes for addresses' do
|
|
80
|
+
before(:each) do
|
|
81
|
+
new_user = User.new
|
|
82
|
+
allow(User).to receive(:new) do
|
|
83
|
+
new_user.permitted_attributes = [
|
|
84
|
+
:last_name, addresses_attributes: [:city]
|
|
85
|
+
]
|
|
86
|
+
new_user
|
|
87
|
+
end
|
|
88
|
+
subject
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
describe 'has_many association' do
|
|
92
|
+
(all_addresses_attributes - %i(city)).each do |attr|
|
|
93
|
+
it "should disable address #{attr}" do
|
|
94
|
+
expect(page.find(
|
|
95
|
+
'[name="user[addresses_attributes][0][' + attr.to_s + ']"]'
|
|
96
|
+
)[:disabled])
|
|
97
|
+
.to be_truthy
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'should enable address city' do
|
|
102
|
+
expect(page.find(
|
|
103
|
+
'[name="user[addresses_attributes][0][city]"]'
|
|
104
|
+
)[:disabled])
|
|
105
|
+
.to be_falsy
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe 'has_one association' do
|
|
110
|
+
all_tags_attributes.each do |attr|
|
|
111
|
+
it "should disable tag #{attr}" do
|
|
112
|
+
expect(page.find('[name="user[tag_attributes][' + attr.to_s + ']"]')[:disabled])
|
|
113
|
+
.to be_truthy
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context 'with permitted attributes for tag' do
|
|
120
|
+
before(:each) do
|
|
121
|
+
new_user = User.new
|
|
122
|
+
allow(User).to receive(:new) do
|
|
123
|
+
new_user.permitted_attributes = [
|
|
124
|
+
:last_name, tag_attributes: [:name]
|
|
125
|
+
]
|
|
126
|
+
new_user
|
|
127
|
+
end
|
|
128
|
+
subject
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
describe 'has_many association' do
|
|
132
|
+
all_addresses_attributes.each do |attr|
|
|
133
|
+
it "should disable address #{attr}" do
|
|
134
|
+
expect(page.find(
|
|
135
|
+
'[name="user[addresses_attributes][0][' + attr.to_s + ']"]'
|
|
136
|
+
)[:disabled])
|
|
137
|
+
.to be_truthy
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe 'has_one association' do
|
|
143
|
+
(all_tags_attributes - %i(name)).each do |attr|
|
|
144
|
+
it "should disable tag #{attr}" do
|
|
145
|
+
expect(page.find('[name="user[tag_attributes][' + attr.to_s + ']"]')[:disabled])
|
|
146
|
+
.to be_truthy
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it 'should enable tag name' do
|
|
151
|
+
expect(page.find('[name="user[tag_attributes][name]"]')[:disabled])
|
|
152
|
+
.to be_falsy
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
describe 'deeply nested form' do
|
|
159
|
+
subject { visit '/deep_fields_for' }
|
|
160
|
+
|
|
161
|
+
context 'without permitted attributes' do
|
|
162
|
+
before(:each) { subject }
|
|
163
|
+
|
|
164
|
+
describe 'deeply nested has_many association' do
|
|
165
|
+
all_tags_attributes.each do |attr|
|
|
166
|
+
it "should enable address tag #{attr}" do
|
|
167
|
+
expect(page.find(
|
|
168
|
+
'[name="user[addresses_attributes][0][tags_attributes][0][' + attr.to_s + ']"]'
|
|
169
|
+
)[:disabled])
|
|
170
|
+
.to be_falsy
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
context 'with permitted attributes deeply nested tag' do
|
|
177
|
+
before(:each) do
|
|
178
|
+
new_user = User.new
|
|
179
|
+
allow(User).to receive(:new) do
|
|
180
|
+
new_user.permitted_attributes = [
|
|
181
|
+
addresses_attributes: { tags_attributes: [:name] }
|
|
182
|
+
]
|
|
183
|
+
new_user
|
|
184
|
+
end
|
|
185
|
+
subject
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
describe 'deeply nested has_many association' do
|
|
189
|
+
(all_tags_attributes - %i(name)).each do |attr|
|
|
190
|
+
it "should disable address tag #{attr}" do
|
|
191
|
+
expect(page.find(
|
|
192
|
+
'[name="user[addresses_attributes][0][tags_attributes][0][' + attr.to_s + ']"]'
|
|
193
|
+
)[:disabled])
|
|
194
|
+
.to be_truthy
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it 'should enable address tag name' do
|
|
199
|
+
expect(page.find(
|
|
200
|
+
'[name="user[addresses_attributes][0][tags_attributes][0][name]"]'
|
|
201
|
+
)[:disabled])
|
|
202
|
+
.to be_falsy
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe 'nested form gem' do
|
|
209
|
+
subject { visit '/nested_form_gem' }
|
|
210
|
+
|
|
211
|
+
it 'should work' do
|
|
212
|
+
subject
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
context 'without permitted attributes' do
|
|
216
|
+
before(:each) { subject }
|
|
217
|
+
|
|
218
|
+
describe 'link to add' do
|
|
219
|
+
it 'should be displayed' do
|
|
220
|
+
expect(page)
|
|
221
|
+
.to have_selector('[data-blueprint-id="addresses_fields_blueprint"]')
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
it 'blueprint should not have disabled fields' do
|
|
225
|
+
expect(find('#addresses_fields_blueprint', visible: false)[:'data-blueprint'])
|
|
226
|
+
.not_to include('disabled')
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
describe 'link to remove' do
|
|
231
|
+
it 'should be displayed' do
|
|
232
|
+
expect(page)
|
|
233
|
+
.to have_selector('a.remove_nested_fields[data-association="addresses"]')
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
context 'with permitted attributes not including association' do
|
|
239
|
+
before(:each) do
|
|
240
|
+
new_user = User.new
|
|
241
|
+
allow(User).to receive(:new) do
|
|
242
|
+
new_user.permitted_attributes = []
|
|
243
|
+
new_user
|
|
244
|
+
end
|
|
245
|
+
subject
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
describe 'link to add' do
|
|
249
|
+
it 'should not be displayed' do
|
|
250
|
+
expect(page)
|
|
251
|
+
.not_to have_selector('[data-blueprint-id="addresses_fields_blueprint"]')
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
it 'should not add blueprint' do
|
|
255
|
+
expect(page.all('#addresses_fields_blueprint', visible: false).length)
|
|
256
|
+
.to eq(0)
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
describe 'link to remove' do
|
|
261
|
+
it 'should not be displayed' do
|
|
262
|
+
expect(page)
|
|
263
|
+
.not_to have_selector('a.remove_nested_fields[data-association="addresses"]')
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
context 'with permitted attributes including association' do
|
|
269
|
+
before(:each) do
|
|
270
|
+
new_user = User.new
|
|
271
|
+
allow(User).to receive(:new) do
|
|
272
|
+
new_user.permitted_attributes = [
|
|
273
|
+
addresses_attributes: %i(city _destroy)
|
|
274
|
+
]
|
|
275
|
+
new_user
|
|
276
|
+
end
|
|
277
|
+
subject
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
describe 'link to add' do
|
|
281
|
+
it 'should be displayed' do
|
|
282
|
+
expect(page)
|
|
283
|
+
.to have_selector('[data-blueprint-id="addresses_fields_blueprint"]')
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
it 'should add blueprint' do
|
|
287
|
+
expect(page.all('#addresses_fields_blueprint', visible: false).length)
|
|
288
|
+
.to eq(1)
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
(all_addresses_attributes - %i(city)).each do |attr|
|
|
292
|
+
it "should disable address #{attr} in blueprint" do
|
|
293
|
+
blueprint =
|
|
294
|
+
page.find('#addresses_fields_blueprint', visible: false)[:'data-blueprint']
|
|
295
|
+
tag = blueprint.match(/<[^>]+name=[^>]*#{attr}.*?>/)[0]
|
|
296
|
+
|
|
297
|
+
expect(tag).to include('disabled')
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
it 'should enable address city in blueprint' do
|
|
302
|
+
blueprint =
|
|
303
|
+
page.find('#addresses_fields_blueprint', visible: false)[:'data-blueprint']
|
|
304
|
+
city_tag = blueprint.match(/<[^>]+name=[^>]*city.*?>/)[0]
|
|
305
|
+
|
|
306
|
+
expect(city_tag).not_to include('disabled')
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
describe 'link to remove' do
|
|
311
|
+
it 'should be displayed' do
|
|
312
|
+
expect(page)
|
|
313
|
+
.to have_selector('a.remove_nested_fields[data-association="addresses"]')
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
context 'with permitted attributes including association without _destroy' do
|
|
319
|
+
before(:each) do
|
|
320
|
+
new_user = User.new
|
|
321
|
+
allow(User).to receive(:new) do
|
|
322
|
+
new_user.permitted_attributes = [
|
|
323
|
+
addresses_attributes: %i(city)
|
|
324
|
+
]
|
|
325
|
+
new_user
|
|
326
|
+
end
|
|
327
|
+
subject
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
describe 'link to remove' do
|
|
331
|
+
it 'should not be displayed' do
|
|
332
|
+
expect(page)
|
|
333
|
+
.not_to have_selector('a.remove_nested_fields[data-association="addresses"]')
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
end
|