niceql 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +6 -0
- data/.github/workflows/ci.yml +23 -0
- data/.github/workflows/rubocop.yml +17 -0
- data/CHANGELOG.md +5 -0
- data/lib/niceql/version.rb +1 -1
- data/lib/niceql.rb +37 -25
- data/niceql.gemspec +2 -2
- metadata +8 -6
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 286318425292a968afb8fd83fc05d8067bb03432bdf120ab3412a23119cc4128
|
4
|
+
data.tar.gz: 1a694bab19fb2281ad3e6b013b4527db6233d55885641eb2b2c76d513309b979
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7398eac94842f0f457e7323603ec21ecdae146b9ceccc84e7191f0d2d4539b8de4447f1fa33206c124bc39b5572d1df8eb054d469ea3f39b929cf6b717367d83
|
7
|
+
data.tar.gz: f9f4da9487a41a117f08c20416dac9ba8146597301a40c62d162b44013460337ed7015e2674b05d679488b7b6fe7ea9420ae36a244f90c21203eb872b7f0412c
|
@@ -0,0 +1,23 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
|
8
|
+
runs-on: ubuntu-latest
|
9
|
+
|
10
|
+
strategy:
|
11
|
+
fail-fast: false
|
12
|
+
matrix:
|
13
|
+
ruby: ["2.5", "2.6", "2.7", "3.0", "3.1"]
|
14
|
+
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v3
|
17
|
+
- name: Set up Ruby
|
18
|
+
uses: ruby/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
bundler-cache: true # 'bundle install' and cache gems
|
21
|
+
ruby-version: ${{ matrix.ruby }}
|
22
|
+
- name: Run tests
|
23
|
+
run: bundle exec rake test
|
@@ -0,0 +1,17 @@
|
|
1
|
+
name: RuboCop
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
|
9
|
+
steps:
|
10
|
+
- uses: actions/checkout@v3
|
11
|
+
- name: Set up Ruby
|
12
|
+
uses: ruby/setup-ruby@v1
|
13
|
+
with:
|
14
|
+
ruby-version: 2.7
|
15
|
+
bundler-cache: true # 'bundle install' and cache
|
16
|
+
- name: Run RuboCop
|
17
|
+
run: bundle exec rubocop --parallel
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 0.6.1
|
2
|
+
* github CI added ( PR: https://github.com/alekseyl/niceql/pull/22 many thnx to @petergoldstein )
|
3
|
+
* issue fixed https://github.com/alekseyl/niceql/issues/23
|
4
|
+
* dropped support for 2.4 ( transform_keys is missing, and I'm too lazy to backward reimplement it you can do PR if needed )
|
5
|
+
|
1
6
|
# 0.6.0
|
2
7
|
* Huge core-logic refactoring and simplification
|
3
8
|
* dollar signed literals/strings added
|
data/lib/niceql/version.rb
CHANGED
data/lib/niceql.rb
CHANGED
@@ -6,24 +6,26 @@ require "forwardable"
|
|
6
6
|
|
7
7
|
module Niceql
|
8
8
|
module StringColorize
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
class << self
|
10
|
+
def colorize_keyword(str)
|
11
|
+
# yellow ANSI color
|
12
|
+
"\e[0;33;49m#{str}\e[0m"
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def colorize_str(str)
|
16
|
+
# cyan ANSI color
|
17
|
+
"\e[0;36;49m#{str}\e[0m"
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
def colorize_err(err)
|
21
|
+
# red ANSI color
|
22
|
+
"\e[0;31;49m#{err}\e[0m"
|
23
|
+
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def colorize_comment(comment)
|
26
|
+
# bright black bold ANSI color
|
27
|
+
"\e[0;90;1;49m#{comment}\e[0m"
|
28
|
+
end
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
@@ -31,7 +33,8 @@ module Niceql
|
|
31
33
|
# ?= -- should be present but without being added to MatchData
|
32
34
|
AFTER_KEYWORD_SPACE = '(?=\s{1})'
|
33
35
|
JOIN_KEYWORDS = '(RIGHT\s+|LEFT\s+){0,1}(INNER\s+|OUTER\s+){0,1}JOIN(\s+LATERAL){0,1}'
|
34
|
-
INLINE_KEYWORDS = "WITH|ASC|COALESCE|AS|WHEN|THEN|ELSE|END|AND|UNION|ALL|ON|DISTINCT|
|
36
|
+
INLINE_KEYWORDS = "WITH|ASC|COALESCE|AS|WHEN|THEN|ELSE|END|AND|UNION|ALL|ON|DISTINCT|"\
|
37
|
+
"INTERSECT|EXCEPT|EXISTS|NOT|COUNT|ROUND|CAST|IN"
|
35
38
|
NEW_LINE_KEYWORDS = "SELECT|FROM|WHERE|CASE|ORDER BY|LIMIT|GROUP BY|HAVING|OFFSET|UPDATE|SET|#{JOIN_KEYWORDS}"
|
36
39
|
|
37
40
|
POSSIBLE_INLINER = /(ORDER BY|CASE)/
|
@@ -94,7 +97,11 @@ module Niceql
|
|
94
97
|
sql_start_line_num = 3 if err.lines.length <= 3
|
95
98
|
# error not always contains HINT
|
96
99
|
sql_start_line_num ||= err.lines[3][/(HINT|DETAIL)/] ? 4 : 3
|
97
|
-
sql_body_lines = sql_start_line_num < err.lines.length
|
100
|
+
sql_body_lines = if sql_start_line_num < err.lines.length
|
101
|
+
err.lines[sql_start_line_num..-1]
|
102
|
+
else
|
103
|
+
original_sql_query&.lines
|
104
|
+
end
|
98
105
|
|
99
106
|
# this means original query is missing so it's nothing to prettify
|
100
107
|
return err unless sql_body_lines
|
@@ -164,7 +171,8 @@ module Niceql
|
|
164
171
|
# 1. Split the original query onto the query part + literals + comments
|
165
172
|
# a. find all potential dollar-signed separators
|
166
173
|
# b. prepare full literal extractor regex
|
167
|
-
# 2. Find and separate all literals and comments into mutable/format-able types
|
174
|
+
# 2. Find and separate all literals and comments into mutable/format-able types
|
175
|
+
# and immutable ( see the typing and formatting rules below )
|
168
176
|
# 3. Replace all literals and comments with uniq ids on the original query to get the parametrized query
|
169
177
|
# 4. Format parametrized query alongside with mutable/format-able comments and literals
|
170
178
|
# a. clear space characters: replace all \s+ to \s, remove all "\n" e.t.c
|
@@ -210,7 +218,7 @@ module Niceql
|
|
210
218
|
# but right now there is no difference between the
|
211
219
|
# newline_wrapped_comment, newline_start_comment, newline_end_comment, they all will be wrapped in newlines
|
212
220
|
COMMENT_AND_LITERAL_TYPES = [:immutable_string, :indentable_string, :inline_comment, :newline_wrapped_comment,
|
213
|
-
:newline_start_comment, :newline_end_comment]
|
221
|
+
:newline_start_comment, :newline_end_comment,]
|
214
222
|
|
215
223
|
attr_reader :parametrized_sql, :initial_sql, :string_regex, :literals_and_comments_types, :colorize
|
216
224
|
|
@@ -246,7 +254,8 @@ module Niceql
|
|
246
254
|
post_match_str = Regexp.last_match.post_match
|
247
255
|
|
248
256
|
if ["SELECT", "UPDATE", "INSERT"].include?(matched_part)
|
249
|
-
|
257
|
+
indent_block = !config.open_bracket_is_newliner || brackets.last.nil? || brackets.last[:nested]
|
258
|
+
indent += config.indentation_base if indent_block
|
250
259
|
brackets.last[:nested] = true if brackets.last
|
251
260
|
add_new_line = !first_keyword
|
252
261
|
elsif matched_part == "("
|
@@ -334,6 +343,7 @@ module Niceql
|
|
334
343
|
# when comment ending with newline followed by a keyword we should remove double newlines
|
335
344
|
def clear_extra_newline_after_comments
|
336
345
|
newlined_comments = @literals_and_comments_types.select { |k,| new_line_ending_comment?(k) }
|
346
|
+
return if newlined_comments.length == 0
|
337
347
|
parametrized_sql.gsub!(/(#{newlined_comments.keys.join("}\n|")}}\n)/, &:chop)
|
338
348
|
end
|
339
349
|
|
@@ -446,11 +456,13 @@ module Niceql
|
|
446
456
|
end
|
447
457
|
end
|
448
458
|
|
449
|
-
|
450
|
-
|
451
|
-
|
459
|
+
class << self
|
460
|
+
def configure
|
461
|
+
yield(config)
|
462
|
+
end
|
452
463
|
|
453
|
-
|
454
|
-
|
464
|
+
def config
|
465
|
+
@config ||= NiceQLConfig.new
|
466
|
+
end
|
455
467
|
end
|
456
468
|
end
|
data/niceql.gemspec
CHANGED
@@ -36,13 +36,13 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
37
|
spec.require_paths = ["lib"]
|
38
38
|
|
39
|
-
spec.required_ruby_version = ">= 2.
|
39
|
+
spec.required_ruby_version = ">= 2.5"
|
40
40
|
|
41
41
|
spec.add_development_dependency("awesome_print")
|
42
42
|
spec.add_development_dependency("bundler", ">= 1")
|
43
43
|
spec.add_development_dependency("minitest", "~> 5.0")
|
44
44
|
spec.add_development_dependency("rake", ">= 12.3.3")
|
45
|
-
spec.add_development_dependency("rubocop-shopify", "~> 2.0
|
45
|
+
spec.add_development_dependency("rubocop-shopify", "~> 2.0")
|
46
46
|
|
47
47
|
spec.add_development_dependency("benchmark-ips")
|
48
48
|
spec.add_development_dependency("differ")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: niceql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alekseyl
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.0
|
75
|
+
version: '2.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.0
|
82
|
+
version: '2.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: benchmark-ips
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,9 +146,11 @@ executables: []
|
|
146
146
|
extensions: []
|
147
147
|
extra_rdoc_files: []
|
148
148
|
files:
|
149
|
+
- ".github/dependabot.yml"
|
150
|
+
- ".github/workflows/ci.yml"
|
151
|
+
- ".github/workflows/rubocop.yml"
|
149
152
|
- ".gitignore"
|
150
153
|
- ".rubocop.yml"
|
151
|
-
- ".travis.yml"
|
152
154
|
- CHANGELOG.md
|
153
155
|
- Gemfile
|
154
156
|
- LICENSE.txt
|
@@ -177,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
179
|
requirements:
|
178
180
|
- - ">="
|
179
181
|
- !ruby/object:Gem::Version
|
180
|
-
version: '2.
|
182
|
+
version: '2.5'
|
181
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
184
|
requirements:
|
183
185
|
- - ">="
|