motion_blender 0.1.5 → 0.1.6

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: 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