eim_xml 0.0.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,123 +1,122 @@
1
- require "eim_xml"
1
+ require 'eim_xml'
2
2
 
3
3
  module EimXML
4
- class Formatter
5
- attr_reader :out
4
+ class Formatter
5
+ attr_reader :out
6
6
 
7
- def self.write(element, opt={})
8
- opt = {:out=>""}.merge(opt)
9
- new(opt).write(element)
10
- opt[:out]
11
- end
7
+ def self.write(element, opt = {})
8
+ opt = { out: '' }.merge(opt)
9
+ new(opt).write(element)
10
+ opt[:out]
11
+ end
12
12
 
13
- def initialize(opt)
14
- @out = opt[:out]
15
- @preservers = opt[:preservers]
16
- @preserve_space = false
17
- @indent_string = " "
18
- @indent_depth = 0
19
- @option = opt.dup.tap{|h| [:out, :preservers].each{|k| h.delete(k)}}
20
- end
13
+ def initialize(opt)
14
+ @out = opt[:out]
15
+ @preservers = opt[:preservers]
16
+ @preserve_space = false
17
+ @indent_string = ' '
18
+ @indent_depth = 0
19
+ @option = opt.dup.tap { |h| %i[out preservers].each { |k| h.delete(k) } }
20
+ end
21
21
 
22
- def write(src)
23
- case src
24
- when ElementWrapper
25
- write_wrapper(src)
26
- when Comment
27
- write_comment(src)
28
- when Element
29
- write_element(src)
30
- when PCString
31
- write_pcstring(src)
32
- else
33
- write_string(src.to_s)
34
- end
35
- end
22
+ def write(src)
23
+ case src
24
+ when ElementWrapper
25
+ write_wrapper(src)
26
+ when Comment
27
+ write_comment(src)
28
+ when Element
29
+ write_element(src)
30
+ when PCString
31
+ write_pcstring(src)
32
+ else
33
+ write_string(src.to_s)
34
+ end
35
+ end
36
36
 
37
- def indent(&proc)
38
- @indent_depth += 1
39
- proc.call
40
- ensure
41
- @indent_depth -= 1
42
- end
37
+ def indent(&proc)
38
+ @indent_depth += 1
39
+ proc.call
40
+ ensure
41
+ @indent_depth -= 1
42
+ end
43
43
 
44
- def preserve_space_element?(elm)
45
- @preservers && @preservers.any? do |e|
46
- case e
47
- when Symbol
48
- e==elm.name
49
- when Class
50
- e===elm
51
- end
52
- end
53
- end
44
+ def preserve_space_element?(elm)
45
+ @preservers&.any? do |e|
46
+ case e
47
+ when Symbol
48
+ e == elm.name
49
+ when Class
50
+ elm.is_a?(e)
51
+ end
52
+ end
53
+ end
54
54
 
55
- def write_indent
56
- out << @indent_string*@indent_depth unless @preserve_space
57
- end
55
+ def write_indent
56
+ out << (@indent_string * @indent_depth) unless @preserve_space
57
+ end
58
58
 
59
- def write_newline
60
- out << "\n" unless @preserve_space
61
- end
59
+ def write_newline
60
+ out << "\n" unless @preserve_space
61
+ end
62
62
 
63
- def write_comment(c)
64
- write_indent
65
- c.write_to(out)
66
- write_newline
67
- end
63
+ def write_comment(commend)
64
+ write_indent
65
+ commend.write_to(out)
66
+ write_newline
67
+ end
68
68
 
69
- def write_contents_of(elm)
70
- flag = @preserve_space
71
- @preserve_space = true if preserve_space_element?(elm)
72
- write_newline
73
- indent do
74
- elm.contents.each do |c|
75
- write(c)
76
- end
77
- end
78
- write_indent
79
- ensure
80
- @preserve_space = flag
81
- end
69
+ def write_contents_of(elm)
70
+ flag = @preserve_space
71
+ @preserve_space = true if preserve_space_element?(elm)
72
+ write_newline
73
+ indent do
74
+ elm.contents.each do |c|
75
+ write(c)
76
+ end
77
+ end
78
+ write_indent
79
+ ensure
80
+ @preserve_space = flag
81
+ end
82
82
 
83
- def write_element(elm)
84
- write_indent
85
- out << "<"
86
- elm.name_and_attributes(out)
87
- case elm.contents.size
88
- when 0
89
- out << " />"
90
- write_newline
91
- else
92
- out << ">"
93
- write_contents_of(elm)
94
- out << "</#{elm.name}>"
95
- write_newline
96
- end
97
- end
83
+ def write_element(elm)
84
+ write_indent
85
+ out << '<'
86
+ elm.name_and_attributes(out)
87
+ case elm.contents.size
88
+ when 0
89
+ out << ' />'
90
+ else
91
+ out << '>'
92
+ write_contents_of(elm)
93
+ out << "</#{elm.name}>"
94
+ end
95
+ write_newline
96
+ end
98
97
 
99
- def write_pcstring(pcs)
100
- pcs.encoded_string.each_line do |l|
101
- write_indent
102
- out << l
103
- end
104
- write_newline
105
- end
98
+ def write_pcstring(pcs)
99
+ pcs.encoded_string.each_line do |l|
100
+ write_indent
101
+ out << l
102
+ end
103
+ write_newline
104
+ end
106
105
 
107
- def write_string(str)
108
- PCString.encode(str).each_line do |l|
109
- write_indent
110
- out << l
111
- end
112
- write_newline
113
- end
106
+ def write_string(str)
107
+ PCString.encode(str).each_line do |l|
108
+ write_indent
109
+ out << l
110
+ end
111
+ write_newline
112
+ end
114
113
 
115
- def write_wrapper(wrapper)
116
- wrapper.each(@option) do |i|
117
- write(i)
118
- end
119
- end
120
- end
114
+ def write_wrapper(wrapper)
115
+ wrapper.each(@option) do |i|
116
+ write(i)
117
+ end
118
+ end
119
+ end
121
120
  end
122
121
 
123
- require "eim_xml/formatter/element_wrapper"
122
+ require 'eim_xml/formatter/element_wrapper'
@@ -1,25 +1,28 @@
1
- require "eim_xml"
2
- module EimXML::Matchers
3
- class HaveContent
4
- def initialize(expected)
5
- @expected = expected
6
- end
1
+ require 'eim_xml'
7
2
 
8
- def matches?(target)
9
- @target = target
10
- @target.has?(@expected)
11
- end
3
+ module EimXML
4
+ module Matchers
5
+ class HaveContent
6
+ def initialize(expected)
7
+ @expected = expected
8
+ end
12
9
 
13
- def failure_message
14
- "expected #{@target.inspect} must have #{@expected}, but not."
15
- end
10
+ def matches?(target)
11
+ @target = target
12
+ @target.has?(@expected)
13
+ end
16
14
 
17
- def negative_failure_message
18
- "expected #{@target.inspect} must not have #{@expected}, but has."
19
- end
20
- end
15
+ def failure_message
16
+ "expected #{@target.inspect} must have #{@expected}, but not."
17
+ end
21
18
 
22
- def have(expected)
23
- HaveContent.new(expected)
24
- end
19
+ def negative_failure_message
20
+ "expected #{@target.inspect} must not have #{@expected}, but has."
21
+ end
22
+ end
23
+
24
+ def have(expected)
25
+ HaveContent.new(expected)
26
+ end
27
+ end
25
28
  end
@@ -4,84 +4,82 @@
4
4
  # You can redistribute it and/or modify it under GPL2.
5
5
  #
6
6
 
7
- require "eim_xml"
8
- require "strscan"
7
+ require 'eim_xml'
8
+ require 'strscan'
9
9
 
10
10
  module EimXML
11
- class ParseError < StandardError
12
- end
11
+ class ParseError < StandardError
12
+ end
13
13
 
14
- class Parser
15
- attr_reader :scanner
16
- module RE
17
- EMPTY_ELEMENT = /<([^>]*?)\/>/
18
- START_TAG = /<([^>]*?([^\/>]\s*))>/
19
- END_TAG = /<\/(\S+?)\s*>/
20
- ATTRIBUTE = /\s+([^=\s]+)\s*=\s*('(.*?)'|"(.*?)")/m
21
- STRING = /[^<]+/
22
- end
14
+ class Parser
15
+ attr_reader :scanner
23
16
 
24
- def initialize(src)
25
- @scanner = StringScanner.new(src)
26
- @scanner.scan(/\s*<\?.*?\?>\s*/)
27
- end
17
+ module RE
18
+ EMPTY_ELEMENT = %r{<([^>]*?)/>}
19
+ START_TAG = %r{<([^>]*?([^/>]\s*))>}
20
+ END_TAG = %r{</(\S+?)\s*>}
21
+ ATTRIBUTE = /\s+([^=\s]+)\s*=\s*('(.*?)'|"(.*?)")/m
22
+ STRING = /[^<]+/
23
+ end
28
24
 
29
- def parse
30
- if @scanner.scan(RE::EMPTY_ELEMENT)
31
- parse_empty_element
32
- elsif @scanner.scan(RE::START_TAG)
33
- parse_start_tag
34
- elsif @scanner.scan(RE::STRING)
35
- parse_string
36
- else
37
- nil
38
- end
39
- end
25
+ PARSING_MAP = {
26
+ 'amp' => '&',
27
+ 'quot' => '"',
28
+ 'apos' => "'",
29
+ 'lt' => '<',
30
+ 'gt' => '>'
31
+ }
40
32
 
41
- def parse_tag
42
- s = StringScanner.new(@scanner[1])
43
- e = Element.new(s.scan(/\S+/))
44
- e[s[1]] = s[3] ? s[3] : s[4] while s.scan(RE::ATTRIBUTE)
45
- e
46
- end
47
- protected :parse_tag
33
+ def initialize(src)
34
+ @scanner = StringScanner.new(src)
35
+ @scanner.scan(/\s*<\?.*?\?>\s*/)
36
+ end
48
37
 
49
- def parse_empty_element
50
- parse_tag
51
- end
52
- protected :parse_empty_element
38
+ def parse
39
+ if @scanner.scan(RE::EMPTY_ELEMENT)
40
+ parse_empty_element
41
+ elsif @scanner.scan(RE::START_TAG)
42
+ parse_start_tag
43
+ elsif @scanner.scan(RE::STRING)
44
+ parse_string
45
+ end
46
+ end
53
47
 
54
- def parse_start_tag
55
- e = parse_tag
48
+ def parse_tag
49
+ s = StringScanner.new(@scanner[1])
50
+ e = Element.new(s.scan(/\S+/))
51
+ e[s[1]] = s[3] || s[4] while s.scan(RE::ATTRIBUTE)
52
+ e
53
+ end
54
+ protected :parse_tag
56
55
 
57
- until @scanner.scan(RE::END_TAG)
58
- c = parse
59
- raise ParseError.new("Syntax error.") unless c
60
- e << c
61
- end
62
- raise ParseError.new("End tag mismatched.") unless @scanner[1].to_sym==e.name
63
- e
64
- end
65
- protected :parse_start_tag
56
+ def parse_empty_element
57
+ parse_tag
58
+ end
59
+ protected :parse_empty_element
66
60
 
67
- def parse_string
68
- s = @scanner[0]
69
- s = s.gsub(/&(amp|quot|apos|lt|gt);/) do
70
- case $1
71
- when "amp"
72
- "&"
73
- when "quot"
74
- '"'
75
- when "apos"
76
- "'"
77
- when "lt"
78
- "<"
79
- when "gt"
80
- ">"
81
- end
82
- end
83
- PCString.new(s)
84
- end
85
- protected :parse_string
86
- end
61
+ def parse_start_tag
62
+ e = parse_tag
63
+
64
+ until @scanner.scan(RE::END_TAG)
65
+ c = parse
66
+ raise ParseError, 'Syntax error.' unless c
67
+
68
+ e << c
69
+ end
70
+ raise ParseError, 'End tag mismatched.' unless @scanner[1].to_sym == e.name
71
+
72
+ e
73
+ end
74
+ protected :parse_start_tag
75
+
76
+ def parse_string
77
+ s = @scanner[0]
78
+ s = s.gsub(/&(amp|quot|apos|lt|gt);/) do
79
+ PARSING_MAP[Regexp.last_match(1)]
80
+ end
81
+ PCString.new(s)
82
+ end
83
+ protected :parse_string
84
+ end
87
85
  end
@@ -1,18 +1,20 @@
1
- require "eim_xml/dsl"
2
- require "eim_xml/xhtml"
1
+ require 'eim_xml/dsl'
2
+ require 'eim_xml/xhtml'
3
3
 
4
- module EimXML::XHTML
5
- class DSL < EimXML::BaseDSL
6
- end
4
+ module EimXML
5
+ module XHTML
6
+ class DSL < EimXML::BaseDSL
7
+ end
7
8
 
8
- class OpenDSL < EimXML::OpenDSL
9
- end
9
+ class OpenDSL < EimXML::OpenDSL
10
+ end
10
11
 
11
- constants.each do |c|
12
- v = const_get(c)
13
- if v.is_a?(Class) && /_$/ !~ v.name
14
- DSL.register v
15
- OpenDSL.register v
16
- end
17
- end
12
+ constants.each do |c|
13
+ v = const_get(c)
14
+ if v.is_a?(Class) && /_$/ !~ v.name
15
+ DSL.register v
16
+ OpenDSL.register v
17
+ end
18
+ end
19
+ end
18
20
  end