motion_blender 0.1.1 → 0.1.2
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 +4 -4
- data/README.md +7 -3
- data/lib/motion_blender/analyzer/evaluator.rb +36 -0
- data/lib/motion_blender/analyzer/parser.rb +10 -19
- data/lib/motion_blender/version.rb +1 -1
- data/motion_blender.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be3d49bb1ba40b2cde3d4fa5bea800c1764ae21f
|
4
|
+
data.tar.gz: c09c5e5c2d743614f290936de33a8ecc84c5761a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3a6dcb4522f542645e24f58e60f8623588303a6c86271b029d573b5c899b8cdb5a4528f9b95f1a3a8dd04ca62be4743d3d9967985449258a594e26d5b5060da
|
7
|
+
data.tar.gz: ac31ed89248e5adeab0b8ead925d030f9870b481d54ccb1def31f955994c4aba585fae1a37039a976ce73593d2124d1c5223d322ad9e3ee4a94222ef83cb8953
|
data/README.md
CHANGED
@@ -92,13 +92,17 @@ The argument must be a string or an eval-able expression:
|
|
92
92
|
require 'something'
|
93
93
|
require File.join('path', 'to', 'feature')
|
94
94
|
require File.expand_path('../otherthing', __FILE__) # __FILE__ works properly
|
95
|
+
```
|
95
96
|
|
96
|
-
|
97
|
-
|
97
|
+
Wrapped in outer loop, works fine:
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
# Good
|
98
101
|
Dir.glob('lib/**/*.rb').each { |path| require path }
|
102
|
+
Dir[File.dirname(__FILE__) + '/lib/*.rb'].each { |file| require file }
|
99
103
|
```
|
100
104
|
|
101
|
-
|
105
|
+
Required Files must exist:
|
102
106
|
|
103
107
|
```ruby
|
104
108
|
# Bad
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module MotionBlender
|
2
|
+
class Analyzer
|
3
|
+
class Evaluator
|
4
|
+
attr_reader :file, :ast, :stack
|
5
|
+
|
6
|
+
def initialize file, ast, stack = [], method = nil
|
7
|
+
@file = file
|
8
|
+
@ast = ast
|
9
|
+
@stack = stack
|
10
|
+
@method = method || @ast.children[1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse_args
|
14
|
+
extractor = create_extractor
|
15
|
+
extractor.instance_eval(@ast.loc.expression.source, @file)
|
16
|
+
extractor.instance_eval { @args }
|
17
|
+
rescue
|
18
|
+
if stack.any?
|
19
|
+
Evaluator.new(@file, stack.last, stack[0..-2], @method).parse_args
|
20
|
+
else
|
21
|
+
exp = @ast.loc.expression.source
|
22
|
+
raise LoadError, "failed to parse `#{exp}'"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_extractor
|
27
|
+
obj = Object.new
|
28
|
+
obj.define_singleton_method @method do |arg|
|
29
|
+
@args ||= []
|
30
|
+
@args << arg
|
31
|
+
end
|
32
|
+
obj
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'parser/current'
|
2
2
|
require 'pathname'
|
3
3
|
|
4
|
+
require 'motion_blender/analyzer/evaluator'
|
5
|
+
|
4
6
|
module MotionBlender
|
5
7
|
class Analyzer
|
6
8
|
class Parser
|
@@ -20,17 +22,19 @@ module MotionBlender
|
|
20
22
|
traverse ast
|
21
23
|
end
|
22
24
|
|
23
|
-
def traverse ast
|
25
|
+
def traverse ast, stack = []
|
24
26
|
if ast && ast.type == :send && require_command?(ast)
|
25
27
|
@last_trace = trace_for ast
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
Evaluator.new(@file, ast, stack).parse_args.each do |arg|
|
29
|
+
req = Require.new(@file, ast.children[1], arg)
|
30
|
+
req.file = resolve_path req.method, req.arg
|
31
|
+
req.trace = @last_trace
|
32
|
+
@requires << req
|
33
|
+
end
|
30
34
|
elsif ast
|
31
35
|
ast.children
|
32
36
|
.select { |node| node.is_a?(::Parser::AST::Node) }
|
33
|
-
.each { |node| traverse node }
|
37
|
+
.each { |node| traverse node, [*stack, ast] }
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
@@ -38,23 +42,10 @@ module MotionBlender
|
|
38
42
|
REQUIREMENT_TOKENS.include?(ast.children[1])
|
39
43
|
end
|
40
44
|
|
41
|
-
def parse_arg ast
|
42
|
-
arg_ast = ast.children[2]
|
43
|
-
arg = eval arg_ast.loc.expression.source, clean_binding, @file
|
44
|
-
Require.new(@file, ast.children[1], arg)
|
45
|
-
rescue
|
46
|
-
exp = ast.loc.expression.source
|
47
|
-
raise LoadError, "failed to parse `#{exp}'"
|
48
|
-
end
|
49
|
-
|
50
45
|
def trace_for ast
|
51
46
|
"#{@file}:#{ast.loc.line}:in `#{ast.children[1]}'"
|
52
47
|
end
|
53
48
|
|
54
|
-
def clean_binding
|
55
|
-
binding
|
56
|
-
end
|
57
|
-
|
58
49
|
def resolve_path method, arg
|
59
50
|
if %i(motion_require require_relative).include? method
|
60
51
|
arg = Pathname.new(@file).dirname.join(arg).to_s
|
data/motion_blender.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion_blender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kayhide
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -192,6 +192,20 @@ dependencies:
|
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: activesupport
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '4.2'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '4.2'
|
195
209
|
description: MotionBlender loads ruby gems for RubyMotion
|
196
210
|
email:
|
197
211
|
- kayhide@gmail.com
|
@@ -213,6 +227,7 @@ files:
|
|
213
227
|
- bin/setup
|
214
228
|
- lib/motion_blender.rb
|
215
229
|
- lib/motion_blender/analyzer.rb
|
230
|
+
- lib/motion_blender/analyzer/evaluator.rb
|
216
231
|
- lib/motion_blender/analyzer/hooker.rb
|
217
232
|
- lib/motion_blender/analyzer/parser.rb
|
218
233
|
- lib/motion_blender/rake_tasks.rb
|