rails5-spec-converter 1.0.20 → 1.0.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -3
- data/lib/rails5/spec_converter/cli.rb +1 -1
- data/lib/rails5/spec_converter/hash_rewriter.rb +11 -8
- data/lib/rails5/spec_converter/test_type_identifier.rb +12 -3
- data/lib/rails5/spec_converter/text_transformer.rb +1 -1
- data/lib/rails5/spec_converter/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b243c703f835ef357017c5dd87464e345b44dca
|
4
|
+
data.tar.gz: a1acb2cea1494ccbcc37e7fcb3988d2924be9b5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cbaa53a1fcd05235f7cbd8e940879307e908003fbd8f83c0021fd338fdea0384d0456b743eb89c21fb4b335304beebfd59855ba92a3a2c0f80370fbf8658821
|
7
|
+
data.tar.gz: b6be580cefc1bd2bd3acea6624463d325285e17ed46f8fb728189199133f66938c059e672533686136ae988ece1aca658802f298e24dce9cc36d35b8f9add2b9
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Rails5
|
1
|
+
# Rails5 Spec Converter
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/tjgrathwell/rails5-spec-converter.svg?branch=master)](https://travis-ci.org/tjgrathwell/rails5-spec-converter)
|
4
4
|
|
@@ -33,7 +33,7 @@ Make sure you've committed everything to Git first, then
|
|
33
33
|
$ cd some-project
|
34
34
|
$ rails5-spec-converter
|
35
35
|
|
36
|
-
This will update all the files in that directory matching the
|
36
|
+
This will update all the files in that directory matching the globs `spec/**/*_spec.rb` or `test/**/*_test.rb`.
|
37
37
|
|
38
38
|
If you want to specify a specific set of files instead, you can run `rails5-spec-converter path_to_my_files`.
|
39
39
|
|
@@ -76,7 +76,7 @@ even though `format` should be **outside** the params hash.
|
|
76
76
|
format: :json
|
77
77
|
}
|
78
78
|
|
79
|
-
|
79
|
+
_outer, _inner = all_the_params.partition { |k,v| %i{format}.include?(k) }.map { |a| Hash[a] }
|
80
80
|
get :users, _outer.merge(params: _inner)
|
81
81
|
```
|
82
82
|
|
@@ -128,6 +128,10 @@ post :users, params: {user: {name: 'bayleef'}}
|
|
128
128
|
|
129
129
|
* `--hash-spacing` will force hashes to be written **with** extra whitespace in all files regardless of context.
|
130
130
|
|
131
|
+
## Compatibility
|
132
|
+
|
133
|
+
It **should** work for both RSpec and MiniTest, but who really knows?
|
134
|
+
|
131
135
|
## Development
|
132
136
|
|
133
137
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'rails5/spec_converter/node_textifier'
|
2
2
|
|
3
3
|
class HashRewriter
|
4
|
-
|
5
|
-
ALLOWED_KWARG_KEYS = %i(params session flash method body xhr format)
|
4
|
+
OUTSIDE_PARAMS_KEYS = %i(format)
|
6
5
|
|
7
6
|
attr_reader :hash_node, :original_indent
|
8
7
|
|
@@ -97,7 +96,7 @@ class HashRewriter
|
|
97
96
|
hash_node.children.each do |pair|
|
98
97
|
key = pair.children[0].children[0]
|
99
98
|
|
100
|
-
if
|
99
|
+
if OUTSIDE_PARAMS_KEYS.include?(key)
|
101
100
|
@pairs_that_belong_outside_params << pair
|
102
101
|
else
|
103
102
|
@pairs_that_belong_in_params << pair
|
@@ -138,11 +137,11 @@ class HashRewriter
|
|
138
137
|
value_str_lines[1].match(/^(\s*)/)[1].sub(original_indent, '')
|
139
138
|
end
|
140
139
|
|
141
|
-
def
|
140
|
+
def should_indent_restrung_content?(hash_node)
|
142
141
|
return nil if indent_before_first_pair(hash_node)
|
143
142
|
|
144
143
|
joiner = first_joiner_between_pairs
|
145
|
-
joiner && joiner.include?("\n")
|
144
|
+
joiner && joiner.include?("\n")
|
146
145
|
end
|
147
146
|
|
148
147
|
def existing_indent(hash_node)
|
@@ -188,14 +187,18 @@ class HashRewriter
|
|
188
187
|
|
189
188
|
def appropriately_indented_params_hash(pairs:)
|
190
189
|
outer_indent = existing_indent(hash_node)
|
191
|
-
middle_indent = indent_of_first_value_if_multiline(hash_node)
|
192
|
-
inner_indent = additional_indent(hash_node)
|
193
190
|
|
194
191
|
restrung_hash = restring_hash(
|
195
192
|
pairs,
|
196
|
-
indent: outer_indent
|
193
|
+
indent: outer_indent,
|
197
194
|
joiner: ",\n"
|
198
195
|
)
|
196
|
+
|
197
|
+
if should_indent_restrung_content?(hash_node)
|
198
|
+
restrung_hash = add_indent(restrung_hash, @options.indent)
|
199
|
+
end
|
200
|
+
|
201
|
+
middle_indent = indent_of_first_value_if_multiline(hash_node)
|
199
202
|
if middle_indent
|
200
203
|
restrung_hash = original_indent + add_indent(restrung_hash, middle_indent)
|
201
204
|
end
|
@@ -36,6 +36,15 @@ module Rails5
|
|
36
36
|
|
37
37
|
def test_type_from_content
|
38
38
|
root_node = @parser.parse(@source_buffer)
|
39
|
+
root_node.each_node(:class) do |node|
|
40
|
+
class_const_node, superclass_const_node = node.children
|
41
|
+
next unless superclass_const_node && superclass_const_node.const_type?
|
42
|
+
|
43
|
+
superclass_str = superclass_const_node.loc.expression.source
|
44
|
+
return :controller if superclass_str == "ActionController::TestCase"
|
45
|
+
return :request if superclass_str == "ActionDispatch::IntegrationTest"
|
46
|
+
end
|
47
|
+
|
39
48
|
root_node.each_node(:send) do |node|
|
40
49
|
target, method, test_name, params = node.children
|
41
50
|
next unless target.nil? || target == :RSpec
|
@@ -51,9 +60,9 @@ module Rails5
|
|
51
60
|
return nil unless @options.file_path
|
52
61
|
|
53
62
|
dirs = @options.file_path.split('/')
|
54
|
-
|
55
|
-
return nil unless
|
56
|
-
DIRECTORY_TO_TYPE_MAP[dirs[
|
63
|
+
folder_index = dirs.index('spec') || dirs.index('test')
|
64
|
+
return nil unless folder_index
|
65
|
+
DIRECTORY_TO_TYPE_MAP[dirs[folder_index + 1]]
|
57
66
|
end
|
58
67
|
|
59
68
|
def type_from_params_hash(params)
|
@@ -86,7 +86,7 @@ module Rails5
|
|
86
86
|
end
|
87
87
|
|
88
88
|
if @options.uglify_ambiguous_params?
|
89
|
-
keys =
|
89
|
+
keys = HashRewriter::OUTSIDE_PARAMS_KEYS.join(' ')
|
90
90
|
partition_clause = [
|
91
91
|
@textifier.node_to_string(args[0]),
|
92
92
|
"partition { |k,v| %i{#{keys}}.include?(k) }",
|