impromptu 1.2.0 → 1.2.1
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/CHANGELOG +4 -0
- data/VERSION +1 -1
- data/impromptu.gemspec +3 -1
- data/lib/impromptu/autoload.rb +31 -39
- data/lib/impromptu/file.rb +4 -1
- data/lib/impromptu/resource.rb +0 -1
- data/test/framework/folder_namespace/two_names.rb +4 -0
- data/test/test_integration.rb +12 -3
- metadata +4 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
1.2.1 - Fix bug where namespaces were not removed after camelcasing a file name
|
2
|
+
- Simplify autoloading behaviour and fix a bug which affected autoloading
|
3
|
+
constants while in the middle of an existing autoload.
|
4
|
+
|
1
5
|
1.2.0 - New method 'root?' which tests is symbols are prefixed with two colons
|
2
6
|
- New 'namespace' option for folders allows you to override a components
|
3
7
|
namespace with a namespace specific to a folder.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.1
|
data/impromptu.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{impromptu}
|
8
|
-
s.version = "1.2.
|
8
|
+
s.version = "1.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Will Cannings"]
|
@@ -41,6 +41,7 @@ Gem::Specification.new do |s|
|
|
41
41
|
"test/framework/ext/extensions.rb",
|
42
42
|
"test/framework/ext/extensions/blog.rb",
|
43
43
|
"test/framework/folder_namespace/stream.rb",
|
44
|
+
"test/framework/folder_namespace/two_names.rb",
|
44
45
|
"test/framework/lib/group/klass2.rb",
|
45
46
|
"test/framework/lib/klass.rb",
|
46
47
|
"test/framework/other/also.rb",
|
@@ -77,6 +78,7 @@ Gem::Specification.new do |s|
|
|
77
78
|
"test/framework/ext/extensions.rb",
|
78
79
|
"test/framework/ext/extensions/blog.rb",
|
79
80
|
"test/framework/folder_namespace/stream.rb",
|
81
|
+
"test/framework/folder_namespace/two_names.rb",
|
80
82
|
"test/framework/lib/group/klass2.rb",
|
81
83
|
"test/framework/lib/klass.rb",
|
82
84
|
"test/framework/other/also.rb",
|
data/lib/impromptu/autoload.rb
CHANGED
@@ -1,41 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
namespaced_symbol = "#{self.name}::#{symbol}".to_sym
|
19
|
-
end
|
20
|
-
|
21
|
-
# walk the resource tree and get a reference to the
|
22
|
-
# resource or nil if we're not tracking it
|
23
|
-
resource = Impromptu.root_resource.child(namespaced_symbol)
|
24
|
-
|
25
|
-
# if we don't know about the symbol, send the method to
|
26
|
-
# Object which will raise an exception
|
27
|
-
super(symbol) if resource.nil?
|
28
|
-
|
29
|
-
# ensure the resource hasn't already been loaded
|
30
|
-
raise "Illegal condition: const_missing called after a resource has been loaded" if resource.loaded?
|
31
|
-
|
32
|
-
# load the resource and return a reference to it. this
|
33
|
-
# assumes that the source files will correctly define
|
34
|
-
# the resource. otherwise nil will be returned.
|
35
|
-
resource.reload
|
36
|
-
resource.reference
|
37
|
-
end
|
1
|
+
# Impromptu implements the autoloading behaviour using const_missing.
|
2
|
+
# Module's const_missing definition is replaced with the one below to
|
3
|
+
# catch references to objects which don't exist. It first tries
|
4
|
+
# to determine if we know about the resource corresponding to name
|
5
|
+
# and if so loads and returns a reference to it. Otherwise, the usual
|
6
|
+
# NameError exception will be raised. We also test to make sure a
|
7
|
+
# resource isn't already loaded before returning a reference to it. If
|
8
|
+
# it is, then something very screwy has gone on and Ruby cannot locate
|
9
|
+
# an already loaded resource.
|
10
|
+
Module.send(:remove_method, :const_missing)
|
11
|
+
Module.send(:define_method, :const_missing) do |symbol|
|
12
|
+
# namespace the missing resource with the name of the
|
13
|
+
# current class or module
|
14
|
+
if self == Object
|
15
|
+
namespaced_symbol = symbol
|
16
|
+
else
|
17
|
+
namespaced_symbol = "#{self.name}::#{symbol}".to_sym
|
38
18
|
end
|
19
|
+
|
20
|
+
# walk the resource tree and get a reference to the
|
21
|
+
# resource or nil if we're not tracking it
|
22
|
+
resource = Impromptu.root_resource.child(namespaced_symbol)
|
23
|
+
raise NameError if resource.nil?
|
24
|
+
|
25
|
+
# ensure the resource hasn't already been loaded
|
26
|
+
raise "Illegal condition: const_missing called after a resource has been loaded" if resource.loaded?
|
27
|
+
|
28
|
+
# load the resource and return a reference to it. this
|
29
|
+
# assumes that the source files will correctly define
|
30
|
+
# the resource. otherwise nil will be returned.
|
31
|
+
resource.reload
|
32
|
+
resource.reference
|
39
33
|
end
|
40
|
-
|
41
|
-
Object.extend(Impromptu::Autoload)
|
data/lib/impromptu/file.rb
CHANGED
@@ -206,7 +206,10 @@ module Impromptu
|
|
206
206
|
name.gsub!(/\/(.?)/) {|character| "::#{character[1].upcase}" }
|
207
207
|
|
208
208
|
# upcase the first character, and any characters following an underscore
|
209
|
-
name.gsub(/(?:^|_)(.)/) {|character| character.upcase}
|
209
|
+
name.gsub!(/(?:^|_)(.)/) {|character| character.upcase}
|
210
|
+
|
211
|
+
# remove underscores
|
212
|
+
name.gsub('_', '').to_sym
|
210
213
|
end
|
211
214
|
|
212
215
|
def combine_symbol_with_namespace(symbol)
|
data/lib/impromptu/resource.rb
CHANGED
data/test/test_integration.rb
CHANGED
@@ -35,15 +35,15 @@ class TestIntegration < Test::Unit::TestCase
|
|
35
35
|
assert_equal nil, Impromptu.components['other'].namespace
|
36
36
|
end
|
37
37
|
|
38
|
-
should "05 start tracking
|
38
|
+
should "05 start tracking 11 files" do
|
39
39
|
assert_equal 2, Impromptu.components['framework'].folders.first.files.size
|
40
40
|
assert_equal 2, Impromptu.components['framework.extensions'].folders.first.files.size
|
41
41
|
assert_equal 3, Impromptu.components['other'].folders.first.files.size
|
42
42
|
assert_equal 2, Impromptu.components['private'].folders.first.files.size
|
43
|
-
assert_equal
|
43
|
+
assert_equal 2, Impromptu.components['folder_namespace'].folders.first.files.size
|
44
44
|
end
|
45
45
|
|
46
|
-
should "06 load definitions for
|
46
|
+
should "06 load definitions for 13 resources" do
|
47
47
|
assert Impromptu.root_resource.child?(:Framework)
|
48
48
|
assert Impromptu.root_resource.child(:Framework).child?(:Extensions)
|
49
49
|
assert Impromptu.root_resource.child(:Framework).child(:Extensions).child?(:Blog)
|
@@ -56,6 +56,7 @@ class TestIntegration < Test::Unit::TestCase
|
|
56
56
|
assert Impromptu.root_resource.child?(:Another)
|
57
57
|
assert Impromptu.root_resource.child(:Namespace)
|
58
58
|
assert Impromptu.root_resource.child(:Namespace).child?(:Stream)
|
59
|
+
assert Impromptu.root_resource.child(:Namespace).child?(:TwoNames)
|
59
60
|
end
|
60
61
|
|
61
62
|
should "07 correctly mark namespace resources" do
|
@@ -71,6 +72,7 @@ class TestIntegration < Test::Unit::TestCase
|
|
71
72
|
assert_equal false, Impromptu.root_resource.child(:Another).namespace?
|
72
73
|
assert_equal true, Impromptu.root_resource.child(:Namespace).namespace?
|
73
74
|
assert_equal false, Impromptu.root_resource.child(:Namespace).child(:Stream).namespace?
|
75
|
+
assert_equal false, Impromptu.root_resource.child(:Namespace).child(:TwoNames).namespace?
|
74
76
|
end
|
75
77
|
|
76
78
|
should "08 keep all resources unloaded to start with" do
|
@@ -86,6 +88,7 @@ class TestIntegration < Test::Unit::TestCase
|
|
86
88
|
assert_equal false, Impromptu.root_resource.child(:'Another').loaded?
|
87
89
|
assert_equal false, Impromptu.root_resource.child(:'Namespace').loaded?
|
88
90
|
assert_equal false, Impromptu.root_resource.child(:'Namespace::Stream').loaded?
|
91
|
+
assert_equal false, Impromptu.root_resource.child(:'Namespace::TwoNames').loaded?
|
89
92
|
end
|
90
93
|
|
91
94
|
should "09 have all resources specified by the correct number of files" do
|
@@ -101,6 +104,7 @@ class TestIntegration < Test::Unit::TestCase
|
|
101
104
|
assert_equal 1, Impromptu.root_resource.child(:'ModTwo').files.size
|
102
105
|
assert_equal 1, Impromptu.root_resource.child(:'Another').files.size
|
103
106
|
assert_equal 1, Impromptu.root_resource.child(:'Namespace::Stream').files.size
|
107
|
+
assert_equal 1, Impromptu.root_resource.child(:'Namespace::TwoNames').files.size
|
104
108
|
assert_equal true, Impromptu.root_resource.child(:'Framework').implicitly_defined?
|
105
109
|
assert_equal true, Impromptu.root_resource.child(:'Namespace').implicitly_defined?
|
106
110
|
end
|
@@ -180,10 +184,15 @@ class TestIntegration < Test::Unit::TestCase
|
|
180
184
|
|
181
185
|
# folder namespace
|
182
186
|
Impromptu.root_resource.child(:'Namespace::Stream').reload
|
187
|
+
Impromptu.root_resource.child(:'Namespace::TwoNames').reload
|
183
188
|
assert_equal true, Impromptu.root_resource.child(:'Namespace::Stream').loaded?
|
189
|
+
assert_equal true, Impromptu.root_resource.child(:'Namespace::TwoNames').loaded?
|
184
190
|
assert_nothing_raised do
|
185
191
|
Namespace::Stream
|
186
192
|
end
|
193
|
+
assert_nothing_raised do
|
194
|
+
Namespace::TwoNames
|
195
|
+
end
|
187
196
|
end
|
188
197
|
|
189
198
|
should "12 load multiple files for a resource when required" do
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 1.2.
|
8
|
+
- 1
|
9
|
+
version: 1.2.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Will Cannings
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- test/framework/ext/extensions.rb
|
65
65
|
- test/framework/ext/extensions/blog.rb
|
66
66
|
- test/framework/folder_namespace/stream.rb
|
67
|
+
- test/framework/folder_namespace/two_names.rb
|
67
68
|
- test/framework/lib/group/klass2.rb
|
68
69
|
- test/framework/lib/klass.rb
|
69
70
|
- test/framework/other/also.rb
|
@@ -127,6 +128,7 @@ test_files:
|
|
127
128
|
- test/framework/ext/extensions.rb
|
128
129
|
- test/framework/ext/extensions/blog.rb
|
129
130
|
- test/framework/folder_namespace/stream.rb
|
131
|
+
- test/framework/folder_namespace/two_names.rb
|
130
132
|
- test/framework/lib/group/klass2.rb
|
131
133
|
- test/framework/lib/klass.rb
|
132
134
|
- test/framework/other/also.rb
|