impromptu 1.0.0 → 1.0.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/README.rdoc CHANGED
@@ -23,7 +23,7 @@ A simple component DSL is used to define components:
23
23
  component 'other' do
24
24
  folder 'other' do
25
25
  file 'load.rb'
26
- file 'mods.rb', :provides => [:ModOne, :ModTwo]
26
+ file 'mods.rb', provides: [:ModOne, :ModTwo]
27
27
  end
28
28
  end
29
29
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
data/impromptu.gemspec CHANGED
@@ -1,93 +1,91 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{impromptu}
8
- s.version = "1.0.0"
8
+ s.version = "1.0.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"]
12
- s.date = %q{2010-09-30}
12
+ s.date = %q{2010-11-16}
13
13
  s.description = %q{Component and dependency manager for Ruby}
14
14
  s.email = %q{me@willcannings.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "impromptu.gemspec",
27
- "lib/impromptu.rb",
28
- "lib/impromptu/autoload.rb",
29
- "lib/impromptu/component.rb",
30
- "lib/impromptu/component_set.rb",
31
- "lib/impromptu/file.rb",
32
- "lib/impromptu/folder.rb",
33
- "lib/impromptu/impromptu.rb",
34
- "lib/impromptu/ordered_set.rb",
35
- "lib/impromptu/resource.rb",
36
- "lib/impromptu/symbol.rb",
37
- "test/framework/copies/extra_klass2.rb",
38
- "test/framework/copies/new_klass.rb",
39
- "test/framework/copies/new_unseen.rb",
40
- "test/framework/copies/original_klass.rb",
41
- "test/framework/ext/extensions.rb",
42
- "test/framework/ext/extensions/blog.rb",
43
- "test/framework/lib/group/klass2.rb",
44
- "test/framework/lib/klass.rb",
45
- "test/framework/other/also.rb",
46
- "test/framework/other/ignore.rb",
47
- "test/framework/other/load.rb",
48
- "test/framework/other/two.rb",
49
- "test/framework/private/klass.rb",
50
- "test/framework/test.components",
51
- "test/helper.rb",
52
- "test/test_autoload.rb",
53
- "test/test_component.rb",
54
- "test/test_component_set.rb",
55
- "test/test_folder.rb",
56
- "test/test_impromptu.rb",
57
- "test/test_integration.rb",
58
- "test/test_ordered_set.rb",
59
- "test/test_resource.rb",
60
- "test/test_symbol.rb"
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "impromptu.gemspec",
26
+ "lib/impromptu.rb",
27
+ "lib/impromptu/autoload.rb",
28
+ "lib/impromptu/component.rb",
29
+ "lib/impromptu/component_set.rb",
30
+ "lib/impromptu/file.rb",
31
+ "lib/impromptu/folder.rb",
32
+ "lib/impromptu/impromptu.rb",
33
+ "lib/impromptu/ordered_set.rb",
34
+ "lib/impromptu/resource.rb",
35
+ "lib/impromptu/symbol.rb",
36
+ "test/framework/copies/extra_klass2.rb",
37
+ "test/framework/copies/new_klass.rb",
38
+ "test/framework/copies/new_unseen.rb",
39
+ "test/framework/copies/original_klass.rb",
40
+ "test/framework/ext/extensions.rb",
41
+ "test/framework/ext/extensions/blog.rb",
42
+ "test/framework/lib/group/klass2.rb",
43
+ "test/framework/lib/klass.rb",
44
+ "test/framework/other/also.rb",
45
+ "test/framework/other/ignore.rb",
46
+ "test/framework/other/load.rb",
47
+ "test/framework/other/two.rb",
48
+ "test/framework/private/klass.rb",
49
+ "test/framework/test.components",
50
+ "test/helper.rb",
51
+ "test/test_autoload.rb",
52
+ "test/test_component.rb",
53
+ "test/test_component_set.rb",
54
+ "test/test_folder.rb",
55
+ "test/test_impromptu.rb",
56
+ "test/test_integration.rb",
57
+ "test/test_ordered_set.rb",
58
+ "test/test_resource.rb",
59
+ "test/test_symbol.rb"
61
60
  ]
62
61
  s.homepage = %q{http://github.com/willcannings/impromptu}
63
- s.rdoc_options = ["--charset=UTF-8"]
64
62
  s.require_paths = ["lib"]
65
63
  s.rubygems_version = %q{1.3.7}
66
64
  s.summary = %q{Component and dependency manager for Ruby}
67
65
  s.test_files = [
68
66
  "test/framework/copies/extra_klass2.rb",
69
- "test/framework/copies/new_klass.rb",
70
- "test/framework/copies/new_unseen.rb",
71
- "test/framework/copies/original_klass.rb",
72
- "test/framework/ext/extensions/blog.rb",
73
- "test/framework/ext/extensions.rb",
74
- "test/framework/lib/group/klass2.rb",
75
- "test/framework/lib/klass.rb",
76
- "test/framework/other/also.rb",
77
- "test/framework/other/ignore.rb",
78
- "test/framework/other/load.rb",
79
- "test/framework/other/two.rb",
80
- "test/framework/private/klass.rb",
81
- "test/helper.rb",
82
- "test/test_autoload.rb",
83
- "test/test_component.rb",
84
- "test/test_component_set.rb",
85
- "test/test_folder.rb",
86
- "test/test_impromptu.rb",
87
- "test/test_integration.rb",
88
- "test/test_ordered_set.rb",
89
- "test/test_resource.rb",
90
- "test/test_symbol.rb"
67
+ "test/framework/copies/new_klass.rb",
68
+ "test/framework/copies/new_unseen.rb",
69
+ "test/framework/copies/original_klass.rb",
70
+ "test/framework/ext/extensions.rb",
71
+ "test/framework/ext/extensions/blog.rb",
72
+ "test/framework/lib/group/klass2.rb",
73
+ "test/framework/lib/klass.rb",
74
+ "test/framework/other/also.rb",
75
+ "test/framework/other/ignore.rb",
76
+ "test/framework/other/load.rb",
77
+ "test/framework/other/two.rb",
78
+ "test/framework/private/klass.rb",
79
+ "test/helper.rb",
80
+ "test/test_autoload.rb",
81
+ "test/test_component.rb",
82
+ "test/test_component_set.rb",
83
+ "test/test_folder.rb",
84
+ "test/test_impromptu.rb",
85
+ "test/test_integration.rb",
86
+ "test/test_ordered_set.rb",
87
+ "test/test_resource.rb",
88
+ "test/test_symbol.rb"
91
89
  ]
92
90
 
93
91
  if s.respond_to? :specification_version then
@@ -10,9 +10,17 @@ module Impromptu
10
10
  # to it. If it is, then something very screwy has gone on and Ruby
11
11
  # cannot locate an already loaded resource.
12
12
  def const_missing(symbol)
13
+ # namespace the missing resource with the name of the
14
+ # current class or module
15
+ if self == Object
16
+ namespaced_symbol = symbol
17
+ else
18
+ namespaced_symbol = "#{self.name}::#{symbol}".to_sym
19
+ end
20
+
13
21
  # walk the resource tree and get a reference to the
14
22
  # resource or nil if we're not tracking it
15
- resource = Impromptu.root_resource.child(symbol)
23
+ resource = Impromptu.root_resource.child(namespaced_symbol)
16
24
 
17
25
  # if we don't know about the symbol, send the method to
18
26
  # Object which will raise an exception
@@ -52,6 +52,7 @@ module Impromptu
52
52
  else
53
53
  @files.first.reload
54
54
  end
55
+ self.reference.extend(Impromptu::Autoload)
55
56
  end
56
57
 
57
58
  # Unload the resource by undefining the constant representing it.
@@ -151,7 +152,7 @@ module Impromptu
151
152
  # resource doesn't exist, nil is returned
152
153
  def child(name)
153
154
  return nil unless name.is_a?(Symbol)
154
- return @children[name] if name.unnested?
155
+ return @children[name.without_leading_colons.to_sym] if name.unnested?
155
156
 
156
157
  # if the name is nested, walk the resource tree to return the
157
158
  # resource under this branch. rerturn nil if we reach a
@@ -4,7 +4,7 @@ class Symbol
4
4
  # True if this symbol contains namespaces (is a nested
5
5
  # symbol such as A::B).
6
6
  def nested?
7
- self.to_s.include? '::'
7
+ self.without_leading_colons.include? '::'
8
8
  end
9
9
 
10
10
  # True if this symbol contains no namespaces (is a root
@@ -16,7 +16,7 @@ class Symbol
16
16
  # Split a symbol into its component names (A::B =>
17
17
  # [:A, :B])
18
18
  def nested_symbols
19
- self.to_s.split('::').collect(&:to_sym)
19
+ self.without_leading_colons.split('::').collect(&:to_sym)
20
20
  end
21
21
 
22
22
  # Retrieve the base (end or final) symbol name from this
@@ -40,4 +40,17 @@ class Symbol
40
40
  name
41
41
  end
42
42
  end
43
+
44
+ # Strip leading colons from a symbol name. Two leading
45
+ # colons indicate a symbol is relative to the root
46
+ # namespace (Object) but should be removed when determining
47
+ # nesting and nested symbols.
48
+ def without_leading_colons
49
+ str = self.to_s
50
+ if str.start_with?('::')
51
+ str[2..-1]
52
+ else
53
+ str
54
+ end
55
+ end
43
56
  end
@@ -7,4 +7,9 @@ module Framework
7
7
  2
8
8
  end
9
9
  end
10
+
11
+ module SubComponent
12
+ module Leaf
13
+ end
14
+ end
10
15
  end
@@ -29,4 +29,48 @@ class TestAutload < Test::Unit::TestCase
29
29
  end
30
30
  end
31
31
  end
32
+
33
+ context "The 'private' folder" do
34
+ setup do
35
+ Impromptu.reset
36
+ Impromptu.define_components do
37
+ component 'framework' do
38
+ namespace :Framework
39
+ folder 'test/framework/private' do
40
+ file 'klass.rb', :provides => [:Klass, :SubComponent, :'Subcomponent::Leaf']
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ should "have a single component with a namespace" do
47
+ assert_equal 1, Impromptu.components.size
48
+ assert_equal :Framework, Impromptu.components['framework'].namespace
49
+ assert_not_nil Impromptu.root_resource.child(:Framework)
50
+ end
51
+
52
+ should "be able to have the namespace loaded using the autoload extension" do
53
+ assert_nothing_raised do
54
+ ::Framework
55
+ end
56
+ end
57
+
58
+ should "raise an appropriate exception when accessing a non existant resource" do
59
+ assert_raise NameError do
60
+ ::IDontExistSoRaiseAnException
61
+ end
62
+ end
63
+
64
+ should "be able to load namespace subcomponents using the autoload extension" do
65
+ assert_nothing_raised do
66
+ ::Framework::Klass
67
+ end
68
+ end
69
+
70
+ should "be able to load resource subcomponents using the autoload extension" do
71
+ assert_nothing_raised do
72
+ ::Framework::SubComponent::Leaf
73
+ end
74
+ end
75
+ end
32
76
  end
data/test/test_symbol.rb CHANGED
@@ -95,5 +95,33 @@ class TestResource < Test::Unit::TestCase
95
95
  assert_equal [:TopLevel, :'TopLevel::BottomLevel'], symbols
96
96
  end
97
97
  end
98
+
99
+ # ----------------------------------------
100
+ # Prefixed Symbol
101
+ # ----------------------------------------
102
+ context "which is prefixed" do
103
+ setup { @symbol = :'::A' }
104
+ should "return false for nested?" do
105
+ assert_equal false, @symbol.nested?
106
+ end
107
+
108
+ should "return true for unnested?" do
109
+ assert_equal true, @symbol.unnested?
110
+ end
111
+
112
+ should "return a single symbol from nested_symbols" do
113
+ assert_instance_of Array, @symbol.nested_symbols
114
+ assert_equal 1, @symbol.nested_symbols.size
115
+ assert_instance_of Symbol, @symbol.nested_symbols[0]
116
+ end
117
+
118
+ should "return itself for base_symbol" do
119
+ assert_equal :A, @symbol.base_symbol
120
+ end
121
+
122
+ should "return itself for root_symbol" do
123
+ assert_equal :A, @symbol.root_symbol
124
+ end
125
+ end
98
126
  end
99
127
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 0
9
- version: 1.0.0
8
+ - 1
9
+ version: 1.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Will Cannings
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-30 00:00:00 +10:00
17
+ date: 2010-11-16 00:00:00 +11:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -41,7 +41,6 @@ extra_rdoc_files:
41
41
  - README.rdoc
42
42
  files:
43
43
  - .document
44
- - .gitignore
45
44
  - LICENSE
46
45
  - README.rdoc
47
46
  - Rakefile
@@ -86,8 +85,8 @@ homepage: http://github.com/willcannings/impromptu
86
85
  licenses: []
87
86
 
88
87
  post_install_message:
89
- rdoc_options:
90
- - --charset=UTF-8
88
+ rdoc_options: []
89
+
91
90
  require_paths:
92
91
  - lib
93
92
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -118,8 +117,8 @@ test_files:
118
117
  - test/framework/copies/new_klass.rb
119
118
  - test/framework/copies/new_unseen.rb
120
119
  - test/framework/copies/original_klass.rb
121
- - test/framework/ext/extensions/blog.rb
122
120
  - test/framework/ext/extensions.rb
121
+ - test/framework/ext/extensions/blog.rb
123
122
  - test/framework/lib/group/klass2.rb
124
123
  - test/framework/lib/klass.rb
125
124
  - test/framework/other/also.rb
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC