Sha256: b862cf7407c234bfc8e19da98286ba043165c5c637306dc4c6ecbacb17bd54b2

Contents?: true

Size: 1.71 KB

Versions: 11

Compression:

Stored size: 1.71 KB

Contents

module SugarCube
  module DateParser
    # Parse a date string: E.g.:
    #
    # SugarCube::DateParser.parse_date "There is a date in here tomorrow at 9:00 AM"
    #
    # => 2013-02-20 09:00:00 -0800
    def self.parse_date(date_string)
      detect(date_string).first.date
    end

    # Parse time zone from date
    #
    # SugarCube::DateParser.parse_date "There is a date in here tomorrow at 9:00 AM EDT"
    #
    # Caveat: This is implemented per Apple documentation. I've never really
    #         seen it work.
    def self.parse_time_zone(date_string)
      detect(date_string).first.timeZone
    end

    # Parse a date string: E.g.:
    #
    # SugarCube::DateParser.parse_date "You have a meeting from 9:00 AM to 3:00 PM"
    #
    # => 21600.0
    #
    # Divide by 3600.0 to get number of hours duration.
    def self.parse_duration(date_string)
      detect(date_string).first.send(:duration)
    end

    # Parse a date into a raw match array for further processing
    def self.match(date_string)
      detect(date_string)
    end

    private
    def self.detect(date_string)
      @@detector ||= NSDataDetector.dataDetectorWithTypes(NSTextCheckingTypeDate, error:Pointer.new(:object))
      matches = @@detector.matchesInString(date_string, options:0, range:NSMakeRange(0, date_string.length))
    end
  end
end

class String
  # Use NSDataDetector to parse a string containing a date
  # or duration. These can be of the form:
  #
  # "tomorrow at 7:30 PM"
  # "11.23.2013"
  # "from 7:30 to 10:00 AM"
  #
  # etc.
  def to_date
    SugarCube::DateParser.parse_date(self)
  end

  def to_timezone
    SugarCube::DateParser.parse_time_zone(self)
  end

  def to_duration
    SugarCube::DateParser.parse_duration(self)
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
sugarcube-1.0.7 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.6 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.5 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.4 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.3 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.2 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.1 lib/sugarcube-nsdate/date_parser.rb
sugarcube-1.0.0 lib/sugarcube-nsdate/date_parser.rb
sugarcube-0.20.25 lib/sugarcube/date_parser.rb
sugarcube-0.20.24 lib/sugarcube/date_parser.rb
sugarcube-0.20.23 lib/sugarcube/date_parser.rb