needle 0.9.0 → 1.0.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 (40) hide show
  1. data/doc/faq/faq.yml +396 -14
  2. data/doc/manual-html/chapter-1.html +33 -4
  3. data/doc/manual-html/chapter-2.html +44 -6
  4. data/doc/manual-html/chapter-3.html +34 -5
  5. data/doc/manual-html/chapter-4.html +33 -4
  6. data/doc/manual-html/chapter-5.html +208 -4
  7. data/doc/manual-html/chapter-6.html +226 -4
  8. data/doc/manual-html/chapter-7.html +165 -4
  9. data/doc/manual-html/chapter-8.html +138 -6
  10. data/doc/manual-html/index.html +36 -9
  11. data/doc/manual/manual.rb +1 -1
  12. data/doc/manual/manual.yml +17 -4
  13. data/doc/manual/page.erb +2 -1
  14. data/doc/manual/parts/02_namespaces.txt +11 -2
  15. data/doc/manual/parts/03_overview.txt +1 -1
  16. data/doc/manual/parts/interceptors_architecture.txt +5 -0
  17. data/doc/manual/parts/interceptors_attaching.txt +64 -0
  18. data/doc/manual/parts/interceptors_custom.txt +25 -0
  19. data/doc/manual/parts/interceptors_ordering.txt +13 -0
  20. data/doc/manual/parts/interceptors_overview.txt +5 -0
  21. data/doc/manual/parts/libraries_creating.txt +30 -0
  22. data/doc/manual/parts/libraries_overview.txt +3 -0
  23. data/doc/manual/parts/libraries_using.txt +31 -0
  24. data/doc/manual/parts/logging_configuration.txt +30 -0
  25. data/doc/manual/parts/logging_logfactory.txt +31 -0
  26. data/doc/manual/parts/logging_overview.txt +5 -0
  27. data/doc/manual/parts/models_models.txt +35 -0
  28. data/doc/manual/parts/models_overview.txt +3 -0
  29. data/doc/manual/parts/models_pipelines.txt +63 -0
  30. data/lib/needle/container.rb +52 -7
  31. data/lib/needle/lifecycle/initialize.rb +1 -1
  32. data/lib/needle/log-factory.rb +46 -8
  33. data/lib/needle/thread.rb +6 -0
  34. data/lib/needle/version.rb +2 -2
  35. data/test/pipeline/tc_collection.rb +1 -1
  36. data/test/pipeline/tc_element.rb +2 -2
  37. data/test/services.rb +21 -0
  38. data/test/tc_container.rb +18 -0
  39. data/test/tc_logger.rb +35 -1
  40. metadata +17 -2
@@ -23,6 +23,12 @@ module Needle
23
23
  # cycles in the dependency graph of services.
24
24
  class QueryableMutex < Mutex
25
25
 
26
+ # Create a new unlocked QueryableMutex.
27
+ def initialize
28
+ super
29
+ @locking_thread = nil
30
+ end
31
+
26
32
  # Checks to see if the current thread has the mutex locked, and if it
27
33
  # does, raises an exception. Otherwise, locks the mutex and sets the
28
34
  # locking thread to Thread.current.
@@ -17,8 +17,8 @@
17
17
  module Needle
18
18
  module Version
19
19
 
20
- MAJOR = 0
21
- MINOR = 9
20
+ MAJOR = 1
21
+ MINOR = 0
22
22
  TINY = 0
23
23
 
24
24
  # The version of the Needle library in use.
@@ -34,7 +34,7 @@ class TC_Pipeline_Collection < Test::Unit::TestCase
34
34
 
35
35
  def call( *args )
36
36
  args.first << "|Mock"
37
- succ.call *args
37
+ succ.call( *args )
38
38
  args.first << "|Done"
39
39
  end
40
40
 
@@ -56,8 +56,8 @@ class TC_Pipeline_Element < Test::Unit::TestCase
56
56
  element1 = Needle::Pipeline::Element.new( nil, :test1, 25 )
57
57
  element2 = Needle::Pipeline::Element.new( nil, :test2, 75 )
58
58
 
59
- assert_equal -1, element1 <=> element2
60
- assert_equal 1, element2 <=> element1
59
+ assert_equal( -1, element1 <=> element2 )
60
+ assert_equal( 1, element2 <=> element1 )
61
61
  end
62
62
 
63
63
  def test_comparable
@@ -0,0 +1,21 @@
1
+ module A
2
+ module B
3
+ module C
4
+
5
+ def register_services( container )
6
+ container.namespace( :foo ) do |ns|
7
+ ns.register( :bar ) { "hello" }
8
+ end
9
+ end
10
+ module_function :register_services
11
+
12
+ def register_other_services( container )
13
+ container.namespace( :blah ) do |ns|
14
+ ns.register( :baz ) { "hello" }
15
+ end
16
+ end
17
+ module_function :register_other_services
18
+
19
+ end
20
+ end
21
+ end
@@ -311,4 +311,22 @@ class TC_Container < Test::Unit::TestCase
311
311
  assert_same p1, p2
312
312
  end
313
313
 
314
+ def test_require_default
315
+ container = Needle::Container.new
316
+ container.register( :service_models, :pipeline=>[] ) { Hash[ :singleton => [] ] }
317
+ container.require( "services", "A::B::C" )
318
+
319
+ assert_not_nil container[:foo]
320
+ assert_not_nil container[:foo][:bar]
321
+ end
322
+
323
+ def test_require_custom
324
+ container = Needle::Container.new
325
+ container.register( :service_models , :pipeline=>[] ) { Hash[ :singleton => [] ] }
326
+ container.require( "services", "A::B::C", :register_other_services )
327
+
328
+ assert_not_nil container[:blah]
329
+ assert_not_nil container[:blah][:baz]
330
+ end
331
+
314
332
  end
@@ -44,7 +44,7 @@ class TC_Logger < Test::Unit::TestCase
44
44
 
45
45
  def teardown
46
46
  logs = Dir[File.join(File.dirname(__FILE__),"*.log")]
47
- File.delete *logs unless logs.empty?
47
+ File.delete( *logs ) unless logs.empty?
48
48
  end
49
49
 
50
50
  def test_log_filename
@@ -73,6 +73,40 @@ class TC_Logger < Test::Unit::TestCase
73
73
  factory.close
74
74
  end
75
75
 
76
+ def test_log_bad_option
77
+ assert_raise( ArgumentError ) do
78
+ Needle::LogFactory.new :bogus => "hello"
79
+ end
80
+ end
81
+
82
+ def test_bad_log_level_option
83
+ assert_raise( ArgumentError ) do
84
+ Needle::LogFactory.new :levels => { "test.*" => { :bogus => 5 } }
85
+ end
86
+ end
87
+
88
+ def test_log_config_via_yaml
89
+ require 'yaml'
90
+ config = YAML.load( <<-EOF )
91
+ ---
92
+ filename: ./somewhere.log
93
+ roll-age: 5
94
+ roll-size: 10241024
95
+ default-date-format: "%Y-%m-%d %H:%M:%S"
96
+ default-message-format: "[%d] %C - %m"
97
+ default-level: WARN
98
+ levels:
99
+ test.*: INFO
100
+ verbose.*:
101
+ level: WARN
102
+ date-format: "%Y-%m-%d"
103
+ message-format: "%C - %m"
104
+ EOF
105
+ assert_nothing_raised do
106
+ Needle::LogFactory.new config
107
+ end
108
+ end
109
+
76
110
  def test_log_get
77
111
  factory = Needle::LogFactory.new
78
112
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.1
3
3
  specification_version: 1
4
4
  name: needle
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.9.0
7
- date: 2004-10-28
6
+ version: 1.0.0
7
+ date: 2004-11-04
8
8
  summary: Needle is a Dependency Injection/Inversion of Control container for Ruby. It supports both type-2 (setter) and type-3 (constructor) injection. It takes advantage of the dynamic nature of Ruby to provide a rich and flexible approach to injecting dependencies.
9
9
  require_paths:
10
10
  - lib
@@ -60,20 +60,34 @@ files:
60
60
  - doc/manual/page.erb
61
61
  - doc/manual/index.erb
62
62
  - doc/manual/manual.rb
63
+ - doc/manual/parts/logging_logfactory.txt
64
+ - doc/manual/parts/models_pipelines.txt
63
65
  - doc/manual/parts/02_namespaces.txt
66
+ - doc/manual/parts/models_overview.txt
64
67
  - doc/manual/parts/01_support.txt
65
68
  - doc/manual/parts/03_locator.txt
66
69
  - doc/manual/parts/02_services.txt
67
70
  - doc/manual/parts/04_setup.txt
68
71
  - doc/manual/parts/01_alternatives.txt
69
72
  - doc/manual/parts/04_overview.txt
73
+ - doc/manual/parts/models_models.txt
74
+ - doc/manual/parts/logging_overview.txt
75
+ - doc/manual/parts/interceptors_architecture.txt
76
+ - doc/manual/parts/interceptors_attaching.txt
70
77
  - doc/manual/parts/01_what_is_needle.txt
71
78
  - doc/manual/parts/03_overview.txt
72
79
  - doc/manual/parts/02_creating.txt
80
+ - doc/manual/parts/libraries_using.txt
73
81
  - doc/manual/parts/01_license.txt
74
82
  - doc/manual/parts/01_use_cases.txt
83
+ - doc/manual/parts/libraries_creating.txt
75
84
  - doc/manual/parts/02_overview.txt
76
85
  - doc/manual/parts/03_conventional.txt
86
+ - doc/manual/parts/logging_configuration.txt
87
+ - doc/manual/parts/interceptors_custom.txt
88
+ - doc/manual/parts/libraries_overview.txt
89
+ - doc/manual/parts/interceptors_overview.txt
90
+ - doc/manual/parts/interceptors_ordering.txt
77
91
  - lib/needle.rb
78
92
  - lib/needle
79
93
  - lib/needle/interceptor.rb
@@ -106,6 +120,7 @@ files:
106
120
  - test/lifecycle
107
121
  - test/models
108
122
  - test/tc_interceptor_chain.rb
123
+ - test/services.rb
109
124
  - test/tc_logger.rb
110
125
  - test/tc_container.rb
111
126
  - test/pipeline/tc_element.rb