Class: Sbuilder::Domain
- Inherits:
-
Object
- Object
- Sbuilder::Domain
- Includes:
- Utils::MyLogger
- Defined in:
- lib/sbuilder/domain.rb
Direct Known Subclasses
Constant Summary collapse
- PROGNAME =
logger
nil
Constants included from Utils::MyLogger
Instance Attribute Summary collapse
- #extension ⇒ Object readonly
- #name ⇒ Object (also: #domain_name) readonly
Constructor & configure collapse
-
#initialize(options = {}) ⇒ Domain
constructor
A new instance of Domain.
- #setExtension(extension) ⇒ Object
- #setName(name) ⇒ Object
- #to_s ⇒ Object
Behaviour collapse
-
#cardinality ⇒ Object
Notice: number of elements include also nil element, which should be calculated, when calculating elements in domain.
-
#domain_range ⇒ Integer..Integer
(maybe extentended) domain.
-
#includeNil ⇒ Boolean
Should we add Nil to domain set.
-
#numberOfElements ⇒ integer
Number of elements including nil.
-
#tlaBaseType ⇒ Object
It is safe to call
cardinality,domain_values,numberOfElements,render_values, …
Implementation details collapse
-
#nilValue ⇒ Boolean
False which is internal nil repreentation.
Domain values collapse
-
#domain_entry(i) ⇒ Object
Return domain value for for element ‘i’.
-
#render_values ⇒ Array
Index from 1..
-
#stringize(val) ⇒ String
Default assumes that domain values are string elements, and they need to be wrapped with “ -chars.
Model data collapse
-
#domain_values ⇒ Hash:Array
Called from model#templateData, used in mustache templates to output elements in domain set.
-
#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
includeNilvalues i==0 and i==‘Nil’ are wrapped to ‘nilValue’ (=false). Actual value fromdomain_entry.
Methods included from Utils::MyLogger
Constructor Details
Instance Attribute Details
#extension ⇒ Object (readonly)
13 14 15 |
# File 'lib/sbuilder/domain.rb', line 13 def extension @extension end |
#name ⇒ Object (readonly) Also known as: domain_name
7 8 9 |
# File 'lib/sbuilder/domain.rb', line 7 def name @name end |
Instance Method Details
#cardinality ⇒ Object
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.
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_range ⇒ Integer..Integer
(maybe extentended) domain
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_values ⇒ Hash: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.
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 |
#includeNil ⇒ Boolean
Should we add Nil to domain set
55 56 57 58 |
# File 'lib/sbuilder/domain.rb', line 55 def includeNil return extension.includeNil if extension true end |
#nilValue ⇒ Boolean
105 106 107 |
# File 'lib/sbuilder/domain.rb', line 105 def nilValue false end |
#numberOfElements ⇒ integer
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_values ⇒ Array
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.
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.
157 158 159 160 |
# File 'lib/sbuilder/domain.rb', line 157 def stringize( val ) return val if val.is_a?( FalseClass ) '"' + val + '"' end |
#tlaBaseType ⇒ Object
It is safe to call cardinality, domain_values, numberOfElements, render_values, …
66 67 68 69 |
# File 'lib/sbuilder/domain.rb', line 66 def tlaBaseType return extension.tlaBaseType if extension false end |
#to_s ⇒ Object
30 31 32 |
# File 'lib/sbuilder/domain.rb', line 30 def to_s "#{self.class}: name=#{name}" end |