todonotes 0.1.0 → 0.1.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.
@@ -1,38 +1,58 @@
1
+ =begin rdoc
2
+ Examples of the different syntax version of the fixme/and todo-command.
3
+ =end
1
4
  $:.unshift('../lib')
2
5
  require 'todonotes'
3
6
 
7
+ #a ToDo with default text 'ToDo' and without temporary result
4
8
  to do
5
- "mein Ergebnis"
9
+ "my temporary result"
6
10
  end
7
11
 
8
- todo "mein Text"
12
+ #a ToDo without temporary result
13
+ todo "my description of the missing code"
9
14
 
10
- todo { "mein Ergebnis" }
15
+ #a ToDo without description, but a temporary result
16
+ todo { "my temporary result" }
11
17
 
12
- todo ('mein Text' ) { "mein Ergebnis" }
18
+ #a ToDo with description and temporary result
19
+ todo ('my description of the missing code' ) { "my temporary result" }
13
20
 
21
+
22
+ #a ToDo without description, but a temporary result
14
23
  todo do
15
- "mein Ergebnis"
24
+ "my temporary result"
16
25
  end
17
26
 
27
+ #a ToDo with description and temporary result
18
28
  todo 'Text' do
19
- "mein Ergebnis"
29
+ "my temporary result"
20
30
  end
21
31
 
22
32
  ####################
23
- 2.times { fixme "mein Text" }
24
33
 
25
- fixme { "mein Ergebnis" }
34
+ #a FixMe without description, but a temporary result
35
+ fixme { "my temporary result" }
26
36
 
27
- fixme ('mein Text' ) { "mein Ergebnis" }
37
+ #a FixMe with description and temporary result
38
+ fixme ('my description if the wrong code' ) { "my temporary result" }
28
39
 
40
+ #a FixMe without description, but a temporary result
29
41
  fixme do
30
- "mein Ergebnis"
42
+ "my temporary result"
31
43
  end
32
44
 
33
- fixme 'Text' do
34
- "mein Ergebnis"
45
+ #a FixMe with description and temporary result
46
+ fixme 'my description if the wrong code' do
47
+ "my temporary result"
35
48
  end
49
+ ####################
50
+ #a Fixme is called twice
51
+ 2.times { fixme "my description of the missing code" }
52
+ #a ToDo is called three times
53
+ 3.times { todo "my description of the missing code" }
54
+
36
55
  ####################
37
56
 
57
+ #Get an overview of all ToDos and FixMes
38
58
  Todonotes.print_stats
@@ -1,13 +1,22 @@
1
+ =begin rdoc
2
+ =Example of usage fixme/todo
3
+ Write a script to count all prime between 1 to 10.
4
+
5
+ For each number, write a message like
6
+ x is [a|no] prime number
7
+
8
+ Until you know, how to determine, if a number is a prime,
9
+ you can take the temporary algorithm: each odd number is a prime.
10
+ =end
1
11
  $:.unshift('../lib')
2
12
  require 'todonotes'
3
13
 
4
14
  #
5
- #
6
- Todonotes.instance.logger.level = Log4r::WARN #only first time of callinf a fixme/todo
7
- Todonotes.instance.logger.level = Log4r::INFO #report all calls of fixme/todo
15
+ Todonotes.logger.level = Log4r::WARN #only first time of callinf a fixme/todo
16
+ #~ Todonotes.logger.level = Log4r::INFO #report all calls of fixme/todo
8
17
 
9
18
  primecount = 0
10
- for i in 1..10
19
+ 10.times do|i|
11
20
  if fixme "Calculate if prime" do
12
21
  i.odd? #tempory: odd = prim
13
22
  end
@@ -21,5 +30,5 @@ end
21
30
  todo "Return total number of primes"
22
31
 
23
32
  #Details
24
- Todonotes.print_stats()
33
+ puts Todonotes.print_stats()
25
34
 
@@ -1,12 +1,23 @@
1
+ =begin rdoc
2
+ =Example of usage fixme/todo
3
+ Write a script to count all prime between 1 to 10.
4
+
5
+ For each number, write a message like
6
+ x is [a|no] prime number
7
+
8
+ Until you know, how to determine, if a number is a prime,
9
+ you can take the temporary algorithm: each odd number is a prime.
10
+ =end
1
11
  $:.unshift('../lib')
2
12
  require 'todonotes'
3
13
 
4
14
  #
5
- #
6
- Todonotes.instance.logger.level = Log4r::WARN #only first time of callinf a fixme/todo
7
- Todonotes.instance.logger.level = Log4r::INFO #report all calls of fixme/todo
15
+ Todonotes.logger.level = Log4r::WARN #only first time of callinf a fixme/todo
16
+ Todonotes.logger.level = Log4r::INFO #report all calls of fixme/todo
8
17
 
9
18
  class Fixnum
19
+ #Decide if Fixnum is a prime.
20
+ #This method is only a temporarysolution.
10
21
  def prime?
11
22
  fixme "Calculate if prime" do
12
23
  self.odd? #tempory: odd = prim
@@ -15,7 +26,7 @@ class Fixnum
15
26
  end
16
27
 
17
28
  primecount = 0
18
- for i in 1..10
29
+ 10.times do|i|
19
30
  if i.prime?
20
31
  primecount += 1
21
32
  puts "#{i} is a prime number"
@@ -27,6 +38,6 @@ end
27
38
  todo "Return total number of primes"
28
39
 
29
40
  #Details
30
- Todonotes.print_stats()
41
+ puts Todonotes.print_stats()
31
42
 
32
43
 
@@ -26,186 +26,75 @@ Gem based on a proposal in http://forum.ruby-portal.de/viewtopic.php?f=11&t=1195
26
26
  require 'singleton'
27
27
  require 'log4r'
28
28
 
29
- =begin rdoc
30
- Define a formatter.
31
- =end
32
- class Log4r::FixmeFormatter < Log4r::BasicFormatter
33
- =begin rdoc
34
- If event is an Array, the output is adapted.
35
-
36
- This outputter is only for internal use via Todonotes.
37
- =end
38
- def format(event)
39
- #@@basicformat "%*s %s"
40
- #~ buff = sprintf("%-*s %-5s", Log4r::MaxLevelLength, Log4r::LNAMES[event.level],
41
- #~ event.data.is_a?(Array) ? event.data.first : event.name)
42
- buff = "%-5s" % (event.data.is_a?(Array) ? event.data.first : event.name)
43
- #~ buff += (event.tracer.nil? ? "" : "(#{event.tracer[2]})") + ": "
44
- buff << ": "
45
- buff << format_object(event.data.is_a?(Array) ? event.data.last : event.data)
46
- buff << (event.tracer.nil? ? "" : " (#{event.tracer.join('/')})")
47
- buff << "\n"
48
- buff
49
- end
50
- end
29
+ require_relative 'todonotes/todonotes'
30
+ require_relative 'todonotes/todo'
31
+ require_relative 'todonotes/log4r'
32
+ require_relative 'todonotes/kernel'
51
33
 
52
34
  =begin rdoc
53
- Singleton definition for a fixme.
35
+ Module Todonotes.
54
36
 
55
- You can use Fixme#instance to set some global settings:
56
- * FiXme#log2file Define log file
57
- * FiXme#logger adapt level, outputter ...
58
- * FiXme#codeline get Hash with counter per ToDo-locations.
59
- * FiXme#overview get overview text with ToDo-locations.
37
+ Encapsuate:
38
+ * Todonotes::Todonotes (Singleton)
39
+ * Todonotes::FixmeFormatter
60
40
  =end
61
- class Todonotes
62
- VERSION = '0.1.0'
63
- include Singleton
41
+ module Todonotes
42
+ VERSION = '0.1.1'
43
+ #'singleton'-instance of Todonotes
44
+ TODONOTES = Todonotes.new()
64
45
  =begin rdoc
65
- Define the singleton-instance.
66
- =end
67
- def initialize()
68
- # @codeline is a Hash with Filename and codeline (key). Value is the number of calls.
69
- @codeline = Hash.new(0)
70
- @logger = Log4r::Logger.new('ToDo')
71
- @logger.outputters = Log4r::StdoutOutputter.new('ToDo',
72
- :level => Log4r::ALL,
73
- :formatter => Log4r::FixmeFormatter
74
- )
75
- #~ @logger.trace = true
76
- end
77
- #Get logger to define alternative outputters...
78
- attr_reader :logger
79
- =begin rdoc
80
- Write the todo's in a logging file.
81
-
82
- Default filename is $0.todo
46
+ Define module-methods
83
47
  =end
84
- def log2file(filename = File.basename($0) + '.todo', level = Log4r::ALL)
85
- @logger.add( Log4r::FileOutputter.new('ToDo',
86
- :filename => filename,
87
- :level => level,
88
- :formatter => Log4r::FixmeFormatter
89
- ))
48
+ class << self
90
49
 
91
- end
92
- #Direct access to the codeline list. See also #todo_overview
93
- attr_reader :codeline
94
50
  =begin rdoc
95
- Report a FixMe or a ToDo.
96
-
97
- The comment is logged,
98
- the block is evaluated to get a temporary result.
51
+ See Todonotes::Todonotes#overview
99
52
  =end
100
- def todo( comment, type = :ToDo, &block)
101
- res = nil
102
- key = caller[1].split(':in').first
103
- if block_given?
104
- res = yield self
105
- res
53
+ def print_stats( with_type = false )
54
+ TODONOTES.overview( with_type )
106
55
  end
107
- log_todo(key, type, comment, res)
108
- #~ @logger.debug("Return #{res.inspect} instead") if @logger.debug?
109
- res
110
- end
111
56
  =begin rdoc
112
- Report the ToDo/FixMe and count occurence.
113
-
114
- The first occurence is reported as a warning,
115
- next occurences are informations.
57
+ See Todonotes::Todonotes#overview
116
58
  =end
117
- def log_todo( key, type, text, res )
118
-
119
- @codeline[key] += 1
120
- if @codeline[key] == 1 #First occurence?
121
- @logger.warn([type, "#{key} #{text} (temporary: #{res.inspect})"])
122
- else #Erste auftauchen
123
- @logger.info([type, "#{key}(#{@codeline[key]}) #{text} (temporary: #{res.inspect})"])
59
+ def overview(*settings )
60
+ TODONOTES.overview( *settings )
124
61
  end
125
-
126
- end
127
-
128
62
  =begin rdoc
129
- Return a text to be printed
130
- puts Todonotes.instance.todo_overview()
131
- Used from Todonotes.print_stats
132
-
133
- Example:
134
- List of ToDos/FixMes:
135
- fixme.rb:195: 1 call
136
- fixme.rb:198: 2 calls
137
- fixme.rb:199: 1 call
138
- fixme.rb:200: 1 call
63
+ See Todonotes::Todonotes#codelines
139
64
  =end
140
- def overview( )
141
- txt = []
142
- txt << "List of ToDos/FixMes:"
143
- @codeline.each do |key, messages|
144
- txt << "%s: %4i call%s" % [ key, messages, messages > 1 ? 's': '' ]
65
+ def codelines()
66
+ TODONOTES.codelines()
145
67
  end
146
- txt.join("\n")
147
- end
148
-
149
- =begin rdoc
150
- Class methods
151
- =end
152
- class << self
153
68
  =begin rdoc
154
- See Todonotes#overview
69
+ See Todonotes::Todonotes#logger
155
70
  =end
156
- def print_stats()
157
- puts Todonotes.instance.overview()
71
+ def logger()
72
+ TODONOTES.logger()
158
73
  end
159
- end #<< self
160
- end
161
-
162
- =begin rdoc
163
- Define todo-commands to global usage.
164
- =end
165
- module Kernel
166
74
  =begin rdoc
167
- Usage 1 (only message):
168
- todo "my todo-message""
169
-
170
- Usage 2 (only temporary result):
171
- todo { "temporary result" }
172
- todo do
173
- "temporary result"
174
- end
175
-
176
- Usage 3(message and temporary result):
177
- todo ('message') { "temporary result" }
178
- todo ('message') do
179
- "temporary result"
180
- end
181
-
75
+ See Todonotes::Todonotes#log2file
182
76
  =end
183
- def todo( comment = 'ToDo', &block)
184
- Todonotes.instance.todo(comment, &block)
185
- end
186
- =begin rdoc
187
- Usage:
188
- to do
189
- :result
190
- end
191
- =end
192
- alias :to :todo
193
- =begin rdoc
194
- Add a fixme-command.
77
+ def log2file(filename = File.basename($0) + '.todo', level = Log4r::ALL)
78
+ TODONOTES.log2file(filename, level)
79
+ end
80
+ end #Todonotes-module mthods
81
+ end #module Todonotes
195
82
 
196
- Can be used to mark available code.
197
- =end
198
- def fixme( comment = 'FixMe', &block)
199
- Todonotes.instance.todo(comment, :FixMe, &block)
200
- end
201
- end
202
83
 
84
+ #Some testcode as "quick test"
203
85
  if $0 == __FILE__
86
+
204
87
  todo( 'a' ){
205
88
  "result"
206
89
  }
207
90
  2.times{todo { "result" }}
208
91
  fixme { "result" }
209
92
  to('a')
210
- Todonotes.print_stats( )
211
- end
93
+ #~ Todonotes.print_stats( )
94
+ #~ puts Todonotes.overview( )
95
+ #~ puts Todonotes.overview( :with_type )
96
+ #~ puts Todonotes.overview( :with_type, :with_shortdescription )
97
+ puts Todonotes.overview( :with_type, :with_shortdescription, :with_result )
98
+
99
+ puts Todonotes.codelines( )
100
+ end
@@ -0,0 +1,40 @@
1
+ =begin rdoc
2
+ Define todo- and fixme commands to global usage.
3
+ =end
4
+ module Kernel
5
+ =begin rdoc
6
+ Usage 1 (only message):
7
+ todo "my todo-message""
8
+
9
+ Usage 2 (only temporary result):
10
+ todo { "temporary result" }
11
+ todo do
12
+ "temporary result"
13
+ end
14
+
15
+ Usage 3(message and temporary result):
16
+ todo ('message') { "temporary result" }
17
+ todo ('message') do
18
+ "temporary result"
19
+ end
20
+
21
+ =end
22
+ def todo( comment = 'ToDo', &block)
23
+ Todonotes::TODONOTES.todo(comment, &block)
24
+ end
25
+ =begin rdoc
26
+ Usage:
27
+ to do
28
+ :result
29
+ end
30
+ =end
31
+ alias :to :todo
32
+ =begin rdoc
33
+ Add a fixme-command.
34
+
35
+ Can be used to mark available code.
36
+ =end
37
+ def fixme( comment = 'FixMe', &block)
38
+ Todonotes::TODONOTES.todo(comment, :FixMe, &block)
39
+ end
40
+ end #module Kernel
@@ -0,0 +1,24 @@
1
+ module Todonotes
2
+ =begin rdoc
3
+ Define a formatter.
4
+ =end
5
+ class FixmeFormatter < Log4r::BasicFormatter
6
+ =begin rdoc
7
+ If event is an Array, the output is adapted.
8
+
9
+ This outputter is only for internal use via Todonotes.
10
+ =end
11
+ def format(event)
12
+ #@@basicformat "%*s %s"
13
+ #~ buff = sprintf("%-*s %-5s", Log4r::MaxLevelLength, Log4r::LNAMES[event.level],
14
+ #~ event.data.is_a?(Array) ? event.data.first : event.name)
15
+ buff = "%-5s" % (event.data.is_a?(Array) ? event.data.first : event.name)
16
+ #~ buff += (event.tracer.nil? ? "" : "(#{event.tracer[2]})") + ": "
17
+ buff << ": "
18
+ buff << format_object(event.data.is_a?(Array) ? event.data.last : event.data)
19
+ buff << (event.tracer.nil? ? "" : " (#{event.tracer.join('/')})")
20
+ buff << "\n"
21
+ buff
22
+ end
23
+ end
24
+ end #module Todonotes
@@ -0,0 +1,58 @@
1
+ module Todonotes
2
+ =begin rdoc
3
+ Report the ToDo/FixMe and count occurence.
4
+
5
+ The first occurence is reported as a warning,
6
+ next occurences are informations.
7
+ =end
8
+ class Todo
9
+ =begin rdoc
10
+
11
+
12
+
13
+ =end
14
+ def initialize(codeline, type, comment, logger, &block)
15
+ @logger = logger
16
+ @count = 1
17
+ @codeline = codeline
18
+ @type = type
19
+ @shortdescription = comment
20
+ #Build result
21
+ @result = yield if block_given?
22
+
23
+ @logger.warn([@type, "#{@codeline} #{@shortdescription} (temporary: #{@result.inspect})"])
24
+
25
+ end
26
+ #Temporary result of the Todo. This result should become a 'real' value
27
+ attr_reader :result
28
+ attr_reader :short_description
29
+ attr_reader :count
30
+ =begin rdoc
31
+ Todo/Fixme is called again
32
+ =end
33
+ def call()
34
+ @logger.info([@type, "#{@codeline}(#{@count}) #{@shortdescription} (temporary: #{@result.inspect})"])
35
+ @count += 1
36
+ end
37
+ =begin rdoc
38
+ =end
39
+ def to_s()
40
+ "#{@type}: #{@codeline}"
41
+ end
42
+ =begin rdoc
43
+ Return a single line with status of the todo.
44
+
45
+ Depending on with_type you get also the type (ToDo/FixMe)
46
+ =end
47
+ def infoline(settings)
48
+ res = @codeline.dup
49
+ res << " (%-5s)" % @type if settings.include?(:with_type)
50
+ res << ": %4i call%s" % [
51
+ @count, @count > 1 ? 's': ''
52
+ ]
53
+ res << " (%s)" % @shortdescription if settings.include?(:with_shortdescription)
54
+ res << " = '#{@result.inspect}'" if settings.include?(:with_result)
55
+ res
56
+ end #info
57
+ end #class Codeline
58
+ end #module Todonotes
@@ -0,0 +1,97 @@
1
+ module Todonotes
2
+ =begin rdoc
3
+ Collection of todos and fixmes.
4
+
5
+ The module Todonotes defines a 'singleton'-like
6
+ Todonotes::TODONOTES to collect all todo/fixme from Kernel.
7
+
8
+ You can set settings with
9
+ * Todonotes::Todonotes#log2file Define log file
10
+ * Todonotes::Todonotes#logger adapt level, outputter ...
11
+ * Todonotes::Todonotes#codelines get Hash with counter per ToDo-locations.
12
+ * Todonotes::Todonotes#overview get overview text with ToDo-locations.
13
+ =end
14
+ class Todonotes
15
+
16
+ =begin rdoc
17
+ Define the singleton-instance.
18
+ =end
19
+ def initialize()
20
+ @codelines = Hash.new()
21
+
22
+ @logger = Log4r::Logger.new('ToDo')
23
+ @logger.outputters = Log4r::StdoutOutputter.new('ToDo',
24
+ :level => Log4r::ALL,
25
+ :formatter => FixmeFormatter
26
+ )
27
+ #~ @logger.trace = true
28
+ end
29
+ #Get logger to define alternative outputters...
30
+ attr_reader :logger
31
+ =begin rdoc
32
+ Write the todo's in a logging file.
33
+
34
+ Default filename is $0.todo
35
+ =end
36
+ def log2file(filename = File.basename($0) + '.todo', level = Log4r::ALL)
37
+ @logger.add( Log4r::FileOutputter.new('ToDo',
38
+ :filename => filename,
39
+ :level => level,
40
+ :formatter => FixmeFormatter
41
+ ))
42
+
43
+ end
44
+ #Direct access to the codelines list. See also #overview
45
+ #Accessible via Todonotes::Todonotes.instance.codelines()
46
+ attr_reader :codelines
47
+ =begin rdoc
48
+ Report a FixMe or a ToDo.
49
+ Create a Todonotes::Todo
50
+
51
+ The block is evaluated to get a temporary result.
52
+ =end
53
+ def todo( comment, type = :ToDo, &block)
54
+ codeline = caller[1].split(':in').first
55
+ codelinekey = "#{codeline} (#{type})"
56
+
57
+ if @codelines[codelinekey] #2nd or more calls
58
+ @codelines[codelinekey].call
59
+ else #First occurence?
60
+ @codelines[codelinekey] = Todo.new(codeline, type, comment, @logger, &block)
61
+ end
62
+ @codelines[codelinekey].result
63
+ end #todo
64
+
65
+ =begin rdoc
66
+ Return a text to be printed
67
+ puts Todonotes.overview()
68
+ Used from Todonotes.print_stats
69
+
70
+ Example:
71
+ List of ToDos/FixMes:
72
+ todonotes.rb:230: 1 call
73
+ todonotes.rb:233: 2 calls
74
+ todonotes.rb:234: 1 call
75
+ todonotes.rb:235: 1 call
76
+
77
+ You may extend the output by parameters:
78
+ * :with_type
79
+ * :with_shortdescription
80
+ * :with_result
81
+
82
+ Example :with_type:
83
+ todonotes.rb:230 (ToDo): 1 call
84
+ todonotes.rb:233 (ToDo): 2 calls
85
+ todonotes.rb:234 (FixMe): 1 call
86
+ todonotes.rb:235 (ToDo): 1 call
87
+ =end
88
+ def overview( *settings )
89
+ txt = []
90
+ txt << "List of ToDos/FixMes:"
91
+ @codelines.each do |key, todo|
92
+ txt << todo.infoline(settings)
93
+ end
94
+ txt.join("\n")
95
+ end
96
+ end #class Todonotes
97
+ end #module Todonotes
@@ -1,10 +1,12 @@
1
- =fixme
2
- Define todo- and fixme-command.
1
+ =todonotes
2
+ Define todo- and fixme-command to mark open topics during software development.
3
3
 
4
4
  ==Usage:
5
- Add todo and fixme to your code and get track of your todos during
5
+ Add _todo_ and _fixme_ to your code and get track of your todos during
6
6
  runtime of your code.
7
7
 
8
+ Productive programms should not use this gem.
9
+
8
10
  When you pass a todo/fixme during execution, you get a logging information.
9
11
 
10
12
  todo ('message' ) { "temporary result" }
@@ -12,13 +14,13 @@ When you pass a todo/fixme during execution, you get a logging information.
12
14
 
13
15
  todo and fixme have the same syntax, the sematic meaning is:
14
16
  * ToDo: Mark missing code.
15
- * Todonotes: Mark code to repair.
17
+ * FixMe: Mark code to repair.
16
18
 
17
19
  Disadvantage:
18
- * Does not replace a good IDE.
19
- to see the ToDo/Todonotes
20
+ * Does not replace a good IDE to find the ToDo/Fixmes.
21
+
20
22
 
21
- Gem based on a proposal in http://forum.ruby-portal.de/viewtopic.php?f=11&t=11957
23
+ This Gem is based on a proposal in http://forum.ruby-portal.de/viewtopic.php?f=11&t=11957
22
24
 
23
25
  =Example
24
26
 
@@ -31,7 +33,7 @@ So you can start your program:
31
33
 
32
34
  primecount = 0
33
35
  for i in 1..10
34
- if fixme "Calculate if prime, prim = true, ja, sonst nein" do
36
+ if fixme "Calculate if prime, temporary: true for odd numbers" do
35
37
  i.odd? #tempory: odd = prim
36
38
  end
37
39
  primecount += 1
@@ -67,11 +69,11 @@ Or
67
69
 
68
70
  Now you get a output like this:
69
71
 
70
- Todonotes: todonotes_prim2.rb:12 Calculate if prime misssing (temporary: true)
72
+ FixMe: todonotes_prim2.rb:12 Calculate if prime misssing (temporary: true)
71
73
  1 is a prime number
72
- Todonotes: todonotes_prim2.rb:12(2) Calculate if prime misssing (temporary: false)
74
+ FixMe: todonotes_prim2.rb:12(2) Calculate if prime misssing (temporary: false)
73
75
  2 is no prime number
74
- Todonotes: todonotes_prim2.rb:12(3) Calculate if prime misssing (temporary: true)
76
+ FixMe: todonotes_prim2.rb:12(3) Calculate if prime misssing (temporary: true)
75
77
  ...
76
78
  ToDo : todonotes_prim2.rb:27 Return total number of primes (temporary: nil)
77
79
 
@@ -85,25 +87,30 @@ You are informed about source code file and line number. In braces you get the n
85
87
  The todo/fixme command evaluates the optional block.
86
88
  The result is returned as a temporary result (in this example: odd numbers are primes.).
87
89
 
90
+
91
+ Please refer the examples folder for more details.
92
+
88
93
  ==Logging
89
94
 
90
- The Fixme and ToDo are reported via a logger.
95
+ The Fixme's and ToDo's are reported via a logger (log4r).
96
+
91
97
  The first call of a fixme/todo is a warning, the next call is an information.
98
+ With this logic you can decide, if you want to see each call or only the first call.
92
99
 
93
100
 
94
101
  You may change the level with:
95
- Todonotes.instance.logger.level = Log4r::WARN #only first time of callinf a fixme/todo
96
- Todonotes.instance.logger.level = Log4r::INFO #report all calls of fixme/todo
102
+ Todonotes.logger.level = Log4r::WARN #only first time of a call of a fixme/todo
103
+ Todonotes.logger.level = Log4r::INFO #report all calls of fixme/todo
97
104
 
98
105
  You can log the fixme/todos to a file:
99
- Todonotes.instance.log2file()
106
+ Todonotes.log2file()
100
107
 
101
108
  ==Get Overview
102
109
  You may print an overview on all fixme/todos:
103
110
  Todonotes.print_stats()
104
111
 
105
112
  Example:
106
- List of ToDos/Todonotess:
113
+ List of ToDos/Fixmes:
107
114
  todonotes_prim.rb:11: 10 calls
108
115
  todonotes_prim.rb:21: 1 call
109
116
 
@@ -26,10 +26,10 @@ Clear message array and return messages
26
26
  end
27
27
  end #ArrayOutputter
28
28
 
29
- #~ Todonotes.instance.logger.level = Log4r::OFF #No logging
30
- Todonotes.instance.logger.outputters.first.level = Log4r::OFF
31
- Todonotes.instance.logger.outputters << $testlog = ArrayOutputter.new('testlog')
32
- $testlog.formatter = Log4r::FixmeFormatter.new
29
+ #~ Todonotes::TODONOTES.logger.level = Log4r::OFF #No logging
30
+ Todonotes::TODONOTES.logger.outputters.first.level = Log4r::OFF
31
+ Todonotes::TODONOTES.logger.outputters << $testlog = ArrayOutputter.new('testlog')
32
+ $testlog.formatter = Todonotes::FixmeFormatter.new
33
33
 
34
34
  class Test_syntax < Test::Unit::TestCase
35
35
  def test_todo()
@@ -113,35 +113,87 @@ class Test_value_and_log < Test::Unit::TestCase
113
113
  end
114
114
 
115
115
  class Test_overview < Test::Unit::TestCase
116
+ def setup()
117
+ Todonotes::TODONOTES.codelines.clear
118
+ end
116
119
  def test_overview()
117
- Todonotes.instance.codeline.clear
118
-
119
120
  #check empty fixme/todo
120
121
  text = "List of ToDos/FixMes:"
121
- codeline = {}
122
- assert_equal(text, Todonotes.instance.overview())
123
- assert_equal(codeline, Todonotes.instance.codeline)
124
-
122
+ codeline = []
123
+ assert_equal(text, Todonotes::TODONOTES.overview())
124
+ assert_equal(codeline, Todonotes::TODONOTES.codelines.keys)
125
+ #Check class methods
126
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
127
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
128
+
125
129
  line = __LINE__; fixme('a')
126
130
  text << "\n#{__FILE__}:#{line}: 1 call"
127
- codeline["#{__FILE__}:#{line}"] = 1
128
- assert_equal(text, Todonotes.instance.overview())
129
- assert_equal(codeline, Todonotes.instance.codeline)
131
+ codeline << "#{__FILE__}:#{line} (FixMe)"
132
+ assert_equal(text, Todonotes::TODONOTES.overview())
133
+ assert_equal(codeline, Todonotes::TODONOTES.codelines.keys)
134
+ #Check class methods
135
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
136
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
130
137
 
131
138
  #Add 2nd todo
132
139
  line = __LINE__; fixme('b')
133
140
  text << "\n#{__FILE__}:#{line}: 1 call"
134
- codeline["#{__FILE__}:#{line}"] = 1
135
- assert_equal(text, Todonotes.instance.overview())
136
- assert_equal(codeline, Todonotes.instance.codeline)
141
+ codeline << "#{__FILE__}:#{line} (FixMe)"
142
+ assert_equal(text, Todonotes::TODONOTES.overview())
143
+ assert_equal(codeline, Todonotes::TODONOTES.codelines.keys)
144
+ #Check class methods
145
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
146
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
147
+ end #test_overview()
137
148
 
149
+ def test_plural()
138
150
  #check plural-s in calls
139
151
  line = __LINE__; 2.times{ fixme('c') }
140
- text << "\n#{__FILE__}:#{line}: 2 calls"
141
- codeline["#{__FILE__}:#{line}"] = 2
142
- assert_equal(text, Todonotes.instance.overview())
143
- assert_equal(codeline, Todonotes.instance.codeline)
152
+ assert_equal("List of ToDos/FixMes:\n#{__FILE__}:#{line}: 2 calls", Todonotes::TODONOTES.overview())
153
+ assert_equal(["#{__FILE__}:#{line} (FixMe)"], Todonotes::TODONOTES.codelines.keys)
154
+ #Check class methods
155
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
156
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
157
+ end
158
+
159
+ def test_overview_with_type()
160
+
161
+ line = __LINE__; fixme('a')
162
+
163
+ assert_equal("List of ToDos/FixMes:\n#{__FILE__}:#{line} (FixMe): 1 call",
164
+ Todonotes::TODONOTES.overview(:with_type)
165
+ )
166
+ #Check class methods
167
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
168
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
169
+
144
170
  end
171
+ def test_overview_with_type_description()
172
+
173
+ line = __LINE__; fixme('a')
174
+
175
+ assert_equal("List of ToDos/FixMes:\n#{__FILE__}:#{line} (FixMe): 1 call (a)",
176
+ Todonotes::TODONOTES.overview(:with_type, :with_shortdescription)
177
+ )
178
+
179
+ #Check class methods
180
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
181
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
182
+
183
+ end
184
+ def test_overview_with_type_description_result()
185
+
186
+ line = __LINE__; fixme('a'){2}
187
+
188
+ assert_equal("List of ToDos/FixMes:\n#{__FILE__}:#{line} (FixMe): 1 call (a) = '2'",
189
+ Todonotes::TODONOTES.overview(:with_type, :with_shortdescription, :with_result)
190
+ )
191
+
192
+ #Check class methods
193
+ assert_equal(Todonotes.overview(), Todonotes::TODONOTES.overview())
194
+ assert_equal(Todonotes.codelines, Todonotes::TODONOTES.codelines)
195
+
196
+ end
145
197
  end
146
198
 
147
199
  class Test_log_with_file < Test::Unit::TestCase
@@ -157,21 +209,20 @@ class Test_log_with_file < Test::Unit::TestCase
157
209
  end
158
210
  def test_logfile()
159
211
  assert_false(File.exist?(@@logfilename))
160
- Todonotes.instance.log2file(@@logfilename)
161
- assert_equal(@@logfilename, Todonotes.instance.logger.outputters.last.filename)
212
+ Todonotes::TODONOTES.log2file(@@logfilename)
213
+ assert_equal(@@logfilename, Todonotes::TODONOTES.logger.outputters.last.filename)
162
214
  assert_true(File.exist?(@@logfilename))
163
- Todonotes.instance.logger.outputters.last.close #
164
- Todonotes.instance.logger.outputters.pop #
215
+ Todonotes::TODONOTES.logger.outputters.last.close #
216
+ Todonotes::TODONOTES.logger.outputters.pop #
165
217
  end
166
218
  def test_logfile_default()
167
219
  assert_false(File.exist?(@@logfilename_default))
168
- Todonotes.instance.log2file() #no filename
169
- assert_equal(@@logfilename_default, Todonotes.instance.logger.outputters.last.filename)
220
+ Todonotes::TODONOTES.log2file() #no filename
221
+ assert_equal(@@logfilename_default, Todonotes::TODONOTES.logger.outputters.last.filename)
170
222
  assert_true(File.exist?(@@logfilename_default))
171
- Todonotes.instance.logger.outputters.last.close #
172
- Todonotes.instance.logger.outputters.pop #
223
+ Todonotes::TODONOTES.logger.outputters.last.close #
224
+ Todonotes::TODONOTES.logger.outputters.pop #
173
225
  end
174
226
  end
175
227
 
176
-
177
228
  __END__
metadata CHANGED
@@ -1,91 +1,81 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: todonotes
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Knut Lickert
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-06-24 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-12-02 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: log4r
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- description: |
36
- todonotes.
37
- Support programming by fixme/todo commands
38
-
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! 'todonotes.
31
+
32
+ Support programming by fixme/todo commands.
33
+
34
+
39
35
  Gem based on a proposal in http://forum.ruby-portal.de/viewtopic.php?f=11&t=11957
40
36
 
37
+ '
41
38
  email: knut@lickert.net
42
39
  executables: []
43
-
44
40
  extensions: []
45
-
46
- extra_rdoc_files:
47
- - readme.rd
48
- files:
49
- - readme.rd
41
+ extra_rdoc_files:
42
+ - readme.rdoc
43
+ files:
44
+ - readme.rdoc
50
45
  - lib/todonotes.rb
46
+ - lib/todonotes/todonotes.rb
47
+ - lib/todonotes/todo.rb
48
+ - lib/todonotes/kernel.rb
49
+ - lib/todonotes/log4r.rb
51
50
  - examples/todonotes_how_to.rb
52
51
  - examples/todonotes_prim.rb
53
52
  - examples/todonotes_prim2.rb
54
53
  - unittest/unittest_todonotes.rb
55
- has_rdoc: true
56
- homepage:
54
+ homepage: http://rubypla.net/todonotes
57
55
  licenses: []
58
-
59
56
  post_install_message:
60
- rdoc_options:
61
- - --main
62
- - readme.rd
63
- require_paths:
57
+ rdoc_options:
58
+ - lib/**/*.rb
59
+ - --main readme.rdoc
60
+ require_paths:
64
61
  - lib
65
- required_ruby_version: !ruby/object:Gem::Requirement
62
+ required_ruby_version: !ruby/object:Gem::Requirement
66
63
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
74
- required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
69
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- version: "0"
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
83
74
  requirements: []
84
-
85
75
  rubyforge_project:
86
- rubygems_version: 1.3.7
76
+ rubygems_version: 1.8.24
87
77
  signing_key:
88
78
  specification_version: 3
89
79
  summary: Support programming by todonotes/todo commands.
90
- test_files:
80
+ test_files:
91
81
  - unittest/unittest_todonotes.rb