motion-require 0.0.2 → 0.0.3

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.
data/Rakefile CHANGED
@@ -1 +1,4 @@
1
- require "bundler/gem_tasks"
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new('spec')
@@ -0,0 +1,35 @@
1
+ # Hack until HipByte accepts https://github.com/HipByte/RubyMotion/pull/82
2
+ # Stolen from BubbleWrap
3
+ module Motion
4
+ module Require
5
+ module Ext
6
+ module ConfigTask
7
+
8
+ def self.included(base)
9
+ base.class_eval do
10
+ alias_method :files_dependencies_without_require, :files_dependencies
11
+ alias_method :files_dependencies, :files_dependencies_with_require
12
+ end
13
+ end
14
+
15
+ def files_dependencies_with_require(deps_hash)
16
+ res_path = lambda do |x|
17
+ path = /^\.?\//.match(x) ? x : File.join('.', x)
18
+ unless @files.flatten.include?(path)
19
+ Motion::Project::App.send(:fail, "Can't resolve dependency `#{x}'")
20
+ end
21
+ path
22
+ end
23
+ deps_hash.each do |path, deps|
24
+ deps = [deps] unless deps.is_a?(Array)
25
+ @dependencies[res_path.call(path)] = deps.map(&res_path)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ if Motion.const_defined?("Project")
34
+ Motion::Project::Config.send(:include, Motion::Require::Ext::ConfigTask)
35
+ end
@@ -1,5 +1,5 @@
1
1
  module Motion
2
2
  module Require
3
- VERSION="0.0.2"
3
+ VERSION="0.0.3"
4
4
  end
5
5
  end
@@ -1,41 +1,11 @@
1
1
  require 'ripper'
2
-
3
- # Hack until HipByte accepts https://github.com/HipByte/RubyMotion/pull/82
4
- # Stolen from BubbleWrap
5
- module Motion::Require
6
- module Ext
7
- module ConfigTask
8
-
9
- def self.included(base)
10
- base.class_eval do
11
- alias_method :files_dependencies_without_require, :files_dependencies
12
- alias_method :files_dependencies, :files_dependencies_with_require
13
- end
14
- end
15
-
16
- def files_dependencies_with_require(deps_hash)
17
- res_path = lambda do |x|
18
- path = /^\.?\//.match(x) ? x : File.join('.', x)
19
- unless @files.flatten.include?(path)
20
- Motion::Project::App.send(:fail, "Can't resolve dependency `#{x}'")
21
- end
22
- path
23
- end
24
- deps_hash.each do |path, deps|
25
- deps = [deps] unless deps.is_a?(Array)
26
- @dependencies[res_path.call(path)] = deps.map(&res_path)
27
- end
28
- end
29
- end
30
- end
31
- end
32
-
33
- Motion::Project::Config.send(:include, Motion::Require::Ext::ConfigTask)
2
+ require 'pathname'
3
+ require_relative 'motion-require/ext'
34
4
 
35
5
  module Motion
36
6
  module Require
37
7
  class RequireBuilder < Ripper::SexpBuilder
38
- REQUIREMENT_TOKEN = "motion_require"
8
+ REQUIREMENT_TOKENS = %w[motion_require require_relative]
39
9
 
40
10
  attr_accessor :requires
41
11
 
@@ -45,7 +15,7 @@ module Motion
45
15
 
46
16
  def on_command(command, args) # scanner event
47
17
  type, name, position = command
48
- if name == REQUIREMENT_TOKEN
18
+ if REQUIREMENT_TOKENS.include?(name)
49
19
  file = parse_args(args)
50
20
  requires << file
51
21
  end
@@ -77,7 +47,7 @@ module Motion
77
47
  if required[-3..-1] != ".rb"
78
48
  required += ".rb"
79
49
  end
80
- absolute_path(file_path, required)
50
+ resolve_path(file_path, required)
81
51
  }
82
52
  dependencies[file_path].unshift ext_file
83
53
  end
@@ -91,22 +61,27 @@ module Motion
91
61
  parser.requires
92
62
  end
93
63
 
94
- def absolute_path(source, required)
95
- File.expand_path(File.join(File.dirname(source), required.to_str))
64
+ # Join `required` to directory containing `source`.
65
+ # Preserves relative/absolute nature of source
66
+ def resolve_path(source, required)
67
+ Pathname.new(source).dirname.join(required.to_str).cleanpath.to_path
96
68
  end
97
69
 
98
70
  def all(files)
99
71
  Motion::Project::App.setup do |app|
100
72
  app.files << ext_file
101
- files.each do |file|
102
- app.files << file
103
- end
104
-
73
+ app.files |= files.map { |f| explicit_relative(f) }
105
74
  dependencies = dependencies_for(files)
106
75
  app.files_dependencies dependencies
107
76
  end
108
77
  end
109
78
 
79
+ # RubyMotion prefers relative paths to be explicitly prefixed with ./
80
+ def explicit_relative(path)
81
+ # Paths that do not start with "/", "./", or "../" will be prefixed with ./
82
+ path.sub(%r(^(?!\.{0,2}/)), './')
83
+ end
84
+
110
85
  def ext_file
111
86
  File.expand_path(File.join(File.dirname(__FILE__), "../motion/ext.rb"))
112
87
  end
data/motion/ext.rb CHANGED
@@ -3,4 +3,5 @@
3
3
  module Kernel
4
4
  def motion_require(*args)
5
5
  end
6
+ alias_method :require_relative, :motion_require
6
7
  end
@@ -12,4 +12,6 @@ Gem::Specification.new do |s|
12
12
 
13
13
  s.files = `git ls-files`.split($\)
14
14
  s.require_paths = ["lib"]
15
+ s.test_files = Dir.glob("spec/**/*.rb")
16
+ s.add_development_dependency 'rspec', '~> 2.5'
15
17
  end
@@ -0,0 +1,5 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ true
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Motion::Require do
4
+ it 'should run' do
5
+ true.should == true
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+ require 'motion-require'
3
+
4
+ RSpec.configure do |config|
5
+ config.color_enabled = true
6
+ config.formatter = 'documentation'
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-require
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,23 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2013-04-05 00:00:00.000000000 Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.5'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.5'
14
30
  description: Dependency management for RubyMotion, using a pseudo `require`
15
31
  email:
16
32
  - clay@usepropeller.com
@@ -24,9 +40,13 @@ files:
24
40
  - README.md
25
41
  - Rakefile
26
42
  - lib/motion-require.rb
43
+ - lib/motion-require/ext.rb
27
44
  - lib/motion-require/version.rb
28
45
  - motion-require.gemspec
29
46
  - motion/ext.rb
47
+ - spec/motion_require_spec.rb
48
+ - spec/spec_helper.rb
49
+ - spec/TestApp/app/app_delegate.rb
30
50
  homepage: https://github.com/clayallsopp/motion-require
31
51
  licenses: []
32
52
  post_install_message:
@@ -51,4 +71,7 @@ rubygems_version: 1.8.23
51
71
  signing_key:
52
72
  specification_version: 3
53
73
  summary: Dependency management for RubyMotion, using a pseudo `require`
54
- test_files: []
74
+ test_files:
75
+ - spec/motion_require_spec.rb
76
+ - spec/spec_helper.rb
77
+ - spec/TestApp/app/app_delegate.rb