Class: Regexp

Inherits:
Object show all
Defined in:
lib/syck/rubytypes.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.yaml_new(klass, tag, val) ⇒ Object



265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# File 'lib/syck/rubytypes.rb', line 265

def Regexp.yaml_new( klass, tag, val )
    if String === val and val =~ /^\/(.*)\/([mixn]*)$/
        val = { 'regexp' => $1, 'mods' => $2 }
    end
    if Hash === val
        mods = nil
        unless val['mods'].to_s.empty?
            mods = 0x00
            mods |= Regexp::EXTENDED if val['mods'].include?( 'x' )
            mods |= Regexp::IGNORECASE if val['mods'].include?( 'i' )
            mods |= Regexp::MULTILINE if val['mods'].include?( 'm' )
            mods |= Regexp::NOENCODING if val['mods'].include?( 'n' )
        end
        val.delete( 'mods' )
        r = YAML::object_maker( klass, {} )
        Regexp.instance_method(:initialize).
              bind(r).
              call( val.delete( 'regexp' ), mods )
        val.each { |k,v| r.instance_variable_set( k, v ) }
        r
    else
        raise YAML::TypeError, "Invalid Regular expression: " + val.inspect
    end
end

Instance Method Details

#to_yaml(opts = {}) ⇒ Object



289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/syck/rubytypes.rb', line 289

def to_yaml( opts = {} )
       return super unless YAML::ENGINE.syck?
	YAML::quick_emit( nil, opts ) do |out|
           if to_yaml_properties.empty?
               out.scalar( taguri, self.inspect, :plain )
           else
               out.map( taguri, to_yaml_style ) do |map|
                   src = self.inspect
                   if src =~ /\A\/(.*)\/([a-z]*)\Z/
                       map.add( 'regexp', $1 )
                       map.add( 'mods', $2 )
                   else
	                raise YAML::TypeError, "Invalid Regular expression: " + src
                   end
                   to_yaml_properties.each do |m|
                       map.add( m, instance_variable_get( m ) )
                   end
               end
           end
       end
end