motion_blender 0.2.0 → 0.2.1

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