whoop 1.2.0 → 1.3.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: 814754659e61a2179b1a09406e77e18a475ae3a5d7ffed0da3cc53eb1f3ec59f
4
- data.tar.gz: bb96421ebb0a670af446b4c8312f9f847722576f8c52f1f41240d04974c8569c
3
+ metadata.gz: b291c7f848acd58ddae598855d1c2782277ee9da307868db273497e908964636
4
+ data.tar.gz: a3fa8fe8b1a749893b8fe87b36ccac5732d7cde30bd1e6def15f90c83a9c534e
5
5
  SHA512:
6
- metadata.gz: a49ee4bf201f1239cb3dfbe829af37c4040a3925ada3af4312e1e18d9344803946052bfb1528eacc11580f5fc6e1fde0dfe2a343f2ccf651b47e010fec448b13
7
- data.tar.gz: ea69570c36ff100d9a0bda28938e3f4ecc234f4a043e7c0426371c30ee7f07bfd5119a778e34bd034f902fbee833356d60bf2752d6b9aa08ee87228a48218381
6
+ metadata.gz: 61bfc9e8af8a082dc18be22535c19619ef39a3ac98222cf2951cbd3ec9723a3de021718b42ea134f99a051b81984f10e117d1674810074715fad7e10f35c2f58
7
+ data.tar.gz: bd545734157a5ac01cb11e67cfb913fc501081d0fdd7d5f7e84da9976672dd1a2733c26d09855d9b371acbaa1a5fbc7bfe78f99d223227839528430f5f1f7978
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- whoop (1.2.0)
4
+ whoop (1.3.0)
5
5
  activerecord (>= 6.1.4)
6
6
  activesupport (>= 6.1.4)
7
7
  amazing_print
8
8
  anbt-sql-formatter
9
9
  colorize
10
10
  rouge
11
+ semantic_logger
11
12
 
12
13
  GEM
13
14
  remote: https://rubygems.org/
@@ -26,7 +27,6 @@ GEM
26
27
  anbt-sql-formatter (0.1.0)
27
28
  ast (2.4.2)
28
29
  bump (0.10.0)
29
- byebug (11.1.3)
30
30
  codecov (0.6.0)
31
31
  simplecov (>= 0.15, < 0.22)
32
32
  coderay (1.1.3)
@@ -55,9 +55,6 @@ GEM
55
55
  pry (0.14.2)
56
56
  coderay (~> 1.1)
57
57
  method_source (~> 1.0)
58
- pry-byebug (3.10.1)
59
- byebug (~> 11.0)
60
- pry (>= 0.13, < 0.15)
61
58
  rainbow (3.1.1)
62
59
  rake (13.0.6)
63
60
  rbs (2.8.4)
@@ -93,6 +90,8 @@ GEM
93
90
  rubocop (>= 1.7.0, < 2.0)
94
91
  rubocop-ast (>= 0.4.0)
95
92
  ruby-progressbar (1.13.0)
93
+ semantic_logger (4.15.0)
94
+ concurrent-ruby (~> 1.0)
96
95
  simplecov (0.21.2)
97
96
  docile (~> 1.1)
98
97
  simplecov-html (~> 0.11)
@@ -117,13 +116,14 @@ GEM
117
116
 
118
117
  PLATFORMS
119
118
  arm64-darwin-22
119
+ arm64-darwin-23
120
120
  x86_64-linux
121
121
 
122
122
  DEPENDENCIES
123
123
  bump
124
124
  codecov
125
125
  magic_frozen_string_literal
126
- pry-byebug
126
+ pry
127
127
  rake
128
128
  rspec
129
129
  simplecov
data/README.md CHANGED
@@ -36,6 +36,7 @@ Whoop.setup do |config|
36
36
  config.logger = ActiveSupport::Logger.new("log/debug.log")
37
37
  # config.logger = ActiveSupport::Logger.new("log/#{Rails.env}.log")
38
38
  # config.logger = ActiveSupport::Logger.new($stdout)
39
+ # config.logger = SemanticLogger["WHOOP"]
39
40
  # config.logger = nil # uses `puts`
40
41
 
41
42
  config.level = :debug
@@ -63,6 +64,7 @@ You can pass any options into the `whoop` method to change the output.
63
64
  - `caller_depth` - the depth of the caller to use for the source (default: 0)
64
65
  - `explain` - whether to run `EXPLAIN` on the SQL query (default: false)
65
66
  - `context` - a hash of key/value pairs to include in the output
67
+ - `tags` - an array of tags to include in the output
66
68
 
67
69
  ## Examples
68
70
 
data/lib/whoop/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Whoop
4
- VERSION = "1.2.0"
4
+ VERSION = "1.3.0"
5
5
  end
data/lib/whoop.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require "active_support"
4
4
  require "colorize"
5
5
  require "rouge"
6
+ require "semantic_logger"
7
+
6
8
  require_relative "whoop/version"
7
9
  require_relative "whoop/formatters/json_formatter"
8
10
  require_relative "whoop/formatters/pretty_formatter"
@@ -40,9 +42,10 @@ module Whoop
40
42
  # @param [String] pattern - the pattern to use for the line (e.g. '-')
41
43
  # @param [Integer] count - the number of times to repeat the pattern per line (e.g. 80)
42
44
  # @param [Symbol] color - the color to use for the line (e.g. :red)
43
- # @param [Symbol] format - the format to use for the message (one of :json, :sql, :plain, :pretty (default))
45
+ # @param [Symbol] format - the format to use for the message (one of :json, :sql, :plain, :semantic, :pretty (default))
44
46
  # @param [Integer] caller_depth - the depth of the caller to use for the source (default: 0)
45
47
  # @param [Boolean] explain - whether to explain the SQL query (default: false)
48
+ # @param [Array<String, Symbol>] tags - Any tags you'd like to include in the log
46
49
  # @param [Hash] context - Any additional context you'd like to include in the log
47
50
  def whoop(
48
51
  label = nil,
@@ -52,14 +55,35 @@ module Whoop
52
55
  format: :pretty,
53
56
  caller_depth: 0,
54
57
  explain: false,
58
+ tags: [],
55
59
  context: nil
56
60
  )
61
+ message = block_given? ? yield : label
62
+
63
+ if Whoop.logger.is_a?(SemanticLogger::Logger)
64
+ context ||= {}
65
+
66
+ if tags.length > 0
67
+ Whoop.logger.tagged(*tags) do
68
+ Whoop.logger.send(Whoop.level.to_sym, message, **context)
69
+ end
70
+ else
71
+ Whoop.logger.send(Whoop.level.to_sym, message, **context)
72
+ end
73
+
74
+ return
75
+ end
76
+
77
+ if tags.length > 0
78
+ context ||= {}
79
+ context[:tags] = tags
80
+ end
81
+
57
82
  logger_method = detect_logger_method
58
83
  color_method = detect_color_method(color)
59
84
  formatter_method = detect_formatter_method(format, colorize: color.present?, explain: explain)
60
-
61
- line = pattern * count
62
85
  caller_path = clean_caller_path(caller[caller_depth])
86
+ line = pattern * count
63
87
  caller_path_line = [color_method.call(INDENT), "source:".colorize(:light_black).underline, caller_path].join(" ")
64
88
  timestamp_line = [color_method.call(INDENT), "timestamp:".colorize(:light_black).underline, Time.now].join(" ")
65
89
 
@@ -72,38 +96,23 @@ module Whoop
72
96
  []
73
97
  end
74
98
 
75
- if block_given?
76
- result = yield
77
- top_line =
78
- if label.present? && label.is_a?(String)
79
- wrapped_line(label.to_s, pattern: pattern, count: count)
80
- else
81
- pattern * count
82
- end
83
- result.tap do
84
- logger_method.call color_method.call "\n\n#{TOP_LINE_CHAR}#{top_line}"
85
- logger_method.call timestamp_line
86
- logger_method.call caller_path_line
87
- context_lines.each { |l| logger_method.call l }
88
- logger_method.call ""
89
- logger_method.call formatter_method.call(result)
90
- logger_method.call ""
91
- display_invalid_format_message(format, color_method, logger_method)
92
- logger_method.call color_method.call "#{BOTTOM_LINE_CHAR}#{line}\n\n"
93
- end
94
- else
95
- tap do
96
- logger_method.call color_method.call "\n\n#{TOP_LINE_CHAR}#{line}"
97
- logger_method.call timestamp_line
98
- logger_method.call caller_path_line
99
- context_lines.each { |l| logger_method.call l }
100
- logger_method.call ""
101
- logger_method.call formatter_method.call(label)
102
- logger_method.call ""
103
- display_invalid_format_message(format, color_method, logger_method)
104
- logger_method.call color_method.call "#{BOTTOM_LINE_CHAR}#{line}\n\n"
99
+ top_line =
100
+ if label.present? && label.is_a?(String)
101
+ wrapped_line(label.to_s, pattern: pattern, count: count)
102
+ else
103
+ pattern * count
105
104
  end
106
- end
105
+
106
+ logger_method.call color_method.call top_line
107
+ logger_method.call color_method.call "\n\n#{TOP_LINE_CHAR}#{top_line}"
108
+ logger_method.call timestamp_line
109
+ logger_method.call caller_path_line
110
+ context_lines.each { |l| logger_method.call l }
111
+ logger_method.call ""
112
+ logger_method.call formatter_method.call(message)
113
+ logger_method.call ""
114
+ display_invalid_format_message(format, color_method, logger_method)
115
+ logger_method.call color_method.call "#{BOTTOM_LINE_CHAR}#{line}\n\n"
107
116
  end
108
117
 
109
118
  private
@@ -140,9 +149,11 @@ module Whoop
140
149
  end
141
150
 
142
151
  # Return the format method to use
143
- # @param [Symbol] format
152
+ # @param [Symbol] format - one of :json, :sql, :pretty, :semantic, :plain
153
+ # @param [Hash] context - the context provided
154
+ # @param [Boolean] explain - if format is sql, execute the explain on the query
144
155
  # @return [Method] format method
145
- def detect_formatter_method(format, colorize: false, explain: false)
156
+ def detect_formatter_method(format, context: {}, colorize: false, explain: false)
146
157
  case format.to_sym
147
158
  when :json
148
159
  ->(message) { Whoop::Formatters::JsonFormatter.format(message, colorize: colorize) }
@@ -150,6 +161,8 @@ module Whoop
150
161
  ->(message) { Whoop::Formatters::SqlFormatter.format(message, colorize: colorize, explain: explain) }
151
162
  when :pretty
152
163
  ->(message) { Whoop::Formatters::PrettyFormatter.format(message) }
164
+ when :semantic
165
+ ->(message, context = {}) { Whoop::Formatters::PrettyFormatter.format(message, **context) }
153
166
  else
154
167
  ->(message) { message }
155
168
  end
data/sig/whoop.rbs CHANGED
@@ -29,12 +29,14 @@ module Whoop
29
29
  #
30
30
  # _@param_ `color` — - the color to use for the line (e.g. :red)
31
31
  #
32
- # _@param_ `format` — - the format to use for the message (one of :json, :sql, :plain, :pretty (default))
32
+ # _@param_ `format` — - the format to use for the message (one of :json, :sql, :plain, :semantic, :pretty (default))
33
33
  #
34
34
  # _@param_ `caller_depth` — - the depth of the caller to use for the source (default: 0)
35
35
  #
36
36
  # _@param_ `explain` — - whether to explain the SQL query (default: false)
37
37
  #
38
+ # _@param_ `tags` — - Any tags you'd like to include in the log
39
+ #
38
40
  # _@param_ `context` — - Any additional context you'd like to include in the log
39
41
  def whoop: (
40
42
  ?String? label,
@@ -44,6 +46,7 @@ module Whoop
44
46
  ?format: Symbol,
45
47
  ?caller_depth: Integer,
46
48
  ?explain: bool,
49
+ ?tags: ::Array[(String | Symbol)],
47
50
  ?context: ::Hash[untyped, untyped]?
48
51
  ) -> untyped
49
52
 
@@ -65,13 +68,21 @@ module Whoop
65
68
  def detect_logger_method: () -> Method
66
69
 
67
70
  # sord omit - no YARD type given for "colorize:", using untyped
68
- # sord omit - no YARD type given for "explain:", using untyped
69
71
  # Return the format method to use
70
72
  #
71
- # _@param_ `format`
73
+ # _@param_ `format` — - one of :json, :sql, :pretty, :semantic, :plain
74
+ #
75
+ # _@param_ `context` — - the context provided
76
+ #
77
+ # _@param_ `explain` — - if format is sql, execute the explain on the query
72
78
  #
73
79
  # _@return_ — format method
74
- def detect_formatter_method: (Symbol format, ?colorize: untyped, ?explain: untyped) -> Method
80
+ def detect_formatter_method: (
81
+ Symbol format,
82
+ ?context: ::Hash[untyped, untyped],
83
+ ?colorize: untyped,
84
+ ?explain: bool
85
+ ) -> Method
75
86
 
76
87
  # sord omit - no YARD type given for "format", using untyped
77
88
  # sord omit - no YARD type given for "color_method", using untyped
@@ -89,6 +100,52 @@ module Whoop
89
100
  def wrapped_line: (String label, ?count: Integer, ?pattern: String) -> String
90
101
  end
91
102
 
103
+ module Constants
104
+ class ICONS
105
+ CHECKMARK: untyped
106
+ TIMES: untyped
107
+ PLUS: untyped
108
+ MINUS: untyped
109
+ end
110
+
111
+ class COLORS
112
+ BLACK: untyped
113
+ RED: untyped
114
+ GREEN: untyped
115
+ YELLOW: untyped
116
+ BLUE: untyped
117
+ MAGENTA: untyped
118
+ CYAN: untyped
119
+ WHITE: untyped
120
+ DEFAULT: untyped
121
+ LIGHT_BLACK: untyped
122
+ LIGHT_RED: untyped
123
+ LIGHT_GREEN: untyped
124
+ LIGHT_YELLOW: untyped
125
+ LIGHT_BLUE: untyped
126
+ LIGHT_MAGENTA: untyped
127
+ LIGHT_CYAN: untyped
128
+ LIGHT_WHITE: untyped
129
+ end
130
+
131
+ class MODES
132
+ DEFAULT: untyped
133
+ BOLD: untyped
134
+ DIM: untyped
135
+ ITALIC: untyped
136
+ UNDERLINE: untyped
137
+ BLINK: untyped
138
+ BLINK_SLOW: untyped
139
+ BLINK_FAST: untyped
140
+ INVERT: untyped
141
+ HIDE: untyped
142
+ STRIKE: untyped
143
+ DOUBLE_UNDERLINE: untyped
144
+ REVEAL: untyped
145
+ OVERLINED: untyped
146
+ end
147
+ end
148
+
92
149
  module Formatters
93
150
  module SqlFormatter
94
151
  PATTERNS_TO_PRESERVE: untyped
data/whoop.gemspec ADDED
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/whoop/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "whoop"
7
+ spec.version = Whoop::VERSION
8
+ spec.authors = ["Eric Berry"]
9
+ spec.email = ["eric@berry.sh"]
10
+
11
+ spec.summary = "A simple gem to help you whoop your logs into shape."
12
+ spec.description = spec.summary
13
+ spec.homepage = "https://github.com/coderberry/whoop"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.6.0"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = spec.homepage
19
+ spec.metadata["changelog_uri"] = spec.homepage
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(__dir__) do
24
+ `git ls-files -z`.split("\x0").reject do |f|
25
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
26
+ end
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_dependency "activerecord", ">= 6.1.4"
33
+ spec.add_dependency "activesupport", ">= 6.1.4"
34
+ spec.add_dependency "amazing_print"
35
+ spec.add_dependency "anbt-sql-formatter"
36
+ spec.add_dependency "colorize"
37
+ spec.add_dependency "rouge"
38
+ spec.add_dependency "semantic_logger"
39
+
40
+ spec.add_development_dependency "magic_frozen_string_literal"
41
+ spec.add_development_dependency "pry"
42
+ spec.add_development_dependency "rspec"
43
+ spec.add_development_dependency "rake"
44
+ spec.add_development_dependency "standard"
45
+ spec.add_development_dependency "bump"
46
+ spec.add_development_dependency "sord"
47
+ spec.add_development_dependency "simplecov"
48
+ spec.add_development_dependency "codecov"
49
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Berry
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-10 00:00:00.000000000 Z
11
+ date: 2024-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 6.1.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: amazing_print
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: anbt-sql-formatter
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: amazing_print
98
+ name: semantic_logger
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -109,7 +123,7 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: pry-byebug
126
+ name: pry
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -243,6 +257,7 @@ files:
243
257
  - lib/whoop/formatters/sql_formatter.rb
244
258
  - lib/whoop/version.rb
245
259
  - sig/whoop.rbs
260
+ - whoop.gemspec
246
261
  homepage: https://github.com/coderberry/whoop
247
262
  licenses:
248
263
  - MIT
@@ -265,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
265
280
  - !ruby/object:Gem::Version
266
281
  version: '0'
267
282
  requirements: []
268
- rubygems_version: 3.4.14
283
+ rubygems_version: 3.5.3
269
284
  signing_key:
270
285
  specification_version: 4
271
286
  summary: A simple gem to help you whoop your logs into shape.