motion_blender 0.2.0 → 0.2.1

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: 79e7438cc7769076e46b9ad288b4f54fa75c53d5
4
- data.tar.gz: f3e27ca0d88e10e203e4144ba61dc89a5aeffc58
3
+ metadata.gz: 7121d843e2bcddd5273bebf2813494d561a19bcb
4
+ data.tar.gz: c73a06ece8cc6fbd6abd0c4ea66a0d5042fd6b89
5
5
  SHA512:
6
- metadata.gz: 3578fd948e8db4018cf866376c90aa1ad0bbf23533d85591f75711e4862e8492d741dd42265c9c00dc8982bf0f31db7ca37b2ba0e40a520de528a88cfa9c6aaf
7
- data.tar.gz: 0099a52ca69ddfbd9b3c24aadf2bb4760eb02cfd2b4f07550e212bad14f2bbbacb838812dfb05e5480bc07fd09f8a7e74c70fa48245d8756615965c5e7a4d6e9
6
+ metadata.gz: 15e84edf8cc830f2ba39332cca4c690e883a352c2bd4437ef567274ce55ec33ba2691262aca1dbaba758c11f47cf375a10fcb96171b4ea18cf6e236fca355db3
7
+ data.tar.gz: e7fac9a8ea4c72eba203912e77ee78f51b3bf4346cd4a3767ee059a2439984fbd0a0bec74919cc8d5215f3e1c7f566b7de6d4991cc641b3eefb6c769acd798de
@@ -0,0 +1,46 @@
1
+ module MotionBlender
2
+ class Analyzer
3
+ class Cache
4
+ def dir
5
+ MotionBlender.config.cache_dir
6
+ end
7
+
8
+ def fetch file
9
+ return yield unless dir
10
+ file = Pathname.new(file)
11
+ cache = cache_file_for(file)
12
+ if valid_cache?(file, cache)
13
+ read cache
14
+ else
15
+ content = yield
16
+ write cache, content
17
+ end
18
+ rescue YAML::Exception
19
+ if cache.exist?
20
+ cache.delete
21
+ retry
22
+ end
23
+ raise
24
+ end
25
+
26
+ def read file
27
+ YAML.load_file file
28
+ end
29
+
30
+ def write file, content
31
+ file.dirname.mkpath
32
+ file.write YAML.dump(content)
33
+ content
34
+ end
35
+
36
+ def valid_cache? file, cache
37
+ cache.file? && file.mtime < cache.mtime
38
+ end
39
+
40
+ def cache_file_for file
41
+ file = file.relative_path_from(Pathname.new('/')) if file.absolute?
42
+ dir.join(file.to_s + '.yml')
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,15 +1,17 @@
1
1
  require 'set'
2
2
  require 'pathname'
3
3
  require 'motion_blender/analyzer/parser'
4
+ require 'motion_blender/analyzer/cache'
4
5
 
5
6
  module MotionBlender
6
7
  class Analyzer
7
- attr_reader :files, :dependencies
8
+ attr_reader :files, :dependencies, :cache
8
9
 
9
10
  def initialize
10
11
  @analyzed_files = Set.new
11
12
  @files = []
12
13
  @dependencies = {}
14
+ @cache = Cache.new
13
15
  end
14
16
 
15
17
  def analyze file, backtrace = []
@@ -17,7 +19,10 @@ module MotionBlender
17
19
  return if @analyzed_files.include? file
18
20
  @analyzed_files << file
19
21
 
20
- requires = parse file, backtrace
22
+ requires = @cache.fetch(file) do
23
+ parse file, backtrace
24
+ end
25
+
21
26
  if requires.any?
22
27
  @dependencies[file] = requires.map(&:file)
23
28
  @files = [*@files, file, *@dependencies[file]].uniq
@@ -4,12 +4,14 @@ module MotionBlender
4
4
  class Config
5
5
  attr_reader :incepted_files, :excepted_files, :motion_dirs
6
6
  attr_reader :builtin_features
7
+ attr_accessor :cache_dir
7
8
 
8
9
  def initialize
9
10
  @incepted_files = []
10
11
  @excepted_files = Set.new
11
12
  @motion_dirs = []
12
13
  @builtin_features = Set.new %w(bigdecimal rational date thread)
14
+ @cache_dir = Pathname.new('build/analyze')
13
15
  end
14
16
  end
15
17
 
@@ -1,3 +1,3 @@
1
1
  module MotionBlender
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
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.2.0
4
+ version: 0.2.1
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-25 00:00:00.000000000 Z
11
+ date: 2015-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -227,6 +227,7 @@ files:
227
227
  - bin/setup
228
228
  - lib/motion_blender.rb
229
229
  - lib/motion_blender/analyzer.rb
230
+ - lib/motion_blender/analyzer/cache.rb
230
231
  - lib/motion_blender/analyzer/evaluator.rb
231
232
  - lib/motion_blender/analyzer/original_finder.rb
232
233
  - lib/motion_blender/analyzer/parser.rb