class MxxRu::Cpp::Global_single_value_option

Auxiliary class, intended to store objects like runtime_mode, rtl_mode, etc, with information about who has set this or that mode.

Attributes

default_value[R]
name[R]
value[R]
who[R]

Public Class Methods

new( a_name, a_default_value, a_available_values ) click to toggle source
a_name

Name.

a_default_value

Default value.

a_available_values

Available values. Array of String.

# File lib/mxx_ru/cpp/target.rb, line 102
def initialize(
  a_name,
  a_default_value,
  a_available_values )

  @name = a_name
  @default_value = a_default_value
  @default_value_changer = nil
  @available_values = a_available_values
  @value = @default_value
  @who = "n/a"
end

Public Instance Methods

change( a_value, a_who ) click to toggle source

Value change. If new value is the same as default, value change try is ignored.

a_value

New value.

a_who

Who tries to change value.

# File lib/mxx_ru/cpp/target.rb, line 141
def change(
  a_value,
  a_who )

  if a_value != @default_value
    check_value( a_value, a_who )

    if @value == @default_value
      # Value did not change till now.
      @value = a_value
      @who = a_who
    else
      # Value is already changed. It is necessary to be convinced,
      # that values are the same. Otherwise there is a conflict.
      if a_value != @value
        raise MxxRu::GlobalOptionConflictEx.new(
          @name, @value, @who, a_value, a_who )
      end
    end
  end
end
change_default( a_value, a_who ) click to toggle source

Change default value.

Description of this change is printed to standard output.

a_value

new default value.

a_who

who tries to change value.

# File lib/mxx_ru/cpp/target.rb, line 121
def change_default( a_value, a_who )
  check_value( a_value, a_who )

  if nil == @default_value_changer
    need_change_current = ( @value == @default_value )
    @default_value = a_value
    @default_value_changer = a_who
    @value = @default_value if need_change_current
  elsif a_value != @default_value
    puts "WARNING: ignoring change default value for '#{@name}' to " +
      "'#{a_value}' by '#{a_who}'; default value already changed by " +
      "'#{@default_value_changer}'"
  end
end

Protected Instance Methods

check_value( value, who ) click to toggle source

Search value in available values. Raise exceptions if value not found.

# File lib/mxx_ru/cpp/target.rb, line 166
def check_value( value, who )
  if !@available_values.include?( value )
    raise MxxRu::GlobalOptionDisallowedValueEx.new(
      @name, @available_values, value, who )
  end
end