motion-bundler 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f5db7eef27452db03cec3069345404b2782c6e9d
4
+ data.tar.gz: f7e198110cf2ed95529df59957a5dc662e4bb8dc
5
+ SHA512:
6
+ metadata.gz: 14a40f729b2ec900abb0f4f1e244617fb5a438f5b9b792baa63e9dab486cff3aa4d79547af3b74cdce96f287461182378a41eeaa8223b7655221cba2ac7356af
7
+ data.tar.gz: c5ddd7429a457a06d7ba1dd6296e13a83163b0b05226f44e321c79a0f4cc6cff882aaedb8f0512d029ede239d4957f864ad5117c1ecebfe2824712a104550066
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,12 @@
1
1
  = MotionBundler CHANGELOG
2
2
 
3
+ == Version 0.1.5 (May 30, 2013)
4
+
5
+ * Being able to require multiple files (e.g. `require "./config/**/*.rb"` within `app/app_delegate.rb`)
6
+ * Expanding paths when registering files and files dependencies
7
+ * Corrected files order when registering
8
+ * Fixed `duplicate symbol` error (for real this time)
9
+
3
10
  == Version 0.1.4 (May 29, 2013)
4
11
 
5
12
  * Not using colorize as gem dependency anymore: defining String#yellow, String#green, String#red in MotionBundler itself
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
@@ -29,33 +29,36 @@ module MotionBundler
29
29
 
30
30
  def parse
31
31
  @sources.each do |source|
32
- next if @files_dependencies.include?(source)
32
+ next if @requires.include?(source)
33
33
  added_sources = []
34
34
 
35
35
  builder = Builder.new source
36
36
  builder.requires.each do |method, args|
37
- (@requires[source] ||= []) << args[0]
38
37
 
39
- file = begin
40
- if method == :require_relative
41
- File.expand_path("../#{args[0]}.rb", source)
42
- else
43
- Require.resolve(args[0])
38
+ (@requires[source] ||= []) << args[0]
39
+ ((arg = args[0]).include?("*.rb") ? Dir[arg] : [arg]).each do |file|
40
+ file = begin
41
+ if method == :require_relative
42
+ File.expand_path("../#{file}.rb", source)
43
+ else
44
+ Require.resolve(file)
45
+ end
44
46
  end
45
- end
46
47
 
47
- next if @sources.any?{|x| File.expand_path(x) == File.expand_path(file)}
48
+ @files << source
49
+ @files << file
48
50
 
49
- if file.include?(File.expand_path("."))
50
- added_sources << file
51
- else
52
- MotionBundler.app_require file
53
- end
51
+ (@files_dependencies[source] ||= []) << file
52
+ expanded_path = File.expand_path(file)
54
53
 
55
- @files << source
56
- @files << file
57
-
58
- (@files_dependencies[source] ||= []) << file
54
+ unless @sources.any?{|x| File.expand_path(x) == expanded_path}
55
+ if expanded_path.include?(MotionBundler::PROJECT_PATH)
56
+ added_sources << file
57
+ else
58
+ MotionBundler.app_require file
59
+ end
60
+ end
61
+ end
59
62
  end
60
63
 
61
64
  unless added_sources.empty?
@@ -1,7 +1,7 @@
1
1
  module MotionBundler #:nodoc:
2
2
  MAJOR = 0
3
3
  MINOR = 1
4
- TINY = 4
4
+ TINY = 5
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].join(".")
7
7
  end
@@ -7,7 +7,8 @@ require "motion-bundler/version"
7
7
  module MotionBundler
8
8
  extend self
9
9
 
10
- MOTION_BUNDLER_FILE = File.expand_path "./.motion-bundler.rb"
10
+ PROJECT_PATH = File.expand_path "."
11
+ MOTION_BUNDLER_FILE = "#{PROJECT_PATH}/.motion-bundler.rb"
11
12
 
12
13
  def app_require(file)
13
14
  app_requires << file
@@ -21,10 +22,14 @@ module MotionBundler
21
22
  ripper_require files, files_dependencies, required
22
23
  tracer_require files, files_dependencies, required, &block
23
24
 
24
- app.files = files
25
- app.files_dependencies files_dependencies
25
+ normalize! files
26
+ normalize! files_dependencies
27
+ required.sort!.uniq!
26
28
 
27
29
  write_motion_bundler files, files_dependencies, required
30
+
31
+ app.files = files
32
+ app.files_dependencies files_dependencies
28
33
  end
29
34
  end
30
35
 
@@ -57,11 +62,15 @@ private
57
62
  def ripper_require(files, files_dependencies, required)
58
63
  ripper = Require::Ripper.new *Dir["app/**/*.rb"].collect{|x| "./#{x}"}
59
64
 
60
- files.replace(ripper.files + files).uniq!
61
- files_dependencies.merge!(ripper.files_dependencies)
62
-
63
- files_dependencies.each{|k, v| v.uniq!}
64
- required.concat(ripper.requires.values.flatten).uniq!; required.sort!
65
+ files.replace(
66
+ ripper.files + files
67
+ )
68
+ files_dependencies.merge!(
69
+ ripper.files_dependencies
70
+ )
71
+ required.concat(
72
+ ripper.requires.values.flatten
73
+ )
65
74
  end
66
75
 
67
76
  def tracer_require(files, files_dependencies, required)
@@ -82,7 +91,7 @@ private
82
91
 
83
92
  files.replace(
84
93
  Require.files + files - ["APP", "BUNDLER", __FILE__]
85
- ).uniq!
94
+ )
86
95
  files_dependencies.merge!(
87
96
  Require.files_dependencies.tap do |dependencies|
88
97
  (dependencies.delete("BUNDLER") || []).each do |file|
@@ -92,11 +101,9 @@ private
92
101
  dependencies.delete(__FILE__)
93
102
  end
94
103
  )
95
-
96
- files_dependencies.each{|k, v| v.uniq!}
97
- required.concat(Require.requires.values.flatten).uniq!; required.sort!
98
-
99
- true
104
+ required.concat(
105
+ Require.requires.values.flatten
106
+ )
100
107
  end
101
108
 
102
109
  def write_motion_bundler(files, files_dependencies, required)
@@ -116,6 +123,24 @@ private
116
123
  end
117
124
  end
118
125
 
126
+ def normalize!(object)
127
+ object.replace(
128
+ if object.is_a?(Array)
129
+ object.inject(Set.new) do |a, v|
130
+ a << File.expand_path(v)
131
+ a
132
+ end.to_a.partition do |v|
133
+ (v == MOTION_BUNDLER_FILE) || !v.include?(PROJECT_PATH)
134
+ end.flatten
135
+ elsif object.is_a?(Hash)
136
+ object.inject({}) do |h, (k, v)|
137
+ (h[File.expand_path(k)] ||= []).concat normalize!(v)
138
+ h
139
+ end
140
+ end
141
+ )
142
+ end
143
+
119
144
  def pretty_inspect(object, indent = 0)
120
145
  if object.is_a?(Array)
121
146
  entries = object.collect{|x| " #{pretty_inspect x, indent + 2}"}
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/paulengel/Sources/motion-bundler
3
3
  specs:
4
- motion-bundler (0.1.3)
4
+ motion-bundler (0.1.5)
5
5
 
6
6
  PATH
7
7
  remote: /Users/paulengel/Sources/motion-bundler/test/gems/slot_machine
@@ -22,7 +22,7 @@ module Motion
22
22
  /Users/paulengel/bar.rb
23
23
  )
24
24
 
25
- Motion::Project::App.any_instance.expects(:files=).with([
25
+ Motion::Project::App.any_instance.expects(:files=).with(expand_paths [
26
26
  MotionBundler::MOTION_BUNDLER_FILE,
27
27
  motion_bundler_file("motion-bundler/simulator/boot.rb"),
28
28
  motion_bundler_file("motion-bundler/simulator/core_ext.rb"),
@@ -41,7 +41,7 @@ module Motion
41
41
  "/Users/paulengel/bar.rb"
42
42
  ])
43
43
 
44
- Motion::Project::App.any_instance.expects(:files_dependencies).with(
44
+ Motion::Project::App.any_instance.expects(:files_dependencies).with(expand_paths({
45
45
  motion_bundler_file("motion-bundler/simulator/boot.rb") => [
46
46
  motion_bundler_file("motion-bundler/simulator/core_ext.rb"),
47
47
  motion_bundler_file("motion-bundler/simulator/console.rb")
@@ -56,7 +56,7 @@ module Motion
56
56
  gem_path("slot_machine/lib/time_slot.rb"),
57
57
  gem_path("slot_machine/lib/time_slots.rb")
58
58
  ]
59
- )
59
+ }))
60
60
 
61
61
  MotionBundler.setup do |app|
62
62
  app.require "a"
data/test/test_helper.rb CHANGED
@@ -37,6 +37,17 @@ def mocks_dir
37
37
  File.expand_path "../mocks", __FILE__
38
38
  end
39
39
 
40
+ def expand_paths(paths)
41
+ if paths.is_a? Array
42
+ paths.collect{|v| File.expand_path v}
43
+ else
44
+ paths.inject({}) do |h, (k, v)|
45
+ h[File.expand_path(k)] = expand_paths(v)
46
+ h
47
+ end
48
+ end
49
+ end
50
+
40
51
  def motion_gemfile(content)
41
52
  content = "source \"https://rubygems.org\"\n\n#{content}"
42
53
  dirname = File.dirname __FILE__
@@ -33,6 +33,18 @@ module Unit
33
33
  bar_builder.expects(:requires).returns []
34
34
  MotionBundler::Require::Ripper::Builder.expects(:new).with(File.expand_path("./app/controllers/bar.rb")).returns bar_builder
35
35
 
36
+ stringio_builder = mock "object"
37
+ stringio_builder.expects(:requires).returns []
38
+ MotionBundler::Require::Ripper::Builder.expects(:new).with("stdlib/stringio.rb").returns stringio_builder
39
+
40
+ strscan_builder = mock "object"
41
+ strscan_builder.expects(:requires).returns []
42
+ MotionBundler::Require::Ripper::Builder.expects(:new).with("mocks/strscan.rb").returns strscan_builder
43
+
44
+ lib_baz_builder = mock "object"
45
+ lib_baz_builder.expects(:requires).returns []
46
+ MotionBundler::Require::Ripper::Builder.expects(:new).with("lib/baz.rb").returns lib_baz_builder
47
+
36
48
  MotionBundler::Require.expects(:resolve).with("stringio").returns("stdlib/stringio.rb")
37
49
  MotionBundler::Require.expects(:resolve).with("strscan").returns("mocks/strscan.rb")
38
50
  MotionBundler::Require.expects(:resolve).with("baz").returns("lib/baz.rb")
@@ -50,6 +62,7 @@ module Unit
50
62
  "mocks/strscan.rb",
51
63
  "./app/controllers/foo_controller.rb",
52
64
  "lib/baz.rb",
65
+ File.expand_path("app/controllers/qux.rb"),
53
66
  File.expand_path("app/controllers/bar.rb")
54
67
  ], ripper.files)
55
68
  assert_equal({
@@ -59,6 +72,7 @@ module Unit
59
72
  ],
60
73
  "./app/controllers/foo_controller.rb" => [
61
74
  "lib/baz.rb",
75
+ File.expand_path("app/controllers/qux.rb"),
62
76
  File.expand_path("app/controllers/bar.rb")
63
77
  ]
64
78
  }, ripper.files_dependencies)
@@ -58,6 +58,12 @@ module Unit
58
58
  MotionBundler.send :write_motion_bundler, [], {}, []
59
59
  end
60
60
 
61
+ it "should be able to register files to require" do
62
+ assert_equal [], MotionBundler.send(:app_requires)
63
+ MotionBundler.app_require "foo/bar.rb"
64
+ assert_equal ["foo/bar.rb"], MotionBundler.send(:app_requires)
65
+ end
66
+
61
67
  describe "calling `setup`" do
62
68
  it "should require the :motion Bundler group and trace requires" do
63
69
  object = mock "object"
@@ -113,7 +119,7 @@ module Unit
113
119
  ]
114
120
  })
115
121
 
116
- Motion::Project::App.any_instance.expects(:files=).with([
122
+ Motion::Project::App.any_instance.expects(:files=).with(expand_paths [
117
123
  motion_bundler_file("motion-bundler/simulator/boot.rb"),
118
124
  motion_bundler_file("motion-bundler/simulator/core_ext.rb"),
119
125
  motion_bundler_file("motion-bundler/simulator/motion-bundler.rb"),
@@ -125,7 +131,7 @@ module Unit
125
131
  "controller.rb"
126
132
  ])
127
133
 
128
- Motion::Project::App.any_instance.expects(:files_dependencies).with({
134
+ Motion::Project::App.any_instance.expects(:files_dependencies).with(expand_paths({
129
135
  motion_bundler_file("motion-bundler/simulator/boot.rb") => [
130
136
  motion_bundler_file("motion-bundler/simulator/core_ext.rb"),
131
137
  motion_bundler_file("motion-bundler/simulator/motion-bundler.rb")
@@ -135,7 +141,7 @@ module Unit
135
141
  "gems/foo-0.1.0/lib/foo/bar.rb",
136
142
  "gems/foo-0.1.0/lib/foo/version.rb"
137
143
  ]
138
- })
144
+ }))
139
145
 
140
146
  MotionBundler.setup
141
147
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
5
- prerelease:
4
+ version: 0.1.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Paul Engel
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-28 00:00:00.000000000 Z
11
+ date: 2013-05-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: minitest
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: mocha
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - '='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - '='
44
39
  - !ruby/object:Gem::Version
@@ -46,17 +41,15 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: Use Ruby gems and mock require statements within RubyMotion applications
@@ -171,33 +164,26 @@ files:
171
164
  - test/unit/test_require.rb
172
165
  homepage: https://github.com/archan937/motion-bundler
173
166
  licenses: []
167
+ metadata: {}
174
168
  post_install_message:
175
169
  rdoc_options: []
176
170
  require_paths:
177
171
  - lib
178
172
  required_ruby_version: !ruby/object:Gem::Requirement
179
- none: false
180
173
  requirements:
181
- - - ! '>='
174
+ - - '>='
182
175
  - !ruby/object:Gem::Version
183
176
  version: '0'
184
- segments:
185
- - 0
186
- hash: 3894260479550083785
187
177
  required_rubygems_version: !ruby/object:Gem::Requirement
188
- none: false
189
178
  requirements:
190
- - - ! '>='
179
+ - - '>='
191
180
  - !ruby/object:Gem::Version
192
181
  version: '0'
193
- segments:
194
- - 0
195
- hash: 3894260479550083785
196
182
  requirements: []
197
183
  rubyforge_project:
198
- rubygems_version: 1.8.25
184
+ rubygems_version: 2.0.3
199
185
  signing_key:
200
- specification_version: 3
186
+ specification_version: 4
201
187
  summary: Use Ruby gems and mock require statements within RubyMotion applications
202
188
  test_files:
203
189
  - test/gems/slot_machine/CHANGELOG.rdoc