Class: TZInfo::TZDataDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/tzinfo/tzdataparser.rb

Overview

Base class for Zones and Links.

Direct Known Subclasses

TZDataLink, TZDataZone

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ TZDataDefinition

Returns a new instance of TZDataDefinition.



484
485
486
487
488
489
490
491
# File 'lib/tzinfo/tzdataparser.rb', line 484

def initialize(name)
  @name = name
  
  # + and - aren't allowed in class names
  @name_elements = name.gsub(/-/, '__m__').gsub(/\+/, '__p__').split(/\//)
  @path_elements = @name_elements.clone
  @path_elements.pop
end

Instance Attribute Details

#nameObject (readonly)

:nodoc:



480
481
482
# File 'lib/tzinfo/tzdataparser.rb', line 480

def name
  @name
end

#name_elementsObject (readonly)

Returns the value of attribute name_elements.



481
482
483
# File 'lib/tzinfo/tzdataparser.rb', line 481

def name_elements
  @name_elements
end

#path_elementsObject (readonly)

Returns the value of attribute path_elements.



482
483
484
# File 'lib/tzinfo/tzdataparser.rb', line 482

def path_elements
  @path_elements
end

Instance Method Details

#create_file(output_dir) ⇒ Object

Creates necessary directories, the file, writes the class header and footer and yields to a block to write the content.



495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
# File 'lib/tzinfo/tzdataparser.rb', line 495

def create_file(output_dir)        
  dir = output_dir + File::SEPARATOR + 'definitions' + File::SEPARATOR + @path_elements.join(File::SEPARATOR)      
  FileUtils.mkdir_p(dir)
  
  File.open(output_dir + File::SEPARATOR + 'definitions' + File::SEPARATOR + @name_elements.join(File::SEPARATOR) + '.rb', 'w') {|file|
    file.binmode
    
    def file.indent(by)
      if @tz_indent
        @tz_indent += by
      else
        @tz_indent = by
      end
    end
    
    def file.puts(s)
      super("#{' ' * (@tz_indent || 0)}#{s}")
    end
    
    file.puts('module TZInfo')
    file.indent(2)
    file.puts('module Definitions')
    file.indent(2)                
    
    @name_elements.each do |part| 
      file.puts("module #{part}")
      file.indent(2)
    end
    
    file.puts('include TimezoneDefinition')
    file.puts('')
    
    yield file
                    
    @name_elements.each do
      file.indent(-2)  
      file.puts('end')          
    end
    file.indent(-2)
    file.puts('end') # end module Definitions
    file.indent(-2)        
    file.puts('end') # end module TZInfo
  }
end