motion_blender 0.1.5 → 0.1.6

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: c76d8d1b39159de5422acb1a2483f60176b3a245
4
- data.tar.gz: 247ea6963b4eb853c80c4660dab0d8e408c69dd0
3
+ metadata.gz: 592c1d9b0693a9bb79980b54a3ab373366f16fce
4
+ data.tar.gz: 997a92be2a98a1556d973d2d5b2581862ab6da90
5
5
  SHA512:
6
- metadata.gz: e8f4329c0066cf08dae85cd5fb4ead5e74588213b829241da88bc42dad9fe4b69dbca2bfb1c59ffc4da9db48dd994a5779eb5f8794b5b051b39654adc9c29c19
7
- data.tar.gz: 21c6f104b72287e9c5ae393f1c61d738475eaea0e7ea06ec90f3ddfbe250e7282d86c3c81d19a7c1fb92b37577df86c9adaa9be6db91a7ad2224673d4a7ae2d2
6
+ metadata.gz: 5dbd81dbda77d22774c9b081af0185b4a9adb9a682f6a8155fffa9594f0a127ec6e83684a07e337d977f728da0287b05ed588e0597b2332f1986d0ac6fb9b43d
7
+ data.tar.gz: 0d29f833f10aa9c79dc15d693e2b08ef1f090301b8720a1abb3196d24b8506d5c58fd39d93e48db36d8a061c344115fc6400531dfcd16684a572d63d106befcf
@@ -1,5 +1,6 @@
1
1
  require 'motion_blender/version'
2
2
  require 'motion_blender/rake_tasks'
3
+ require 'motion_blender/callbacks'
3
4
  require 'motion_blender/ext/raketime'
4
5
  require 'motion_blender/ext'
5
6
 
@@ -14,29 +14,35 @@ module MotionBlender
14
14
  @dependencies = {}
15
15
  end
16
16
 
17
- def analyze file, backtrace = [], &proc
17
+ def analyze file, backtrace = []
18
18
  return if @exclude_files.include? file
19
19
  return if @analyzed_files.include? file
20
20
  @analyzed_files << file
21
- proc.call file if proc
22
21
 
22
+ requires = parse file, backtrace
23
+ if requires.any?
24
+ @dependencies[file] = requires.map(&:file)
25
+ @files = [*@files, file, *@dependencies[file]].uniq
26
+ requires.each do |req|
27
+ req.run_callbacks :require do
28
+ analyze req.file, [req.trace, *backtrace]
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def parse file, backtrace
23
35
  parser = Parser.new file
24
36
  parser.exclude_files = @exclude_files
25
37
  begin
26
- parser.parse
38
+ parser.run_callbacks :parse do
39
+ parser.parse
40
+ end
27
41
  rescue LoadError => err
28
42
  err.set_backtrace [parser.last_trace, *backtrace].compact
29
43
  raise err
30
44
  end
31
-
32
- requires = parser.requires
33
- if requires.any?
34
- @dependencies[file] = requires.map(&:file)
35
- @files = [*@files, file, *@dependencies[file]].uniq
36
- requires.each do |req|
37
- analyze req.file, [req.trace, *backtrace], &proc
38
- end
39
- end
45
+ parser.requires
40
46
  end
41
47
  end
42
48
  end
@@ -1,5 +1,6 @@
1
1
  require 'parser/current'
2
- require 'pathname'
2
+ require 'active_support'
3
+ require 'active_support/callbacks'
3
4
 
4
5
  require 'motion_blender/analyzer/evaluator'
5
6
  require 'motion_blender/analyzer/require'
@@ -7,6 +8,9 @@ require 'motion_blender/analyzer/require'
7
8
  module MotionBlender
8
9
  class Analyzer
9
10
  class Parser
11
+ include ActiveSupport::Callbacks
12
+ define_callbacks :parse
13
+
10
14
  REQUIREMENT_TOKENS = %i(motion_require require_relative require)
11
15
 
12
16
  attr_reader :file, :requires, :last_trace
@@ -1,6 +1,12 @@
1
+ require 'active_support'
2
+ require 'active_support/callbacks'
3
+
1
4
  module MotionBlender
2
5
  class Analyzer
3
6
  class Require
7
+ include ActiveSupport::Callbacks
8
+ define_callbacks :require
9
+
4
10
  attr_accessor :loader, :method, :arg, :trace
5
11
 
6
12
  def initialize loader, method, arg
@@ -45,9 +51,13 @@ module MotionBlender
45
51
 
46
52
  def load_path
47
53
  if uses_load_path?
48
- $LOAD_PATH
54
+ MotionBlender.config.motion_dirs + $LOAD_PATH
49
55
  end
50
56
  end
57
+
58
+ def match? arg_or_file
59
+ arg == arg_or_file || file == arg_or_file
60
+ end
51
61
  end
52
62
  end
53
63
  end
@@ -0,0 +1,19 @@
1
+ require 'motion_blender/analyzer'
2
+
3
+ module MotionBlender
4
+ module Callbacks
5
+ def on_parse file = nil, &proc
6
+ filters = {}
7
+ filters[:if] = -> { self.file == file } if file
8
+ Analyzer::Parser.set_callback(:parse, filters, &proc)
9
+ end
10
+
11
+ def on_require file = nil, &proc
12
+ filters = {}
13
+ filters[:if] = -> { match? file } if file
14
+ Analyzer::Require.set_callback(:require, filters, &proc)
15
+ end
16
+ end
17
+
18
+ extend Callbacks
19
+ end
@@ -14,4 +14,8 @@ module MotionBlender
14
14
  def config
15
15
  @config ||= Config.new
16
16
  end
17
+
18
+ def reset_config
19
+ @config = nil
20
+ end
17
21
  end
@@ -27,7 +27,6 @@ module MotionBlender
27
27
  end
28
28
  unless config.motion_dirs.include? dir
29
29
  config.motion_dirs << dir
30
- $LOAD_PATH.unshift dir
31
30
  end
32
31
  end
33
32
 
@@ -8,28 +8,23 @@ module MotionBlender
8
8
  MotionBlender.config
9
9
  end
10
10
 
11
- def analyze &proc
11
+ def analyze
12
+ analyzer = Analyzer.new
13
+ analyzer.exclude_files += builtin_features + config.excepted_files
12
14
  Motion::Project::App.setup do |app|
13
15
  files = config.incepted_files + app.files
14
- analyzer = analyze_files files, &proc
15
-
16
- if analyzer.files.any?
17
- new_files = analyzer.files - app.files
18
- app.exclude_from_detect_dependencies += new_files
19
- app.files = new_files + app.files
20
- app.files_dependencies analyzer.dependencies
16
+ files.flatten.each do |file|
17
+ analyzer.analyze file
21
18
  end
19
+ apply analyzer, app if analyzer.files.any?
22
20
  end
23
21
  end
24
22
 
25
- def analyze_files files, &proc
26
- analyzer = Analyzer.new
27
- analyzer.exclude_files += [*builtin_features, *config.excepted_files]
28
-
29
- files.flatten.each do |file|
30
- analyzer.analyze file, &proc
31
- end
32
- analyzer
23
+ def apply analyzer, app
24
+ new_files = analyzer.files - app.files
25
+ app.exclude_from_detect_dependencies += new_files
26
+ app.files = new_files + app.files
27
+ app.files_dependencies analyzer.dependencies
33
28
  end
34
29
 
35
30
  def builtin_features
@@ -40,10 +35,10 @@ end
40
35
 
41
36
  namespace :motion_blender do
42
37
  task :analyze do
43
- tasks = MotionBlender::RakeTasks.new
44
- tasks.analyze do |file|
45
- Motion::Project::App.info('Analyze', file)
38
+ MotionBlender.on_parse do |parser|
39
+ Motion::Project::App.info('Analyze', parser.file)
46
40
  end
41
+ MotionBlender::RakeTasks.new.analyze
47
42
  end
48
43
  end
49
44
 
@@ -1,3 +1,3 @@
1
1
  module MotionBlender
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  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.5
4
+ version: 0.1.6
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-18 00:00:00.000000000 Z
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -231,6 +231,7 @@ files:
231
231
  - lib/motion_blender/analyzer/hooker.rb
232
232
  - lib/motion_blender/analyzer/parser.rb
233
233
  - lib/motion_blender/analyzer/require.rb
234
+ - lib/motion_blender/callbacks.rb
234
235
  - lib/motion_blender/config.rb
235
236
  - lib/motion_blender/ext.rb
236
237
  - lib/motion_blender/ext/raketime.rb