Sha256: 453c8c9b854921a15ab3ab5190ac265c5cd905c8c9e73762cacef078adfea6fc

Contents?: true

Size: 1.35 KB

Versions: 7

Compression:

Stored size: 1.35 KB

Contents

require 'sym/app/short_name'
module Sym
  module App
    module Output
      class Base

        attr_accessor :opts

        def initialize(opts)
          self.opts = opts
        end

        @outputs = []
        class << self
          attr_accessor :outputs

          def append(output_klass)
            outputs << output_klass if outputs.is_a?(Array)
            raise "Cannot append #{output_class} after #outputs has been converted to a Hash" \
              unless outputs.is_a?(Array)
          end

          def map_outputs!
            klasses      = self.outputs
            self.outputs = Hash.new
            klasses.each { |k| self.outputs[k.required_option] = k }
            outputs
          end

          def options_to_outputs
            map_outputs! if outputs.is_a?(Array)
            outputs
          end
        end

        def self.inherited(klass)
          klass.instance_eval do
            class << self
              attr_writer :required_option
            end

            klass.required_option = nil

            class << self
              def required_option(_option = nil)
                self.required_option = _option if _option
                @required_option
              end
            end
          end
          klass.extend(Sym::App::ShortName)
          Sym::App::Output::Base.append klass
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sym-2.6.2 lib/sym/app/output/base.rb
sym-2.6.1 lib/sym/app/output/base.rb
sym-2.6.0 lib/sym/app/output/base.rb
sym-2.5.3 lib/sym/app/output/base.rb
sym-2.5.1 lib/sym/app/output/base.rb
sym-2.5.0 lib/sym/app/output/base.rb
sym-2.4.3 lib/sym/app/output/base.rb