rails5-spec-converter 1.0.22 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 427f7dc30dd3cf4bd47d8fa81cb76dc67af01e16
4
- data.tar.gz: af054a465c522657dd8b34544bc4a20609f9beb2
3
+ metadata.gz: 7eb8605294b0f3e4029d4a37a66b92cfb59af830
4
+ data.tar.gz: 9cf52cc55cdd1d225469ad8d8995ad7cea52a4ae
5
5
  SHA512:
6
- metadata.gz: 174bf93337cba877b6acb4d80fa5971457be07d1c719c98fe7e7a3b1a357be85fa4610216230031adc1244f91bcba0ae1c02c21b6e27a5e852aade7471eac42f
7
- data.tar.gz: 24b722ce305474f002a69ebfd87dc494e9766a4559d30bf01b2db11ffc96eb0157a463ad3d0a1f24076430f354bcd1ca1e3da68ee803cc938582d39ff6cd5865
6
+ metadata.gz: 3ad5d20ee93db7c0ae5ecec047b647aab9f3661765b7c2d6c8dd1f22a88c9a0b4b5e1055fe47d9d7a962dbdf9a88bc34fb5ee2329769b827642910ae2f524a34
7
+ data.tar.gz: 88b4aa44487e0a6772e84949f3f41cebbc0dc98f06e10e25af31217d5317a3bb40501a8b7939bf24b6723ea7822fe391cb0b51b1c7951cf5401143dd1db4d753
data/README.md CHANGED
@@ -39,49 +39,6 @@ If you want to specify a specific set of files instead, you can run `rails5-spec
39
39
 
40
40
  By default it will make some noise, run with `rails5-spec-converter --quiet` if you want it not to.
41
41
 
42
- ### Strategy
43
-
44
- `rails5-spec-converter` wants to partition your arguments into two sets, those that belong in `params` and those that don't.
45
-
46
- But it doesn't do any runtime analysis, so it can only effectively sort out non-`params` keys if they're included in a hash literal on the test invocation site. Hence:
47
-
48
- ```
49
- all_the_params = {
50
- search: 'bayleef',
51
- format: :json
52
- }
53
-
54
- get :users, all_the_params
55
- ```
56
-
57
- will become
58
-
59
- ```
60
- get :users, params: all_the_params
61
- ```
62
-
63
- even though `format` should be **outside** the params hash.
64
-
65
- * `--warn-if-ambiguous` will print a message every time `rails5-spec-converter` encounters this situation
66
-
67
- * `--strategy optimistic` (default) will always wrap the unknowable args in `params`
68
-
69
- * `--strategy skip` will never wrap the unknowable args in `params`
70
-
71
- * `--strategy uglify` will attempt to split the hash into `params` and non-`params` hashes at runtime, like so:
72
-
73
- ```
74
- all_the_params = {
75
- search: 'bayleef',
76
- format: :json
77
- }
78
-
79
- _outer, _inner = all_the_params.partition { |k,v| %i{format}.include?(k) }.map { |a| Hash[a] }
80
- get :users, _outer.merge(params: _inner)
81
- ```
82
-
83
- This should allow your tests to pass without deprecation warnings while introducing an enticing code cleanup oppurtunity.
84
-
85
42
  ### Whitespace
86
43
 
87
44
  #### Indentation
@@ -27,14 +27,6 @@ module Rails5
27
27
  opts.on("--[no-]hash-spacing", "Always/never add space around hashes ({foo: 'bar'} vs { foo: 'bar' })") do |hash_spacing|
28
28
  @options.hash_spacing = hash_spacing
29
29
  end
30
-
31
- opts.on("-s", "--strategy STRATEGY", "Set unknown hash parameters strategy (see README)") do |strategy|
32
- @options.strategy = strategy.to_sym
33
- end
34
-
35
- opts.on("--warn-if-ambiguous", "Emit warnings when hash parameters are unknowable (see README)") do |warn_if_ambiguous|
36
- @options.warn_if_ambiguous = warn_if_ambiguous
37
- end
38
30
  end.parse!
39
31
 
40
32
  @files = ARGV
@@ -41,10 +41,6 @@ module Rails5
41
41
  else
42
42
  next if looks_like_route_definition?(args[0])
43
43
  next if has_key?(args[0], :params)
44
- if has_kwsplat?(args[0])
45
- warn_about_ambiguous_params(node) if @options.warn_about_ambiguous_params?
46
- next unless @options.wrap_ambiguous_params?
47
- end
48
44
 
49
45
  hash_rewriter = HashRewriter.new(
50
46
  content: @content,
@@ -66,8 +62,7 @@ module Rails5
66
62
  )
67
63
  @source_rewriter.remove(nil_arg_range)
68
64
  else
69
- warn_about_ambiguous_params(node) if @options.warn_about_ambiguous_params?
70
- handle_ambiguous_method_call!(node)
65
+ wrap_arg(args[0], 'params')
71
66
  end
72
67
 
73
68
  wrap_extra_positional_args!(args) if args.length > 1
@@ -78,62 +73,6 @@ module Rails5
78
73
 
79
74
  private
80
75
 
81
- def handle_ambiguous_method_call!(node)
82
- target, verb, action, *args = node.children
83
-
84
- if @options.wrap_ambiguous_params?
85
- wrap_arg(args[0], 'params') if @options.wrap_ambiguous_params?
86
- end
87
-
88
- if @options.uglify_ambiguous_params?
89
- keys = HashRewriter::OUTSIDE_PARAMS_KEYS.join(' ')
90
- partition_clause = [
91
- @textifier.node_to_string(args[0]),
92
- "partition { |k,v| %i{#{keys}}.include?(k) }",
93
- 'map { |a| Hash[a] }'
94
- ].join('.')
95
-
96
- text_before_node = node.loc.expression.source_line[0...node.loc.expression.column]
97
- first_line_content = "_outer, _inner = #{partition_clause}"
98
- if text_before_node =~ /^\s+$/
99
- @source_rewriter.insert_before(node.loc.expression, "#{first_line_content}\n#{line_indent(node)}")
100
- if args.length == 1
101
- @source_rewriter.replace(args[0].loc.expression, '_outer.merge(params: _inner)')
102
- else
103
- replacement_range = Parser::Source::Range.new(
104
- @source_buffer,
105
- args[0].loc.expression.begin_pos,
106
- args[1].loc.expression.begin_pos
107
- )
108
- @source_rewriter.replace(replacement_range, '_outer.merge(params: _inner).merge(')
109
- @source_rewriter.insert_after(args.last.loc.expression, ')')
110
- end
111
- else
112
- return unless in_a_block_with_only_whitespace?(node)
113
-
114
- new_indent = line_indent(node) + @options.indent
115
- @source_rewriter.insert_before(node.loc.expression, "\n" + new_indent + first_line_content + "\n" + new_indent)
116
- @source_rewriter.replace(args[0].loc.expression, '_outer.merge(params: _inner)')
117
- @source_rewriter.insert_after(node.loc.expression, "\n#{line_indent(node)}")
118
- trim_enclosing_spaces!(node)
119
- end
120
- end
121
- end
122
-
123
- def in_a_block_with_only_whitespace?(node)
124
- return false unless node.parent && node.parent.block_type?
125
- content_before = @content[node.parent.loc.begin.end_pos...node.loc.expression.begin_pos]
126
- content_after = @content[node.loc.expression.end_pos...node.parent.loc.end.begin_pos]
127
- content_before =~ /^\s*$/ && content_after =~ /^\s*$/
128
- end
129
-
130
- def trim_enclosing_spaces!(node)
131
- before_range = Parser::Source::Range.new(@source_buffer, node.parent.loc.begin.end_pos, node.loc.expression.begin_pos)
132
- after_range = Parser::Source::Range.new(@source_buffer, node.loc.expression.end_pos, node.parent.loc.end.begin_pos)
133
- @source_rewriter.remove(before_range)
134
- @source_rewriter.remove(after_range)
135
- end
136
-
137
76
  def looks_like_route_definition?(hash_node)
138
77
  keys = hash_node.children.map { |pair| pair.children[0].children[0] }
139
78
  route_definition_keys = [:to, :controller]
@@ -179,12 +118,6 @@ module Rails5
179
118
  @source_rewriter.replace(node_loc, "#{key}: #{node_source}")
180
119
  end
181
120
 
182
- def warn_about_ambiguous_params(node)
183
- log "Ambiguous params found"
184
- log "#{@options.file_path}:#{node.loc.line}" if @options.file_path
185
- log "```\n#{node.loc.expression.source}\n```\n\n"
186
- end
187
-
188
121
  def line_indent(node)
189
122
  node.loc.expression.source_line.match(/^(\s*)/)[1]
190
123
  end
@@ -1,26 +1,12 @@
1
1
  class TextTransformerOptions
2
- attr_accessor :strategy, :hash_spacing, :indent, :file_path
3
- attr_writer :quiet, :warn_if_ambiguous
2
+ attr_accessor :hash_spacing, :indent, :file_path
3
+ attr_writer :quiet
4
4
 
5
5
  def initialize
6
6
  @file_path = nil
7
- @strategy = :optimistic
8
7
  @quiet = false
9
8
  @indent = ' '
10
9
  @hash_spacing = nil
11
- @warn_if_ambiguous = false
12
- end
13
-
14
- def wrap_ambiguous_params?
15
- @strategy == :optimistic
16
- end
17
-
18
- def uglify_ambiguous_params?
19
- @strategy == :uglify
20
- end
21
-
22
- def warn_about_ambiguous_params?
23
- @warn_if_ambiguous
24
10
  end
25
11
 
26
12
  def quiet?
@@ -1,5 +1,5 @@
1
1
  module Rails5
2
2
  module SpecConverter
3
- VERSION = "1.0.22"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails5-spec-converter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.22
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Grathwell
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-12 00:00:00.000000000 Z
11
+ date: 2016-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser