dev_scripts 0.1.6 → 0.1.7

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
- SHA256:
3
- metadata.gz: d228641ef9316118dc6db77ce51b8e427dce277873ba1698ef02462ba5c9b18d
4
- data.tar.gz: 97d738e8c9632d42a66944a2c7fcc9cefaa3f4cea46da91e497b8df18d30f1c6
2
+ SHA1:
3
+ metadata.gz: bb8b845e411220940dea6320c29b837dc3fe4be0
4
+ data.tar.gz: f2bb862cda6a06d556077c16ca95737706d8656d
5
5
  SHA512:
6
- metadata.gz: 47d81e8075cb5d3637d754e3d377fbb6bfb37499644390eb5acaee3eef424f4c68cb1bbf29582647543e19d7c610c08df59637a5cc34ae61a7c24064b8cad44f
7
- data.tar.gz: 2cb25859255da05f5f1f25d176c57c6a9cb8686a596ad30ffde2243537e0985b4aefe6f0193eeb33fed7dfd6df236f12a32877c0604b71d582c7d8c06cd2f2c2
6
+ metadata.gz: 2d30b227df38ceb469e5a68a2bab68b55274be68265b2d63f92ae6ca767a3beb4c1a01e88d1eb7e27b4664531c67549c7012f5ea67e6d7afcd79f50a44b57603
7
+ data.tar.gz: c142dcbf20b61b2e02207180dda4f535ec0181a30be1cadf927dfb2ec442a83a98c2640433d48198972c43728260c419f924d9adcf92b7b7e265b313626bef68
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dev_scripts (0.1.5)
4
+ dev_scripts (0.1.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -12,6 +12,7 @@ GEM
12
12
  minitest (~> 5.1)
13
13
  tzinfo (~> 1.1)
14
14
  zeitwerk (~> 2.2)
15
+ ast (2.4.0)
15
16
  byebug (11.0.1)
16
17
  coderay (1.1.2)
17
18
  concurrent-ruby (1.1.5)
@@ -44,6 +45,8 @@ GEM
44
45
  notiffany (0.1.3)
45
46
  nenv (~> 0.1)
46
47
  shellany (~> 0.0)
48
+ parser (2.6.5.0)
49
+ ast (~> 2.4.0)
47
50
  pry (0.12.2)
48
51
  coderay (~> 1.1.0)
49
52
  method_source (~> 0.9.0)
@@ -83,6 +86,7 @@ DEPENDENCIES
83
86
  dev_scripts!
84
87
  guard
85
88
  guard-rspec
89
+ parser
86
90
  pry
87
91
  pry-byebug
88
92
  rake (~> 10.0)
data/dev_scripts.gemspec CHANGED
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "guard"
29
29
  spec.add_development_dependency "guard-rspec"
30
30
  spec.add_development_dependency "activesupport"
31
+ spec.add_development_dependency "parser"
31
32
  end
@@ -1,5 +1,5 @@
1
1
  require 'dev_scripts/script'
2
- require 'dev_scripts/support/block_expander'
2
+ require 'dev_scripts/support/expanded_block'
3
3
 
4
4
  DevScripts::Script.define_script :expand_block do
5
5
  args :file_path, :line_number
@@ -9,7 +9,7 @@ DevScripts::Script.define_script :expand_block do
9
9
 
10
10
  File.foreach(file_path).with_index do |file_line, index|
11
11
  if index + 1 == line_number.to_i
12
- lines << DevScripts::Support::BlockExpander.new(line: file_line).run
12
+ lines << DevScripts::Support::ExpandedBlock.new(line: file_line)
13
13
  else
14
14
  lines << file_line
15
15
  end
@@ -0,0 +1,54 @@
1
+ module DevScripts
2
+ module Support
3
+ class Block < String
4
+ def initialize(args_node, block_node)
5
+ @block_node = block_node
6
+
7
+ self << 'do'
8
+
9
+ if args_node.children.size > 0
10
+ self << args_node.children.each_with_object(' |').with_index do |(arg, string), index|
11
+ string << arg.children.first.to_s
12
+
13
+ string << ', ' if index < args_node.children.size - 1
14
+ string << '|' if index == args_node.children.size - 1
15
+ end
16
+ end
17
+
18
+ self << "\n"
19
+ self << ' ' + body
20
+ self << "\n"
21
+ self << 'end'
22
+ end
23
+
24
+ private
25
+
26
+ attr_reader :block_node
27
+
28
+ def args(node)
29
+ node.children.each_with_object(' |').with_index do |(arg, string), index|
30
+ string << arg.children.first.to_s
31
+
32
+ string << ', ' if index < node.children.size - 1
33
+ string << "|" if index == node.children.size - 1
34
+ end
35
+ end
36
+
37
+ def block_node_method_call?
38
+ block_node.type == :send
39
+ end
40
+
41
+ def body
42
+ if block_node_method_call?
43
+ MethodCall.new(block_node)
44
+ else
45
+ if Symbol === block_node.children.first
46
+ ":#{block_node.children.first}"
47
+ else
48
+ block_node.children.first.to_s
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,26 @@
1
+ require 'parser/current'
2
+ require 'dev_scripts/support/block'
3
+ require 'dev_scripts/support/method_call'
4
+
5
+ module DevScripts
6
+ module Support
7
+ class ExpandedBlock < String
8
+ def initialize(line:)
9
+ parsed = Parser::CurrentRuby.parse(line).children
10
+ spacing = line.match(/\A\s*/)[0]
11
+ end_spacing = line.match(/\s*\z/)[0]
12
+ block_string = DevScripts::Support::Block.new(parsed[1], parsed[2])
13
+ block_lines = block_string.split("\n")
14
+
15
+ self << spacing + DevScripts::Support::MethodCall.new(parsed[0])
16
+ self << ' '
17
+ self << block_lines[0]
18
+ self << "\n"
19
+ self << spacing + block_lines[1]
20
+ self << "\n"
21
+ self << spacing + block_lines[2]
22
+ self << end_spacing
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,58 @@
1
+ module DevScripts
2
+ module Support
3
+ class MethodCall < String
4
+ attr_reader :receiver, :invocation, :args
5
+
6
+ def initialize(ast_node)
7
+ current_receiver, @invocation, *@args = ast_node.children
8
+
9
+ invocation_stack = [invocation_with_args]
10
+
11
+ while Parser::AST::Node === current_receiver
12
+ invocation_stack.unshift MethodCall.new(current_receiver).invocation_with_args
13
+
14
+ current_receiver, invocation, *args = current_receiver&.children || []
15
+ end
16
+
17
+ invocation_stack.each_with_index do |invocation_string, index|
18
+ self << '.' if index > 0
19
+ self << invocation_string.to_s
20
+ end
21
+ end
22
+
23
+ def invocation_with_args
24
+ if args && args.size > 0
25
+ args.each_with_object("#{invocation}(").with_index do |(arg, string), index|
26
+ string << arg_string(arg)
27
+
28
+ string << ', ' if index < args.size - 1
29
+ string << ')' if index == args.size - 1
30
+ end
31
+ else
32
+ invocation
33
+ end
34
+ end
35
+
36
+ def arg_string(arg)
37
+ case arg.type
38
+ when :sym
39
+ ":#{arg.children[0]}"
40
+ when :str
41
+ "#{arg.children[0]}"
42
+ when :int
43
+ "#{arg.children[0].to_i}"
44
+ when :lvar
45
+ "#{arg.children[0]}"
46
+ when :send
47
+ "#{arg.children[1]}"
48
+ when :hash
49
+ arg_string(arg.children[0])
50
+ when :pair
51
+ key, value = arg.children
52
+
53
+ "#{key.children.first}: #{value.children.last}"
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,3 +1,3 @@
1
1
  module DevScripts
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dev_scripts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Quinones
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: parser
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Register and run scripts for ruby and rails development, with some defaults.
126
140
  email:
127
141
  - cquinones100@gmail.com
@@ -148,7 +162,9 @@ files:
148
162
  - lib/dev_scripts/scripts/expand_block.rb
149
163
  - lib/dev_scripts/scripts/open_spec_file.rb
150
164
  - lib/dev_scripts/scripts/rubocop_metrics_method_length.rb
151
- - lib/dev_scripts/support/block_expander.rb
165
+ - lib/dev_scripts/support/block.rb
166
+ - lib/dev_scripts/support/expanded_block.rb
167
+ - lib/dev_scripts/support/method_call.rb
152
168
  - lib/dev_scripts/version.rb
153
169
  homepage:
154
170
  licenses: []
@@ -168,7 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
184
  - !ruby/object:Gem::Version
169
185
  version: '0'
170
186
  requirements: []
171
- rubygems_version: 3.0.3
187
+ rubyforge_project:
188
+ rubygems_version: 2.5.2.3
172
189
  signing_key:
173
190
  specification_version: 4
174
191
  summary: Register and run scripts for ruby and rails development
@@ -1,51 +0,0 @@
1
- module DevScripts
2
- module Support
3
- class BlockExpander
4
-
5
- def initialize(line:)
6
- @line = line
7
- @body = line.match(/\{.*}\s*\n*\z/)&.send(:[], 0)
8
- @spacing = line.match(/\A\s*/)&.send(:[], 0)
9
- @argument = line.match(/\|\w+(,\w+)*\|/)&.send(:[], 0)
10
- end
11
-
12
- def run
13
- line_one + line_two + line_three
14
- end
15
-
16
- private
17
-
18
- attr_reader :method_call, :body, :spacing, :argument, :line
19
-
20
- def method_call
21
- line.split('').each_with_object('') do |character, new_line|
22
- return new_line if character == '{'
23
-
24
- new_line << character
25
- end
26
- end
27
-
28
- def new_body
29
- body
30
- .gsub('{', 'do')
31
- .gsub(/\|\w+(,\w+)*\|/) { |match| "#{match}\n#{spacing}" }
32
- .gsub('}', )
33
- end
34
-
35
- def line_one
36
- method_call.gsub(/\s*\z/, '') + " do#{argument ? ' ' + argument : ''}\n"
37
- end
38
-
39
- def line_two
40
- spacing +
41
- ' ' +
42
- body.gsub(/\A{\s*(\|\w+(,\w+)*\|)*\s*/, '').gsub(/\s*}\s*\z/, '') +
43
- "\n"
44
- end
45
-
46
- def line_three
47
- spacing + body.match(/}\s*/)[0].gsub('}', 'end')
48
- end
49
- end
50
- end
51
- end