motion_blender 0.1.4 → 0.1.5

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: 4453bab74e26706478046e31503f168eb4f7ea9a
4
- data.tar.gz: 50a4811dd59a01f165228252ee61ebccb4131f20
3
+ metadata.gz: c76d8d1b39159de5422acb1a2483f60176b3a245
4
+ data.tar.gz: 247ea6963b4eb853c80c4660dab0d8e408c69dd0
5
5
  SHA512:
6
- metadata.gz: d6d3128e4e23934d58f79e0e11ebf371f283255b531e3083ad91158f4cbc854e381ab2a0a112ac2165961f207d30651f538024ca841a45dd41663aa41017bf9c
7
- data.tar.gz: 2ef7abbf5bd66df5c2b26800fa811b189c4cf29ef320dd7406307c7ca116803e6ab83855a153be00cda5933941c857ce7b642998e59804345843472af1c712d3
6
+ metadata.gz: e8f4329c0066cf08dae85cd5fb4ead5e74588213b829241da88bc42dad9fe4b69dbca2bfb1c59ffc4da9db48dd994a5779eb5f8794b5b051b39654adc9c29c19
7
+ data.tar.gz: 21c6f104b72287e9c5ae393f1c61d738475eaea0e7ea06ec90f3ddfbe250e7282d86c3c81d19a7c1fb92b37577df86c9adaa9be6db91a7ad2224673d4a7ae2d2
data/README.md CHANGED
@@ -58,7 +58,7 @@ Add RubyMotion-compatible gem into your project (may be an application or a gem)
58
58
  And just call `require` from anywhare:
59
59
 
60
60
  ```ruby
61
- require 'rubymotion_conpatible_gem'
61
+ require 'rubymotion_compatible_gem'
62
62
 
63
63
  # your code goes on...
64
64
  ```
@@ -68,18 +68,19 @@ Writing a gem (*motion_hoge*), this idiom is handy:
68
68
  ```ruby
69
69
  # in lib/motion_hoge.rb
70
70
  require 'motion_blender'
71
- MotionBlender.add __FILE__
71
+ MotionBlender.incept
72
72
 
73
+ require 'motion_hoge/version'
73
74
  require 'motion_hoge/simsim'
74
75
  require 'motion_hoge/mishmish'
75
- require 'motion_hoge/version'
76
76
  # ...
77
77
  ```
78
78
 
79
- This makes an app or a gem which depends on *motion_hoge* to load functionalities properly, even if it is compile-time.
79
+ `MotionBlender.incept` adds this file to RubyMotion's `app.files` and targets for analyzing.
80
+ To require this *motion_hoge* makes an application or a gem to load functionalities properly.
80
81
 
81
- As a default, `motion_blender` lib files themselves are excluded for analyzing.
82
- So don't worry about requiring `motion_blender` in compile target files.
82
+ `motion_blender` itself is excepted for analyzing,
83
+ so don't worry to require `motion_blender` in *incept*-ed files.
83
84
 
84
85
  ### Limitation
85
86
 
@@ -26,7 +26,7 @@ module MotionBlender
26
26
  else
27
27
  Pathname.new(arg)
28
28
  end
29
- dirs = (uses_load_path? && path.relative?) ? $LOAD_PATH : ['']
29
+ dirs = path.relative? && load_path || ['']
30
30
  exts = path.extname.empty? ? ['', '.rb'] : ['']
31
31
  Enumerator.new do |y|
32
32
  dirs.product(exts).each do |dir, ext|
@@ -42,6 +42,12 @@ module MotionBlender
42
42
  def uses_load_path?
43
43
  method == :require
44
44
  end
45
+
46
+ def load_path
47
+ if uses_load_path?
48
+ $LOAD_PATH
49
+ end
50
+ end
45
51
  end
46
52
  end
47
53
  end
@@ -14,10 +14,11 @@ module MotionBlender
14
14
  @dependencies = {}
15
15
  end
16
16
 
17
- def analyze file, backtrace = []
17
+ def analyze file, backtrace = [], &proc
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
21
22
 
22
23
  parser = Parser.new file
23
24
  parser.exclude_files = @exclude_files
@@ -33,7 +34,7 @@ module MotionBlender
33
34
  @dependencies[file] = requires.map(&:file)
34
35
  @files = [*@files, file, *@dependencies[file]].uniq
35
36
  requires.each do |req|
36
- analyze req.file, [req.trace, *backtrace]
37
+ analyze req.file, [req.trace, *backtrace], &proc
37
38
  end
38
39
  end
39
40
  end
@@ -0,0 +1,17 @@
1
+ module MotionBlender
2
+ class Config
3
+ attr_reader :incepted_files, :excepted_files, :motion_dirs
4
+
5
+ def initialize
6
+ @incepted_files = []
7
+ @excepted_files = []
8
+ @motion_dirs = []
9
+ end
10
+ end
11
+
12
+ module_function
13
+
14
+ def config
15
+ @config ||= Config.new
16
+ end
17
+ end
@@ -0,0 +1,56 @@
1
+ require 'motion_blender/config'
2
+
3
+ module MotionBlender
4
+ module Ext
5
+ module Raketime
6
+ def incept file = nil
7
+ file ||= caller.first.split(':', 2).first
8
+ config.incepted_files << file
9
+ end
10
+
11
+ def except file = nil
12
+ file ||= caller.first.split(':', 2).first
13
+ config.excepted_files << file
14
+ end
15
+
16
+ def use_motion_dir dir = nil
17
+ return unless motion?
18
+
19
+ unless dir
20
+ file = caller.first.split(':', 2).first
21
+ Pathname.new(file).dirname.ascend do |path|
22
+ if $LOAD_PATH.include?(path.to_s)
23
+ dir = path.dirname.join('motion').to_s
24
+ break
25
+ end
26
+ end
27
+ end
28
+ unless config.motion_dirs.include? dir
29
+ config.motion_dirs << dir
30
+ $LOAD_PATH.unshift dir
31
+ end
32
+ end
33
+
34
+ def motion?
35
+ !!(defined?(Motion) && defined?(Motion::Project))
36
+ end
37
+
38
+ def raketime?
39
+ true
40
+ end
41
+
42
+ def runtime?
43
+ false
44
+ end
45
+
46
+ def raketime
47
+ yield if motion?
48
+ end
49
+
50
+ def runtime
51
+ end
52
+ end
53
+ end
54
+
55
+ extend Ext::Raketime
56
+ end
@@ -0,0 +1,12 @@
1
+ Module.new do
2
+ def require _
3
+ end
4
+
5
+ def require_relative _
6
+ end
7
+
8
+ def motion_require _
9
+ end
10
+
11
+ Object.send :include, self
12
+ end
@@ -0,0 +1,35 @@
1
+ module MotionBlender
2
+ module Ext
3
+ module Runtime
4
+ def incept _ = nil
5
+ end
6
+
7
+ def except _ = nil
8
+ end
9
+
10
+ def use_motion_dir _ = nil
11
+ end
12
+
13
+ def motion?
14
+ true
15
+ end
16
+
17
+ def raketime?
18
+ false
19
+ end
20
+
21
+ def runtime?
22
+ true
23
+ end
24
+
25
+ def raketime &_
26
+ end
27
+
28
+ def runtime &proc
29
+ proc.call
30
+ end
31
+ end
32
+ end
33
+
34
+ extend Ext::Runtime
35
+ end
@@ -0,0 +1,6 @@
1
+ MotionBlender.incept
2
+
3
+ MotionBlender.runtime do
4
+ require 'motion_blender/ext/runtime'
5
+ require 'motion_blender/ext/require_suppressor'
6
+ end
@@ -1,9 +1,49 @@
1
1
  require 'rake'
2
- require 'motion_blender'
2
+ require 'motion_blender/config'
3
+ require 'motion_blender/analyzer'
4
+
5
+ module MotionBlender
6
+ class RakeTasks
7
+ def config
8
+ MotionBlender.config
9
+ end
10
+
11
+ def analyze &proc
12
+ Motion::Project::App.setup do |app|
13
+ 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
21
+ end
22
+ end
23
+ end
24
+
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
33
+ end
34
+
35
+ def builtin_features
36
+ %w(bigdecimal rational date thread)
37
+ end
38
+ end
39
+ end
3
40
 
4
41
  namespace :motion_blender do
5
42
  task :analyze do
6
- MotionBlender.analyze
43
+ tasks = MotionBlender::RakeTasks.new
44
+ tasks.analyze do |file|
45
+ Motion::Project::App.info('Analyze', file)
46
+ end
7
47
  end
8
48
  end
9
49
 
@@ -1,3 +1,3 @@
1
1
  module MotionBlender
2
- VERSION = '0.1.4'
2
+ VERSION = '0.1.5'
3
3
  end
@@ -1,68 +1,6 @@
1
1
  require 'motion_blender/version'
2
- require 'motion_blender/analyzer'
3
2
  require 'motion_blender/rake_tasks'
3
+ require 'motion_blender/ext/raketime'
4
+ require 'motion_blender/ext'
4
5
 
5
- module MotionBlender
6
- module_function
7
-
8
- def analyze
9
- Motion::Project::App.setup do |app|
10
- analyzer = Analyzer.new
11
- analyzer.exclude_files += Dir[File.expand_path('../**/*.rb', __FILE__)]
12
- analyzer.exclude_files += builtin_features
13
- app.files.flatten.each do |file|
14
- analyzer.analyze file
15
- end
16
-
17
- if analyzer.files.any?
18
- app.exclude_from_detect_dependencies += [ext_file, *analyzer.files]
19
- app.files = [ext_file, *(analyzer.files - app.files), *app.files]
20
- app.files_dependencies analyzer.dependencies
21
- end
22
- end
23
- end
24
-
25
- def add file = nil
26
- return unless motion?
27
-
28
- file ||= caller.first.split(':', 2).first
29
- Motion::Project::App.setup do |app|
30
- app.files.unshift file
31
- end
32
- end
33
-
34
- def use_motion_dir dir = nil
35
- return unless motion?
36
-
37
- unless dir
38
- file = caller.first.split(':', 2).first
39
- Pathname.new(file).dirname.ascend do |path|
40
- if $LOAD_PATH.include?(path.to_s)
41
- dir = path.dirname.join('motion').to_s
42
- break
43
- end
44
- end
45
- end
46
- $LOAD_PATH.delete dir
47
- $LOAD_PATH.unshift dir
48
- end
49
-
50
- def motion?
51
- defined?(Motion::Project::Config)
52
- end
53
-
54
- def raketime &proc
55
- proc.call
56
- end
57
-
58
- def runtime &_
59
- end
60
-
61
- def ext_file
62
- File.expand_path('../../motion/ext.rb', __FILE__)
63
- end
64
-
65
- def builtin_features
66
- %w(bigdecimal rational date thread)
67
- end
68
- end
6
+ MotionBlender.except
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
4
+ version: 0.1.5
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-15 00:00:00.000000000 Z
11
+ date: 2015-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -231,9 +231,13 @@ 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/config.rb
235
+ - lib/motion_blender/ext.rb
236
+ - lib/motion_blender/ext/raketime.rb
237
+ - lib/motion_blender/ext/require_suppressor.rb
238
+ - lib/motion_blender/ext/runtime.rb
234
239
  - lib/motion_blender/rake_tasks.rb
235
240
  - lib/motion_blender/version.rb
236
- - motion/ext.rb
237
241
  - motion_blender.gemspec
238
242
  homepage: https://github.com/kayhide/motion_blender
239
243
  licenses:
data/motion/ext.rb DELETED
@@ -1,33 +0,0 @@
1
- Module.new do
2
- def require _
3
- end
4
-
5
- def require_relative _
6
- end
7
-
8
- def motion_require _
9
- end
10
-
11
- Object.send :include, self
12
- end
13
-
14
- module MotionBlender
15
- module_function
16
-
17
- def add _ = nil
18
- end
19
-
20
- def use_motion_dir _ = nil
21
- end
22
-
23
- def motion?
24
- true
25
- end
26
-
27
- def raketime &_
28
- end
29
-
30
- def runtime &proc
31
- proc.call
32
- end
33
- end