dbg-rb 0.3.2 β†’ 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d82a9c04865692653212313f996cf4fb9a6830527bbe4ed5558d66399b35aeb
4
- data.tar.gz: 6ad01658fc39a212899f8d77855a4511b752c1b3da424a783f122b9223f22408
3
+ metadata.gz: 05a2b90f0904d6bfdbcb0a03099b305364cecdb9cd49a833e1d55338b9fb6c80
4
+ data.tar.gz: db531071fce82b46b52b12bc4b97e1b563acc38621fb83d191ef58bcdaa4b5b2
5
5
  SHA512:
6
- metadata.gz: 246eb6ddd67d12911245d1423cfec870dd72dfc5b8e513aee1c2d4b47d2d9d19398a046f6847f0d8359716c772cbe11aaaf9c71e0d5ff4934152605710d4c7e5
7
- data.tar.gz: 312ae9d10b0c13979a18337ab645eec926a385f65307d2850a061852bf6de52ef3892fad546c32ab82c4f3cfd41a9e85e71c16b46ff144ef1dbaec6d1f5c8be0
6
+ metadata.gz: 12f8fd0a098e18b73d66fda695ecc87d99d9b73661a130c92866dfbf143380d71f2645ec8a7cc7e773f7bd4fa8d383af25625c853133fafd7d2d787e614c4342
7
+ data.tar.gz: 774daf99ccc4c44cf23e9c2c8188bbf0bf1fc760cbc1e37f5e8128cf14ffc17512e59bfdc65efedb83b1a28e85f3f2330bcf094db5c7c1cf91a77bc4bbe26378
data/README.md CHANGED
@@ -34,6 +34,7 @@ dbg(User.last.id)
34
34
 
35
35
  It appends a caller file, line info and source expression to the debug output.
36
36
 
37
+
37
38
  Hash values are pretty printed:
38
39
 
39
40
  ```ruby
@@ -85,6 +86,31 @@ DbgRb.highlight!("πŸŽ‰πŸ’”πŸ’£πŸ•ΊπŸš€πŸ§¨πŸ™ˆπŸ€―πŸ₯³πŸŒˆπŸ¦„")
85
86
 
86
87
  ![Dbg emoji](https://github.com/pawurb/dbg-rb/raw/main/dbg_emoji.png)
87
88
 
89
+ ## Logs integration
90
+
91
+ ![Lbg logs](https://github.com/pawurb/dbg-rb/raw/main/lbg_logs.png)
92
+
93
+ Use `lbg` to send debug output through a logger instead of `stdio`:
94
+
95
+ ```ruby
96
+ require "dbg-rb"
97
+
98
+ lbg(User.last.id)
99
+ # Sends to Rails.logger.debug: [web/user_sessions_controller.rb:37] User.last.id = 1972
100
+ ```
101
+
102
+ The `lbg` method:
103
+ - Uses `Rails.logger` by default when Rails is available
104
+ - Falls back to regular `dbg` behavior if no logger is configured
105
+ - Uses `:debug` log level by default
106
+
107
+ You can configure a custom logger and log level:
108
+
109
+ ```ruby
110
+ DbgRb.logger = MyLogger.new
111
+ DbgRb.log_level = :info
112
+ ```
113
+
88
114
  ## Status
89
115
 
90
116
  Contributions & ideas very welcome!
data/inline/dbg_rb.rb CHANGED
@@ -35,13 +35,27 @@ module DbgRb
35
35
  Impl.highlight!(wrapper)
36
36
  end
37
37
 
38
+ def self.logger=(val)
39
+ Impl.logger = val
40
+ end
41
+
42
+ def self.log_level=(val)
43
+ Impl.log_level = val
44
+ end
45
+
38
46
  def self.dbg(*msgs)
39
47
  Impl.new.dbg(*msgs)
40
48
  end
41
49
 
50
+ def self.lbg(*msgs)
51
+ Impl.new.lbg(*msgs)
52
+ end
53
+
42
54
  class Impl
43
55
  @@color_code = nil
44
56
  @@highlight = false
57
+ @@logger = defined?(Rails) ? Rails.logger : nil
58
+ @@log_level = :debug
45
59
 
46
60
  def self.color_code=(val)
47
61
  @@color_code = val
@@ -51,8 +65,16 @@ module DbgRb
51
65
  @@highlight = wrapper
52
66
  end
53
67
 
54
- def dbg(value)
55
- loc = caller_locations.first(3).last
68
+ def self.logger=(val)
69
+ @@logger = val
70
+ end
71
+
72
+ def self.log_level=(val)
73
+ @@log_level = val
74
+ end
75
+
76
+ def dbg_base(value)
77
+ loc = caller_locations.first(4).last
56
78
  source_file = if (path = loc.absolute_path)
57
79
  path.split("/").last(2).join("/")
58
80
  else
@@ -60,7 +82,7 @@ module DbgRb
60
82
  end
61
83
 
62
84
  file = if (path = loc.absolute_path)
63
- path.split(":").first
85
+ path
64
86
  else
65
87
  nil
66
88
  end
@@ -71,7 +93,11 @@ module DbgRb
71
93
  File.open(file) do |f|
72
94
  f.each_line.with_index do |line, i|
73
95
  if i == loc.lineno - 1
74
- splitby, remove_parantheses = if line.include?("dbg(")
96
+ splitby, remove_parantheses = if line.include?("lbg(")
97
+ ["lbg(", true]
98
+ elsif line.include?("lbg ")
99
+ ["lbg ", false]
100
+ elsif line.include?("dbg(")
75
101
  ["dbg(", true]
76
102
  else
77
103
  ["dbg ", false]
@@ -104,8 +130,20 @@ module DbgRb
104
130
  if @@color_code != nil
105
131
  output = colorize(output, @@color_code)
106
132
  end
133
+
134
+ output
135
+ end
107
136
 
108
- puts output
137
+ def dbg(value)
138
+ puts dbg_base(value)
139
+ end
140
+
141
+ def lbg(value)
142
+ if @@logger.nil?
143
+ puts dbg_base(value)
144
+ else
145
+ @@logger.send(@@log_level, dbg_base(value))
146
+ end
109
147
  end
110
148
 
111
149
  private
@@ -159,4 +197,8 @@ def dbg(value)
159
197
  DbgRb.dbg(value)
160
198
  end
161
199
 
200
+ def lbg(value)
201
+ DbgRb.lbg(value)
202
+ end
203
+
162
204
  DbgRb.color_code = 33 # yellow
data/lbg_logs.png ADDED
Binary file
data/lib/dbg-rb.rb CHANGED
@@ -11,13 +11,27 @@ module DbgRb
11
11
  Impl.highlight!(wrapper)
12
12
  end
13
13
 
14
+ def self.logger=(val)
15
+ Impl.logger = val
16
+ end
17
+
18
+ def self.log_level=(val)
19
+ Impl.log_level = val
20
+ end
21
+
14
22
  def self.dbg(*msgs)
15
23
  Impl.new.dbg(*msgs)
16
24
  end
17
25
 
26
+ def self.lbg(*msgs)
27
+ Impl.new.lbg(*msgs)
28
+ end
29
+
18
30
  class Impl
19
31
  @@color_code = nil
20
32
  @@highlight = false
33
+ @@logger = defined?(Rails) ? Rails.logger : nil
34
+ @@log_level = :debug
21
35
 
22
36
  def self.color_code=(val)
23
37
  @@color_code = val
@@ -27,8 +41,16 @@ module DbgRb
27
41
  @@highlight = wrapper
28
42
  end
29
43
 
30
- def dbg(value)
31
- loc = caller_locations.first(3).last
44
+ def self.logger=(val)
45
+ @@logger = val
46
+ end
47
+
48
+ def self.log_level=(val)
49
+ @@log_level = val
50
+ end
51
+
52
+ def dbg_base(value)
53
+ loc = caller_locations.first(4).last
32
54
  source_file = if (path = loc.absolute_path)
33
55
  path.split("/").last(2).join("/")
34
56
  else
@@ -36,7 +58,7 @@ module DbgRb
36
58
  end
37
59
 
38
60
  file = if (path = loc.absolute_path)
39
- path.split(":").first
61
+ path
40
62
  else
41
63
  nil
42
64
  end
@@ -47,7 +69,11 @@ module DbgRb
47
69
  File.open(file) do |f|
48
70
  f.each_line.with_index do |line, i|
49
71
  if i == loc.lineno - 1
50
- splitby, remove_parantheses = if line.include?("dbg(")
72
+ splitby, remove_parantheses = if line.include?("lbg(")
73
+ ["lbg(", true]
74
+ elsif line.include?("lbg ")
75
+ ["lbg ", false]
76
+ elsif line.include?("dbg(")
51
77
  ["dbg(", true]
52
78
  else
53
79
  ["dbg ", false]
@@ -80,8 +106,20 @@ module DbgRb
80
106
  if @@color_code != nil
81
107
  output = colorize(output, @@color_code)
82
108
  end
109
+
110
+ output
111
+ end
83
112
 
84
- puts output
113
+ def dbg(value)
114
+ puts dbg_base(value)
115
+ end
116
+
117
+ def lbg(value)
118
+ if @@logger.nil?
119
+ puts dbg_base(value)
120
+ else
121
+ @@logger.send(@@log_level, dbg_base(value))
122
+ end
85
123
  end
86
124
 
87
125
  private
@@ -135,4 +173,8 @@ def dbg(value)
135
173
  DbgRb.dbg(value)
136
174
  end
137
175
 
176
+ def lbg(value)
177
+ DbgRb.lbg(value)
178
+ end
179
+
138
180
  DbgRb.color_code = 33 # yellow
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DbgRb
4
- VERSION = "0.3.2"
4
+ VERSION = "0.4.0"
5
5
  end
data/spec/inline_spec.rb CHANGED
@@ -124,4 +124,99 @@ describe DbgRb do
124
124
  dbg(random_bytes)
125
125
  end.not_to raise_error
126
126
  end
127
+
128
+ describe "lbg" do
129
+ let(:mock_logger) do
130
+ Class.new do
131
+ attr_reader :logged_messages, :logged_levels
132
+
133
+ def initialize
134
+ @logged_messages = []
135
+ @logged_levels = []
136
+ end
137
+
138
+ def debug(message)
139
+ @logged_levels << :debug
140
+ @logged_messages << message
141
+ end
142
+
143
+ def info(message)
144
+ @logged_levels << :info
145
+ @logged_messages << message
146
+ end
147
+
148
+ def warn(message)
149
+ @logged_levels << :warn
150
+ @logged_messages << message
151
+ end
152
+
153
+ def error(message)
154
+ @logged_levels << :error
155
+ @logged_messages << message
156
+ end
157
+ end.new
158
+ end
159
+
160
+ before do
161
+ DbgRb.logger = nil
162
+ DbgRb.log_level = :debug
163
+ end
164
+
165
+ it "falls back to dbg when no logger is configured" do
166
+ expect do
167
+ lbg("test")
168
+ end.to output("[spec/inline_spec.rb:167] \"test\"\n").to_stdout
169
+ end
170
+
171
+ it "uses logger when configured" do
172
+ DbgRb.logger = mock_logger
173
+
174
+ lbg("test message")
175
+
176
+ expect(mock_logger.logged_messages).to eq(["[spec/inline_spec.rb:174] \"test message\""])
177
+ expect(mock_logger.logged_levels).to eq([:debug])
178
+ end
179
+
180
+ it "uses custom log level" do
181
+ DbgRb.logger = mock_logger
182
+ DbgRb.log_level = :info
183
+
184
+ lbg("test message")
185
+
186
+ expect(mock_logger.logged_messages).to eq(["[spec/inline_spec.rb:184] \"test message\""])
187
+ expect(mock_logger.logged_levels).to eq([:info])
188
+ end
189
+
190
+ it "logs variables with logger" do
191
+ DbgRb.logger = mock_logger
192
+ test_var = 42
193
+
194
+ lbg(test_var)
195
+
196
+ expect(mock_logger.logged_messages).to eq(["[spec/inline_spec.rb:194] test_var = 42"])
197
+ expect(mock_logger.logged_levels).to eq([:debug])
198
+ end
199
+
200
+ it "logs complex objects with logger" do
201
+ DbgRb.logger = mock_logger
202
+ test_hash = { a: 1, b: "test" }
203
+
204
+ lbg(test_hash)
205
+
206
+ expected_message = "[spec/inline_spec.rb:204] test_hash = {\n \"a\": 1,\n \"b\": \"test\"\n}"
207
+ expect(mock_logger.logged_messages).to eq([expected_message])
208
+ expect(mock_logger.logged_levels).to eq([:debug])
209
+ end
210
+
211
+ it "respects color and highlight settings with logger" do
212
+ DbgRb.logger = mock_logger
213
+ DbgRb.color_code = 31
214
+ DbgRb.highlight!("!!!")
215
+
216
+ lbg("styled")
217
+
218
+ expected_message = "\e[31m!!!\n[spec/inline_spec.rb:216] \"styled\"\n!!!\e[0m"
219
+ expect(mock_logger.logged_messages).to eq([expected_message])
220
+ end
221
+ end
127
222
  end
data/spec/main_spec.rb CHANGED
@@ -124,4 +124,99 @@ describe DbgRb do
124
124
  dbg(random_bytes)
125
125
  end.not_to raise_error
126
126
  end
127
+
128
+ describe "lbg" do
129
+ let(:mock_logger) do
130
+ Class.new do
131
+ attr_reader :logged_messages, :logged_levels
132
+
133
+ def initialize
134
+ @logged_messages = []
135
+ @logged_levels = []
136
+ end
137
+
138
+ def debug(message)
139
+ @logged_levels << :debug
140
+ @logged_messages << message
141
+ end
142
+
143
+ def info(message)
144
+ @logged_levels << :info
145
+ @logged_messages << message
146
+ end
147
+
148
+ def warn(message)
149
+ @logged_levels << :warn
150
+ @logged_messages << message
151
+ end
152
+
153
+ def error(message)
154
+ @logged_levels << :error
155
+ @logged_messages << message
156
+ end
157
+ end.new
158
+ end
159
+
160
+ before do
161
+ DbgRb.logger = nil
162
+ DbgRb.log_level = :debug
163
+ end
164
+
165
+ it "falls back to dbg when no logger is configured" do
166
+ expect do
167
+ lbg("test")
168
+ end.to output("[spec/main_spec.rb:167] \"test\"\n").to_stdout
169
+ end
170
+
171
+ it "uses logger when configured" do
172
+ DbgRb.logger = mock_logger
173
+
174
+ lbg("test message")
175
+
176
+ expect(mock_logger.logged_messages).to eq(["[spec/main_spec.rb:174] \"test message\""])
177
+ expect(mock_logger.logged_levels).to eq([:debug])
178
+ end
179
+
180
+ it "uses custom log level" do
181
+ DbgRb.logger = mock_logger
182
+ DbgRb.log_level = :info
183
+
184
+ lbg("test message")
185
+
186
+ expect(mock_logger.logged_messages).to eq(["[spec/main_spec.rb:184] \"test message\""])
187
+ expect(mock_logger.logged_levels).to eq([:info])
188
+ end
189
+
190
+ it "logs variables with logger" do
191
+ DbgRb.logger = mock_logger
192
+ test_var = 42
193
+
194
+ lbg(test_var)
195
+
196
+ expect(mock_logger.logged_messages).to eq(["[spec/main_spec.rb:194] test_var = 42"])
197
+ expect(mock_logger.logged_levels).to eq([:debug])
198
+ end
199
+
200
+ it "logs complex objects with logger" do
201
+ DbgRb.logger = mock_logger
202
+ test_hash = { a: 1, b: "test" }
203
+
204
+ lbg(test_hash)
205
+
206
+ expected_message = "[spec/main_spec.rb:204] test_hash = {\n \"a\": 1,\n \"b\": \"test\"\n}"
207
+ expect(mock_logger.logged_messages).to eq([expected_message])
208
+ expect(mock_logger.logged_levels).to eq([:debug])
209
+ end
210
+
211
+ it "respects color and highlight settings with logger" do
212
+ DbgRb.logger = mock_logger
213
+ DbgRb.color_code = 31
214
+ DbgRb.highlight!("!!!")
215
+
216
+ lbg("styled")
217
+
218
+ expected_message = "\e[31m!!!\n[spec/main_spec.rb:216] \"styled\"\n!!!\e[0m"
219
+ expect(mock_logger.logged_messages).to eq([expected_message])
220
+ end
221
+ end
127
222
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbg-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pawurb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-21 00:00:00.000000000 Z
11
+ date: 2025-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -99,6 +99,7 @@ files:
99
99
  - dbg_emoji.png
100
100
  - inline/dbg_rb.rb
101
101
  - inline/sync.rb
102
+ - lbg_logs.png
102
103
  - lib/dbg-rb.rb
103
104
  - lib/dbg_rb/version.rb
104
105
  - spec/inline_spec.rb