Class: Sbuilder::Domain

Inherits:
Object
  • Object
show all
Includes:
Utils::MyLogger
Defined in:
lib/sbuilder/domain.rb

Constant Summary collapse

PROGNAME =

logger

nil

Constants included from Utils::MyLogger

Utils::MyLogger::LOGFILE

Instance Attribute Summary collapse

Constructor & configure collapse

Behaviour collapse

Implementation details collapse

Domain values collapse

Model data collapse

Methods included from Utils::MyLogger

#getLogger, #logfile

Constructor Details

#initialize(options = {}) ⇒ Domain

Returns a new instance of Domain.



25
26
27
28
# File 'lib/sbuilder/domain.rb', line 25

def initialize( options = {} )
  @logger = getLogger( PROGNAME, options )
  @logger.debug( "#{__method__} initialized" )
end

Instance Attribute Details

#extensionObject (readonly)



13
14
15
# File 'lib/sbuilder/domain.rb', line 13

def extension
  @extension
end

#nameObject (readonly) Also known as: domain_name



7
8
9
# File 'lib/sbuilder/domain.rb', line 7

def name
  @name
end

Instance Method Details

#cardinalityObject

Notice: number of elements include also nil element, which should be calculated, when calculating elements in domain.

delegate to extension - return 1 if does not exist



77
78
79
80
# File 'lib/sbuilder/domain.rb', line 77

def cardinality
  return 1 unless extension
  extension.cardinality
end

#domain_entry(i) ⇒ Object

Return domain value for for element ‘i’. Possibly delegate to sub-class.

Parameters:

  • i (Integer|String)

    element index (interger) or String value non integer

Returns:

  • value of domain element ‘i’, false if i==0



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/sbuilder/domain.rb', line 127

def domain_entry( i )

  # interpret 0 as Nil
  # return false if (i.is_a?(Integer) && i == 0) || (i.is_a?(String) && i == 'Nil' )
  return nilValue if isNil( i )

  # delegage - if possible
  return extension.domain_entry( i ) if extension
  
  raise DomainException.new <<-EOS unless i.is_a?(Integer)
  Unknown type '#{i.class}' with value '#{i}' in 'domain_entry' #{name}.

  Support only for Integer
  EOS

  raise DomainException.new <<-EOS if i > cardinality
  Requested cardinality #{i} exceeds cardinality #{cardinality} of domain #{name}
  EOS
                                                 
  # defaults strings
  "d_#{domain_name}_#{i}"
end

#domain_rangeInteger..Integer

(maybe extentended) domain

Returns:

  • (Integer..Integer)

    range to access ‘domain_entry’ of



90
91
92
93
94
# File 'lib/sbuilder/domain.rb', line 90

def domain_range
  return extension.domain_range if extension
  endIndx = includeNil ? cardinality : cardinality-1      
  0..endIndx
end

#domain_valuesHash:Array

Called from model#templateData, used in mustache templates to output elements in domain set. Nil NOT included in this set!

Is not expected to be overridded by sub-classes.

Parameters:

  • array_of_hashes (Hash)

    a customizable set of options

Returns:

  • (Hash:Array)

    array_of_hashes array of :value,:_comma

See Also:



219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
# File 'lib/sbuilder/domain.rb', line 219

def domain_values
  vals = extension.nil? ? render_values : extension.render_values
  
  # String is - name of a type, no need expand
  return {
    :value => vals,
    '_comma' => '',
    :index => 0,
  } unless vals.is_a?( Array )
  arra = vals.map.with_index do |domain_entry, i|
            {
              :value => domain_entry, 
              '_comma' => ',',
              :index => i+1,
            }
  end
  arra.last['_comma'] = '' if arra && arra.any?
  @logger.debug( "#{__method__} #{name}: arra #{arra.to_yaml}, includeNil=#{includeNil}" )                  
  return arra
end

#includeNilBoolean

Should we add Nil to domain set

Returns:

  • (Boolean)

    delegate to extenion, true default



55
56
57
58
# File 'lib/sbuilder/domain.rb', line 55

def includeNil
  return extension.includeNil if extension
  true
end

#nilValueBoolean

Returns false which is internal nil repreentation.

Returns:

  • (Boolean)

    false which is internal nil repreentation



105
106
107
# File 'lib/sbuilder/domain.rb', line 105

def nilValue
  false
end

#numberOfElementsinteger

Returns number of elements including nil.

Returns:

  • (integer)

    number of elements including nil



83
84
85
# File 'lib/sbuilder/domain.rb', line 83

def numberOfElements
  cardinality + 1
end

#render_entry(i) ⇒ Object

Return entry which can be rendered (string values wrapped with “-marks, integers plain, constans, e.g. Nil not wrappedd. If domain includeNil values i==0 and i==‘Nil’ are wrapped to ‘nilValue’ (=false). Actual value from domain_entry



196
197
198
199
200
# File 'lib/sbuilder/domain.rb', line 196

def render_entry( i )
  return nilValue if isNil( i )
  return extension.render_entry( i ) if extension
  stringize( domain_entry( i ))
end

#render_valuesArray

Index from 1.. if domain (extension defines Nil), index from 0 if no need to reserve space for nil (e.g. domain_range).

Known override in domain range, where using index range does not necassarily start with 0.

outputted to TLA code (i.e. they wrapped with “-char, if necassary). Does not include Nil.

Returns:

  • (Array)

    renderValues set of elements, which can be

See Also:



177
178
179
180
181
182
# File 'lib/sbuilder/domain.rb', line 177

def render_values
  startIndx = includeNil ? 1 : 0
  endIndx = includeNil ? cardinality : cardinality-1
  arr = *(startIndx..endIndx).map { |i| render_entry( i ) }
  return arr
end

#setExtension(extension) ⇒ Object



40
41
42
# File 'lib/sbuilder/domain.rb', line 40

def setExtension( extension )
  @extension = extension
end

#setName(name) ⇒ Object



35
36
37
38
# File 'lib/sbuilder/domain.rb', line 35

def setName( name )
  @name = name
  self
end

#stringize(val) ⇒ String

Default assumes that domain values are string elements, and they need to be wrapped with “ -chars. Sub-classes may define integers, which should not be wrapped, and they override this method.

Returns:

  • (String)

    wrapped around “



157
158
159
160
# File 'lib/sbuilder/domain.rb', line 157

def stringize( val )
  return val if val.is_a?( FalseClass )
  '"' + val + '"'
end

#tlaBaseTypeObject

It is safe to call cardinality, domain_values, numberOfElements, render_values, …

Returns:

  • true, extension may override



66
67
68
69
# File 'lib/sbuilder/domain.rb', line 66

def tlaBaseType
  return extension.tlaBaseType if extension
  false
end

#to_sObject



30
31
32
# File 'lib/sbuilder/domain.rb', line 30

def to_s
  "#{self.class}: name=#{name}"
end