ykutils 0.1.4 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/.rubocop.yml +2 -1
  4. data/.rubocop_todo.yml +181 -85
  5. data/Gemfile +11 -11
  6. data/Gemfile.lock +17 -12
  7. data/bin/erubix +1 -1
  8. data/bin/makegrid +4 -4
  9. data/lib/ykutils/debugutils.rb +44 -32
  10. data/lib/ykutils/erubyx.rb +30 -19
  11. data/lib/ykutils/fileoputils.rb +2 -2
  12. data/lib/ykutils/gridlist.rb +49 -49
  13. data/lib/ykutils/lines.rb +143 -143
  14. data/lib/ykutils/lsutils.rb +71 -71
  15. data/lib/ykutils/nginxconfig.rb +40 -41
  16. data/lib/ykutils/nginxconfigfiles.rb +31 -31
  17. data/lib/ykutils/nkfutil.rb +148 -147
  18. data/lib/ykutils/nkfutil19.rb +9 -11
  19. data/lib/ykutils/osutil.rb +16 -16
  20. data/lib/ykutils/retcodex.rb +1 -3
  21. data/lib/ykutils/stext.rb +427 -425
  22. data/lib/ykutils/stextx.rb +32 -32
  23. data/lib/ykutils/stringutils.rb +111 -111
  24. data/lib/ykutils/treemanager.rb +33 -33
  25. data/lib/ykutils/treemanagera.rb +21 -21
  26. data/lib/ykutils/version.rb +1 -1
  27. data/lib/ykutils/xlines.rb +8 -8
  28. data/lib/ykutils/yamlop.rb +227 -227
  29. data/lib/ykutils/yamlxop.rb +35 -35
  30. data/test_data/4servers.erb +7 -7
  31. data/test_data/a.bat +5 -5
  32. data/test_data/a_ncn.bat +12 -12
  33. data/test_data/v103-3-189-127/a.northern-cross.net/base.yml +28 -28
  34. data/test_data/v103-3-189-127/a.northern-cross.net/value_host.yml +1 -1
  35. data/test_data/v103-3-189-127/b.northern-cross.net/base.yml +28 -28
  36. data/test_data/v103-3-189-127/b.northern-cross.net/value_host.yml +1 -1
  37. data/test_data/v103-3-189-127/c.northern-cross.net/base.yml +28 -28
  38. data/test_data/v103-3-189-127/c.northern-cross.net/value_host.yml +1 -1
  39. data/test_data/v103-3-189-127/d.northern-cross.info/base.yml +28 -28
  40. data/test_data/v103-3-189-127/d.northern-cross.info/value_host.yml +1 -1
  41. data/test_data/v103-3-189-127/d.northern-cross.net/base.yml +28 -28
  42. data/test_data/v103-3-189-127/d.northern-cross.net/value_host.yml +1 -1
  43. data/test_data/v103-3-189-127/e.northern-cross.info/base.yml +28 -28
  44. data/test_data/v103-3-189-127/e.northern-cross.info/value_host.yml +1 -1
  45. data/test_data/v103-3-189-127/e.northern-cross.net/base.yml +28 -28
  46. data/test_data/v103-3-189-127/e.northern-cross.net/value_host.yml +1 -1
  47. data/test_data/v103-3-189-127/f.northern-cross.info/base.yml +28 -28
  48. data/test_data/v103-3-189-127/f.northern-cross.info/value_host.yml +1 -1
  49. data/test_data/v103-3-189-127/f.northern-cross.net/base.yml +28 -28
  50. data/test_data/v103-3-189-127/f.northern-cross.net/value_host.yml +1 -1
  51. data/test_data/v103-3-189-127/t_server_1.erb +7 -7
  52. data/test_data/v103-3-189-127/template.erb +21 -21
  53. data/test_data/v103-3-189-127/template_ssl.erb +22 -22
  54. data/test_data/v103-3-189-127/template_ssl_www.erb +12 -12
  55. data/test_data/v103-3-189-127/template_www.erb +24 -24
  56. data/test_data/v103-3-189-127/value.yml +3 -3
  57. data/test_data/v103-3-189-127/value_ssl.yml +5 -5
  58. data/ykutils.gemspec +45 -43
  59. metadata +8 -9
  60. data/_config.yml +0 -1
@@ -3,43 +3,55 @@ require "pp"
3
3
  module Ykutils
4
4
  module DebugUtils
5
5
  class DebugMes
6
+ @debug = false
7
+ @warn = false
8
+ @buf = []
9
+
6
10
  def self.init(debug = false)
7
- @@debug = debug
8
- @@buf = []
11
+ @debug = debug
12
+ @buf = []
9
13
  end
10
14
 
11
15
  def self.set_debug(debug)
12
- @@debug = debug
16
+ @debug = debug
17
+ end
18
+
19
+ def self.get_debug
20
+ @debug
21
+ end
22
+
23
+ def self.set_warn(warn)
24
+ @warn = warn
25
+ end
26
+
27
+ def self.get_warn
28
+ @warn
13
29
  end
14
30
 
15
31
  def self.puts_x(mes)
16
- @@buf ||= []
17
- @@buf << mes
18
- # puts "#{@@buf.size} |#{mes}"
32
+ @buf << mes
19
33
  end
20
34
 
21
35
  def self.get
22
- @@buf
23
- # DebugMes.clear
36
+ @buf
24
37
  end
25
38
 
26
39
  def self.clear
27
- @@buf ||= []
28
- @@buf.clear
40
+ @buf.clear
29
41
  end
30
42
  end
31
43
 
32
44
  def clear_d
33
- DebugMes.clear
45
+ Ykutils::DebugUtils::DebugMes..clear
34
46
  end
35
47
 
36
48
  def puts_d(mes)
37
- DebugMes.puts_x(mes)
49
+ Ykutils::DebugUtils::DebugMes..puts_x(mes)
38
50
  # puts mes
39
51
  end
40
52
 
41
53
  def get_d
42
- DebugMes.get
54
+ self.class.get
43
55
  end
44
56
 
45
57
  def puts_current_method
@@ -56,46 +68,46 @@ module Ykutils
56
68
  set_debug(false)
57
69
  set_warn(0)
58
70
 
59
- DebugMes.init(false)
71
+ Ykutils::DebugUtils::DebugMes.init(false)
60
72
  end
61
73
 
62
74
  def set_debug(val)
63
- @debugutils = val
64
- DebugMes.set_debug(val)
75
+ # self.class.set_debug(val)
76
+ Ykutils::DebugUtils::DebugMes.set_debug(val)
65
77
  end
66
78
 
67
79
  def get_debug
68
- @debugutils
80
+ Ykutils::DebugUtils::DebugMes.get_debug
69
81
  end
70
82
 
71
83
  def set_warn(val)
72
- @warn = val
84
+ Ykutils::DebugUtils::DebugMes.set_warn(val)
73
85
  end
74
86
 
75
- def debug
76
- @debugutils
87
+ def get_warn
88
+ Ykutils::DebugUtils::DebugMes..get_warn
77
89
  end
78
90
 
79
91
  def d_exit(num)
80
- exit(num) if @debugutils
92
+ exit(num) if get_debug
81
93
  end
82
94
 
83
95
  def d_puts(str)
84
- puts(str) if @debugutils
96
+ puts(str) if get_debug
85
97
  end
86
98
 
87
99
  def w1_puts(str)
88
- set_warn(0) unless @warn
89
- puts(str) if @debugutils or @warn >= 1
100
+ set_warn(0) unless get_warn
101
+ puts(str) if get_debug or get_warn >= 1
90
102
  end
91
103
 
92
104
  def w2_puts(str)
93
- set_warn(0) unless @warn
94
- puts(str) if @debugutils or @warn >= 2
105
+ set_warn(0) unless get_warn
106
+ puts(str) if get_debug or get_warn >= 2
95
107
  end
96
108
 
97
109
  def d_caller(_num)
98
- pp caller(0) if @debugutils
110
+ pp caller(0) if get_debug
99
111
  end
100
112
 
101
113
  def puts_no_empty(mes)
@@ -103,20 +115,20 @@ module Ykutils
103
115
  end
104
116
 
105
117
  def d_puts_no_empty(mes)
106
- puts mes if mes != "" and @debugutils
118
+ puts mes if mes != "" and get_debug
107
119
  end
108
120
 
109
121
  def d_p(it)
110
- p it if @debugutils
122
+ p it if get_debug
111
123
  end
112
124
 
113
125
  def d_pp(it)
114
- if @debugutils
115
- pp "@debugutils=#{@debugutils}"
126
+ if get_debug
127
+ pp "debug=#{get_debug}"
116
128
  pp caller(0)
117
129
  exit
118
130
  end
119
- pp it if @debugutils
131
+ pp it if get_debug
120
132
  end
121
133
  end
122
134
  end
@@ -5,37 +5,48 @@ module Ykutils
5
5
  module Erubyx
6
6
  module_function
7
7
 
8
- def erubi_render(template_hash, scope, value_hash)
8
+ def erubi_render(template_hash, scope, value_hash = {})
9
9
  unless template_hash[:OBJ]
10
- template_hash[:OBJ] = Tilt::ErubiTemplate.new{ template_hash[:TEMPLATE] }
10
+ template_hash[:OBJ] = Tilt::ErubiTemplate.new { template_hash[:TEMPLATE] }
11
11
  end
12
- template_hash[:OBJ].render( scope, value_hash )
12
+ template_hash[:OBJ].render(scope, value_hash)
13
13
  end
14
14
 
15
- ##
16
- # `erubi_render_with_file` takes a template file path, a scope, and a value file path, reads the
17
- # template file, loads the value file, and then calls `erubi_render` with the template hash, scope,
18
- # and value hash
19
- #
20
- # Args:
21
- # template_file_path: The path to the template file.
22
- # scope: the scope of the template. This is the name of the directory that the template is in.
23
- # value_file_path: The path to the YAML file that contains the values to be used in the template.
15
+ ##
16
+ # `erubi_render_with_file` takes a template file path, a scope, and a value file path, reads the
17
+ # template file, loads the value file, and then calls `erubi_render` with the template hash, scope,
18
+ # and value hash
19
+ #
20
+ # Args:
21
+ # template_file_path: The path to the template file.
22
+ # scope: the scope of the template. This is the name of the directory that the template is in.
23
+ # value_file_path: The path to the YAML file that contains the values to be used in the template.
24
24
  def erubi_render_with_file(template_file_path, scope, value_file_path_array)
25
25
  template_text = File.read(template_file_path)
26
26
  template_hash = { TEMPLATE: template_text,
27
- OBJ: nil
28
- }
29
- value_hash = value_file_path_array.reduce({}){ |hash, path|
30
- #p path
27
+ OBJ: nil }
28
+ value_hash = value_file_path_array.reduce({}) { |hash, path|
29
+ # p path
31
30
  hash0 = YAML.load_file(path)
32
- #p hash0
31
+ # p hash0
33
32
  hash = hash.merge(hash0)
34
- #p hash
33
+ # p hash
35
34
  hash
36
35
  }
37
- #puts value_hash
36
+ # puts value_hash
38
37
  erubi_render(template_hash, scope, value_hash)
39
38
  end
39
+
40
+ def erubi_render_with_template_file(template_file_path, scope, value_hash = {})
41
+ template_text = File.read(template_file_path)
42
+ template_hash = make_template_hash(template_text)
43
+ # puts value_hash
44
+ erubi_render(template_hash, scope, value_hash)
45
+ end
46
+
47
+ def make_template_hash(text)
48
+ { TEMPLATE: text,
49
+ OBJ: nil }
50
+ end
40
51
  end
41
52
  end
@@ -154,7 +154,7 @@ module Ykutils
154
154
  ary = []
155
155
  begin
156
156
  File.open(input_file_path, "r") do |file|
157
- while line = file.gets
157
+ while (line = file.gets)
158
158
  line.chomp!
159
159
  ary << file_content_process(line)
160
160
  end
@@ -194,7 +194,7 @@ module Ykutils
194
194
  ary = []
195
195
  begin
196
196
  File.open(from_path, "r") do |file|
197
- while line = file.gets
197
+ while (line = file.gets)
198
198
  line.chomp!
199
199
  ary << file_content_process(line)
200
200
  end
@@ -1,49 +1,49 @@
1
- require 'ykutils/erubyx'
2
-
3
- module Ykutils
4
- module Gridlist
5
- TAMPLETES = { :GRID_DEF =>
6
- { :TEMPLATE => %!
7
- .g-<%= row %>-<%= colum %> {
8
- grid-row-start: <%= row %>;
9
- grid-row-end: ,<%= row + 1 %>;
10
- grid-column-start: <%= colum %>;
11
- grid-column-end: <%= colum + 1 %>;
12
- }
13
- ! , :OBJ => nil } }
14
-
15
- module_function
16
-
17
- def make_one_grid(hash, row, colum)
18
- unless hash[:OBJ]
19
- hash[:OBJ] = Tilt::ErubiTemplate.new{ hash[:TEMPLATE] }
20
- end
21
- hash[:OBJ].render( Object.new, {row: row, colum: colum} )
22
- end
23
-
24
- def make_grid(template_hash, scope, min_row, max_row, min_colum, max_colum)
25
- (min_row..max_row).map { |row|
26
- (min_colum..max_colum).map { |colum|
27
- #puts "#{row} #{colum}"
28
- value_hash = { row: row, colum: colum }
29
- #make_one_grid(template_hash, value_hash)
30
- #p template_hash
31
- #p value_hash
32
- Ykutils::Erubyx::erubi_render(template_hash, scope, value_hash)
33
- }
34
- }
35
- end
36
-
37
- def make_grid_list(min_row, max_row, min_colum, max_colum)
38
- template_hash = TAMPLETES[:GRID_DEF]
39
- scope = nil
40
- make_grid(template_hash, scope, min_row, max_row, min_colum, max_colum)
41
- end
42
-
43
- def make_grid_list_x(min_row, max_row, min_colum, max_colum)
44
- template_hash = TAMPLETES[:GRID_DEF]
45
- scope = nil
46
- make_grid(template_hash, scope, min_row, max_row, min_colum, max_colum)
47
- end
48
- end
49
- end
1
+ require 'ykutils/erubyx'
2
+
3
+ module Ykutils
4
+ module Gridlist
5
+ TAMPLETES = { :GRID_DEF =>
6
+ { :TEMPLATE => %!
7
+ .g-<%= row %>-<%= colum %> {
8
+ grid-row-start: <%= row %>;
9
+ grid-row-end: ,<%= row + 1 %>;
10
+ grid-column-start: <%= colum %>;
11
+ grid-column-end: <%= colum + 1 %>;
12
+ }
13
+ !, :OBJ => nil } }
14
+
15
+ module_function
16
+
17
+ def make_one_grid(hash, row, colum)
18
+ unless hash[:OBJ]
19
+ hash[:OBJ] = Tilt::ErubiTemplate.new { hash[:TEMPLATE] }
20
+ end
21
+ hash[:OBJ].render(Object.new, { row: row, colum: colum })
22
+ end
23
+
24
+ def make_grid(template_hash, scope, min_row, max_row, min_colum, max_colum)
25
+ (min_row..max_row).map { |row|
26
+ (min_colum..max_colum).map { |colum|
27
+ # puts "#{row} #{colum}"
28
+ value_hash = { row: row, colum: colum }
29
+ # make_one_grid(template_hash, value_hash)
30
+ # p template_hash
31
+ # p value_hash
32
+ Ykutils::Erubyx::erubi_render(template_hash, scope, value_hash)
33
+ }
34
+ }
35
+ end
36
+
37
+ def make_grid_list(min_row, max_row, min_colum, max_colum)
38
+ template_hash = TAMPLETES[:GRID_DEF]
39
+ scope = nil
40
+ make_grid(template_hash, scope, min_row, max_row, min_colum, max_colum)
41
+ end
42
+
43
+ def make_grid_list_x(min_row, max_row, min_colum, max_colum)
44
+ template_hash = TAMPLETES[:GRID_DEF]
45
+ scope = nil
46
+ make_grid(template_hash, scope, min_row, max_row, min_colum, max_colum)
47
+ end
48
+ end
49
+ end
data/lib/ykutils/lines.rb CHANGED
@@ -1,143 +1,143 @@
1
- module Ykutils
2
- class BasicLines
3
- def initialize(line_ary)
4
- @line_ary = line_ary
5
- end
6
-
7
- def get_line
8
- @line_ary.shift if @line_ary.size > -1
9
- end
10
- end
11
-
12
- class Lines
13
- def initialize(line_ary)
14
- @lines = BasicLines.new(line_ary)
15
- @line_stack = []
16
- @status = nil
17
-
18
- setup
19
- end
20
-
21
- def setup; end
22
-
23
- def get_line
24
- @line_stack.shift if @line_stack.size > -1
25
- end
26
-
27
- def output_f(fname)
28
- if fname
29
- File.open(fname, "w") do |file|
30
- @line_stack.each do |it|
31
- file.write(it.to_s)
32
- end
33
- end
34
- end
35
- end
36
- end
37
-
38
- class FtpOpLines < BasicLines
39
- end
40
-
41
- # class AccountLines < BasicLines
42
- class AccountLines < Lines
43
- HOST_ACCOUNT_START = 10
44
- HOST_ACCOUNT = 11
45
- HOST_ACCOUNT_END = 12
46
- DOMAIN_ACCOUNT_START = 20
47
- DOMAIN_ACCOUNT = 21
48
- DOMAIN_ACCOUNT_END = 22
49
- SEPARATOR = 30
50
- ETC = 100
51
-
52
- def setup
53
- while line = @lines.get_line
54
- next if line.strip == ""
55
-
56
- if line =~ /^---/
57
- case @status
58
- when HOST_ACCOUNT_START, HOST_ACCOUNT
59
- @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
60
- "CONTENT" => nil })
61
- when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
62
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
63
- "CONTENT" => nil })
64
- end
65
-
66
- @line_stack.push({ "STATUS" => SEPARATOR,
67
- "CONTENT" => line })
68
- @status = SEPARATOR
69
- elsif line =~ /^\s/
70
- case @status
71
- when HOST_ACCOUNT_START, HOST_ACCOUNT
72
- @line_stack.push({ "STATUS" => HOST_ACCOUNT,
73
- "CONTENT" => line })
74
- @status = HOST_ACCOUNT
75
- when HOST_ACCOUNT_END
76
- puts("error!")
77
- puts(line)
78
- @line_stack.push({ "STATUS" => HOST_ACCOUNT,
79
- "CONTENT" => line })
80
- @status = HOST_ACCOUNT
81
- when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
82
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT,
83
- "CONTENT" => line })
84
- @status = DOMAIN_ACCOUNT
85
- when DOMAIN_ACCOUNT_END
86
- puts("error!")
87
- puts(line)
88
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT,
89
- "CONTENT" => line })
90
- @status = DOMAIN_ACCOUNT
91
- else
92
- @line_stack.push({ "STATUS" => ETC,
93
- "CONTENT" => line })
94
- @status = ETC
95
- end
96
- elsif line =~ /^==/
97
- case @status
98
- when HOST_ACCOUNT_START, HOST_ACCOUNT
99
- @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
100
- "CONTENT" => nil })
101
- when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
102
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
103
- "CONTENT" => nil })
104
- end
105
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_START,
106
- "CONTENT" => line })
107
- @status = DOMAIN_ACCOUNT_START
108
- else
109
- case @status
110
- when HOST_ACCOUNT_START, HOST_ACCOUNT
111
- @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
112
- "CONTENT" => nil })
113
- when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
114
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
115
- "CONTENT" => nil })
116
- end
117
- @line_stack.push({ "STATUS" => HOST_ACCOUNT_START,
118
- "CONTENT" => line })
119
- @status = HOST_ACCOUNT_START
120
- end
121
- end
122
-
123
- i = @line_stack.size - 1
124
- seeking = true
125
- while i >= 0 and seeking
126
- case @line_stack[i]["STATUS"]
127
- when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
128
- @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
129
- "CONTENT" => nil })
130
- seeking = false
131
- when HOST_ACCOUNT_START, HOST_ACCOUNT
132
- @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
133
- "CONTENT" => nil })
134
- seeking = false
135
- when ETC
136
- else
137
- seeking = false
138
- end
139
- i -= 1
140
- end
141
- end
142
- end
143
- end
1
+ module Ykutils
2
+ class BasicLines
3
+ def initialize(line_ary)
4
+ @line_ary = line_ary
5
+ end
6
+
7
+ def get_line
8
+ @line_ary.shift if @line_ary.size > -1
9
+ end
10
+ end
11
+
12
+ class Lines
13
+ def initialize(line_ary)
14
+ @lines = BasicLines.new(line_ary)
15
+ @line_stack = []
16
+ @status = nil
17
+
18
+ setup
19
+ end
20
+
21
+ def setup; end
22
+
23
+ def get_line
24
+ @line_stack.shift if @line_stack.size > -1
25
+ end
26
+
27
+ def output_f(fname)
28
+ if fname
29
+ File.open(fname, "w") do |file|
30
+ @line_stack.each do |it|
31
+ file.write(it.to_s)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ class FtpOpLines < BasicLines
39
+ end
40
+
41
+ # class AccountLines < BasicLines
42
+ class AccountLines < Lines
43
+ HOST_ACCOUNT_START = 10
44
+ HOST_ACCOUNT = 11
45
+ HOST_ACCOUNT_END = 12
46
+ DOMAIN_ACCOUNT_START = 20
47
+ DOMAIN_ACCOUNT = 21
48
+ DOMAIN_ACCOUNT_END = 22
49
+ SEPARATOR = 30
50
+ ETC = 100
51
+
52
+ def setup
53
+ while (line = @lines.get_line)
54
+ next if line.strip == ""
55
+
56
+ if line =~ /^---/
57
+ case @status
58
+ when HOST_ACCOUNT_START, HOST_ACCOUNT
59
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
60
+ "CONTENT" => nil })
61
+ when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
62
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
63
+ "CONTENT" => nil })
64
+ end
65
+
66
+ @line_stack.push({ "STATUS" => SEPARATOR,
67
+ "CONTENT" => line })
68
+ @status = SEPARATOR
69
+ elsif line =~ /^\s/
70
+ case @status
71
+ when HOST_ACCOUNT_START, HOST_ACCOUNT
72
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT,
73
+ "CONTENT" => line })
74
+ @status = HOST_ACCOUNT
75
+ when HOST_ACCOUNT_END
76
+ puts("error!")
77
+ puts(line)
78
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT,
79
+ "CONTENT" => line })
80
+ @status = HOST_ACCOUNT
81
+ when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
82
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT,
83
+ "CONTENT" => line })
84
+ @status = DOMAIN_ACCOUNT
85
+ when DOMAIN_ACCOUNT_END
86
+ puts("error!")
87
+ puts(line)
88
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT,
89
+ "CONTENT" => line })
90
+ @status = DOMAIN_ACCOUNT
91
+ else
92
+ @line_stack.push({ "STATUS" => ETC,
93
+ "CONTENT" => line })
94
+ @status = ETC
95
+ end
96
+ elsif line =~ /^==/
97
+ case @status
98
+ when HOST_ACCOUNT_START, HOST_ACCOUNT
99
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
100
+ "CONTENT" => nil })
101
+ when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
102
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
103
+ "CONTENT" => nil })
104
+ end
105
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_START,
106
+ "CONTENT" => line })
107
+ @status = DOMAIN_ACCOUNT_START
108
+ else
109
+ case @status
110
+ when HOST_ACCOUNT_START, HOST_ACCOUNT
111
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
112
+ "CONTENT" => nil })
113
+ when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
114
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
115
+ "CONTENT" => nil })
116
+ end
117
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT_START,
118
+ "CONTENT" => line })
119
+ @status = HOST_ACCOUNT_START
120
+ end
121
+ end
122
+
123
+ i = @line_stack.size - 1
124
+ seeking = true
125
+ while i >= 0 and seeking
126
+ case @line_stack[i]["STATUS"]
127
+ when DOMAIN_ACCOUNT_START, DOMAIN_ACCOUNT
128
+ @line_stack.push({ "STATUS" => DOMAIN_ACCOUNT_END,
129
+ "CONTENT" => nil })
130
+ seeking = false
131
+ when HOST_ACCOUNT_START, HOST_ACCOUNT
132
+ @line_stack.push({ "STATUS" => HOST_ACCOUNT_END,
133
+ "CONTENT" => nil })
134
+ seeking = false
135
+ when ETC
136
+ else
137
+ seeking = false
138
+ end
139
+ i -= 1
140
+ end
141
+ end
142
+ end
143
+ end