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) ⇒ 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
Constructor Details
#initialize(from, to) ⇒ PAbstractTimeDataType
Returns a new instance of PAbstractTimeDataType.
6 7 8 9 10 |
# File 'lib/puppet/pops/types/p_timespan_type.rb', line 6 def initialize(from, to) @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 arg == impl_class.new(arg * Time::NSECS_PER_SEC) when Float arg == (min ? -Float::INFINITY : Float::INFINITY) ? arg : 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 |
#from ⇒ Float, 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 |
#hash ⇒ Object
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_from ⇒ Float, 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_to ⇒ Float, 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 |
#to ⇒ Float, 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 |