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 +4 -4
- data/lib/motion_blender.rb +1 -0
- data/lib/motion_blender/analyzer.rb +18 -12
- data/lib/motion_blender/analyzer/parser.rb +5 -1
- data/lib/motion_blender/analyzer/require.rb +11 -1
- data/lib/motion_blender/callbacks.rb +19 -0
- data/lib/motion_blender/config.rb +4 -0
- data/lib/motion_blender/ext/raketime.rb +0 -1
- data/lib/motion_blender/rake_tasks.rb +14 -19
- data/lib/motion_blender/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 592c1d9b0693a9bb79980b54a3ab373366f16fce
|
4
|
+
data.tar.gz: 997a92be2a98a1556d973d2d5b2581862ab6da90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dbd81dbda77d22774c9b081af0185b4a9adb9a682f6a8155fffa9594f0a127ec6e83684a07e337d977f728da0287b05ed588e0597b2332f1986d0ac6fb9b43d
|
7
|
+
data.tar.gz: 0d29f833f10aa9c79dc15d693e2b08ef1f090301b8720a1abb3196d24b8506d5c58fd39d93e48db36d8a061c344115fc6400531dfcd16684a572d63d106befcf
|
data/lib/motion_blender.rb
CHANGED
@@ -14,29 +14,35 @@ module MotionBlender
|
|
14
14
|
@dependencies = {}
|
15
15
|
end
|
16
16
|
|
17
|
-
def analyze file, backtrace = []
|
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 '
|
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
|
@@ -8,28 +8,23 @@ module MotionBlender
|
|
8
8
|
MotionBlender.config
|
9
9
|
end
|
10
10
|
|
11
|
-
def analyze
|
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
|
-
|
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
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
44
|
-
|
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
|
|
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.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-
|
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
|