Module: Kaigyo

Included in:
String
Defined in:
lib/kaigyo.rb,
lib/kaigyo/version.rb,
lib/kaigyo/tokenizer.rb

Defined Under Namespace

Classes: Error, Tokenizer

Constant Summary collapse

VERSION =
"0.1.1"

Instance Method Summary collapse

Instance Method Details

#indent_token(size) ⇒ Object



46
47
48
# File 'lib/kaigyo.rb', line 46

def indent_token(size)
  '  ' * size
end

#kaigyoObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/kaigyo.rb', line 7

def kaigyo
  return self unless self.downcase.include?("select")

  tokenizer = Tokenizer.new(self)
  tokens = tokenizer.token_analysis
  result = []
  indent_size = 0

  formatted = tokens.inject([]) do |acc, token|
    if token.first == :left_paren
      indent_size += 1
    end
    if token.first == :right_paren
      indent_size -= 1
    end

    if token.first == :clause
      acc << [indent_token(indent_size) + token[1]]
    elsif token.first == :and || token.first == :or
      acc << [indent_token(indent_size) + '  ' + token[1]]
    else
      acc.last << token[1]
    end

    acc
  end.map do |row|
    row.each.with_index.inject("") do |str, (c, idx)|
      if idx == 0
        str += c
      else
        str += c == ',' ? c : " #{c}"
      end
    end
  end.join("\n")

  puts formatted
  formatted
end