Class: Puppet::Pops::Types::PAbstractTimeDataType

Inherits:
PScalarType show all
Defined in:
lib/puppet/pops/types/p_timespan_type.rb

Direct Known Subclasses

PTimespanType, PTimestampType

Constant Summary

Constants inherited from PScalarType

Puppet::Pops::Types::PScalarType::DEFAULT

Constants inherited from PAnyType

Puppet::Pops::Types::PAnyType::DEFAULT

Instance Method Summary collapse

Methods inherited from PScalarType

#instance?, register_ptype, #roundtrip_with_string?

Methods inherited from PAnyType

#==, #accept, #assignable?, #callable?, #callable_args?, #callable_with?, #check_self_recursion, create, #create, #generalize, #instance?, #iterable?, #iterable_type, #kind_of_callable?, #loader, #name, new_function, #new_function, #normalize, #really_instance?, register_ptype, #resolve, #roundtrip_with_string?, simple_name, #simple_name, #to_alias_expanded_s, #to_s

Methods inherited from TypedModelObject

_pcore_type, create_ptype, register_ptypes

Methods included from Visitable

#accept

Methods included from PuppetObject

#_pcore_all_contents, #_pcore_contents, #_pcore_init_hash, #_pcore_type, #to_s

Constructor Details

#initialize(from, to = nil) ⇒ PAbstractTimeDataType

Returns a new instance of PAbstractTimeDataType

Raises:

  • (ArgumentError)

6
7
8
9
10
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 6

def initialize(from, to = nil)
  @from = convert_arg(from, true)
  @to = convert_arg(to, false)
  raise ArgumentError, "'from' must be less or equal to 'to'. Got (#{@from}, #{@to}" unless @from <= @to
end

Instance Method Details

#_assignable?(o, guard) ⇒ Boolean


93
94
95
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 93

def _assignable?(o, guard)
  self.class == o.class && numeric_from <= o.numeric_from && numeric_to >= o.numeric_to
end

#convert_arg(arg, min) ⇒ Object


57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 57

def convert_arg(arg, min)
  case arg
  when impl_class
    arg
  when Hash
    impl_class.from_hash(arg)
  when nil, :default
    min ? -Float::INFINITY : Float::INFINITY
  when String
    impl_class.parse(arg)
  when Integer
    impl_class.new(arg * Time::NSECS_PER_SEC)
  when Float
    impl_class.new(arg * Time::NSECS_PER_SEC)
  else
    raise ArgumentError, "Unable to create a #{impl_class.name} from a #{arg.class.name}" unless arg.nil? || arg == :default
    nil
  end
end

#eql?(o) ⇒ Boolean


49
50
51
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 49

def eql?(o)
  self.class == o.class && @from == o.numeric_from && @to == o.numeric_to
end

#fromFloat, Integer

Returns the lower bound of the numeric range or `nil` if no lower bound is set.


23
24
25
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 23

def from
  @from == -Float::INFINITY ? nil : @from
end

#hashObject


45
46
47
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 45

def hash
  @from.hash ^ @to.hash
end

#intersect?(o) ⇒ Boolean

Checks if this numeric range intersects with another


17
18
19
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 17

def intersect?(o)
  self.class == o.class && !(@to < o.numeric_from || o.numeric_to < @from)
end

#merge(o) ⇒ PAbstractTimeDataType?

Concatenates this range with another range provided that the ranges intersect or are adjacent. When that's not the case, this method will return `nil`


83
84
85
86
87
88
89
90
91
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 83

def merge(o)
  if intersect?(o) || adjacent?(o)
    new_min = numeric_from <= o.numeric_from ? numeric_from : o.numeric_from
    new_max = numeric_to >= o.numeric_to ? numeric_to : o.numeric_to
    self.class.new(new_min, new_max)
  else
    nil
  end
end

#numeric_fromFloat, Integer

Same as #from but will return `-Float::Infinity` instead of `nil` if no lower bound is set.


35
36
37
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 35

def numeric_from
  @from
end

#numeric_toFloat, Integer

Same as #to but will return `Float::Infinity` instead of `nil` if no lower bound is set.


41
42
43
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 41

def numeric_to
  @to
end

#toFloat, Integer

Returns the upper bound of the numeric range or `nil` if no upper bound is set.


29
30
31
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 29

def to
  @to == Float::INFINITY ? nil : @to
end

#unbounded?Boolean


53
54
55
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 53

def unbounded?
  @from == -Float::INFINITY && @to == Float::INFINITY
end