ruby_smart-simple_logger 1.2.2 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +11 -15
- data/README.md +55 -28
- data/docs/CHANGELOG.md +24 -0
- data/lib/ruby_smart/simple_logger/devices/memory_device.rb +0 -1
- data/lib/ruby_smart/simple_logger/devices/null_device.rb +42 -0
- data/lib/ruby_smart/simple_logger/extensions/helper.rb +54 -14
- data/lib/ruby_smart/simple_logger/extensions/mask.rb +11 -3
- data/lib/ruby_smart/simple_logger/extensions/processed.rb +48 -12
- data/lib/ruby_smart/simple_logger/extensions/simple_log.rb +34 -6
- data/lib/ruby_smart/simple_logger/extensions/timer.rb +9 -7
- data/lib/ruby_smart/simple_logger/formatter.rb +2 -2
- data/lib/ruby_smart/simple_logger/gem_version.rb +2 -2
- data/lib/ruby_smart/simple_logger/logger.rb +1 -0
- data/lib/ruby_smart/simple_logger/scenes.rb +89 -27
- data/ruby_smart-simple_logger.gemspec +4 -2
- metadata +39 -10
- /data/{docs/LICENSE.txt → LICENSE.txt} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 499ca8f400db9b2df6a9e3017fece6c7e2b94c32c72feb2d04c3a7013a946c4e
|
4
|
+
data.tar.gz: f684b602ec79afe45e2cebf5b158eacfab127cd1af7e9aee994a7ec824b0f802
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa7911b6005d56ffc56585674bd90ff47f07bb0e632b08447c52e4f4222996ca52d783ab44fcae057b034b2920f0b7e0e5cb044be66a7c79be4dcb1ff18abcc6
|
7
|
+
data.tar.gz: 9f1ae4aed0ca7965cbe57d24223a7283915cf7ab876a467945da7269ea6bb66f292704f7e48400a260542eb5b35dc0898b277c5ad338443e459a529e9f5bebf5
|
data/.github/workflows/ruby.yml
CHANGED
@@ -18,21 +18,17 @@ permissions:
|
|
18
18
|
|
19
19
|
jobs:
|
20
20
|
test:
|
21
|
-
|
22
|
-
runs-on: ubuntu-latest
|
23
21
|
strategy:
|
22
|
+
fail-fast: false
|
24
23
|
matrix:
|
25
|
-
|
26
|
-
|
24
|
+
os: [ubuntu-latest]
|
25
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
26
|
+
ruby: ['3.2', '3.1', '3.0', '2.7', '2.6']
|
27
|
+
runs-on: ${{ matrix.os }}
|
27
28
|
steps:
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
with:
|
35
|
-
ruby-version: ${{ matrix.ruby-version }}
|
36
|
-
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
37
|
-
- name: Run tests
|
38
|
-
run: bundle exec rake
|
29
|
+
- uses: actions/checkout@v3
|
30
|
+
- uses: ruby/setup-ruby@v1
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby }}
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
34
|
+
- run: bundle exec rake
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
[![Coverage Status](https://coveralls.io/repos/github/ruby-smart/simple_logger/badge.svg?branch=main&kill_cache=1)](https://coveralls.io/github/ruby-smart/simple_logger?branch=main)
|
10
10
|
[![Tests](https://github.com/ruby-smart/simple_logger/actions/workflows/ruby.yml/badge.svg)](https://github.com/ruby-smart/simple_logger/actions/workflows/ruby.yml)
|
11
11
|
|
12
|
-
A simple, multifunctional logging library for Ruby.
|
12
|
+
A simple, multifunctional logging library for Ruby (and Rails).
|
13
13
|
It features a fast, customizable logging with multi-device support (e.g. log to STDOUT AND file).
|
14
14
|
Special (PRE-defined) scenes can be used for interactive CLI and better logging visibility.
|
15
15
|
|
@@ -36,7 +36,7 @@ Or install it yourself as:
|
|
36
36
|
## Enhancements
|
37
37
|
* PRE-defined scenes to fastly create a simple, structured CLI output. _(see [Scenes](#scenes))_
|
38
38
|
* Better log-visibility with masked output through scenes
|
39
|
-
*
|
39
|
+
* `awesome_print` gem compatibility for a prettified object debug
|
40
40
|
* Multi-device support (write to logfile & to STDOUT & to ... & to ...)
|
41
41
|
* 'klass_logger' instances for easier access _(see [klass_logger](#klass_logger_Usage))_
|
42
42
|
|
@@ -198,10 +198,11 @@ While you can just build a new logger _(or use the klass_logger)_ without any ar
|
|
198
198
|
|
199
199
|
### nil Builtin
|
200
200
|
|
201
|
-
A
|
202
|
-
For CLI or windowed programs it'll just send the logs to
|
203
|
-
For
|
204
|
-
|
201
|
+
A `nil` builtin will auto-detect the best logging solution for you:
|
202
|
+
* For CLI or windowed programs it'll just send the logs to `STDOUT`.
|
203
|
+
* For Debugging _(e.g. IDE-related debugging gems)_ it'll send the logs to the `Debugger`.
|
204
|
+
* For rails-applications it'll send to the current `Rails.logger` instance.
|
205
|
+
* Otherwise it'll store logs temporary in memory _(accessible through the #logs method)_
|
205
206
|
|
206
207
|
**Example:**
|
207
208
|
```ruby
|
@@ -211,7 +212,7 @@ logger.debug "some debug"
|
|
211
212
|
|
212
213
|
### stdout / stderr Builtin
|
213
214
|
|
214
|
-
A
|
215
|
+
A `:stdout / :stderr` builtin will send to `STDOUT / STDERR` and uses a colored output by default.
|
215
216
|
|
216
217
|
**Example:**
|
217
218
|
```ruby
|
@@ -224,9 +225,34 @@ logger = ::SimpleLogger.new(:stdout)
|
|
224
225
|
logger.debug "some debug"
|
225
226
|
```
|
226
227
|
|
228
|
+
### debugger Builtin
|
229
|
+
|
230
|
+
A `:debugger` builtin will send to the `Debugger` (e.g. your IDE's debugging gem)
|
231
|
+
|
232
|
+
**Example:**
|
233
|
+
```ruby
|
234
|
+
logger = ::SimpleLogger.new(:debugger)
|
235
|
+
|
236
|
+
# > will be shown within your debugging gem
|
237
|
+
logger.debug "some debug"
|
238
|
+
```
|
239
|
+
|
240
|
+
|
241
|
+
### null Builtin
|
242
|
+
|
243
|
+
A `:null` builtin will silently swallow all logging data (so it will not be send).
|
244
|
+
|
245
|
+
**Example:**
|
246
|
+
```ruby
|
247
|
+
logger = ::SimpleLogger.new(:null)
|
248
|
+
|
249
|
+
# >
|
250
|
+
logger.debug "some debug"
|
251
|
+
```
|
252
|
+
|
227
253
|
### rails Builtin
|
228
254
|
|
229
|
-
A
|
255
|
+
A `:rails` builtin will always send to the `Rails.logger` instance.
|
230
256
|
|
231
257
|
**Example:**
|
232
258
|
```ruby
|
@@ -238,9 +264,9 @@ logger.debug "some debug"
|
|
238
264
|
|
239
265
|
### proc Builtin
|
240
266
|
|
241
|
-
A
|
267
|
+
A `:proc` builtin will call the provided proc _(through `options[:proc]```)_ everytime a log will be written.
|
242
268
|
|
243
|
-
The data will be provided as array _(
|
269
|
+
The data will be provided as array _( `[severity, time, progname, data]` )_.
|
244
270
|
|
245
271
|
**Example:**
|
246
272
|
```ruby
|
@@ -255,7 +281,7 @@ logger.debug "some debug"
|
|
255
281
|
|
256
282
|
### memory Builtin
|
257
283
|
|
258
|
-
A
|
284
|
+
A `:memory` builtin will always store the logged data within an _instance variable_ and can be accessed through the `#logs` or `#logs_to_h` methods.
|
259
285
|
|
260
286
|
**Example:**
|
261
287
|
```ruby
|
@@ -276,7 +302,7 @@ logger.logs
|
|
276
302
|
|
277
303
|
### String Builtin
|
278
304
|
|
279
|
-
Providing a
|
305
|
+
Providing a `String` will always create and write to a new logfile.
|
280
306
|
|
281
307
|
**Example:**
|
282
308
|
```ruby
|
@@ -313,7 +339,7 @@ noformat_logger.debug "some debug without color and mask - uses the default form
|
|
313
339
|
|
314
340
|
### Module Builtin
|
315
341
|
|
316
|
-
Providing a
|
342
|
+
Providing a `module` will also create and write to a new logfile.
|
317
343
|
The path depends on the provided module name.
|
318
344
|
|
319
345
|
**Example:**
|
@@ -331,13 +357,13 @@ logger.debug "some debug"
|
|
331
357
|
|
332
358
|
### other Builtin
|
333
359
|
|
334
|
-
Providing any other Object must respond to
|
360
|
+
Providing any other Object must respond to `#write```.
|
335
361
|
|
336
362
|
-----
|
337
363
|
|
338
364
|
## Formats
|
339
365
|
|
340
|
-
The default formatter _(if no other was provided through
|
366
|
+
The default formatter _(if no other was provided through `opts[:formatter```)_ will provide the following PRE-defined formats:
|
341
367
|
_Also prints a colored output by default._
|
342
368
|
|
343
369
|
### default Format
|
@@ -447,7 +473,7 @@ logger = ::SimpleLogger.new(:stdout, payload: false)
|
|
447
473
|
### format
|
448
474
|
|
449
475
|
Provide a other format.
|
450
|
-
Possible values:
|
476
|
+
Possible values: `:default, :passthrough, :plain, :memory, :datalog```
|
451
477
|
```ruby
|
452
478
|
logger = ::SimpleLogger.new(format: :default)
|
453
479
|
logger = ::SimpleLogger.new(:memory, format: :passthrough)
|
@@ -465,7 +491,7 @@ logger.debug "debug 2"
|
|
465
491
|
|
466
492
|
### proc _(:proc-builtin ONLY)_
|
467
493
|
|
468
|
-
Provide a callback for the
|
494
|
+
Provide a callback for the `:proc` builtin.
|
469
495
|
```ruby
|
470
496
|
logger = ::SimpleLogger.new(:proc, proc: lambda{|data| ... })
|
471
497
|
```
|
@@ -528,7 +554,7 @@ logger.debug({a: {custom: 'object'}})
|
|
528
554
|
|
529
555
|
### inspector
|
530
556
|
|
531
|
-
Provide a other
|
557
|
+
Provide a other `inspector` method for the data-debug.
|
532
558
|
|
533
559
|
```ruby
|
534
560
|
logger = ::SimpleLogger.new(inspector: :to_s)
|
@@ -541,13 +567,13 @@ logger.debug({ a: 1, b: 2 })
|
|
541
567
|
|
542
568
|
## _defaults_
|
543
569
|
|
544
|
-
Device default options are still available:
|
570
|
+
Device default options are still available: `shift_age, shift_size, progname, datetime_format, shift_period_suffix, binmode```
|
545
571
|
|
546
572
|
-----
|
547
573
|
|
548
574
|
## Scenes
|
549
575
|
|
550
|
-
The following PRE-defined scenes are available. _(You can define your own scenes by using the class method
|
576
|
+
The following PRE-defined scenes are available. _(You can define your own scenes by using the class method `.scene```)_
|
551
577
|
|
552
578
|
### debug(data, subject = 'Debug')
|
553
579
|
```ruby
|
@@ -560,7 +586,7 @@ The following PRE-defined scenes are available. _(You can define your own scenes
|
|
560
586
|
# > ==========================================================================================================
|
561
587
|
```
|
562
588
|
|
563
|
-
### info, warn, error, fatal, success (data, subject = 'name')
|
589
|
+
### info, warn, error, fatal, unknown, success (data, subject = 'name')
|
564
590
|
```ruby
|
565
591
|
# info method (BASE)
|
566
592
|
# severity: methods name
|
@@ -748,19 +774,19 @@ l.processed("Process Alpha", timer: true) do
|
|
748
774
|
end
|
749
775
|
|
750
776
|
|
751
|
-
# ╔ START
|
777
|
+
# ╔ START ❯ Process Alpha
|
752
778
|
# ╟ find files
|
753
779
|
# ╟ found 34 files
|
754
|
-
# ║ ┌ START
|
780
|
+
# ║ ┌ START ❯ extracting ...
|
755
781
|
# ║ ├ 10% done
|
756
782
|
# ║ ├ 20% done
|
757
783
|
# ║ ├ 100% done
|
758
|
-
# ║ └
|
759
|
-
# ║ ┌ START
|
784
|
+
# ║ └ END ❯ extracting ... [SUCCESS] (0.000244804)
|
785
|
+
# ║ ┌ START ❯ transforming ...
|
760
786
|
# ║ ├ bad memory
|
761
787
|
# ║ ├ rolling back
|
762
|
-
# ║ └
|
763
|
-
# ╚
|
788
|
+
# ║ └ END ❯ transforming ... [FAIL]
|
789
|
+
# ╚ END ❯ Process Alpha (0.001036969)
|
764
790
|
```
|
765
791
|
|
766
792
|
### _other useful methods_
|
@@ -768,6 +794,7 @@ end
|
|
768
794
|
- line
|
769
795
|
- print
|
770
796
|
- nl
|
797
|
+
- model _(rails only)_
|
771
798
|
|
772
799
|
-----
|
773
800
|
|
@@ -784,7 +811,7 @@ This project is intended to be a safe, welcoming space for collaboration, and co
|
|
784
811
|
|
785
812
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
786
813
|
|
787
|
-
A copy of the [LICENSE](
|
814
|
+
A copy of the [LICENSE](LICENSE.txt) can be found @ the docs.
|
788
815
|
|
789
816
|
## Code of Conduct
|
790
817
|
|
data/docs/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
# RubySmart::SimpleLogger - CHANGELOG
|
2
2
|
|
3
|
+
## [1.4.0] - 2024-07-31
|
4
|
+
* **[add]** 'null'-device / builtin
|
5
|
+
* **[add]** 'debugger'-builtin to send logs to the debugging gem
|
6
|
+
* **[add]** new logging method `model` _(for rails applications only)_
|
7
|
+
* **[ref]** `nil`-builtin to detect `Debugger` after checking for stdout
|
8
|
+
* **[ref]** `mask`-length to 120 _(was 100 by default)_
|
9
|
+
* **[ref]** `ruby_smart-support`-gem dependency to 1.5
|
10
|
+
* **[fix]** exception _(to build a new device)_ if a Logger was provided
|
11
|
+
* **[fix]** mask-reference manipulation on inherited classes
|
12
|
+
|
13
|
+
## [1.3.0] - 2023-08-15
|
14
|
+
* **[add]** exception message within `processed`-scene
|
15
|
+
* **[add]** new logging option `tag`, to prefix a log-string with a [TAG]
|
16
|
+
* **[add]** logger options `processed: false` & `tagged: false` to prevent processing or tagging
|
17
|
+
* **[add]** `_tagged`-helper method
|
18
|
+
* **[add]** `__scene_subject_with_opts`-helper method to grep subject&opts from args (used for default severities)
|
19
|
+
* **[add]** additional box_chars for 'tagged' & 'feed' extensions - used @ `processed`-scene
|
20
|
+
* **[add]** `unknown`-scene
|
21
|
+
* **[ref]** `processed`-scene with better logging chars & homogenous syntax for humanized reading
|
22
|
+
* **[fix]** missing '_declr' for memory formatting (only on Strings)
|
23
|
+
* **[fix]** missing 'clr:false' option for memory devices
|
24
|
+
* **[fix]** exception while in `processed`-scene not logging the END-line
|
25
|
+
* **[fix]** re-using timer-methods with the same key, did not restart the 'total' measurement
|
26
|
+
|
3
27
|
## [1.2.2] - 2023-03-15
|
4
28
|
* **[ref]** simplify device-generation for builtins
|
5
29
|
* **[fix]** `ActionView::Helpers::DateHelper` require, which breaks rails loading process in some cases
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RubySmart
|
4
|
+
module SimpleLogger
|
5
|
+
module Devices
|
6
|
+
class NullDevice
|
7
|
+
attr_reader :status
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@status = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def write(*)
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
alias_method :<<, :write
|
18
|
+
|
19
|
+
# disables writing
|
20
|
+
def close
|
21
|
+
@status = false
|
22
|
+
end
|
23
|
+
|
24
|
+
# enables writing
|
25
|
+
def reopen
|
26
|
+
@status = true
|
27
|
+
end
|
28
|
+
|
29
|
+
# clears all logs
|
30
|
+
def clear!
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
# returns logs
|
35
|
+
# @return [Array] logs
|
36
|
+
def logs
|
37
|
+
[]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -14,8 +14,7 @@ module RubySmart
|
|
14
14
|
# set / overwrite default opts
|
15
15
|
# @param [Hash] opts
|
16
16
|
def _opts_init!(opts)
|
17
|
-
|
18
|
-
# level
|
17
|
+
# -- level ---------------------------------------------------------------------------------------------------
|
19
18
|
|
20
19
|
# initialize a default rails-dependent output
|
21
20
|
if ::ThreadInfo.rails?
|
@@ -25,8 +24,7 @@ module RubySmart
|
|
25
24
|
# clean & rewrite level (possible symbols) to real level
|
26
25
|
opts[:level] = _level(opts[:level] || :debug)
|
27
26
|
|
28
|
-
|
29
|
-
# mask
|
27
|
+
# -- mask ----------------------------------------------------------------------------------------------------
|
30
28
|
|
31
29
|
# set mask from options
|
32
30
|
self.mask(opts[:mask]) if opts[:mask]
|
@@ -39,13 +37,18 @@ module RubySmart
|
|
39
37
|
self.mask(length: ::ThreadInfo.winsize[1])
|
40
38
|
end
|
41
39
|
|
42
|
-
|
43
|
-
# instance related
|
40
|
+
# -- instance related ----------------------------------------------------------------------------------------
|
44
41
|
|
45
42
|
# ignore payload and send data directly to the logdev
|
46
|
-
@ignore_payload
|
43
|
+
@ignore_payload = true if @ignore_payload.nil? && opts[:payload] == false
|
47
44
|
|
48
|
-
#
|
45
|
+
# ignore processed logging and send data without 'leveling' & PCD-char to the logdev
|
46
|
+
@ignore_processed = true if @ignore_processed.nil? && opts[:processed] == false
|
47
|
+
|
48
|
+
# ignore tagged logging and send data without 'tags' to the logdev
|
49
|
+
@ignore_tagged = true if @ignore_tagged.nil? && opts[:tagged] == false
|
50
|
+
|
51
|
+
# set custom inspector (used for data inspection)
|
49
52
|
# 'disable' inspector, if false was provided - which simply results in +#to_s+
|
50
53
|
@inspector = (opts[:inspect] == false) ? :to_s : opts[:inspector]
|
51
54
|
|
@@ -113,7 +116,7 @@ module RubySmart
|
|
113
116
|
opts[:format] ||= :plain
|
114
117
|
|
115
118
|
# fix nl - which depends on other opts
|
116
|
-
opts[:nl]
|
119
|
+
opts[:nl] = _nl(opts)
|
117
120
|
|
118
121
|
# fix clr
|
119
122
|
opts[:clr] = true if opts[:clr].nil?
|
@@ -129,11 +132,19 @@ module RubySmart
|
|
129
132
|
when nil # builtin is nil - resolve optimal device for current environment
|
130
133
|
if ::ThreadInfo.stdout?
|
131
134
|
_resolve_device(:stdout, opts)
|
135
|
+
elsif ::ThreadInfo.debugger?
|
136
|
+
_resolve_device(:debugger, opts)
|
132
137
|
elsif ::ThreadInfo.rails? && ::Rails.logger
|
133
138
|
_resolve_device(:rails, opts)
|
134
139
|
else
|
135
140
|
_resolve_device(:memory, opts)
|
136
141
|
end
|
142
|
+
when :null
|
143
|
+
::RubySmart::SimpleLogger::Devices::NullDevice.new
|
144
|
+
when :debugger
|
145
|
+
raise "Unable to build SimpleLogger with 'debugger' builtin for not initialized Debugger!" unless ThreadInfo.debugger?
|
146
|
+
|
147
|
+
_resolve_device(::Debugger.logger, opts)
|
137
148
|
when :stdout
|
138
149
|
STDOUT
|
139
150
|
when :stderr
|
@@ -145,27 +156,31 @@ module RubySmart
|
|
145
156
|
if ThreadInfo.console? && ::Rails.logger.instance_variable_get(:@logdev).dev != STDOUT
|
146
157
|
::RubySmart::SimpleLogger::Devices::MultiDevice
|
147
158
|
.register(_resolve_device(:stdout, opts))
|
148
|
-
.register(::Rails.logger
|
159
|
+
.register(_resolve_device(::Rails.logger, opts))
|
149
160
|
else
|
150
|
-
::Rails.logger
|
161
|
+
_resolve_device(::Rails.logger, opts)
|
151
162
|
end
|
152
163
|
when :proc
|
153
164
|
# force overwrite opts
|
154
165
|
@ignore_payload = true
|
155
|
-
opts[:nl]
|
156
|
-
opts[:format]
|
166
|
+
opts[:nl] = false
|
167
|
+
opts[:format] = :passthrough
|
157
168
|
|
158
169
|
::RubySmart::SimpleLogger::Devices::ProcDevice.new(opts.delete(:proc))
|
159
170
|
when :memory
|
160
171
|
# force overwrite opts
|
161
172
|
@ignore_payload = true
|
162
|
-
opts[:format]
|
173
|
+
opts[:format] = :memory
|
174
|
+
# no color logging for memory devices
|
175
|
+
opts[:clr] = false
|
163
176
|
|
164
177
|
::RubySmart::SimpleLogger::Devices::MemoryDevice.new
|
165
178
|
when Module, String
|
166
179
|
# force overwrite opts
|
167
180
|
opts[:clr] = false
|
168
181
|
_logdev(opts, builtin)
|
182
|
+
when ::Logger
|
183
|
+
builtin.instance_variable_get(:@logdev).dev
|
169
184
|
else
|
170
185
|
_logdev(opts, builtin)
|
171
186
|
end
|
@@ -275,6 +290,18 @@ module RubySmart
|
|
275
290
|
end
|
276
291
|
end
|
277
292
|
|
293
|
+
# 'tags' a provided string
|
294
|
+
# returns the string if no tag was provided or general tags are disabled
|
295
|
+
# @param [String] str
|
296
|
+
# @param [nil|Symbol|String] tag
|
297
|
+
# @return [String]
|
298
|
+
def _tagged(str, tag = nil)
|
299
|
+
# check for active tag
|
300
|
+
return str if tag.nil? || ignore_tagged?
|
301
|
+
|
302
|
+
"#{"[#{tag.to_s.upcase.bg_cyan}]"} #{str}"
|
303
|
+
end
|
304
|
+
|
278
305
|
# colorizes a provided string
|
279
306
|
# returns the string if no color was provided or invalid
|
280
307
|
#
|
@@ -343,6 +370,19 @@ module RubySmart
|
|
343
370
|
res_or_clr.to_sym
|
344
371
|
end
|
345
372
|
end
|
373
|
+
|
374
|
+
# resolves subject & opts from provided args.
|
375
|
+
# returns provided default subject, if not in args.
|
376
|
+
# @param [Object] args
|
377
|
+
# @param [String] subject
|
378
|
+
# @return [Array]
|
379
|
+
def _scene_subject_with_opts(args, subject = '')
|
380
|
+
if args[0].is_a?(Hash)
|
381
|
+
[subject, args[0]]
|
382
|
+
else
|
383
|
+
[args[0] || subject, args[1] || {}]
|
384
|
+
end
|
385
|
+
end
|
346
386
|
end
|
347
387
|
end
|
348
388
|
end
|
@@ -13,17 +13,25 @@ module RubySmart
|
|
13
13
|
# @option [String] :char - the character to be used as mask
|
14
14
|
# @option [Integer] :length - the mask length (amount of mask chars be line)
|
15
15
|
# @option [Symbol] :clr - the color to be used by printing the mask
|
16
|
-
self.mask = { char: '=', length:
|
16
|
+
self.mask = { char: '=', length: 120, clr: :blue }
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
module ClassMethods
|
21
21
|
def mask
|
22
|
-
|
22
|
+
@mask
|
23
23
|
end
|
24
24
|
|
25
25
|
def mask=(mask)
|
26
|
-
|
26
|
+
@mask = mask
|
27
|
+
end
|
28
|
+
|
29
|
+
# prevents to overwrite parent class through inheriting subclasses
|
30
|
+
def inherited(subclass)
|
31
|
+
super
|
32
|
+
|
33
|
+
# dup existing values
|
34
|
+
subclass.mask = self.mask.dup
|
27
35
|
end
|
28
36
|
end
|
29
37
|
|
@@ -12,10 +12,15 @@ module RubySmart
|
|
12
12
|
base.class_eval do
|
13
13
|
# set default box chars
|
14
14
|
self.box_chars = {
|
15
|
-
|
16
|
-
|
15
|
+
# control characters by provided +:pcd+
|
16
|
+
default: %w(╟ ├),
|
17
17
|
start: %w(╔ ┌),
|
18
|
-
end: %w(╚ └)
|
18
|
+
end: %w(╚ └),
|
19
|
+
|
20
|
+
# additional characters, added ad specific position
|
21
|
+
__processed__: %w(║ │),
|
22
|
+
__feed__: %w(═ ─),
|
23
|
+
__tagged__: %w(┄ ┄),
|
19
24
|
}.freeze
|
20
25
|
end
|
21
26
|
end
|
@@ -33,18 +38,20 @@ module RubySmart
|
|
33
38
|
module InstanceMethods
|
34
39
|
# returns the current processed level.
|
35
40
|
# by providing a handle it will either increase or decrease the current level.
|
36
|
-
# @param [
|
41
|
+
# @param [Symbol|Integer] handle - optional handle to increase or decrease the current lvl (+:up+ / +:down+)
|
37
42
|
# @return [Integer]
|
38
43
|
def processed_lvl(handle = nil)
|
39
44
|
@processed_lvl ||= -1
|
40
45
|
|
41
46
|
case handle
|
47
|
+
when :reset
|
48
|
+
@processed_lvl = -1
|
42
49
|
when :up
|
43
50
|
@processed_lvl += 1
|
44
51
|
when :down
|
45
52
|
@processed_lvl -= 1 if @processed_lvl >= 0
|
46
53
|
else
|
47
|
-
|
54
|
+
@processed_lvl = handle if handle.is_a?(Integer)
|
48
55
|
end
|
49
56
|
|
50
57
|
@processed_lvl
|
@@ -53,25 +60,54 @@ module RubySmart
|
|
53
60
|
# returns true if the processed state is active.
|
54
61
|
# @return [Boolean]
|
55
62
|
def processed?
|
56
|
-
processed_lvl >= 0
|
63
|
+
processed_lvl >= 0 && !@ignore_processed
|
57
64
|
end
|
58
65
|
|
59
66
|
private
|
60
67
|
|
61
68
|
# transforms the provided data into a 'processed' string and forces the data to be transformed to string.
|
62
69
|
# simple returns the provided data, if currently not processed.
|
63
|
-
# @param [
|
70
|
+
# @param [String] data
|
64
71
|
# @param [Hash] opts
|
65
|
-
# @return [
|
72
|
+
# @return [String]
|
66
73
|
def _pcd(data, opts)
|
67
74
|
# check for active pcd (processed)
|
68
75
|
return data if opts[:pcd] == false || !processed?
|
69
76
|
|
70
|
-
# resolve
|
77
|
+
# resolve the current level - either directly through the options or the +processed_lvl+.
|
71
78
|
lvl = opts[:lvl] || processed_lvl
|
72
79
|
|
73
|
-
#
|
74
|
-
|
80
|
+
# prepares the out-string array
|
81
|
+
strs = []
|
82
|
+
|
83
|
+
# add level-charters with indent
|
84
|
+
lvl.times.each { |i|
|
85
|
+
# ║ │
|
86
|
+
strs << _pcd_box_char(:__processed__, i) + ' '
|
87
|
+
}
|
88
|
+
|
89
|
+
# add pcd-related control character
|
90
|
+
strs << _pcd_box_char(opts[:pcd], lvl)
|
91
|
+
|
92
|
+
# add pcd-operation string
|
93
|
+
if opts[:pcd].is_a?(Symbol)
|
94
|
+
# ╔ START ❯
|
95
|
+
# └ END ❯
|
96
|
+
strs << " #{opts[:pcd].to_s.upcase.rjust(5)} \u276F"
|
97
|
+
end
|
98
|
+
|
99
|
+
# check for tagged
|
100
|
+
# ┄
|
101
|
+
if opts[:tag]
|
102
|
+
strs << _pcd_box_char(:__tagged__, lvl)
|
103
|
+
else
|
104
|
+
strs << ' '
|
105
|
+
end
|
106
|
+
|
107
|
+
# add data
|
108
|
+
strs << data.to_s
|
109
|
+
|
110
|
+
strs.join
|
75
111
|
end
|
76
112
|
|
77
113
|
# returns the processed box character for provided key and position.
|
@@ -81,7 +117,7 @@ module RubySmart
|
|
81
117
|
# @param [Integer] pos
|
82
118
|
# @return [String]
|
83
119
|
def _pcd_box_char(key, pos = 0)
|
84
|
-
chars = self.class.box_chars[key] || self.class.box_chars[:
|
120
|
+
chars = self.class.box_chars[key] || self.class.box_chars[:default]
|
85
121
|
chars[pos] || chars[-1]
|
86
122
|
end
|
87
123
|
end
|
@@ -53,7 +53,7 @@ module RubySmart
|
|
53
53
|
# prevent logging nil data
|
54
54
|
return false if data.nil?
|
55
55
|
|
56
|
-
add level,
|
56
|
+
add level, _parse_data(data, opts)
|
57
57
|
return true
|
58
58
|
end
|
59
59
|
|
@@ -82,6 +82,14 @@ module RubySmart
|
|
82
82
|
!!@ignore_payload
|
83
83
|
end
|
84
84
|
|
85
|
+
# returns true if no tags should be created - instead the data will be send directly to the logdev
|
86
|
+
# forces the *simple_log* method to prevent building tags from opts
|
87
|
+
#
|
88
|
+
# @return [Boolean]
|
89
|
+
def ignore_tagged?
|
90
|
+
!!@ignore_tagged
|
91
|
+
end
|
92
|
+
|
85
93
|
# resolve an inspector method for data inspection
|
86
94
|
# @return [Symbol, nil]
|
87
95
|
def inspector
|
@@ -107,7 +115,7 @@ module RubySmart
|
|
107
115
|
str = ''
|
108
116
|
if payload == self.class::PAYLOAD_DATA_KEY
|
109
117
|
# checks, if we should inspect the data
|
110
|
-
str <<
|
118
|
+
str << _parse_inspect_data(data, opts)
|
111
119
|
else
|
112
120
|
str << _parse_payload(payload, opts)
|
113
121
|
end
|
@@ -121,13 +129,33 @@ module RubySmart
|
|
121
129
|
true
|
122
130
|
end
|
123
131
|
|
124
|
-
#
|
132
|
+
# parses the provided data to string.
|
133
|
+
# - calls an inspection method, if provided
|
134
|
+
# - tags the string, if provided
|
135
|
+
# - adds processed prefix-chars, if provided
|
125
136
|
#
|
126
137
|
# @param [Object] data
|
127
|
-
# @param [
|
138
|
+
# @param [Hash] opts
|
139
|
+
# @return [String] stringified data
|
140
|
+
def _parse_data(data, opts)
|
141
|
+
_pcd(
|
142
|
+
_tagged(
|
143
|
+
data.to_s,
|
144
|
+
opts[:tag]
|
145
|
+
),
|
146
|
+
opts
|
147
|
+
)
|
148
|
+
end
|
149
|
+
|
150
|
+
# parses the provided data to string, but calls a possible inspect method.
|
151
|
+
# @param [Object] data
|
152
|
+
# @param [Hash] opts
|
128
153
|
# @return [String] stringified data
|
129
|
-
def
|
130
|
-
(
|
154
|
+
def _parse_inspect_data(data, opts)
|
155
|
+
_parse_data(
|
156
|
+
data.send(opts[:inspect] ? (opts[:inspector] || self.inspector) : :to_s),
|
157
|
+
opts
|
158
|
+
)
|
131
159
|
end
|
132
160
|
|
133
161
|
# parses a single payload with provided options
|
@@ -5,21 +5,23 @@ module RubySmart
|
|
5
5
|
module Extensions
|
6
6
|
module Timer
|
7
7
|
def timer(action, key = :default, opts = {})
|
8
|
+
return if key.nil?
|
9
|
+
|
8
10
|
@timers ||= {}
|
9
11
|
@timers[key] ||= {
|
10
12
|
start: nil,
|
11
13
|
stop: nil,
|
12
|
-
|
14
|
+
total: 0
|
13
15
|
}
|
14
16
|
|
15
17
|
case action
|
16
|
-
when :restart
|
18
|
+
when :start, :restart
|
17
19
|
@timers[key][:start] = Time.now
|
18
20
|
@timers[key][:stop] = nil
|
19
|
-
@timers[key][:
|
21
|
+
@timers[key][:total] = 0
|
20
22
|
|
21
23
|
true
|
22
|
-
when :
|
24
|
+
when :continue
|
23
25
|
@timers[key][:start] = Time.now
|
24
26
|
@timers[key][:stop] = nil
|
25
27
|
|
@@ -27,13 +29,13 @@ module RubySmart
|
|
27
29
|
when :stop
|
28
30
|
return false if !@timers[key][:start] || @timers[key][:stop]
|
29
31
|
@timers[key][:stop] = Time.now
|
30
|
-
@timers[key][:
|
32
|
+
@timers[key][:total] += @timers[key][:stop] - @timers[key][:start]
|
31
33
|
|
32
34
|
true
|
33
35
|
when :pause
|
34
36
|
return false if !@timers[key][:start] || @timers[key][:stop]
|
35
37
|
|
36
|
-
@timers[key][:
|
38
|
+
@timers[key][:total] += Time.now - @timers[key][:start]
|
37
39
|
@timers[key][:start] = nil
|
38
40
|
@timers[key][:stop] = nil
|
39
41
|
|
@@ -50,7 +52,7 @@ module RubySmart
|
|
50
52
|
current
|
51
53
|
end
|
52
54
|
when :current
|
53
|
-
current = @timers[key][:
|
55
|
+
current = @timers[key][:total]
|
54
56
|
current += Time.now - @timers[key][:start] if @timers[key][:start] && @timers[key][:stop].nil?
|
55
57
|
current
|
56
58
|
else
|
@@ -33,7 +33,7 @@ module RubySmart
|
|
33
33
|
plain: -> (_severity, _time, _progname, data) { _nl _declr(data.to_s) },
|
34
34
|
|
35
35
|
# specialized array for memory-logging
|
36
|
-
memory: -> (severity, time, _progname, data) { [severity.downcase.to_sym, time, data] },
|
36
|
+
memory: -> (severity, time, _progname, data) { [severity.downcase.to_sym, time, _declr(data)] },
|
37
37
|
|
38
38
|
# specialized string as datalog with every provided data in additional brackets -> [data] [data] [data]
|
39
39
|
datalog: -> (severity, time, _progname, data) {
|
@@ -202,7 +202,7 @@ module RubySmart
|
|
202
202
|
# @param [String] str
|
203
203
|
# @return [String]
|
204
204
|
def _declr(str)
|
205
|
-
if opts[:clr]
|
205
|
+
if opts[:clr] || !str.is_a?(String)
|
206
206
|
str
|
207
207
|
else
|
208
208
|
str.gsub(/\e\[[\d;]+m/, '')
|
@@ -11,7 +11,8 @@ module RubySmart
|
|
11
11
|
# > ================================================= [Debug] ================================================
|
12
12
|
# > "DEBUGGED DATA" <- analyzed by awesome_print#ai method
|
13
13
|
# > ==========================================================================================================
|
14
|
-
base.scene :debug, { level: :debug, inspect: true, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data,
|
14
|
+
base.scene :debug, { level: :debug, inspect: true, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
15
|
+
subject, opts = _scene_subject_with_opts(args, 'Debug')
|
15
16
|
self.log data, _scene_opt(:debug, { subject: subject }, opts)
|
16
17
|
end
|
17
18
|
|
@@ -22,7 +23,8 @@ module RubySmart
|
|
22
23
|
# > ================================================= [Info] =================================================
|
23
24
|
# > DATA
|
24
25
|
# > ==========================================================================================================
|
25
|
-
base.scene :info, { level: :info, mask: { clr: :cyan }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data,
|
26
|
+
base.scene :info, { level: :info, mask: { clr: :cyan }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
27
|
+
subject, opts = _scene_subject_with_opts(args, 'Info')
|
26
28
|
self.log data, _scene_opt(:info, { subject: subject }, opts)
|
27
29
|
end
|
28
30
|
|
@@ -33,7 +35,8 @@ module RubySmart
|
|
33
35
|
# > ================================================= [Warn] =================================================
|
34
36
|
# > DATA
|
35
37
|
# > ==========================================================================================================
|
36
|
-
base.scene :warn, { level: :warn, mask: { clr: :yellow }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data,
|
38
|
+
base.scene :warn, { level: :warn, mask: { clr: :yellow }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
39
|
+
subject, opts = _scene_subject_with_opts(args, 'Warn')
|
37
40
|
self.log data, _scene_opt(:warn, { subject: subject }, opts)
|
38
41
|
end
|
39
42
|
|
@@ -44,7 +47,8 @@ module RubySmart
|
|
44
47
|
# > ================================================ [Error] =================================================
|
45
48
|
# > DATA
|
46
49
|
# > ==========================================================================================================
|
47
|
-
base.scene :error, { level: :error, mask: { clr: :red }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data,
|
50
|
+
base.scene :error, { level: :error, mask: { clr: :red }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
51
|
+
subject, opts = _scene_subject_with_opts(args, 'Error')
|
48
52
|
self.log data, _scene_opt(:error, { subject: subject }, opts)
|
49
53
|
end
|
50
54
|
|
@@ -55,10 +59,23 @@ module RubySmart
|
|
55
59
|
# > ================================================ [Fatal] =================================================
|
56
60
|
# > DATA
|
57
61
|
# > ==========================================================================================================
|
58
|
-
base.scene :fatal, { level: :fatal, mask: { clr: :bg_red }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data,
|
62
|
+
base.scene :fatal, { level: :fatal, mask: { clr: :bg_red }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
63
|
+
subject, opts = _scene_subject_with_opts(args, 'Fatal')
|
59
64
|
self.log data, _scene_opt(:fatal, { subject: subject }, opts)
|
60
65
|
end
|
61
66
|
|
67
|
+
# unknown method (BASE)
|
68
|
+
# log level @ unknown
|
69
|
+
# prints: enclosed data
|
70
|
+
#
|
71
|
+
# > =============================================== [Unknown] ================================================
|
72
|
+
# > DATA
|
73
|
+
# > ==========================================================================================================
|
74
|
+
base.scene :unknown, { level: :unknown, mask: { clr: :gray }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
75
|
+
subject, opts = _scene_subject_with_opts(args, 'Unknown')
|
76
|
+
self.log data, _scene_opt(:unknown, { subject: subject }, opts)
|
77
|
+
end
|
78
|
+
|
62
79
|
# success method
|
63
80
|
# log level @ success (sub-level of info)
|
64
81
|
# prints: enclosed data
|
@@ -66,7 +83,8 @@ module RubySmart
|
|
66
83
|
# > ================================================ [Success] ================================================
|
67
84
|
# > DATA
|
68
85
|
# > ===========================================================================================================
|
69
|
-
base.scene :success, { level: :success, mask: { clr: :green }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data,
|
86
|
+
base.scene :success, { level: :success, mask: { clr: :green }, payload: [[:mask, ' [%{subject}] '], :__data__, :mask] } do |data, *args|
|
87
|
+
subject, opts = _scene_subject_with_opts(args, 'Success')
|
70
88
|
self.log data, _scene_opt(:success, { subject: subject }, opts)
|
71
89
|
end
|
72
90
|
|
@@ -287,36 +305,80 @@ module RubySmart
|
|
287
305
|
# log level @ debug
|
288
306
|
# prints: a processed output with unicode box-chars (e.g. ║ )
|
289
307
|
#
|
290
|
-
# ╔ START
|
308
|
+
# ╔ START ❯ job
|
291
309
|
# ╟ doing some cool log
|
292
310
|
# ╟ doing some extra log
|
293
|
-
# ╚ END [
|
311
|
+
# ╚ END ❯ job [SUCCESS] (duration: 4.34223)
|
294
312
|
base.scene :processed, { level: :debug } do |name, opts = {}, &block|
|
295
|
-
#
|
313
|
+
# increase level
|
296
314
|
lvl = processed_lvl(:up)
|
297
315
|
|
298
|
-
#
|
299
|
-
|
300
|
-
|
316
|
+
# resolve a new time-key.
|
317
|
+
# The key depends on the current level - this should be possible, since processes on the same level should not be possible
|
318
|
+
timer_key = if opts[:timer]
|
319
|
+
"processed_#{lvl}"
|
320
|
+
else
|
321
|
+
nil
|
322
|
+
end
|
323
|
+
|
324
|
+
begin
|
325
|
+
# starts new time (if key was created)
|
326
|
+
self.timer(:start, timer_key)
|
327
|
+
|
328
|
+
# send START name as +data+ - the full log line is created through the +_pcd+ method.
|
329
|
+
self.log(name, _scene_opt(:processed, opts, { pcd: :start }))
|
330
|
+
|
331
|
+
# run the provided block and resolve result
|
332
|
+
result_str = case block.call
|
333
|
+
when true
|
334
|
+
'[SUCCESS]'.bg_green + ' '
|
335
|
+
when false
|
336
|
+
'[FAIL]'.bg_red + ' '
|
337
|
+
else
|
338
|
+
''
|
339
|
+
end
|
340
|
+
rescue => e
|
341
|
+
self.fatal("#{e.message} @ #{e.backtrace_locations&.first}") unless opts[:silent]
|
342
|
+
# reraise exception
|
343
|
+
raise
|
344
|
+
ensure
|
345
|
+
result_str ||= ''
|
346
|
+
|
347
|
+
# send END name with result & possible time as +data+ - the full log line is created through the +_pcd+ method.
|
348
|
+
self.log("#{name} #{result_str}#{(timer_key ? "(#{self.timer(:clear, timer_key, humanized: true)})" : '')}", _scene_opt(:processed, opts, { pcd: :end }))
|
349
|
+
|
350
|
+
# reduce level
|
351
|
+
processed_lvl(:down)
|
301
352
|
end
|
302
353
|
|
303
|
-
self.log("START :: #{name}", _scene_opt(:processed, opts, { pcd: :start }))
|
304
|
-
|
305
|
-
end_str = case block.call
|
306
|
-
when true
|
307
|
-
'SUCCESS'
|
308
|
-
when false
|
309
|
-
'FAILED'
|
310
|
-
else
|
311
|
-
name
|
312
|
-
end
|
313
|
-
|
314
|
-
self.log("END [#{end_str}] #{(timer_key ? "(duration: #{self.timer(:clear, timer_key, humanized: true)})" : '')}", _scene_opt(:processed, opts, { pcd: :end }))
|
315
|
-
|
316
|
-
processed_lvl(:down)
|
317
|
-
|
318
354
|
true
|
319
355
|
end
|
356
|
+
|
357
|
+
# model method
|
358
|
+
# log level @ error/success/info
|
359
|
+
# prints: ActiveRecord::Base related data, depending on the models "save" state (also shows possible errors)
|
360
|
+
base.scene :model do |model, opts = {}|
|
361
|
+
# build model-logging string
|
362
|
+
mdl_string = "#{model.id.present? ? "##{model.id} - " : ''}#{model.to_s[0..49]}"
|
363
|
+
|
364
|
+
# resolve model's status
|
365
|
+
status = ((model.persisted? && model.errors.empty?) ? (model.previous_changes.blank? ? :skipped : :success) : :error)
|
366
|
+
|
367
|
+
# switch between status
|
368
|
+
case status
|
369
|
+
when :success
|
370
|
+
# show verbose logging for updated records
|
371
|
+
if opts[:verbose] != false && !model.previously_new_record?
|
372
|
+
log(:success, "#{mdl_string} (#{model.previous_changes.inspect})", tag: "#{model.class.name.upcase}|UPDATED")
|
373
|
+
else
|
374
|
+
log(:success, mdl_string, tag: "#{model.class.name.upcase}|#{(model.previously_new_record? ? 'CREATED' : 'UPDATED')}")
|
375
|
+
end
|
376
|
+
when :error
|
377
|
+
log(:error, "#{mdl_string} (#{model.errors.full_messages.join(', ').presence || '-'})", tag: "#{model.class.name.upcase}|ERROR")
|
378
|
+
else
|
379
|
+
log(:info, mdl_string, tag: "#{model.class.name.upcase}|#{status}")
|
380
|
+
end
|
381
|
+
end
|
320
382
|
end
|
321
383
|
end
|
322
384
|
end
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ['Tobias Gonsior']
|
9
9
|
spec.email = ['info@ruby-smart.org']
|
10
10
|
|
11
|
-
spec.summary = "A simple, multifunctional logging library for Ruby."
|
11
|
+
spec.summary = "A simple, multifunctional logging library for Ruby (and Rails)."
|
12
12
|
spec.description = <<~DESC
|
13
13
|
RubySmart::SimpleLogger is a fast, customizable logging library with multi-device support,
|
14
14
|
special (PRE-defined) scenes for better logging visibility.
|
@@ -33,11 +33,13 @@ Gem::Specification.new do |spec|
|
|
33
33
|
|
34
34
|
spec.require_paths = ['lib']
|
35
35
|
|
36
|
-
spec.add_dependency 'ruby_smart-support', '~> 1.
|
36
|
+
spec.add_dependency 'ruby_smart-support', '~> 1.5'
|
37
37
|
|
38
38
|
spec.add_development_dependency 'awesome_print', '~> 1.9'
|
39
39
|
spec.add_development_dependency 'coveralls_reborn', '~> 0.25'
|
40
40
|
spec.add_development_dependency 'rake', '~> 13.0'
|
41
41
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
42
42
|
spec.add_development_dependency 'yard', '~> 0.9'
|
43
|
+
spec.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
|
44
|
+
spec.add_development_dependency 'yard-relative_markdown_links', '>= 0.4'
|
43
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_smart-simple_logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Gonsior
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby_smart-support
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.5'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: awesome_print
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard-activesupport-concern
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.0.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.0.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard-relative_markdown_links
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.4'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.4'
|
97
125
|
description: "RubySmart::SimpleLogger is a fast, customizable logging library with
|
98
126
|
multi-device support, \nspecial (PRE-defined) scenes for better logging visibility.\n"
|
99
127
|
email:
|
@@ -107,19 +135,20 @@ files:
|
|
107
135
|
- ".rspec"
|
108
136
|
- ".yardopts"
|
109
137
|
- Gemfile
|
138
|
+
- LICENSE.txt
|
110
139
|
- README.md
|
111
140
|
- Rakefile
|
112
141
|
- bin/console
|
113
142
|
- bin/setup
|
114
143
|
- docs/CHANGELOG.md
|
115
144
|
- docs/CODE_OF_CONDUCT.md
|
116
|
-
- docs/LICENSE.txt
|
117
145
|
- lib/ruby_smart-debugger.rb
|
118
146
|
- lib/ruby_smart-simple_logger.rb
|
119
147
|
- lib/ruby_smart/simple_logger.rb
|
120
148
|
- lib/ruby_smart/simple_logger/core_ext/ruby/string.rb
|
121
149
|
- lib/ruby_smart/simple_logger/devices/memory_device.rb
|
122
150
|
- lib/ruby_smart/simple_logger/devices/multi_device.rb
|
151
|
+
- lib/ruby_smart/simple_logger/devices/null_device.rb
|
123
152
|
- lib/ruby_smart/simple_logger/devices/proc_device.rb
|
124
153
|
- lib/ruby_smart/simple_logger/extensions/helper.rb
|
125
154
|
- lib/ruby_smart/simple_logger/extensions/logs.rb
|
@@ -146,7 +175,7 @@ metadata:
|
|
146
175
|
documentation_uri: https://rubydoc.info/gems/ruby_smart-simple_logger
|
147
176
|
changelog_uri: https://github.com/ruby-smart/simple_logger/blob/main/docs/CHANGELOG.md
|
148
177
|
allowed_push_host: https://rubygems.org
|
149
|
-
post_install_message:
|
178
|
+
post_install_message:
|
150
179
|
rdoc_options: []
|
151
180
|
require_paths:
|
152
181
|
- lib
|
@@ -161,8 +190,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
190
|
- !ruby/object:Gem::Version
|
162
191
|
version: '0'
|
163
192
|
requirements: []
|
164
|
-
rubygems_version: 3.
|
165
|
-
signing_key:
|
193
|
+
rubygems_version: 3.5.14
|
194
|
+
signing_key:
|
166
195
|
specification_version: 4
|
167
|
-
summary: A simple, multifunctional logging library for Ruby.
|
196
|
+
summary: A simple, multifunctional logging library for Ruby (and Rails).
|
168
197
|
test_files: []
|
File without changes
|