log_switch 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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