motion-bundler 0.1.4 → 0.1.5

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