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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f62586a884e6abf4b6c8ae93a1d655764f28ad8
4
- data.tar.gz: 4e7a196e3652339c6dc76a35a0b5fd8b78d7b4e7
3
+ metadata.gz: be3d49bb1ba40b2cde3d4fa5bea800c1764ae21f
4
+ data.tar.gz: c09c5e5c2d743614f290936de33a8ecc84c5761a
5
5
  SHA512:
6
- metadata.gz: dcd57b42e5243744ae42c1f968c22c6b507d9a4240e5011a5e66bd19e20638c6768158c09c6afa09482f7680b38ed6d04739e97be15c5c4311b87c3c5c0cc9d7
7
- data.tar.gz: 1cb179e24b2989a47e0c9b27dbc14f4e32895e6b52dcd33a4c1aee37b8acafa95c6d878c70a3c2b225192f330b3b84e26a3f43cd88cfa6b2f149088bb7dbe873
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
- # Bad
97
- # analyzer does not eval outside of require method
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
- And required files must exist:
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
- req = parse_arg ast
27
- req.file = resolve_path req.method, req.arg
28
- req.trace = @last_trace
29
- @requires << req
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
@@ -1,3 +1,3 @@
1
1
  module MotionBlender
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'guard-rubocop'
33
33
  spec.add_development_dependency 'simplecov'
34
34
  spec.add_development_dependency 'simplecov-gem-profile'
35
+ spec.add_development_dependency 'activesupport', '~> 4.2'
35
36
  end
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.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-07 00:00:00.000000000 Z
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