rubysl-yaml 1.1.0 → 2.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.
data/lib/yaml/basenode.rb DELETED
@@ -1,216 +0,0 @@
1
- #
2
- # YAML::BaseNode class
3
- #
4
- require 'yaml/ypath'
5
-
6
- module YAML
7
-
8
- #
9
- # YAML Generic Model container
10
- #
11
- module BaseNode
12
-
13
- #
14
- # Search for YPath entry and return
15
- # qualified nodes.
16
- #
17
- def select( ypath_str )
18
- matches = match_path( ypath_str )
19
-
20
- #
21
- # Create a new generic view of the elements selected
22
- #
23
- if matches
24
- result = []
25
- matches.each { |m|
26
- result.push m.last
27
- }
28
- YAML.transfer( 'seq', result )
29
- end
30
- end
31
-
32
- #
33
- # Search for YPath entry and return
34
- # transformed nodes.
35
- #
36
- def select!( ypath_str )
37
- matches = match_path( ypath_str )
38
-
39
- #
40
- # Create a new generic view of the elements selected
41
- #
42
- if matches
43
- result = []
44
- matches.each { |m|
45
- result.push m.last.transform
46
- }
47
- result
48
- end
49
- end
50
-
51
- #
52
- # Search for YPath entry and return a list of
53
- # qualified paths.
54
- #
55
- def search( ypath_str )
56
- matches = match_path( ypath_str )
57
-
58
- if matches
59
- matches.collect { |m|
60
- path = []
61
- m.each_index { |i|
62
- path.push m[i] if ( i % 2 ).zero?
63
- }
64
- "/" + path.compact.join( "/" )
65
- }
66
- end
67
- end
68
-
69
- def at( seg )
70
- if Hash === @value
71
- self[seg]
72
- elsif Array === @value and seg =~ /\A\d+\Z/ and @value[seg.to_i]
73
- @value[seg.to_i]
74
- end
75
- end
76
-
77
- #
78
- # YPath search returning a complete depth array
79
- #
80
- def match_path( ypath_str )
81
- depth = 0
82
- matches = []
83
- YPath.each_path( ypath_str ) do |ypath|
84
- seg = match_segment( ypath, 0 )
85
- matches += seg if seg
86
- end
87
- matches.uniq
88
- end
89
-
90
- #
91
- # Search a node for a single YPath segment
92
- #
93
- def match_segment( ypath, depth )
94
- deep_nodes = []
95
- seg = ypath.segments[ depth ]
96
- if seg == "/"
97
- unless String === @value
98
- idx = -1
99
- @value.collect { |v|
100
- idx += 1
101
- if Hash === @value
102
- match_init = [v[0].transform, v[1]]
103
- match_deep = v[1].match_segment( ypath, depth )
104
- else
105
- match_init = [idx, v]
106
- match_deep = v.match_segment( ypath, depth )
107
- end
108
- if match_deep
109
- match_deep.each { |m|
110
- deep_nodes.push( match_init + m )
111
- }
112
- end
113
- }
114
- end
115
- depth += 1
116
- seg = ypath.segments[ depth ]
117
- end
118
- match_nodes =
119
- case seg
120
- when "."
121
- [[nil, self]]
122
- when ".."
123
- [["..", nil]]
124
- when "*"
125
- if @value.is_a? Enumerable
126
- idx = -1
127
- @value.collect { |h|
128
- idx += 1
129
- if Hash === @value
130
- [h[0].transform, h[1]]
131
- else
132
- [idx, h]
133
- end
134
- }
135
- end
136
- else
137
- if seg =~ /^"(.*)"$/
138
- seg = $1
139
- elsif seg =~ /^'(.*)'$/
140
- seg = $1
141
- end
142
- if ( v = at( seg ) )
143
- [[ seg, v ]]
144
- end
145
- end
146
- return deep_nodes unless match_nodes
147
- pred = ypath.predicates[ depth ]
148
- if pred
149
- case pred
150
- when /^\.=/
151
- pred = $' # '
152
- match_nodes.reject! { |n|
153
- n.last.value != pred
154
- }
155
- else
156
- match_nodes.reject! { |n|
157
- n.last.at( pred ).nil?
158
- }
159
- end
160
- end
161
- return match_nodes + deep_nodes unless ypath.segments.length > depth + 1
162
-
163
- #puts "DEPTH: #{depth + 1}"
164
- deep_nodes = []
165
- match_nodes.each { |n|
166
- if n[1].is_a? BaseNode
167
- match_deep = n[1].match_segment( ypath, depth + 1 )
168
- if match_deep
169
- match_deep.each { |m|
170
- deep_nodes.push( n + m )
171
- }
172
- end
173
- else
174
- deep_nodes = []
175
- end
176
- }
177
- deep_nodes = nil if deep_nodes.length == 0
178
- deep_nodes
179
- end
180
-
181
- #
182
- # We want the node to act like as Hash
183
- # if it is.
184
- #
185
- def []( *key )
186
- if Hash === @value
187
- v = @value.detect { |k,| k.transform == key.first }
188
- v[1] if v
189
- elsif Array === @value
190
- @value.[]( *key )
191
- end
192
- end
193
-
194
- def children
195
- if Hash === @value
196
- @value.values.collect { |c| c[1] }
197
- elsif Array === @value
198
- @value
199
- end
200
- end
201
-
202
- def children_with_index
203
- if Hash === @value
204
- @value.keys.collect { |i| [self[i], i] }
205
- elsif Array === @value
206
- i = -1; @value.collect { |v| i += 1; [v, i] }
207
- end
208
- end
209
-
210
- def emit
211
- transform.to_yaml
212
- end
213
- end
214
-
215
- end
216
-
@@ -1,45 +0,0 @@
1
- #
2
- # Constants used throughout the library
3
- #
4
- module YAML
5
-
6
- #
7
- # Constants
8
- #
9
- VERSION = '0.60'
10
- SUPPORTED_YAML_VERSIONS = ['1.0']
11
-
12
- #
13
- # Parser tokens
14
- #
15
- WORD_CHAR = 'A-Za-z0-9'
16
- PRINTABLE_CHAR = '-_A-Za-z0-9!?/()$\'". '
17
- NOT_PLAIN_CHAR = '\x7f\x0-\x1f\x80-\x9f'
18
- ESCAPE_CHAR = '[\\x00-\\x09\\x0b-\\x1f]'
19
- INDICATOR_CHAR = '*&!|\\\\^@%{}[]='
20
- SPACE_INDICATORS = '-#:,?'
21
- RESTRICTED_INDICATORS = '#:,}]'
22
- DNS_COMP_RE = "\\w(?:[-\\w]*\\w)?"
23
- DNS_NAME_RE = "(?:(?:#{DNS_COMP_RE}\\.)+#{DNS_COMP_RE}|#{DNS_COMP_RE})"
24
- ESCAPES = %w{\x00 \x01 \x02 \x03 \x04 \x05 \x06 \a
25
- \x08 \t \n \v \f \r \x0e \x0f
26
- \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17
27
- \x18 \x19 \x1a \e \x1c \x1d \x1e \x1f
28
- }
29
- UNESCAPES = {
30
- 'a' => "\x07", 'b' => "\x08", 't' => "\x09",
31
- 'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c",
32
- 'r' => "\x0d", 'e' => "\x1b", '\\' => '\\',
33
- }
34
-
35
- #
36
- # Default settings
37
- #
38
- DEFAULTS = {
39
- :Indent => 2, :UseHeader => false, :UseVersion => false, :Version => '1.0',
40
- :SortKeys => false, :AnchorFormat => 'id%03d', :ExplicitTypes => false,
41
- :WidthType => 'absolute', :BestWidth => 80,
42
- :UseBlock => false, :UseFold => false, :Encoding => :None
43
- }
44
-
45
- end
data/lib/yaml/encoding.rb DELETED
@@ -1,33 +0,0 @@
1
- #
2
- # Handle Unicode-to-Internal conversion
3
- #
4
-
5
- module YAML
6
-
7
- #
8
- # Escape the string, condensing common escapes
9
- #
10
- def YAML.escape( value, skip = "" )
11
- value.gsub( /\\/, "\\\\\\" ).
12
- gsub( /"/, "\\\"" ).
13
- gsub( /([\x00-\x1f])/ ) do |x|
14
- skip[x] || ESCAPES[ x.unpack("C")[0] ]
15
- end
16
- end
17
-
18
- #
19
- # Unescape the condenses escapes
20
- #
21
- def YAML.unescape( value )
22
- value.gsub( /\\(?:([nevfbart\\])|0?x([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/ ) { |x|
23
- if $3
24
- ["#$3".hex ].pack('U*')
25
- elsif $2
26
- [$2].pack( "H2" )
27
- else
28
- UNESCAPES[$1]
29
- end
30
- }
31
- end
32
-
33
- end
data/lib/yaml/error.rb DELETED
@@ -1,34 +0,0 @@
1
- #
2
- # Error messages and exception class
3
- #
4
-
5
- module YAML
6
-
7
- #
8
- # Error messages
9
- #
10
-
11
- ERROR_NO_HEADER_NODE = "With UseHeader=false, the node Array or Hash must have elements"
12
- ERROR_NEED_HEADER = "With UseHeader=false, the node must be an Array or Hash"
13
- ERROR_BAD_EXPLICIT = "Unsupported explicit transfer: '%s'"
14
- ERROR_MANY_EXPLICIT = "More than one explicit transfer"
15
- ERROR_MANY_IMPLICIT = "More than one implicit request"
16
- ERROR_NO_ANCHOR = "No anchor for alias '%s'"
17
- ERROR_BAD_ANCHOR = "Invalid anchor: %s"
18
- ERROR_MANY_ANCHOR = "More than one anchor"
19
- ERROR_ANCHOR_ALIAS = "Can't define both an anchor and an alias"
20
- ERROR_BAD_ALIAS = "Invalid alias: %s"
21
- ERROR_MANY_ALIAS = "More than one alias"
22
- ERROR_ZERO_INDENT = "Can't use zero as an indentation width"
23
- ERROR_UNSUPPORTED_VERSION = "This release of YAML.rb does not support YAML version %s"
24
- ERROR_UNSUPPORTED_ENCODING = "Attempt to use unsupported encoding: %s"
25
-
26
- #
27
- # YAML Error classes
28
- #
29
-
30
- class Error < StandardError; end
31
- class ParseError < Error; end
32
- class TypeError < StandardError; end
33
-
34
- end
data/lib/yaml/loader.rb DELETED
@@ -1,14 +0,0 @@
1
- #
2
- # YAML::Loader class
3
- # .. type handling ..
4
- #
5
- module YAML
6
- class Loader
7
- TRANSFER_DOMAINS = {
8
- 'yaml.org,2002' => {},
9
- 'ruby.yaml.org,2002' => {}
10
- }
11
- PRIVATE_TYPES = {}
12
- IMPLICIT_TYPES = [ 'null', 'bool', 'time', 'int', 'float' ]
13
- end
14
- end
@@ -1,409 +0,0 @@
1
- # -*- mode: ruby; ruby-indent-level: 4; tab-width: 4 -*- vim: sw=4 ts=4
2
- require 'date'
3
-
4
- class Class
5
- def to_yaml( opts = {} )
6
- raise TypeError, "can't dump anonymous class %s" % self.class
7
- end
8
- end
9
-
10
- class Object
11
- yaml_as "tag:ruby.yaml.org,2002:object"
12
- def to_yaml_style; end
13
- def to_yaml_properties; instance_variables.sort; end
14
- def to_yaml( opts = {} )
15
- YAML::quick_emit( self, opts ) do |out|
16
- out.map( taguri, to_yaml_style ) do |map|
17
- to_yaml_properties.each do |m|
18
- map.add( m[1..-1], instance_variable_get( m ) )
19
- end
20
- end
21
- end
22
- end
23
- end
24
-
25
- class Hash
26
- yaml_as "tag:ruby.yaml.org,2002:hash"
27
- yaml_as "tag:yaml.org,2002:map"
28
- def yaml_initialize( tag, val )
29
- if Array === val
30
- update Hash.[]( *val ) # Convert the map to a sequence
31
- elsif Hash === val
32
- update val
33
- else
34
- raise YAML::TypeError, "Invalid map explicitly tagged #{ tag }: " + val.inspect
35
- end
36
- end
37
- def to_yaml( opts = {} )
38
- YAML::quick_emit( self, opts ) do |out|
39
- out.map( taguri, to_yaml_style ) do |map|
40
- each do |k, v|
41
- map.add( k, v )
42
- end
43
- end
44
- end
45
- end
46
- end
47
-
48
- class Struct
49
- yaml_as "tag:ruby.yaml.org,2002:struct"
50
- def self.yaml_tag_class_name; self.name.gsub( "Struct::", "" ); end
51
- def self.yaml_tag_read_class( name ); "Struct::#{ name }"; end
52
- def self.yaml_new( klass, tag, val )
53
- if Hash === val
54
- struct_type = nil
55
-
56
- #
57
- # Use existing Struct if it exists
58
- #
59
- props = {}
60
- val.delete_if { |k,v| props[k] = v if k =~ /^@/ }
61
- begin
62
- struct_name, struct_type = YAML.read_type_class( tag, Struct )
63
- rescue NameError
64
- end
65
- if not struct_type
66
- struct_def = [ tag.split( ':', 4 ).last ]
67
- struct_type = Struct.new( *struct_def.concat( val.keys.collect { |k| k.intern } ) )
68
- end
69
-
70
- #
71
- # Set the Struct properties
72
- #
73
- st = YAML::object_maker( struct_type, {} )
74
- st.members.each do |m|
75
- st.send( "#{m}=", val[m] )
76
- end
77
- props.each do |k,v|
78
- st.instance_variable_set(k, v)
79
- end
80
- st
81
- else
82
- raise YAML::TypeError, "Invalid Ruby Struct: " + val.inspect
83
- end
84
- end
85
- def to_yaml( opts = {} )
86
- YAML::quick_emit( self, opts ) do |out|
87
- #
88
- # Basic struct is passed as a YAML map
89
- #
90
- out.map( taguri, to_yaml_style ) do |map|
91
- self.members.each do |m|
92
- map.add( m, self[m] )
93
- end
94
- self.to_yaml_properties.each do |m|
95
- map.add( m, instance_variable_get( m ) )
96
- end
97
- end
98
- end
99
- end
100
- end
101
-
102
- class Array
103
- yaml_as "tag:ruby.yaml.org,2002:array"
104
- yaml_as "tag:yaml.org,2002:seq"
105
- def yaml_initialize( tag, val ); concat( val.to_a ); end
106
- def to_yaml( opts = {} )
107
- YAML::quick_emit( self, opts ) do |out|
108
- out.seq( taguri, to_yaml_style ) do |seq|
109
- each do |x|
110
- seq.add( x )
111
- end
112
- end
113
- end
114
- end
115
- end
116
-
117
- class Exception
118
- yaml_as "tag:ruby.yaml.org,2002:exception"
119
- def Exception.yaml_new( klass, tag, val )
120
- o = YAML.object_maker( klass, { 'mesg' => val.delete( 'message' ) } )
121
- val.each_pair do |k,v|
122
- o.instance_variable_set("@#{k}", v)
123
- end
124
- o
125
- end
126
- def to_yaml( opts = {} )
127
- YAML::quick_emit( self, opts ) do |out|
128
- out.map( taguri, to_yaml_style ) do |map|
129
- map.add( 'message', message )
130
- to_yaml_properties.each do |m|
131
- map.add( m[1..-1], instance_variable_get( m ) )
132
- end
133
- end
134
- end
135
- end
136
- end
137
-
138
- class String
139
- yaml_as "tag:ruby.yaml.org,2002:string"
140
- yaml_as "tag:yaml.org,2002:binary"
141
- yaml_as "tag:yaml.org,2002:str"
142
- def is_complex_yaml?
143
- to_yaml_style or not to_yaml_properties.empty? or self =~ /\n.+/
144
- end
145
- def is_binary_data?
146
- # It's binary if it's got a null.
147
- index(0)
148
- end
149
- def String.yaml_new( klass, tag, val )
150
- val = val.unpack("m")[0] if tag == "tag:yaml.org,2002:binary"
151
- val = { 'str' => val } if String === val
152
- if Hash === val
153
- s = klass.allocate
154
- # Thank you, NaHi
155
- String.instance_method(:initialize).
156
- bind(s).
157
- call( val.delete( 'str' ) )
158
- val.each { |k,v| s.instance_variable_set( k, v ) }
159
- s
160
- else
161
- raise YAML::TypeError, "Invalid String: " + val.inspect
162
- end
163
- end
164
- def to_yaml( opts = {} )
165
- YAML::quick_emit( is_complex_yaml? ? self : nil, opts ) do |out|
166
- if is_binary_data?
167
- out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal )
168
- elsif to_yaml_properties.empty?
169
- out.scalar( taguri, self, self =~ /^:/ ? :quote2 : to_yaml_style )
170
- else
171
- out.map( taguri, to_yaml_style ) do |map|
172
- map.add( 'str', "#{self}" )
173
- to_yaml_properties.each do |m|
174
- map.add( m, instance_variable_get( m ) )
175
- end
176
- end
177
- end
178
- end
179
- end
180
- end
181
-
182
- class Symbol
183
- yaml_as "tag:ruby.yaml.org,2002:symbol"
184
- yaml_as "tag:ruby.yaml.org,2002:sym"
185
- def Symbol.yaml_new( klass, tag, val )
186
- if String === val
187
- val = YAML::load( val ) if val =~ /\A(["']).*\1\z/
188
- val.intern
189
- else
190
- raise YAML::TypeError, "Invalid Symbol: " + val.inspect
191
- end
192
- end
193
- def to_yaml( opts = {} )
194
- YAML::quick_emit( nil, opts ) do |out|
195
- out.scalar( "tag:yaml.org,2002:str", self.inspect, :plain )
196
- end
197
- end
198
- end
199
-
200
- class Range
201
- yaml_as "tag:ruby.yaml.org,2002:range"
202
- def Range.yaml_new( klass, tag, val )
203
- inr = %r'(\w+|[+-]?\d+(?:\.\d+)?(?:e[+-]\d+)?|"(?:[^\\"]|\\.)*")'
204
- opts = {}
205
- if String === val and val =~ /^#{inr}(\.{2,3})#{inr}$/o
206
- r1, rdots, r2 = $1, $2, $3
207
- opts = {
208
- 'begin' => YAML.load( "--- #{r1}" ),
209
- 'end' => YAML.load( "--- #{r2}" ),
210
- 'excl' => rdots.length == 3
211
- }
212
- val = {}
213
- elsif Hash === val
214
- opts['begin'] = val.delete('begin')
215
- opts['end'] = val.delete('end')
216
- opts['excl'] = val.delete('excl')
217
- end
218
- if Hash === opts
219
- r = YAML::object_maker( klass, {} )
220
- # Thank you, NaHi
221
- Range.instance_method(:initialize).
222
- bind(r).
223
- call( opts['begin'], opts['end'], opts['excl'] )
224
- val.each { |k,v| r.instance_variable_set( k, v ) }
225
- r
226
- else
227
- raise YAML::TypeError, "Invalid Range: " + val.inspect
228
- end
229
- end
230
- def to_yaml( opts = {} )
231
- YAML::quick_emit( self, opts ) do |out|
232
- # if self.begin.is_complex_yaml? or self.begin.respond_to? :to_str or
233
- # self.end.is_complex_yaml? or self.end.respond_to? :to_str or
234
- # not to_yaml_properties.empty?
235
- out.map( taguri, to_yaml_style ) do |map|
236
- map.add( 'begin', self.begin )
237
- map.add( 'end', self.end )
238
- map.add( 'excl', self.exclude_end? )
239
- to_yaml_properties.each do |m|
240
- map.add( m, instance_variable_get( m ) )
241
- end
242
- end
243
- # else
244
- # out.scalar( taguri ) do |sc|
245
- # sc.embed( self.begin )
246
- # sc.concat( self.exclude_end? ? "..." : ".." )
247
- # sc.embed( self.end )
248
- # end
249
- # end
250
- end
251
- end
252
- end
253
-
254
- class Regexp
255
- yaml_as "tag:ruby.yaml.org,2002:regexp"
256
- def Regexp.yaml_new( klass, tag, val )
257
- if String === val and val =~ /^\/(.*)\/([mix]*)$/
258
- val = { 'regexp' => $1, 'mods' => $2 }
259
- end
260
- if Hash === val
261
- mods = nil
262
- unless val['mods'].to_s.empty?
263
- mods = 0x00
264
- mods |= Regexp::EXTENDED if val['mods'].include?( 'x' )
265
- mods |= Regexp::IGNORECASE if val['mods'].include?( 'i' )
266
- mods |= Regexp::MULTILINE if val['mods'].include?( 'm' )
267
- end
268
- val.delete( 'mods' )
269
- r = YAML::object_maker( klass, {} )
270
- Regexp.instance_method(:initialize).
271
- bind(r).
272
- call( val.delete( 'regexp' ), mods )
273
- val.each { |k,v| r.instance_variable_set( k, v ) }
274
- r
275
- else
276
- raise YAML::TypeError, "Invalid Regular expression: " + val.inspect
277
- end
278
- end
279
- def to_yaml( opts = {} )
280
- YAML::quick_emit( nil, opts ) do |out|
281
- if to_yaml_properties.empty?
282
- out.scalar( taguri, self.inspect, :plain )
283
- else
284
- out.map( taguri, to_yaml_style ) do |map|
285
- src = self.inspect
286
- if src =~ /\A\/(.*)\/([a-z]*)\Z/
287
- map.add( 'regexp', $1 )
288
- map.add( 'mods', $2 )
289
- else
290
- raise YAML::TypeError, "Invalid Regular expression: " + src
291
- end
292
- to_yaml_properties.each do |m|
293
- map.add( m, instance_variable_get( m ) )
294
- end
295
- end
296
- end
297
- end
298
- end
299
- end
300
-
301
- class Time
302
- yaml_as "tag:ruby.yaml.org,2002:time"
303
- yaml_as "tag:yaml.org,2002:timestamp"
304
- def Time.yaml_new( klass, tag, val )
305
- if Hash === val
306
- t = val.delete( 'at' )
307
- val.each { |k,v| t.instance_variable_set( k, v ) }
308
- t
309
- else
310
- raise YAML::TypeError, "Invalid Time: " + val.inspect
311
- end
312
- end
313
- def to_yaml( opts = {} )
314
- YAML::quick_emit( self, opts ) do |out|
315
- tz = "Z"
316
- # from the tidy Tobias Peters <t-peters@gmx.de> Thanks!
317
- unless self.utc?
318
- utc_same_instant = self.dup.utc
319
- utc_same_writing = Time.utc(year,month,day,hour,min,sec,usec)
320
- difference_to_utc = utc_same_writing - utc_same_instant
321
- if (difference_to_utc < 0)
322
- difference_sign = '-'
323
- absolute_difference = -difference_to_utc
324
- else
325
- difference_sign = '+'
326
- absolute_difference = difference_to_utc
327
- end
328
- difference_minutes = (absolute_difference/60).round
329
- tz = "%s%02d:%02d" % [ difference_sign, difference_minutes / 60, difference_minutes % 60]
330
- end
331
- standard = self.strftime( "%Y-%m-%d %H:%M:%S" )
332
- standard += ".%06d" % [usec] if usec.nonzero?
333
- standard += " %s" % [tz]
334
- if to_yaml_properties.empty?
335
- out.scalar( taguri, standard, :plain )
336
- else
337
- out.map( taguri, to_yaml_style ) do |map|
338
- map.add( 'at', standard )
339
- to_yaml_properties.each do |m|
340
- map.add( m, instance_variable_get( m ) )
341
- end
342
- end
343
- end
344
- end
345
- end
346
- end
347
-
348
- class Date
349
- yaml_as "tag:yaml.org,2002:timestamp#ymd"
350
- def to_yaml( opts = {} )
351
- YAML::quick_emit( self, opts ) do |out|
352
- out.scalar( "tag:yaml.org,2002:timestamp", self.to_s, :plain )
353
- end
354
- end
355
- end
356
-
357
- class Integer
358
- yaml_as "tag:yaml.org,2002:int"
359
- def to_yaml( opts = {} )
360
- YAML::quick_emit( nil, opts ) do |out|
361
- out.scalar( "tag:yaml.org,2002:int", self.to_s, :plain )
362
- end
363
- end
364
- end
365
-
366
- class Float
367
- yaml_as "tag:yaml.org,2002:float"
368
- def to_yaml( opts = {} )
369
- YAML::quick_emit( nil, opts ) do |out|
370
- str = self.to_s
371
- if str == "Infinity"
372
- str = ".Inf"
373
- elsif str == "-Infinity"
374
- str = "-.Inf"
375
- elsif str == "NaN"
376
- str = ".NaN"
377
- end
378
- out.scalar( "tag:yaml.org,2002:float", str, :plain )
379
- end
380
- end
381
- end
382
-
383
- class TrueClass
384
- yaml_as "tag:yaml.org,2002:bool#yes"
385
- def to_yaml( opts = {} )
386
- YAML::quick_emit( nil, opts ) do |out|
387
- out.scalar( taguri, "true", :plain )
388
- end
389
- end
390
- end
391
-
392
- class FalseClass
393
- yaml_as "tag:yaml.org,2002:bool#no"
394
- def to_yaml( opts = {} )
395
- YAML::quick_emit( nil, opts ) do |out|
396
- out.scalar( taguri, "false", :plain )
397
- end
398
- end
399
- end
400
-
401
- class NilClass
402
- yaml_as "tag:yaml.org,2002:null"
403
- def to_yaml( opts = {} )
404
- YAML::quick_emit( nil, opts ) do |out|
405
- out.scalar( taguri, "", :plain )
406
- end
407
- end
408
- end
409
-