whoop 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 83de2300eaec2004c4bc867fef14a91689222018eee43b12fab6b9a29d425e5a
4
- data.tar.gz: 0c3c9b1d21fede7bccf827a73e8c6c3d11b6ddeb6837a4444d664687c03583f7
3
+ metadata.gz: 8a3377a8066ffe3e56b4c0bda3edb7763d54397116e73fb10dcfeca91c16b49f
4
+ data.tar.gz: cba013c48234104ebe5d955ecc5d838f19146985b9592297fb2b6c81725144f2
5
5
  SHA512:
6
- metadata.gz: 65ad2d5801a70c8d1dec7d7291bfa0c1fef3d2d181e6a1abb75ab41a8e9dd3e0b3550a2a51ddc58880c541838c2b6f603532a134bbbfe8ee633e66103aef0cbb
7
- data.tar.gz: 3a1662b1192c5d1828ff8a7cb7bdf5914b4e4fc1313dd23ccf38e9460cd5c8e8187e1c6a3fe695c2e3552ef04b654cb3effdc28794731f12364c3c078c25772e
6
+ metadata.gz: 75b4c83644abbe37fc838020c324090ab233c9ccdc46c114025959a91cd7fb46c5fbfef363ce763f71c55f3f18adf3431f098d33ef768c6ecf21676bf34a1a27
7
+ data.tar.gz: e6dbb3c9e707b29f8feab0eb244d78561ae015ece90eb0c49d100c8987d10dce4035e846c43cffdc73a52905e6000ce90dbcda8b912fecaaf232dd47b29a0ad1
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- whoop (1.0.0)
4
+ whoop (1.0.1)
5
+ activerecord
5
6
  activesupport
6
7
  anbt-sql-formatter
7
8
  colorize
@@ -10,6 +11,11 @@ PATH
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
14
+ activemodel (7.0.4)
15
+ activesupport (= 7.0.4)
16
+ activerecord (7.0.4)
17
+ activemodel (= 7.0.4)
18
+ activesupport (= 7.0.4)
13
19
  activesupport (7.0.4)
14
20
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
21
  i18n (>= 1.6, < 2)
data/README.md CHANGED
@@ -64,7 +64,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
64
64
 
65
65
  ## Contributing
66
66
 
67
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/whoop. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/whoop/blob/main/CODE_OF_CONDUCT.md).
67
+ Bug reports and pull requests are welcome on GitHub at https://github.com/coderberry/whoop. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/coderberry/whoop/blob/main/CODE_OF_CONDUCT.md).
68
68
 
69
69
  ## License
70
70
 
@@ -72,7 +72,7 @@ The gem is available as open source under the terms of the [MIT License](https:/
72
72
 
73
73
  ## Code of Conduct
74
74
 
75
- Everyone interacting in the Whoop project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/whoop/blob/main/CODE_OF_CONDUCT.md).
75
+ Everyone interacting in the Whoop project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/coderberry/whoop/blob/main/CODE_OF_CONDUCT.md).
76
76
 
77
77
  ## Attribution
78
78
 
data/Rakefile CHANGED
@@ -4,7 +4,26 @@ require "bundler/gem_tasks"
4
4
  require "rspec/core/rake_task"
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec)
7
+ GEM_NAME = "whoop"
8
+ GEM_VERSION = Whoop::VERSION
7
9
 
8
10
  require "standard/rake"
11
+ require "bump/tasks"
9
12
 
10
13
  task default: %i[spec standard]
14
+
15
+ task :build do
16
+ system "gem build #{GEM_NAME}.gemspec"
17
+ end
18
+
19
+ task install: :build do
20
+ system "gem install #{GEM_NAME}-#{GEM_VERSION}.gem"
21
+ end
22
+
23
+ task publish: :build do
24
+ system "gem push #{GEM_NAME}-#{GEM_VERSION}.gem"
25
+ end
26
+
27
+ task :clean do
28
+ system "rm *.gem"
29
+ end
@@ -15,7 +15,11 @@ module Whoop
15
15
 
16
16
  formatter = Rouge::Formatters::TerminalTruecolor.new
17
17
  lexer = Rouge::Lexers::JSON.new
18
- formatter.format(lexer.lex(pretty_json))
18
+
19
+ [
20
+ "json:\n\n".colorize(:light_black).underline,
21
+ formatter.format(lexer.lex(pretty_json))
22
+ ].join
19
23
  end
20
24
  end
21
25
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "anbt-sql-formatter/formatter"
4
+ require "active_record"
4
5
 
5
6
  module Whoop
6
7
  module Formatters
@@ -16,15 +17,47 @@ module Whoop
16
17
 
17
18
  formatter = Rouge::Formatters::TerminalTruecolor.new
18
19
  lexer = Rouge::Lexers::SQL.new
19
- formatter.format(lexer.lex(pretty_sql))
20
+
21
+ formatted_sql = formatter.format(lexer.lex(pretty_sql))
22
+ return formatted_sql unless explain
23
+
24
+ raw_explain = exec_explain(sql)
25
+ formatted_explain = formatter.format(lexer.lex(raw_explain))
26
+
27
+ [
28
+ "sql:\n\n".colorize(:light_black).underline,
29
+ formatted_sql,
30
+ "\n\n",
31
+ "query plan:\n\n".colorize(:light_black).underline,
32
+ formatted_explain
33
+ ].join
20
34
  end
21
35
 
36
+ # Generate a pretty SQL query
37
+ # @param [String] sql The SQL query
38
+ # @return [String] The formatted SQL query
22
39
  def self.generate_pretty_sql(sql)
23
40
  rule = AnbtSql::Rule.new
24
41
  rule.indent_string = " "
25
42
  formatter = AnbtSql::Formatter.new(rule)
26
43
  formatter.format(sql.dup)
27
44
  end
45
+
46
+ # Execute the `EXPLAIN` query
47
+ # @param [String] sql The SQL query
48
+ # @return [String] The formatted query plan
49
+ def self.exec_explain(sql)
50
+ result = ActiveRecord::Base.connection.exec_query("EXPLAIN #{sql}")
51
+ lines = result.rows.map(&:first)
52
+
53
+ pretty_explain = []
54
+ pretty_explain += lines.map { |line| " #{line}" }
55
+ nrows = result.rows.length
56
+ rows_label = nrows == 1 ? "row" : "rows"
57
+ pretty_explain << "\n(#{nrows} #{rows_label})"
58
+
59
+ pretty_explain.join("\n")
60
+ end
28
61
  end
29
62
  end
30
63
  end
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.0.0"
4
+ VERSION = "1.0.1"
5
5
  end
data/lib/whoop.rb CHANGED
@@ -19,6 +19,8 @@ module Whoop
19
19
  mattr_accessor :level
20
20
  @@level = :debug
21
21
 
22
+ # Configure the logger
23
+ # @yield [Whoop::Configuration] The configuration object
22
24
  def self.setup
23
25
  yield(self)
24
26
  end
data/sig/whoop.rbs CHANGED
@@ -5,8 +5,11 @@
5
5
  module Whoop
6
6
  VERSION: untyped
7
7
 
8
- # sord omit - no YARD return type given, using untyped
9
- def self.setup: () ?{ (Whoop _self) -> void } -> untyped
8
+ # sord warn - Whoop::Configuration wasn't able to be resolved to a constant in this project
9
+ # Configure the logger
10
+ #
11
+ # _@return_ — The configuration object
12
+ def self.setup: () -> Whoop::Configuration
10
13
 
11
14
  module Main
12
15
  COLORS: untyped
@@ -89,9 +92,19 @@ module Whoop
89
92
  # _@return_ — The formatted SQL query
90
93
  def self.format: (String sql, ?colorize: bool, ?explain: bool) -> String
91
94
 
92
- # sord omit - no YARD type given for "sql", using untyped
93
- # sord omit - no YARD return type given, using untyped
94
- def self.generate_pretty_sql: (untyped sql) -> untyped
95
+ # Generate a pretty SQL query
96
+ #
97
+ # _@param_ `sql` The SQL query
98
+ #
99
+ # _@return_ — The formatted SQL query
100
+ def self.generate_pretty_sql: (String sql) -> String
101
+
102
+ # Execute the `EXPLAIN` query
103
+ #
104
+ # _@param_ `sql` — The SQL query
105
+ #
106
+ # _@return_ — The formatted query plan
107
+ def self.exec_explain: (String sql) -> String
95
108
  end
96
109
 
97
110
  module JsonFormatter
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Berry
@@ -10,6 +10,20 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2022-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activesupport
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -186,7 +200,6 @@ files:
186
200
  - lib/whoop/formatters/sql_formatter.rb
187
201
  - lib/whoop/version.rb
188
202
  - sig/whoop.rbs
189
- - whoop.gemspec
190
203
  homepage: https://github.com/coderberry/whoop
191
204
  licenses:
192
205
  - MIT
data/whoop.gemspec DELETED
@@ -1,46 +0,0 @@
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["allowed_push_host"] = "https://rubygems.org"
18
-
19
- spec.metadata["homepage_uri"] = spec.homepage
20
- spec.metadata["source_code_uri"] = spec.homepage
21
- spec.metadata["changelog_uri"] = spec.homepage
22
-
23
- # Specify which files should be added to the gem when it is released.
24
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
- spec.files = Dir.chdir(__dir__) do
26
- `git ls-files -z`.split("\x0").reject do |f|
27
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
28
- end
29
- end
30
- spec.bindir = "exe"
31
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
33
-
34
- spec.add_dependency "activesupport"
35
- spec.add_dependency "anbt-sql-formatter"
36
- spec.add_dependency "colorize"
37
- spec.add_dependency "rouge"
38
-
39
- spec.add_development_dependency "magic_frozen_string_literal"
40
- spec.add_development_dependency "pry-byebug"
41
- spec.add_development_dependency "rspec"
42
- spec.add_development_dependency "rake"
43
- spec.add_development_dependency "standard"
44
- spec.add_development_dependency "bump"
45
- spec.add_development_dependency "sord"
46
- end