class TimeScales::Frame::TypeBuilder
Attributes
parts[R]
Public Class Methods
new(parts)
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 29 def initialize(parts) @parts = parts end
Private Class Methods
add_type_cache()
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 11 def add_type_cache # Closure variable accessible via instance method # from any instance. _type_cache = {} define_method(:type_cache){ _type_cache } private :type_cache end
Public Instance Methods
call()
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 33 def call type_cache.fetch( parts ) { type_cache[parts] = build_type } end
Private Instance Methods
build_type()
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 41 def build_type _parts = parts ; _is_scheme_scoped = scheme_scoped? klass = Class.new type_base_class do _parts.each do |part| ; include part.component_mixin ; end include _parts.last.scheme_scoped_precision_mixin if _is_scheme_scoped end Frame.const_set type_const_name, klass klass end
scheme_scoped?()
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 59 def scheme_scoped? parts.first.scope == Units::Scheme end
type_base_class()
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 51 def type_base_class if scheme_scoped? Frame::SchemeRelativeFrame else Frame::Base end end
type_const_name()
click to toggle source
# File lib/time_scales/frame/type_builder.rb, line 63 def type_const_name const_name = "#{parts.first.name}" parts[1..-1].each do |part| ; const_name << "_#{part.subdivision_name}" ; end const_name << 'Only' if parts.length == 1 const_name << '__Auto' end