extended_logger 0.6.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 829c2ba09350eb621bb0694a0c099c7b392edf20
4
- data.tar.gz: 43f5a2da899103fd2d42147909723229571a8d8c
3
+ metadata.gz: 4eb522f68f7697e65cffd4539df8219879be9973
4
+ data.tar.gz: 0eda1536929c52214abe517846b7913adfe372da
5
5
  SHA512:
6
- metadata.gz: 5c1b55af38672df94b92523b188bf26c36d97e333a225aed93d33c2901a043a0fab5e291749ecfdd91f3fca86e36fec9fd90cbe650e6039ab65cfb181026bd53
7
- data.tar.gz: ee6f7448f2866dc7a4f5f23e6c92bec98cdbbd9ca34dc96efc93336961a68d2731fc29d7826481b5d092206f1e42c31fe4c5af67f6671232a7ecaf6ea8658d22
6
+ metadata.gz: 8150607148ff582e2e8f959f67d614a05551bbc87bc227a272950a201a7639a2f12a70d7e118e5dfb4de215bfe2a18e5f6175e14987502edac6442ce0f508109
7
+ data.tar.gz: 95d3dae30748c24e11ddfc5813e4c818514535a8318268c813d09a1b4bfec3016a1192a9e102ffe1e8dcd88c0e81f60f8cacec2cb0b1554e23146281c7f7d727
@@ -7,7 +7,9 @@ require_relative './extended_logger/define'
7
7
  require_relative './extended_logger/extended_logger'
8
8
  require_relative './extended_logger/level'
9
9
  require_relative './extended_logger/level/set'
10
+ require_relative './extended_logger/logger'
10
11
  require_relative './extended_logger/message'
12
+ require_relative './extended_logger/registry'
11
13
  require_relative './extended_logger/rule'
12
14
  require_relative './extended_logger/serializer'
13
15
  require_relative './extended_logger/serializer/text_formatter'
@@ -11,7 +11,7 @@ class ExtendedLogger
11
11
  end
12
12
 
13
13
  module None
14
- def self.value
14
+ def self.example
15
15
  ColorScheme::None
16
16
  end
17
17
  end
@@ -19,7 +19,7 @@ class ExtendedLogger
19
19
 
20
20
  module Formatters
21
21
  module Plain
22
- def self.value
22
+ def self.example
23
23
  -> message do
24
24
  "#{message.level} -- #{message.prose}"
25
25
  end
@@ -28,7 +28,7 @@ class ExtendedLogger
28
28
  end
29
29
 
30
30
  module Label
31
- def self.value
31
+ def self.example
32
32
  'SomeClass'
33
33
  end
34
34
  end
@@ -38,7 +38,7 @@ class ExtendedLogger
38
38
  Set.ruby_logger.get :info
39
39
  end
40
40
 
41
- def self.value label=nil
41
+ def self.example label=nil
42
42
  label ||= :normal
43
43
  Set.get label
44
44
  end
@@ -48,7 +48,7 @@ class ExtendedLogger
48
48
  %i(debug info warn error fatal)
49
49
  end
50
50
 
51
- def self.value
51
+ def self.example
52
52
  %i(verbose normal)
53
53
  end
54
54
  end
@@ -64,26 +64,36 @@ class ExtendedLogger
64
64
  end
65
65
 
66
66
  def self.example
67
- names = Names.value
67
+ names = Names.example
68
68
  Level::Set.build names, :default => :normal
69
69
  end
70
70
  end
71
71
  end
72
72
 
73
- class Logger < ExtendedLogger.define
74
- def self.example device=nil
75
- device ||= StringIO.new
73
+ class Logger < ExtendedLogger.define Levels::Set.example, :format => Formatters::Plain.example
74
+ def self.example
75
+ device = StringIO.new
76
76
 
77
77
  instance = build device
78
78
  instance.clock = Time::Clock
79
79
  instance
80
80
  end
81
+
82
+ class Ruby < ExtendedLogger.define
83
+ def self.example
84
+ device = StringIO.new
85
+
86
+ instance = build device
87
+ instance.clock = Time::Clock
88
+ instance
89
+ end
90
+ end
81
91
  end
82
92
 
83
93
  module Messages
84
94
  def self.example prose: nil, level: nil, label: nil, time: nil
85
95
  prose ||= Prose.example
86
- level ||= Levels.value
96
+ level ||= Levels.example
87
97
  time ||= Time.reference
88
98
 
89
99
  if prose.is_a? Proc
@@ -96,15 +106,15 @@ class ExtendedLogger
96
106
  end
97
107
 
98
108
  module Label
99
- def self.value label=nil
100
- label ||= Control::Label.value
109
+ def self.example label=nil
110
+ label ||= Control::Label.example
101
111
 
102
112
  Messages.example label: label
103
113
  end
104
114
  end
105
115
 
106
116
  module RubyLogger
107
- def self.value label=nil
117
+ def self.example label=nil
108
118
  level = Level.new :info
109
119
 
110
120
  Messages.example level: level, label: label
@@ -113,22 +123,22 @@ class ExtendedLogger
113
123
  end
114
124
 
115
125
  module Output
116
- def self.value prose=nil
126
+ def self.example prose=nil
117
127
  prose ||= Prose.example
118
128
  "NORMAL -- #{prose}\n"
119
129
  end
120
130
 
121
131
  module Colorized
122
- def self.value prose=nil
132
+ def self.example prose=nil
123
133
  prose ||= Prose.example
124
134
  colorized_prose = "\e[1;37;40m#{prose}\e[0m"
125
135
 
126
- Output.value colorized_prose
136
+ Output.example colorized_prose
127
137
  end
128
138
  end
129
139
 
130
140
  module MultipleLines
131
- def self.value
141
+ def self.example
132
142
  "NORMAL -- Multiple\nNORMAL -- line\nNORMAL -- message\n"
133
143
  end
134
144
  end
@@ -138,7 +148,7 @@ class ExtendedLogger
138
148
  @log_format ||= ::Logger::Formatter.new
139
149
  end
140
150
 
141
- def self.value progname=nil
151
+ def self.example progname=nil
142
152
  severity = 'INFO'
143
153
  time = Time::Clock.now
144
154
  message = Prose.example
@@ -148,34 +158,34 @@ class ExtendedLogger
148
158
  end
149
159
 
150
160
  module RuleApplied
151
- def self.value
161
+ def self.example
152
162
  prose = Prose.example
153
163
  prose = prose.upcase
154
164
 
155
- Output.value prose
165
+ Output.example prose
156
166
  end
157
167
  end
158
168
  end
159
169
 
160
170
  module Prose
161
171
  def self.example
162
- SingleLine.value
172
+ SingleLine.example
163
173
  end
164
174
 
165
175
  module EscapeCodes
166
- def self.value
176
+ def self.example
167
177
  "\t\r"
168
178
  end
169
179
  end
170
180
 
171
181
  module MultipleLines
172
- def self.value
182
+ def self.example
173
183
  "Multiple\nline\nmessage"
174
184
  end
175
185
  end
176
186
 
177
187
  module SingleLine
178
- def self.value
188
+ def self.example
179
189
  "Some log message"
180
190
  end
181
191
  end
@@ -194,7 +204,7 @@ class ExtendedLogger
194
204
 
195
205
  module Sink
196
206
  def self.example device=nil, format: nil, rules: nil
197
- format ||= Controls::Formatters::Plain.value
207
+ format ||= Controls::Formatters::Plain.example
198
208
  device ||= StringIO.new
199
209
  levels = Controls::Levels::Set.example
200
210
 
@@ -1,18 +1,20 @@
1
1
  class ExtendedLogger
2
- def self.define levels=nil, **defaults
2
+ def self.define levels=nil, **sink_defaults
3
3
  levels ||= Defaults.levels
4
4
 
5
5
  subclass = Class.new self
6
- Define.(subclass, levels)
6
+ Define.(subclass, levels, sink_defaults)
7
7
  subclass
8
8
  end
9
9
 
10
10
  class Define
11
11
  attr_reader :levels
12
+ attr_reader :sink_defaults
12
13
  attr_reader :subclass
13
14
 
14
- def initialize subclass, levels, **defaults
15
+ def initialize subclass, levels, sink_defaults
15
16
  @levels = levels
17
+ @sink_defaults = sink_defaults
16
18
  @subclass = subclass
17
19
  end
18
20
 
@@ -22,8 +24,16 @@ class ExtendedLogger
22
24
  end
23
25
 
24
26
  def call
25
- levels = self.levels
26
- subclass.send :define_method, :levels do levels end
27
+ levels = self.level_set
28
+
29
+ subclass.define_singleton_method :levels do levels end
30
+ subclass.send :define_method, :levels do self.class.levels end
31
+
32
+ if sink_defaults = self.sink_defaults
33
+ subclass.define_singleton_method :sink_defaults do
34
+ sink_defaults
35
+ end
36
+ end
27
37
 
28
38
  levels.each do |level|
29
39
  method_name = level.name
@@ -33,5 +43,13 @@ class ExtendedLogger
33
43
  end
34
44
  end
35
45
  end
46
+
47
+ def level_set
48
+ if levels.is_a? Level::Set
49
+ levels
50
+ else
51
+ Level::Set.build levels
52
+ end
53
+ end
36
54
  end
37
55
  end
@@ -8,13 +8,36 @@ class ExtendedLogger
8
8
  @sink = sink
9
9
  end
10
10
 
11
- def self.build *arguments
12
- sink = Sink.build *arguments
11
+ def self.build device=nil, **sink_arguments
12
+ sink = self.sink device: device, **sink_arguments
13
13
 
14
14
  instance = new sink
15
15
  instance
16
16
  end
17
17
 
18
+ def self.empty_message
19
+ '<empty message>'
20
+ end
21
+
22
+ def self.levels
23
+ end
24
+
25
+ def self.sink device: nil, **sink_arguments
26
+ sink_arguments = sink_defaults.merge sink_arguments
27
+
28
+ sink_arguments[:levels] ||= levels if levels
29
+
30
+ Sink.build device, **sink_arguments
31
+ end
32
+
33
+ def self.sink_defaults
34
+ {}
35
+ end
36
+
37
+ def << message
38
+ sink << message
39
+ end
40
+
18
41
  def add level, prose=nil, label: nil, &block
19
42
  block ||= ->{ prose }
20
43
  label ||= self.label
@@ -23,7 +46,7 @@ class ExtendedLogger
23
46
 
24
47
  message = Message.new block, level, time, label
25
48
 
26
- sink << message
49
+ self << message
27
50
  end
28
51
 
29
52
  def clock
@@ -53,10 +53,10 @@ class ExtendedLogger
53
53
  end
54
54
 
55
55
  def resolve reference
56
- if reference.is_a? Symbol
57
- get reference
58
- else
59
- get reference.name
56
+ case reference
57
+ when Symbol then get reference
58
+ when String then get reference.to_sym
59
+ else get reference.name
60
60
  end
61
61
  end
62
62
  end
@@ -0,0 +1,3 @@
1
+ class ExtendedLogger
2
+ Logger = self.define
3
+ end
@@ -0,0 +1,107 @@
1
+ class ExtendedLogger
2
+ class Registry < Module
3
+ attr_reader :attr_name
4
+ attr_reader :logger_class
5
+ attr_reader :sink
6
+
7
+ def initialize logger_class, sink, attr_name
8
+ @attr_name = attr_name
9
+ @logger_class = logger_class
10
+ @sink = sink
11
+ end
12
+
13
+ def self.build logger_class, attr_name: nil, **sink_arguments
14
+ attr_name ||= :logger
15
+
16
+ sink = logger_class.sink **sink_arguments
17
+
18
+ instance = new logger_class, sink, attr_name
19
+ instance.send :const_set, :Logger, logger_class
20
+ instance
21
+ end
22
+
23
+ def build_logger key
24
+ logger = logger_class.new sink
25
+ logger.label = key.name
26
+ logger
27
+ end
28
+
29
+ def cache
30
+ @cache ||= Hash.new do |cache, key|
31
+ cache[key] = build_logger key
32
+ end
33
+ end
34
+
35
+ def clear
36
+ cache.clear
37
+ end
38
+
39
+ def included cls
40
+ cls.class_exec self do |registry|
41
+ ivar_name = "@#{registry.attr_name}"
42
+ cvar_name = "@@#{registry.attr_name}"
43
+
44
+ attr_writer registry.attr_name
45
+
46
+ define_method registry.attr_name do
47
+ if instance_variable_defined? ivar_name
48
+ return instance_variable_get ivar_name
49
+ end
50
+
51
+ if self.is_a? Module
52
+ target = self
53
+ else
54
+ target = self.class
55
+ end
56
+
57
+ if target.class_variable_defined? cvar_name
58
+ return target.class_variable_get cvar_name
59
+ end
60
+
61
+ logger = registry.get self
62
+ self.class.class_variable_set cvar_name, logger
63
+ end
64
+ end
65
+ end
66
+
67
+ def extended object
68
+ included object.singleton_class
69
+ end
70
+
71
+ def get receiver=nil
72
+ receiver ||= Object
73
+
74
+ key = self.key receiver
75
+
76
+ cache[key]
77
+ end
78
+
79
+ def key receiver
80
+ if receiver.is_a? Module
81
+ receiver
82
+ else
83
+ receiver.class
84
+ end
85
+ end
86
+
87
+ def level
88
+ sink.level
89
+ end
90
+
91
+ def level= reference
92
+ sink.level = levels.resolve reference
93
+ end
94
+
95
+ def levels
96
+ sink.levels
97
+ end
98
+
99
+ def lower_verbosity
100
+ sink.lower_verbosity
101
+ end
102
+
103
+ def raise_verbosity
104
+ sink.raise_verbosity
105
+ end
106
+ end
107
+ end
@@ -13,7 +13,7 @@ class ExtendedLogger
13
13
  end
14
14
 
15
15
  def call
16
- return %w(<empty message>) if prose.nil? or prose.empty?
16
+ return [ExtendedLogger.empty_message] if prose.nil? or prose.empty?
17
17
 
18
18
  lines.map do |line|
19
19
  line.chomp! if line.match %r{(?<!\r)\n}
@@ -24,6 +24,7 @@ class ExtendedLogger
24
24
  line = line.inspect
25
25
  line.slice! 0, 1
26
26
  line.slice! -1, 1
27
+ line.gsub! '\\"', '"'
27
28
  line
28
29
  end
29
30
  end
@@ -1,6 +1,6 @@
1
1
  class ExtendedLogger
2
2
  class Sink
3
- attr_reader :device
3
+ attr_accessor :device
4
4
  attr_reader :levels
5
5
  attr_writer :rules
6
6
  attr_reader :serializer
@@ -11,10 +11,15 @@ class ExtendedLogger
11
11
  @serializer = serializer
12
12
  end
13
13
 
14
- def self.build device=nil, format: nil, levels: nil, rules: nil, serializer: nil
14
+ def self.build device=nil, color_scheme: nil, format: nil, levels: nil, rules: nil
15
15
  device ||= $stderr
16
16
  levels ||= Defaults.levels
17
- serializer ||= Serializer.build log_format: format
17
+
18
+ device = File.open device, 'a+' if device.is_a? String
19
+ device.sync = true
20
+
21
+ color_scheme = nil unless device.is_a? StringIO or device.tty?
22
+ serializer = Serializer.build log_format: format, color_scheme: color_scheme
18
23
 
19
24
  instance = new device, levels, serializer
20
25
  instance.rules = rules if rules
@@ -37,6 +42,22 @@ class ExtendedLogger
37
42
  end
38
43
  end
39
44
 
45
+ def level
46
+ verbosity_threshold.level
47
+ end
48
+
49
+ def level= reference
50
+ verbosity_threshold.level = levels.resolve reference
51
+ end
52
+
53
+ def lower_verbosity
54
+ verbosity_threshold.lower
55
+ end
56
+
57
+ def raise_verbosity
58
+ verbosity_threshold.raise
59
+ end
60
+
40
61
  def rules
41
62
  @rules ||= []
42
63
  end
@@ -15,14 +15,14 @@ class ExtendedLogger
15
15
  end
16
16
 
17
17
  def lower
18
- if level.prev
19
- self.level = level.prev
18
+ if level.next
19
+ self.level = level.next
20
20
  end
21
21
  end
22
22
 
23
23
  def raise
24
- if level.next
25
- self.level = level.next
24
+ if level.prev
25
+ self.level = level.prev
26
26
  end
27
27
  end
28
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extended_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Ladd
@@ -41,7 +41,9 @@ files:
41
41
  - lib/extended_logger/extended_logger.rb
42
42
  - lib/extended_logger/level.rb
43
43
  - lib/extended_logger/level/set.rb
44
+ - lib/extended_logger/logger.rb
44
45
  - lib/extended_logger/message.rb
46
+ - lib/extended_logger/registry.rb
45
47
  - lib/extended_logger/rule.rb
46
48
  - lib/extended_logger/serializer.rb
47
49
  - lib/extended_logger/serializer/text_formatter.rb