anbt-sql-formatter 0.1.0 → 0.1.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: 06d3d110d976d89ae531994e7a2e504028deb41c7e0576ad977445dd12a40e97
4
- data.tar.gz: 07754a3a2b3169853345b4ead8f2290f0b4279bd913359b637c2e2d87994cb80
3
+ metadata.gz: 0bd065b8b98fe3a87257b39677bd7ed0fc78233173c0a1f1e99792cec2e9868f
4
+ data.tar.gz: 999857541e0547429abb974f830fbba8ff0c31ae2284b89bfd840353e3029786
5
5
  SHA512:
6
- metadata.gz: 760fa7076565da7636d4dd0659a7ac7f6651e61e50860b7b61cb1fdeac45a0d7836a0c3a3b832bc32b4eb8bcd939eff2e37135b0508822f028f72c4a5753ecd6
7
- data.tar.gz: 3deda4f2457c216382e8c64d9343af513e60d762af57ab39f047a3b282756833ea7542b45d309375fa34f17ef4a5421ac57aee08c1c7439c94d6dcefed7c03cc
6
+ metadata.gz: fc5d07dc5eb05cc96c250e865bf36f2ae7b8e11457b3850d112b75925a00ccb93f498b1fc389288de875d77292b7139464227f35fa7db56fb602498ffe07e623
7
+ data.tar.gz: 276dc243eeaeab0ee353017e1f7d1bbcf6ec3e11e8b295f5a93331d4b5786f68a6725abe1ca89c81f72a53da821f318aeebde04ed2aa9eb205cfb497f256debe
data/.gitignore CHANGED
@@ -5,3 +5,6 @@ pkg/*
5
5
 
6
6
  # Emacs
7
7
  *~
8
+
9
+ # Bundler
10
+ /vendor/bundle/
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # 0.1.1 (2025-01-12)
2
+
3
+ No breaking changes.
4
+
5
+ ## Improvements
6
+
7
+ - Avoid mutative string manipulation (coarse-tokenizer.rb: tokenize)
8
+ - Prevents frozen literal warnings in Ruby 3.4 (Issue #17)
9
+ - Update comments (PR #14)
10
+ - Some small fixes, cleanups, formatting improvements
11
+
12
+
1
13
  # 0.1.0 (2018-12-16)
2
14
 
3
15
  ## Breaking changes
@@ -21,4 +21,6 @@ Gem::Specification.new do |s|
21
21
  # specify any dependencies here; for example:
22
22
  # s.add_development_dependency "rspec"
23
23
  # s.add_runtime_dependency "rest-client"
24
+
25
+ s.add_development_dependency "test-unit", "~> 3.6.2"
24
26
  end
@@ -38,8 +38,7 @@ These are exclusive:
38
38
  =end
39
39
 
40
40
  def tokenize(str)
41
- @str = str
42
- @str.gsub!("\r\n", "\n")
41
+ @str = str.gsub("\r\n", "\n")
43
42
  out_of_quote_single = true
44
43
  out_of_quote_double = true
45
44
  out_of_comment_single = true
@@ -51,36 +50,36 @@ These are exclusive:
51
50
 
52
51
  while @str.size > 0
53
52
 
54
- if /\A(")/ =~ str && out_of_quote_double &&
53
+ if /\A(")/ =~ @str && out_of_quote_double &&
55
54
  out_of_quote_single && out_of_comment_single && out_of_comment_multi
56
55
  ## begin double quote
57
56
 
58
57
  length = $1.size
59
58
  shift_token(length, :plain, :quote_double, :start)
60
59
  out_of_quote_double = false
61
-
62
- elsif /\A(")/ =~ str && !(out_of_quote_double) &&
60
+
61
+ elsif /\A(")/ =~ @str && !(out_of_quote_double) &&
63
62
  out_of_quote_single && out_of_comment_single && out_of_comment_multi
64
63
  ## end double quote
65
-
64
+
66
65
  length = $1.size
67
- if /\A(".")/ =~ str ## schema.table
66
+ if /\A(".")/ =~ @str ## schema.table
68
67
  shift_to_buf(3)
69
- elsif /\A("")/ =~ str ## escaped double quote
68
+ elsif /\A("")/ =~ @str ## escaped double quote
70
69
  shift_to_buf(2)
71
70
  else
72
71
  shift_token(length, :quote_double, :plain, :end)
73
72
  out_of_quote_double = true
74
73
  end
75
74
 
76
- elsif /\A(')/ =~ str && out_of_quote_single &&
75
+ elsif /\A(')/ =~ @str && out_of_quote_single &&
77
76
  out_of_quote_double && out_of_comment_single && out_of_comment_multi
78
77
  ## begin single quote
79
-
78
+
80
79
  length = $1.size
81
80
  shift_token(length, :plain, :quote_single, :start)
82
81
  out_of_quote_single = false
83
- elsif /\A(')/ =~ str && !(out_of_quote_single) &&
82
+ elsif /\A(')/ =~ @str && !(out_of_quote_single) &&
84
83
  out_of_quote_double && out_of_comment_single && out_of_comment_multi
85
84
  ## end single quote
86
85
 
@@ -88,49 +87,49 @@ These are exclusive:
88
87
  if /\A('')/ =~ @str ## escaped single quote
89
88
  shift_to_buf(2)
90
89
  else
91
- shift_token(length, :quote_single, :plain, :end)
90
+ shift_token(length, :quote_single, :plain, :end)
92
91
  out_of_quote_single = true
93
92
  end
94
-
95
- elsif /\A(#{@comment_single_start})/ =~ str && out_of_comment_single &&
93
+
94
+ elsif /\A(#{@comment_single_start})/ =~ @str && out_of_comment_single &&
96
95
  out_of_quote_single && out_of_quote_double && out_of_comment_multi
97
96
  ## begin single line comment
98
-
97
+
99
98
  length = $1.size
100
99
  shift_token(length, :plain, :comment_single, :start)
101
100
  out_of_comment_single = false
102
101
 
103
- elsif /\A(\n)/ =~ str && !(out_of_comment_single) &&
102
+ elsif /\A(\n)/ =~ @str && !(out_of_comment_single) &&
104
103
  out_of_quote_single && out_of_quote_double && out_of_comment_multi
105
104
  ## end single line comment
106
-
105
+
107
106
  length = $1.size
108
107
  shift_token(length, :comment_single, :plain, :end)
109
108
  out_of_comment_single = true
110
109
 
111
- elsif /\A(#{@comment_multi_start})/ =~ str &&
110
+ elsif /\A(#{@comment_multi_start})/ =~ @str &&
112
111
  out_of_quote_single && out_of_quote_double && out_of_comment_single && out_of_comment_multi
113
112
  ## begin multi line comment
114
-
113
+
115
114
  length = $1.size
116
115
  shift_token(length, :plain, :comment_multi, :start)
117
116
  out_of_comment_multi = false
118
117
 
119
- elsif /\A(#{@comment_multi_end})/ =~ str &&
118
+ elsif /\A(#{@comment_multi_end})/ =~ @str &&
120
119
  out_of_quote_single && out_of_quote_double && out_of_comment_single && !(out_of_comment_multi)
121
120
  ## end multi line comment
122
-
121
+
123
122
  length = $1.size
124
123
  shift_token(length, :comment_multi, :plain, :end)
125
124
  out_of_comment_multi = true
126
125
 
127
- elsif /\A\\/ =~ str
126
+ elsif /\A\\/ =~ @str
128
127
  ## escape char
129
128
  shift_to_buf(2)
130
129
 
131
130
  else
132
131
  shift_to_buf(1)
133
-
132
+
134
133
  end
135
134
  end
136
135
  @result << CoarseToken.new(@mode, @buf+@str) if (@buf+@str).size > 0
@@ -140,11 +139,11 @@ These are exclusive:
140
139
 
141
140
 
142
141
  def shift_to_buf(n)
143
- @buf << @str[0...n]
144
- @str[0...n] = ""
142
+ @buf += @str[0...n]
143
+ @str = @str[n..]
145
144
  end
146
-
147
-
145
+
146
+
148
147
  def shift_token(length, type, mode, flag)
149
148
  case flag
150
149
  when :start
@@ -157,7 +156,7 @@ These are exclusive:
157
156
  raise "must not happen"
158
157
  end
159
158
 
160
- @str[0..(length-1)] = ""
159
+ @str = @str[length..]
161
160
  @mode = mode
162
161
  end
163
162
  end
@@ -6,7 +6,7 @@ AnbtSqlFormatter: SQL整形ツール. SQL文を決められたルールに従い
6
6
  フォーマットを実施するためには、入力されるSQLがSQL文として妥当であることが前提条件となります。
7
7
 
8
8
  このクラスが準拠するSQL整形のルールについては、下記URLを参照ください。
9
- http://homepage2.nifty.com/igat/igapyon/diary/2005/ig050613.html
9
+ https://www.igapyon.jp/igapyon/diary/2005/ig050613.html
10
10
 
11
11
  このクラスには ANSI SQLの予約語一覧が蓄えられます。
12
12
 
@@ -98,7 +98,7 @@ class AnbtSql
98
98
  is_next_char_space = false
99
99
  if @pos + 1 < @before.size &&
100
100
  space?(char_at(@before, @pos+1))
101
- is_next_char_space = true
101
+ is_next_char_space = true
102
102
  end
103
103
 
104
104
  if not is_next_char_space
@@ -8,7 +8,7 @@ AnbtSqlFormatter: SQL整形ツール. SQL文を決められたルールに従い
8
8
  フォーマットを実施するためには、入力されるSQLがSQL文として妥当であることが前提条件となります。
9
9
 
10
10
  このクラスが準拠するSQL整形のルールについては、下記URLを参照ください。
11
- http://homepage2.nifty.com/igat/igapyon/diary/2005/ig050613.html
11
+ https://www.igapyon.jp/igapyon/diary/2005/ig050613.html
12
12
 
13
13
  このクラスは SQLの変換規則を表します。
14
14
 
@@ -48,9 +48,9 @@ class AnbtSql
48
48
 
49
49
  #
50
50
  # このバリューオブジェクトの文字列表現を取得する。
51
- #
51
+ #
52
52
  # オブジェクトのシャロー範囲でしか to_s されない点に注意。
53
- #
53
+ #
54
54
  # @return:: バリューオブジェクトの文字列表現。
55
55
  #
56
56
  def to_s
@@ -1,7 +1,7 @@
1
1
  module Anbt
2
2
  module Sql
3
3
  module Formatter
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
6
6
  end
7
7
  end
@@ -8,7 +8,7 @@ require "anbt-sql-formatter/formatter"
8
8
  =begin
9
9
  rule のプロパティを修正するだけではなく
10
10
  さらに踏み込んでカスタマイズしたい場合は
11
- formatter.rb 内の AnbtSql::Formatter#format_list_main_loop
11
+ formatter.rb 内の AnbtSql::Formatter#format_list_main_loop
12
12
  などをオーバーライドすると良いでしょう。
13
13
 
14
14
  Ruby に詳しくない場合は「Ruby オープンクラス」
@@ -39,7 +39,7 @@ if $0 == __FILE__
39
39
 
40
40
  # キーワードを大文字・小文字に変換しない
41
41
  rule.keyword = AnbtSql::Rule::KEYWORD_NONE
42
-
42
+
43
43
  # 複数単語のキーワードを登録
44
44
  rule.kw_multi_words << "INNER JOIN"
45
45
  rule.kw_nl_x << "INNER JOIN"
@@ -50,7 +50,7 @@ if $0 == __FILE__
50
50
  rule.kw_nl_x << "WHEN"
51
51
 
52
52
  # User defined additional functions:
53
- # ユーザ定義関数の追加:
53
+ # ユーザ定義関数の追加:
54
54
  %w(count sum substr date).each{|func_name|
55
55
  rule.function_names << func_name.upcase
56
56
  }
@@ -58,7 +58,7 @@ if $0 == __FILE__
58
58
  #rule.indent_string = " "
59
59
  #rule.indent_string = "('-')"
60
60
  rule.indent_string = "| "
61
-
61
+
62
62
  formatter = AnbtSql::Formatter.new(rule)
63
63
  result = formatter.format(src)
64
64
  print result
@@ -21,7 +21,7 @@ class TestCoarseTokenizer < Test::Unit::TestCase
21
21
  }.join("\n")
22
22
  end
23
23
 
24
-
24
+
25
25
  def test_shift_to_buf
26
26
  @tok.buf = ""
27
27
  @tok.str = "abcdefg"
@@ -52,14 +52,14 @@ class TestCoarseTokenizer < Test::Unit::TestCase
52
52
  @tok.result = []
53
53
  @tok.buf = "'ABC"
54
54
  @tok.str = "'def"
55
-
55
+
56
56
  @tok.shift_token(1, :comment, :plain, :end)
57
57
  assert_equals( msg, :comment, @tok.result.last._type)
58
58
  assert_equals( msg, "'ABC'", @tok.result.last.string)
59
59
  assert_equals( msg, "", @tok.buf)
60
60
  assert_equals( msg, "def", @tok.str)
61
61
  end
62
-
62
+
63
63
 
64
64
  def test_tokenize_1
65
65
  assert_equals(
@@ -327,7 +327,7 @@ class TestCoarseTokenizer < Test::Unit::TestCase
327
327
  )))
328
328
  )
329
329
  end
330
-
330
+
331
331
 
332
332
  def test_comment_in_string_1
333
333
  assert_equals(
@@ -392,7 +392,7 @@ class TestCoarseTokenizer < Test::Unit::TestCase
392
392
  )))
393
393
  )
394
394
  end
395
-
395
+
396
396
 
397
397
  def test_string_escape_1
398
398
  assert_equals(