Sha256: d27a4b62289bb78e023f8a2c18d31b5584108c2f918a42281005911e0795d50a

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 KB

Contents

module EDTF
 
  class Uncertainty < Struct.new(:year, :month, :day, :hour, :minute, :second)
    def uncertain?(parts = members)
      [parts].flatten.any? { |p| !!send(p) }
    end

    def uncertain!(parts = members)
      [parts].flatten.each { |p| send("#{p}=", true) }
      self
    end

    def certain?(parts = members); !uncertain?(parts); end
    
    def certain!(parts = members)
      [parts].flatten.each { |p| send("#{p}=", false) }
      self
    end
  end

  # year = []
  class Unspecified < Struct.new(:year, :month, :day)
    
    def initialize
      super year = Array.new(4), month = Array.new(2), day = Array.new(2)
    end
    
    def unspecified?(parts = members)
      [parts].flatten.any? { |p| send(p).any? { |u| !!u } }
    end
    
    def unspecified!(parts = members)
      [parts].flatten.each { |p| send(p).map! { true } }
      self
    end

    def specified?(parts = members); !unspecified?(parts); end

    def specified!(parts = members)
      [parts].flatten.each { |p| send(p).map! { false } }
      self
    end
    
    alias specific? specified?
    alias unspecific? unspecified?

    alias specific! specified!
    alias unspecific! unspecified!
    
    private :year=, :month=, :day=
    
    def to_s
      [year, month, day].map { |p| p.map { |i| i ? 'u' : 's' }.join }.join('-')
    end
    
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
edtf-0.0.3 lib/edtf/uncertainty.rb
edtf-0.0.2 lib/edtf/uncertainty.rb
edtf-0.0.1 lib/edtf/uncertainty.rb