motion_blender 0.2.6 → 0.3.0
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/graph_maker.rb +90 -0
- data/lib/motion_blender/rake_tasks.rb +20 -0
- data/lib/motion_blender/version.rb +1 -1
- data/motion_blender.gemspec +2 -0
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5702d8540efa7410bdfbdeb2310dabba7669002b
|
4
|
+
data.tar.gz: 65874dc4ed3a275906aeee85b8200ce82f5ad254
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 23937538ee2436fdc637771e9f51f4f087f841c7d859c68fc7efbd65863d1f8da363484a9131823b7f1f2bdd3c32a65e3052ec6c30f6fcae93c177c3493b4fd3
|
7
|
+
data.tar.gz: fb2e5bab0da21a3f99070c8e280994cea6e75b53373d3d232c61aaa07b8440d50765f64f30211f8fadbf642dea5005a8e9aca86e122809c577449510f9346a54
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'graphviz'
|
2
|
+
require 'colorable'
|
3
|
+
require 'zlib'
|
4
|
+
|
5
|
+
module MotionBlender
|
6
|
+
class GraphMaker
|
7
|
+
attr_reader :dependencies
|
8
|
+
attr_accessor :title, :filter, :layout, :output
|
9
|
+
|
10
|
+
def initialize dependencies, opts = {}
|
11
|
+
@dependencies = dependencies
|
12
|
+
@title = opts[:title]
|
13
|
+
@filter = opts[:filter]
|
14
|
+
@layout = opts[:layout].try(:to_sym) || :sfdp
|
15
|
+
@output = opts[:output] || 'graph.pdf'
|
16
|
+
end
|
17
|
+
|
18
|
+
def build
|
19
|
+
g = GraphViz.new(@title || 'Graph', type: :digraph, use: @layout)
|
20
|
+
label = [@title, (@filter && "/#{@filter}/")].compact.join(' ')
|
21
|
+
g[:label] = label if label.present?
|
22
|
+
g[:overlap] = false
|
23
|
+
|
24
|
+
deps =
|
25
|
+
@dependencies
|
26
|
+
.select { |k, _| acceptable? k }
|
27
|
+
.map { |k, v| [k, v.select { |f| acceptable? f }] }
|
28
|
+
deps.map { |k, v| [k, *v] }.flatten.uniq.reverse_each do |f|
|
29
|
+
g.add_node f, node_options_for(f)
|
30
|
+
end
|
31
|
+
deps.each do |k, v|
|
32
|
+
v.each { |f| g.add_edge k, f, edge_options_for(k, f) }
|
33
|
+
end
|
34
|
+
|
35
|
+
g.output(output_format => @output)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def output_format
|
41
|
+
File.extname(@output)[1..-1].to_sym
|
42
|
+
end
|
43
|
+
|
44
|
+
def acceptable? file
|
45
|
+
shorten(file) =~ filter_pattern
|
46
|
+
end
|
47
|
+
|
48
|
+
def filter_pattern
|
49
|
+
@filter_pattern ||= /#{@filter}/
|
50
|
+
end
|
51
|
+
|
52
|
+
def shorten_pattern
|
53
|
+
@shorten_pattern ||=
|
54
|
+
begin
|
55
|
+
paths = MotionBlender.config.motion_dirs + $LOAD_PATH
|
56
|
+
patterns = paths.map { |p| Regexp.escape File.join(p, '') }
|
57
|
+
Regexp.new(patterns.join('|'))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def shorten file
|
62
|
+
file.sub(shorten_pattern, '')
|
63
|
+
end
|
64
|
+
|
65
|
+
def shortened file
|
66
|
+
file[shorten_pattern]
|
67
|
+
end
|
68
|
+
|
69
|
+
def color_for file
|
70
|
+
h = Zlib.crc32(shortened(file)) % 360
|
71
|
+
Colorable::Color.new(Colorable::HSB.new(h, 90, 100))
|
72
|
+
end
|
73
|
+
|
74
|
+
def node_options_for file
|
75
|
+
{
|
76
|
+
label: shorten(file).pathmap('%X'),
|
77
|
+
href: file,
|
78
|
+
color: color_for(file).hex,
|
79
|
+
fillcolor: color_for(file).hex + '99',
|
80
|
+
style: :filled
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
def edge_options_for file, _
|
85
|
+
{
|
86
|
+
color: (color_for(file) * 'Gray'.to_color).hex + '66'
|
87
|
+
}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -2,6 +2,7 @@ require 'rake'
|
|
2
2
|
require 'yaml'
|
3
3
|
require 'motion_blender/config'
|
4
4
|
require 'motion_blender/analyzer'
|
5
|
+
require 'motion_blender/graph_maker'
|
5
6
|
|
6
7
|
module MotionBlender
|
7
8
|
class RakeTasks
|
@@ -33,6 +34,14 @@ module MotionBlender
|
|
33
34
|
analyzer = analyze
|
34
35
|
YAML.dump %w(files dependencies).map { |k| [k, analyzer.send(k)] }.to_h
|
35
36
|
end
|
37
|
+
|
38
|
+
def graph options = {}
|
39
|
+
analyzer = analyze
|
40
|
+
graph_maker = GraphMaker.new analyzer.dependencies, options
|
41
|
+
graph_maker.title = Motion::Project::App.config.name
|
42
|
+
graph_maker.build
|
43
|
+
Motion::Project::App.info('Create', graph_maker.output)
|
44
|
+
end
|
36
45
|
end
|
37
46
|
end
|
38
47
|
|
@@ -48,6 +57,17 @@ namespace :motion_blender do
|
|
48
57
|
task :dump do
|
49
58
|
puts MotionBlender::RakeTasks.new.dump
|
50
59
|
end
|
60
|
+
|
61
|
+
options = [
|
62
|
+
'layout=dot',
|
63
|
+
'filter="^(some|any)_pattern"',
|
64
|
+
'output=graph.pdf'
|
65
|
+
].join(', ')
|
66
|
+
desc "Create graph of dependencies (options: #{options})"
|
67
|
+
task :graph do
|
68
|
+
options = ENV.to_h.slice(*%w(layout filter output)).symbolize_keys
|
69
|
+
MotionBlender::RakeTasks.new.graph options
|
70
|
+
end
|
51
71
|
end
|
52
72
|
|
53
73
|
%w(build:simulator build:device).each do |t|
|
data/motion_blender.gemspec
CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_runtime_dependency 'parser'
|
23
23
|
spec.add_runtime_dependency 'activesupport', '~> 4.2'
|
24
|
+
spec.add_runtime_dependency 'colorable', '~> 0.2'
|
25
|
+
spec.add_runtime_dependency 'ruby-graphviz', '~> 1.2'
|
24
26
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
25
27
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
28
|
spec.add_development_dependency 'rspec'
|
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.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kayhide
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: colorable
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ruby-graphviz
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.2'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: bundler
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,6 +265,7 @@ files:
|
|
237
265
|
- lib/motion_blender/config.rb
|
238
266
|
- lib/motion_blender/ext.rb
|
239
267
|
- lib/motion_blender/ext/raketime.rb
|
268
|
+
- lib/motion_blender/graph_maker.rb
|
240
269
|
- lib/motion_blender/rake_tasks.rb
|
241
270
|
- lib/motion_blender/version.rb
|
242
271
|
- motion/motion_blender/ext.rb
|