rubinjam 0.2.0 → 0.3.0

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.
Files changed (4) hide show
  1. data/lib/rubinjam/version.rb +1 -1
  2. data/lib/rubinjam.rb +82 -6
  3. metadata +51 -32
  4. checksums.yaml +0 -7
@@ -1,3 +1,3 @@
1
1
  module Rubinjam
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/rubinjam.rb CHANGED
@@ -84,15 +84,91 @@ module Rubinjam
84
84
  #{libraries.map { |name,content| "#{name.inspect} => #{content.inspect}" }.join(",\n ")}
85
85
  }
86
86
 
87
- ROOT = File.expand_path("../", __FILE__) << "/lib/"
87
+ ROOT = File.expand_path("../", __FILE__) << "/rubinjam/"
88
88
 
89
- module AutoloadFix
89
+ class << self
90
+ def normalize_file(file)
91
+ return file unless file.start_with?("/")
92
+ if file.start_with?(ROOT)
93
+ file.sub(ROOT, "")
94
+ else
95
+ file.split('/lib/').last
96
+ end
97
+ end
98
+
99
+ def file_from_nesting(mod, const)
100
+ if file = mod.rubinjam_autload[const]
101
+ return [mod, file]
102
+ end
103
+
104
+ nesting(mod.name)[1..-1].detect do |mod|
105
+ file = mod.rubinjam_autload[const]
106
+ break [mod, file] if file
107
+ end
108
+ end
109
+
110
+ # this does not reflect the actual Module.nesting of the caller,
111
+ # but it should be close enough
112
+ def nesting(name)
113
+ nesting = []
114
+ namespace = name.split("::")
115
+ namespace.inject(Object) do |base, n|
116
+ klass = base.const_get(n)
117
+ nesting << klass
118
+ klass
119
+ end
120
+ nesting.reverse
121
+ end
122
+ end
123
+
124
+ module ModuleAutoloadFix
90
125
  def self.included(base)
91
126
  base.class_eval do
127
+ def rubinjam_autload
128
+ @rubinjam_autload ||= {}
129
+ end
130
+
92
131
  alias autoload_without_rubinjam autoload
93
132
  def autoload(const, file)
94
- if Rubinjam::LIBRARIES[file]
133
+ normalized_file = Rubinjam.normalize_file(file)
134
+ if Rubinjam::LIBRARIES[normalized_file]
135
+ rubinjam_autload[const] = normalized_file
136
+ else
137
+ autoload_without_rubinjam(const, file)
138
+ end
139
+ end
140
+
141
+ alias const_missing_without_rubinjam const_missing
142
+ def const_missing(const)
143
+ # do not load twice / go into infitire loops
144
+ @rubinjam_tried_const_missing ||= {}
145
+ if @rubinjam_tried_const_missing[const]
146
+ return const_missing_without_rubinjam(const)
147
+ end
148
+ @rubinjam_tried_const_missing[const] = true
149
+
150
+ # try to find autoload in current module or nesting
151
+ nesting, file = Rubinjam.file_from_nesting(self, const)
152
+ if file
95
153
  require file
154
+ nesting.const_get(const)
155
+ else
156
+ const_missing_without_rubinjam(const)
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ module BaseAutoloadFix
164
+ def self.included(base)
165
+ base.class_eval do
166
+ alias autoload_without_rubinjam autoload
167
+
168
+ def autoload(const, file)
169
+ normalized_file = Rubinjam.normalize_file(file)
170
+ if Rubinjam::LIBRARIES[normalized_file]
171
+ require normalized_file
96
172
  else
97
173
  autoload_without_rubinjam(const, file)
98
174
  end
@@ -102,11 +178,11 @@ module Rubinjam
102
178
  end
103
179
  end
104
180
 
105
- Module.send(:include, Rubinjam::AutoloadFix)
106
- include Rubinjam::AutoloadFix
181
+ Module.send(:include, Rubinjam::ModuleAutoloadFix)
182
+ include Rubinjam::BaseAutoloadFix
107
183
 
108
184
  def require(file)
109
- normalized_file = file.sub(Rubinjam::ROOT, "")
185
+ normalized_file = Rubinjam.normalize_file(file)
110
186
  if code = Rubinjam::LIBRARIES[normalized_file]
111
187
  return if code == :loaded
112
188
  eval(code, TOPLEVEL_BINDING, "rubinjam/\#{normalized_file}.rb")
metadata CHANGED
@@ -1,62 +1,81 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubinjam
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - Michael Grosser
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
- date: 2014-12-17 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2014-12-20 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ prerelease: false
14
22
  name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
23
  type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
24
27
  - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ requirement: *id001
27
34
  description:
28
35
  email: michael@grosser.it
29
- executables:
36
+ executables:
30
37
  - rubinjam
31
38
  extensions: []
39
+
32
40
  extra_rdoc_files: []
33
- files:
41
+
42
+ files:
34
43
  - MIT-LICENSE
35
44
  - bin/rubinjam
36
45
  - lib/rubinjam.rb
37
46
  - lib/rubinjam/version.rb
38
47
  homepage: https://github.com/grosser/rubinjam
39
- licenses:
48
+ licenses:
40
49
  - MIT
41
- metadata: {}
42
50
  post_install_message:
43
51
  rdoc_options: []
44
- require_paths:
52
+
53
+ require_paths:
45
54
  - lib
46
- required_ruby_version: !ruby/object:Gem::Requirement
47
- requirements:
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
48
58
  - - ">="
49
- - !ruby/object:Gem::Version
50
- version: '0'
51
- required_rubygems_version: !ruby/object:Gem::Requirement
52
- requirements:
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
53
67
  - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
56
73
  requirements: []
74
+
57
75
  rubyforge_project:
58
- rubygems_version: 2.2.2
76
+ rubygems_version: 1.8.15
59
77
  signing_key:
60
- specification_version: 4
78
+ specification_version: 3
61
79
  summary: Jam a gem into a universal binary that works with any ruby
62
80
  test_files: []
81
+
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 3ad8b2a441f97b43165b8de34a5d5f4f497d9252
4
- data.tar.gz: ff1a5400580c19c7a302783fe2844ede15db39e9
5
- SHA512:
6
- metadata.gz: eabcb9d642ad130f409c6518ded37d8ddd1a7e8794bc74f4351bbcc1f7fdefb4da6b68d4b627b3bdf405787619aa7c9912da809749233625e420b998ceb7811e
7
- data.tar.gz: 1a1a9c87aecc77722ea5a2f3e12e1202462da8dac8e85d7eab9dcd6f9a4d69569b56bad82e31ca9ac9eb29e4bc61706e8285a46235411702e6662664119a6a3e