Class: Puppet::Pops::Types::PAbstractTimeDataType
- Inherits:
-
PScalarType
- Object
- TypedModelObject
- PAnyType
- PScalarType
- Puppet::Pops::Types::PAbstractTimeDataType
- Defined in:
- lib/puppet/pops/types/p_timespan_type.rb
Direct Known Subclasses
Constant Summary
Constants inherited from PScalarType
Puppet::Pops::Types::PScalarType::DEFAULT
Constants inherited from PAnyType
Puppet::Pops::Types::PAnyType::DEFAULT
Instance Method Summary collapse
- #_assignable?(o, guard) ⇒ Boolean
- #convert_arg(arg, min) ⇒ Object
- #eql?(o) ⇒ Boolean
-
#from ⇒ Float, Integer
Returns the lower bound of the numeric range or ‘nil` if no lower bound is set.
- #hash ⇒ Object
-
#initialize(from, to = nil) ⇒ PAbstractTimeDataType
constructor
A new instance of PAbstractTimeDataType.
-
#intersect?(o) ⇒ Boolean
Checks if this numeric range intersects with another.
-
#merge(o) ⇒ PAbstractTimeDataType?
Concatenates this range with another range provided that the ranges intersect or are adjacent.
-
#numeric_from ⇒ Float, Integer
Same as #from but will return ‘-Float::Infinity` instead of `nil` if no lower bound is set.
-
#numeric_to ⇒ Float, Integer
Same as #to but will return ‘Float::Infinity` instead of `nil` if no lower bound is set.
-
#to ⇒ Float, Integer
Returns the upper bound of the numeric range or ‘nil` if no upper bound is set.
- #unbounded? ⇒ Boolean
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
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.
8 9 10 11 12 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 8 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
96 97 98 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 96 def _assignable?(o, guard) instance_of?(o.class) && numeric_from <= o.numeric_from && numeric_to >= o.numeric_to end |
#convert_arg(arg, min) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 59 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
51 52 53 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 51 def eql?(o) self.class == o.class && @from == o.numeric_from && @to == o.numeric_to end |
#from ⇒ Float, Integer
Returns the lower bound of the numeric range or ‘nil` if no lower bound is set.
25 26 27 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 25 def from @from == -Float::INFINITY ? nil : @from end |
#hash ⇒ Object
47 48 49 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 47 def hash @from.hash ^ @to.hash end |
#intersect?(o) ⇒ Boolean
Checks if this numeric range intersects with another
19 20 21 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 19 def intersect?(o) instance_of?(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`
86 87 88 89 90 91 92 93 94 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 86 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_from ⇒ Float, Integer
Same as #from but will return ‘-Float::Infinity` instead of `nil` if no lower bound is set.
37 38 39 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 37 def numeric_from @from end |
#numeric_to ⇒ Float, Integer
Same as #to but will return ‘Float::Infinity` instead of `nil` if no lower bound is set.
43 44 45 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 43 def numeric_to @to end |
#to ⇒ Float, Integer
Returns the upper bound of the numeric range or ‘nil` if no upper bound is set.
31 32 33 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 31 def to @to == Float::INFINITY ? nil : @to end |
#unbounded? ⇒ Boolean
55 56 57 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 55 def unbounded? @from == -Float::INFINITY && @to == Float::INFINITY end |