log_switch 0.4.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 (148) hide show
  1. checksums.yaml +7 -0
  2. data/History.rdoc +17 -1
  3. data/lib/log_switch.rb +124 -68
  4. data/lib/log_switch/version.rb +1 -1
  5. data/spec/log_switch_spec.rb +95 -87
  6. metadata +27 -324
  7. data/lib/log_switch/mixin.rb +0 -31
  8. data/spec/coverage/assets/0.5.3/app.js +0 -88
  9. data/spec/coverage/assets/0.5.3/fancybox/blank.gif +0 -0
  10. data/spec/coverage/assets/0.5.3/fancybox/fancy_close.png +0 -0
  11. data/spec/coverage/assets/0.5.3/fancybox/fancy_loading.png +0 -0
  12. data/spec/coverage/assets/0.5.3/fancybox/fancy_nav_left.png +0 -0
  13. data/spec/coverage/assets/0.5.3/fancybox/fancy_nav_right.png +0 -0
  14. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_e.png +0 -0
  15. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_n.png +0 -0
  16. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_ne.png +0 -0
  17. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_nw.png +0 -0
  18. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_s.png +0 -0
  19. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_se.png +0 -0
  20. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_sw.png +0 -0
  21. data/spec/coverage/assets/0.5.3/fancybox/fancy_shadow_w.png +0 -0
  22. data/spec/coverage/assets/0.5.3/fancybox/fancy_title_left.png +0 -0
  23. data/spec/coverage/assets/0.5.3/fancybox/fancy_title_main.png +0 -0
  24. data/spec/coverage/assets/0.5.3/fancybox/fancy_title_over.png +0 -0
  25. data/spec/coverage/assets/0.5.3/fancybox/fancy_title_right.png +0 -0
  26. data/spec/coverage/assets/0.5.3/fancybox/fancybox-x.png +0 -0
  27. data/spec/coverage/assets/0.5.3/fancybox/fancybox-y.png +0 -0
  28. data/spec/coverage/assets/0.5.3/fancybox/fancybox.png +0 -0
  29. data/spec/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css +0 -363
  30. data/spec/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  31. data/spec/coverage/assets/0.5.3/favicon_green.png +0 -0
  32. data/spec/coverage/assets/0.5.3/favicon_red.png +0 -0
  33. data/spec/coverage/assets/0.5.3/favicon_yellow.png +0 -0
  34. data/spec/coverage/assets/0.5.3/highlight.css +0 -129
  35. data/spec/coverage/assets/0.5.3/highlight.pack.js +0 -1
  36. data/spec/coverage/assets/0.5.3/jquery-1.6.2.min.js +0 -18
  37. data/spec/coverage/assets/0.5.3/jquery.dataTables.min.js +0 -152
  38. data/spec/coverage/assets/0.5.3/jquery.timeago.js +0 -141
  39. data/spec/coverage/assets/0.5.3/jquery.url.js +0 -174
  40. data/spec/coverage/assets/0.5.3/loading.gif +0 -0
  41. data/spec/coverage/assets/0.5.3/magnify.png +0 -0
  42. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  43. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  44. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  45. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  46. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  47. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  48. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  49. data/spec/coverage/assets/0.5.3/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  50. data/spec/coverage/assets/0.5.3/smoothness/images/ui-icons_222222_256x240.png +0 -0
  51. data/spec/coverage/assets/0.5.3/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  52. data/spec/coverage/assets/0.5.3/smoothness/images/ui-icons_454545_256x240.png +0 -0
  53. data/spec/coverage/assets/0.5.3/smoothness/images/ui-icons_888888_256x240.png +0 -0
  54. data/spec/coverage/assets/0.5.3/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  55. data/spec/coverage/assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  56. data/spec/coverage/assets/0.5.3/stylesheet.css +0 -383
  57. data/spec/coverage/assets/0.7.1/application.css +0 -1110
  58. data/spec/coverage/assets/0.7.1/application.js +0 -626
  59. data/spec/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  60. data/spec/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  61. data/spec/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  62. data/spec/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  63. data/spec/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  64. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  65. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  66. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  67. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  68. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  69. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  70. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  71. data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  72. data/spec/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  73. data/spec/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  74. data/spec/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  75. data/spec/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  76. data/spec/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  77. data/spec/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  78. data/spec/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  79. data/spec/coverage/assets/0.7.1/favicon_green.png +0 -0
  80. data/spec/coverage/assets/0.7.1/favicon_red.png +0 -0
  81. data/spec/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  82. data/spec/coverage/assets/0.7.1/loading.gif +0 -0
  83. data/spec/coverage/assets/0.7.1/magnify.png +0 -0
  84. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  85. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  86. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  87. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  88. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  89. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  90. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  91. data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  92. data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  93. data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  94. data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  95. data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  96. data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  97. data/spec/coverage/index.html +0 -81
  98. data/spec/log_switch/coverage/assets/0.5.3/app.js +0 -88
  99. data/spec/log_switch/coverage/assets/0.5.3/fancybox/blank.gif +0 -0
  100. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_close.png +0 -0
  101. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_loading.png +0 -0
  102. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_nav_left.png +0 -0
  103. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_nav_right.png +0 -0
  104. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_e.png +0 -0
  105. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_n.png +0 -0
  106. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_ne.png +0 -0
  107. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_nw.png +0 -0
  108. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_s.png +0 -0
  109. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_se.png +0 -0
  110. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_sw.png +0 -0
  111. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_shadow_w.png +0 -0
  112. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_title_left.png +0 -0
  113. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_title_main.png +0 -0
  114. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_title_over.png +0 -0
  115. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancy_title_right.png +0 -0
  116. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancybox-x.png +0 -0
  117. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancybox-y.png +0 -0
  118. data/spec/log_switch/coverage/assets/0.5.3/fancybox/fancybox.png +0 -0
  119. data/spec/log_switch/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.css +0 -363
  120. data/spec/log_switch/coverage/assets/0.5.3/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
  121. data/spec/log_switch/coverage/assets/0.5.3/favicon_green.png +0 -0
  122. data/spec/log_switch/coverage/assets/0.5.3/favicon_red.png +0 -0
  123. data/spec/log_switch/coverage/assets/0.5.3/favicon_yellow.png +0 -0
  124. data/spec/log_switch/coverage/assets/0.5.3/highlight.css +0 -129
  125. data/spec/log_switch/coverage/assets/0.5.3/highlight.pack.js +0 -1
  126. data/spec/log_switch/coverage/assets/0.5.3/jquery-1.6.2.min.js +0 -18
  127. data/spec/log_switch/coverage/assets/0.5.3/jquery.dataTables.min.js +0 -152
  128. data/spec/log_switch/coverage/assets/0.5.3/jquery.timeago.js +0 -141
  129. data/spec/log_switch/coverage/assets/0.5.3/jquery.url.js +0 -174
  130. data/spec/log_switch/coverage/assets/0.5.3/loading.gif +0 -0
  131. data/spec/log_switch/coverage/assets/0.5.3/magnify.png +0 -0
  132. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  133. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  134. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  135. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  136. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  137. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  138. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  139. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  140. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-icons_222222_256x240.png +0 -0
  141. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  142. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-icons_454545_256x240.png +0 -0
  143. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-icons_888888_256x240.png +0 -0
  144. data/spec/log_switch/coverage/assets/0.5.3/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  145. data/spec/log_switch/coverage/assets/0.5.3/smoothness/jquery-ui-1.8.4.custom.css +0 -295
  146. data/spec/log_switch/coverage/assets/0.5.3/stylesheet.css +0 -383
  147. data/spec/log_switch/coverage/index.html +0 -81
  148. data/spec/log_switch/mixin_spec.rb +0 -89
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4867bb196cfc5e32a6d26bb00333e696784be8cf
4
+ data.tar.gz: e51462e07b1c9a0bac175a6c21321054fdcd638b
5
+ SHA512:
6
+ metadata.gz: ddea293b90d0a3cdb83183c9024e48af3cb4ce474640da269dc85d8d7570c47c02c8cd4ab0e2a01a8262459c423b446523fbdc449ede02b178d463e84dc57d2b
7
+ data.tar.gz: 3edbe83b86a2962d19712fd8c11208bb37e47ad447c20b7de5c3795e7585ba2868969474691a487b875f87da04960b4f0decd59d3a65c9408d8ce7dc808d7f56
@@ -1,3 +1,20 @@
1
+ === 1.0.0 / 2014-10-10
2
+
3
+ * Improvements:
4
+ * LogSwitch can now be included in your own module, then that included in
5
+ other modules. This allows toggling logging per includer.
6
+ * Other stuff:
7
+ * Removed LogSwitch::Mixin in favor of simpler implementation.
8
+ * Bug fixes:
9
+ * gh-5[https://github.com/turboladen/log_switch/issues/5]: The improvements
10
+ listed above alleviate this problem.
11
+
12
+ === 0.4.1 / 2013-01-04
13
+
14
+ * Bug fixes:
15
+ * Initialize @log before calling it, thus removing warnings when running with
16
+ -w.
17
+
1
18
  === 0.4.0 / 2012-11-12
2
19
 
3
20
  * Improvements:
@@ -48,4 +65,3 @@
48
65
  * +require+ and +extend+ to mix in to your class/module to get a single point of logging
49
66
  * Switch on/off logging
50
67
  * Use whatever Logger you want
51
-
@@ -1,93 +1,149 @@
1
- require "logger"
2
- require File.expand_path(File.dirname(__FILE__) + '/log_switch/version')
3
- require File.expand_path(File.dirname(__FILE__) + '/log_switch/mixin')
1
+ require 'logger'
2
+ require_relative 'log_switch/version'
4
3
 
5
4
  # LogSwitch allows for extending a class/module with a logger and, most
6
5
  # importantly, allows for turning off logging programmatically. See the
7
6
  # +README.rdoc+ for more info.
8
7
  module LogSwitch
8
+ def self.included(base)
9
+ @includers ||= []
10
+ @includers << base
11
+ base.extend ClassMethods
12
+ base.send(:include, InstanceMethods)
9
13
 
10
- # Saves the name of the class that extended itself with this module. Used
11
- # by {LogSwitch::Mixin} to know which class to include itself to.
12
- def self.extend_object(base)
13
- @extender = base
14
- super(base)
14
+ base.class_eval do
15
+ def self.included(b)
16
+ b.extend ClassMethods
17
+ b.send :include, InstanceMethods
18
+ end
19
+ end
15
20
  end
16
21
 
17
- # Simply returns the name of the class that extended itself with this module.
18
- # It's set by {.extend_object}.
19
- #
20
- # @return [Class] The class that extended itself with LogSwitch.
21
- def self.extender
22
- @extender
22
+ # Defaults to a +Logger+ writing to STDOUT.
23
+ def self.logger
24
+ @logger ||= ::Logger.new STDOUT
23
25
  end
24
26
 
25
- # Use to turn logging on or off.
26
- attr_writer :log
27
+ def self.logger=(new_logger)
28
+ @logger = new_logger
29
+ end
27
30
 
28
- # Set this to the Logger you want to use.
29
- attr_writer :logger
31
+ # Sets back to defaults.
32
+ def self.reset_config!
33
+ self.logger = ::Logger.new STDOUT
30
34
 
31
- # Set the log level so you don't have to pass it in on your call.
32
- attr_writer :log_level
35
+ @includers.each do |klass|
36
+ klass.logging_enabled = false
37
+ klass.log_class_name = true
38
+ end
39
+ end
33
40
 
34
- # Toggle prepending the class name of the #log caller to the log message.
35
- attr_writer :log_class_name
41
+ module ClassMethods
42
+ # @param value [Boolean]
43
+ def logging_enabled
44
+ @@logging_enabled ||= false
45
+ end
36
46
 
37
- # Tells whether logging is turned on or not.
38
- def log?
39
- @log != false
40
- end
47
+ # Tells whether logging is turned on or not.
48
+ #
49
+ # @param value [Boolean]
50
+ def logging_enabled?
51
+ !!logging_enabled
52
+ end
41
53
 
42
- # Defaults to a +Logger+ writing to STDOUT.
43
- def logger
44
- @logger ||= ::Logger.new STDOUT
45
- end
54
+ # Use to turn logging on or off.
55
+ #
56
+ # @param value [Boolean]
57
+ def logging_enabled=(value)
58
+ @@logging_enabled = value
59
+ end
46
60
 
47
- # @return [Symbol] The current default log level. Starts off as :debug.
48
- def log_level
49
- @log_level ||= :debug
50
- end
61
+ # @return [Symbol] The current default log level. Starts off as :debug.
62
+ def default_log_level
63
+ @@default_log_level ||= :debug
64
+ end
51
65
 
52
- # @return [Boolean] Tells whether logging of the class name with the log
53
- # message is turned on.
54
- def log_class_name?
55
- @log_class_name == true
56
- end
66
+ # @param level [Symbol]
67
+ def default_log_level=(level)
68
+ @@default_log_level = level
69
+ end
57
70
 
58
- # {#log} calls the block given to this method before it logs every time.
59
- # This, thus, acts as a hook in the case where you want to make sure some
60
- # code gets executed before you log a message. Useful for making sure a file
61
- # exists before logging to it.
62
- #
63
- # @param [Proc] block The block of code to execute before logging a message
64
- # with {#log}.
65
- def before(&block)
66
- @before_block ||= block
71
+ # @return [Boolean] Tells whether logging of the class name with the log
72
+ # message is turned on.
73
+ def log_class_name?
74
+ log_class_name
75
+ end
76
+
77
+ def log_class_name
78
+ @@log_class_name ||= true
79
+ end
80
+
81
+ # Toggle prepending the class name of the #log caller to the log message.
82
+ def log_class_name=(value)
83
+ @@log_class_name = value
84
+ end
85
+
86
+ def logger
87
+ @@logger ||= LogSwitch.logger
88
+ end
89
+
90
+ def logger=(new_logger)
91
+ @@logger = new_logger
92
+ end
93
+
94
+ # {#log} calls the block given to this method before it logs every time.
95
+ # This, thus, acts as a hook in the case where you want to make sure some
96
+ # code gets executed before you log a message. Useful for making sure a file
97
+ # exists before logging to it.
98
+ #
99
+ # @param [Proc] block The block of code to execute before logging a message
100
+ # with {#log}.
101
+ def before_log=(block)
102
+ @@before_block ||= block
103
+ end
104
+
105
+ def before_log
106
+ @@before_block ||= Proc.new do; end
107
+ end
67
108
  end
68
109
 
69
- # Logs a message using the level provided. If no level provided, use
70
- # +@log_level+.
71
- #
72
- # @param [String] message The message to log.
73
- # @param [Symbol] level The log level to send to your Logger.
74
- def log(message, level=log_level)
75
- before.call unless before.nil?
76
- yield if block_given?
77
-
78
- if log?
79
- if message.respond_to? :each_line
80
- message.each_line { |line| logger.send level, line.chomp }
81
- else
82
- logger.send(level, message)
110
+ module InstanceMethods
111
+ def logger
112
+ self.class.logger
113
+ end
114
+
115
+ # Logs a message using the level provided. If no level provided, use
116
+ # +@log_level+.
117
+ #
118
+ # @param [String] message The message to log.
119
+ # @param [Symbol] level The log level to send to your Logger.
120
+ def log(message, level=nil)
121
+ level ||= self.class.default_log_level
122
+
123
+ self.class.before_log.call
124
+ yield if block_given?
125
+
126
+ if self.class.logging_enabled?
127
+ if message.respond_to? :each_line
128
+ message.each_line do |line|
129
+ msg = filter_class_name(line.chomp)
130
+ logger.send(level, msg)
131
+ end
132
+ else
133
+ message = filter_class_name(message)
134
+ logger.send(level, message)
135
+ end
83
136
  end
84
137
  end
85
- end
86
138
 
87
- # Sets back to defaults.
88
- def reset_config!
89
- self.log = true
90
- self.logger = ::Logger.new STDOUT
91
- self.log_class_name = false
139
+ private
140
+
141
+ def filter_class_name(message)
142
+ if self.class.log_class_name?
143
+ "<#{self.class.name}> #{message}"
144
+ else
145
+ message
146
+ end
147
+ end
92
148
  end
93
149
  end
@@ -1,3 +1,3 @@
1
1
  module LogSwitch
2
- VERSION = '0.4.0'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -1,121 +1,129 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
- describe Kernel do
4
- def self.get_requires
5
- Dir[File.dirname(__FILE__) + '/../lib/log_switch/**/*.rb']
6
- end
3
+ class IncluderClass; include LogSwitch; end;
7
4
 
8
- # Try to require each of the files in LogSwitch
9
- get_requires.each do |r|
10
- it "should require #{r}" do
5
+ describe LogSwitch do
6
+ before { LogSwitch.reset_config! }
7
+ specify { expect(LogSwitch::VERSION).to eq '1.0.0' }
8
+
9
+ describe 'base class methods' do
10
+ describe ".included" do
11
+ it "sets @includers on the class object that extended" do
12
+ expect(described_class.instance_variable_get(:@includers)).
13
+ to include(IncluderClass)
14
+ end
15
+ end
11
16
 
12
- # A require returns true if it was required, false if it had already been
13
- # required, and nil if it couldn't require.
14
- Kernel.require(r.to_s).should_not be_nil
17
+ describe ".logger" do
18
+ it "is a Logger by default" do
19
+ expect(described_class.logger).to be_a Logger
20
+ end
15
21
  end
16
22
  end
17
- end
18
23
 
19
- describe LogSwitch do
20
- around :each do |example|
21
- class MyClass; extend LogSwitch; end;
22
- example.run
23
- MyClass.reset_config!
24
- end
24
+ describe IncluderClass do
25
+ subject { IncluderClass.new }
25
26
 
26
- it { LogSwitch::VERSION.should == '0.4.0' }
27
+ describe ".logging_enabled?" do
28
+ specify { expect(described_class).to respond_to(:logging_enabled?) }
27
29
 
28
- describe ".extend_object" do
29
- it "sets @extender on the class object that extended" do
30
- LogSwitch.instance_variable_get(:@extender).should == MyClass
30
+ it 'defaults to false' do
31
+ expect(described_class.logging_enabled?).to eq false
32
+ end
33
+
34
+ it 'can be set to true' do
35
+ described_class.logging_enabled = true
36
+ expect(described_class).to be_logging_enabled
37
+ end
31
38
  end
32
- end
33
39
 
34
- describe ".extender" do
35
- it "returns LogSwitch's @extender" do
36
- LogSwitch.extender.should == LogSwitch.instance_variable_get(:@extender)
40
+ describe ".logger" do
41
+ it "is a Logger by default" do
42
+ expect(described_class.logger).to be_a Logger
43
+ end
37
44
  end
38
- end
39
45
 
40
- describe ".log" do
41
- it "can log at any log level" do
42
- logger = double "Logger"
43
- logger.should_receive(:send).with(:meow, "stuff")
44
- MyClass.logger = logger
45
- MyClass.log("stuff", :meow)
46
+ describe ".default_log_level" do
47
+ it "defaults to :debug" do
48
+ expect(described_class.default_log_level).to eq :debug
49
+ end
46
50
  end
47
51
 
48
- it "raises when log_level isn't a Symbol" do
49
- expect { MyClass.log("stuff", "meow") }.to raise_error NoMethodError
52
+ describe ".log_class_name?" do
53
+ specify { expect(described_class).to respond_to(:log_class_name?) }
50
54
  end
51
55
 
52
- it "can take a block" do
53
- object = Object.new
54
- object.stub :test_in_block
55
- object.should_receive(:test_in_block)
56
+ describe ".log_class_name" do
57
+ specify { expect(described_class).to respond_to(:log_class_name) }
56
58
 
57
- MyClass.log('hi') { object.test_in_block }
59
+ it 'defaults to true' do
60
+ expect(described_class.log_class_name).to eq true
61
+ end
58
62
 
59
- object.unstub :test_in_block
63
+ it 'can be set to false' do
64
+ pending "Can't figure out why this doesn't pass. It works live..."
65
+ described_class.log_class_name = false
66
+ expect(described_class.log_class_name).to eq false
67
+ end
60
68
  end
61
69
 
62
- context "with .before" do
63
- it "calls the @before_block if that's set" do
64
- MyClass.before { puts "This is also before" }
65
- MyClass.instance_variable_get(:@before_block).should_receive(:call).once
66
- MyClass.log 'hi'
70
+ describe ".before_log" do
71
+ it "assigns the given block to @before_block" do
72
+ described_class.before_log = Proc.new { "I'm a block" }
73
+ expect(described_class.before_log).to be_a Proc
67
74
  end
68
75
  end
69
76
 
70
- context "can log non-String objects" do
71
- it "an Array of various object types" do
72
- array = [1, 'stuff', { :two => 2 }]
73
- MyClass.logger.should_receive(:send).with(:debug, array)
74
- expect { MyClass.log array }.to_not raise_exception
77
+ describe "#log" do
78
+ let(:logger) do
79
+ double "Logger"
75
80
  end
76
81
 
77
- it "an Exception" do
78
- ex = StandardError.new("Test error.")
79
- MyClass.logger.should_receive(:send).with(:debug, ex)
80
- expect { MyClass.log ex }.to_not raise_exception
82
+ let(:object) do
83
+ o = Object.new
84
+ allow(o).to receive :test_in_block
85
+ o
81
86
  end
82
- end
83
- end
84
87
 
85
- describe ".log?" do
86
- specify { MyClass.log?.should be_true }
88
+ # before do
89
+ # described_class.logger = logger
90
+ # end
87
91
 
88
- specify {
89
- MyClass.log = false
90
- MyClass.log?.should be_false
91
- }
92
- end
92
+ it "can log at any log level" do
93
+ #expect(logger).to receive(:send).with(:meow, "<IncluderClass> stuff")
94
+ subject.log("stuff", :meow)
95
+ end
93
96
 
94
- describe ".logger" do
95
- it "is a Logger by default" do
96
- MyClass.logger.should be_a Logger
97
- end
98
- end
97
+ it "can take a block" do
98
+ allow(logger).to receive(:send).with(:debug, "<IncluderClass> hi")
99
+ expect(object).to receive(:test_in_block)
100
+ subject.log('hi') { object.test_in_block }
101
+ end
99
102
 
100
- describe ".log_level" do
101
- it "defaults to :debug" do
102
- MyClass.log_level.should == :debug
103
- end
104
- end
103
+ context "with .before_log" do
104
+ it "calls the @before_block if that's set" do
105
+ allow(logger).to receive(:send).with(:debug, "<IncluderClass> hi")
106
+ described_class.before_log = Proc.new { puts "This is also before" }
107
+ expect(described_class.before_log).to receive(:call).once
108
+ subject.log 'hi'
109
+ end
110
+ end
105
111
 
106
- describe ".before" do
107
- it "assigns the given block to @before_block" do
108
- MyClass.before { "I'm a block" }
109
- MyClass.instance_variable_get(:@before_block).should be_a Proc
112
+ context "can log non-String objects" do
113
+ it "an Array of various object types" do
114
+ array = [1, 'stuff', { :two => 2 }]
115
+ message = "<IncluderClass> #{array}"
116
+ allow(logger).to receive(:send).with(:debug, message)
117
+ expect { subject.log array }.to_not raise_exception
118
+ end
119
+
120
+ it "an Exception" do
121
+ ex = StandardError.new("Test error.")
122
+ message = "<IncluderClass> #{ex.message}"
123
+ allow(logger).to receive(:send).with(:debug, message)
124
+ expect { subject.log ex }.to_not raise_exception
125
+ end
126
+ end
110
127
  end
111
128
  end
112
-
113
- describe ".log_class_name?" do
114
- specify { MyClass.log_class_name?.should be_false }
115
-
116
- specify {
117
- MyClass.log_class_name = true
118
- MyClass.log_class_name?.should be_true
119
- }
120
- end
121
129
  end