generator

Path: docs/examples/cmd_line_handler/generator
Last Update: Mon Jun 04 14:34:35 +0400 2007

Пример использования собственного OptionHandler

        #
        # Пример, который демонстрирует использование собственного
        # OptionHandler.
        #

        require 'rubygems'

        require 'RuCodeGen'

        class LinesGenerator
                def initialize
                        @file = nil
                        @lines = []
                end

                attr_reader :lines

                def get_file; @file; end
                def file( v ); @file = v; end

                def line( length ); @lines << length; end

                class OptionHandler < RuCodeGen::OptionHandler
                        def banner
                                "Just a test of OptionHandler usage\n"
                        end

                        def setup( parser, result )
                                result.lines_segment = '-'

                                parser.on( "-l", "--line TYPE", [ "single", "double" ],
                                                { 'single' => '-', 'double' => '=' },
                                                "type of line (single or double)" ) do |type|
                                        result.lines_segment = type
                                end
                        end
                end

                class Generator
                        def initialize( lines )
                                @lines = lines
                        end

                        def generate( to )
                                segment_type = RuCodeGen::RunMode.options.lines_segment
                                @lines.each do |length|
                                        to << segment_type * length << "\n"
                                end
                        end
                end
        end

        RuCodeGen::RunMode.add_option_handler( LinesGenerator::OptionHandler.new )

        def lines( &blk )
                data = LinesGenerator.new
                blk[ data ]

                RuCodeGen::Generators.add(
                                RuCodeGen::FilenameProducer.produce( $0, data.get_file ),
                                LinesGenerator::Generator.new( data.lines ) )
        end

        if __FILE__ == $0

        lines { |d|
                d.file :script_relative => 'lines.txt'

                d.line 3
                d.line 5
                d.line 8
        }

        end

[Validate]

Hosted by uCoz