Class: Reckon::DateColumn
- Inherits:
-
Array
- Object
- Array
- Reckon::DateColumn
- Defined in:
- lib/reckon/date_column.rb
Instance Attribute Summary collapse
-
#endian_precedence ⇒ Object
Returns the value of attribute endian_precedence.
Class Method Summary collapse
Instance Method Summary collapse
- #for(index) ⇒ Object
-
#initialize(arr = [], options = {}) ⇒ DateColumn
constructor
A new instance of DateColumn.
- #pretty_for(index) ⇒ Object
Constructor Details
#initialize(arr = [], options = {}) ⇒ DateColumn
Returns a new instance of DateColumn.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/reckon/date_column.rb', line 4 def initialize( arr = [], = {} ) arr.each do |value| if [:date_format] begin value = Date.strptime(value, [:date_format]) rescue puts "I'm having trouble parsing #{value} with the desired format: #{[:date_format]}" exit 1 end else value = [$1, $2, $3].join("/") if value =~ /^(\d{4})(\d{2})(\d{2})\d+\[\d+\:GMT\]$/ # chase format value = [$3, $2, $1].join("/") if value =~ /^(\d{2})\.(\d{2})\.(\d{4})$/ # german format value = [$3, $2, $1].join("/") if value =~ /^(\d{2})\-(\d{2})\-(\d{4})$/ # nordea format value = [$1, $2, $3].join("/") if value =~ /^(\d{4})\-(\d{2})\-(\d{2})$/ # yyyy-mm-dd format value = [$1, $2, $3].join("/") if value =~ /^(\d{4})(\d{2})(\d{2})/ # yyyymmdd format unless @endian_precedence # Try to detect endian_precedence reg_match = value.match( /^(\d\d)\/(\d\d)\/\d\d\d?\d?/ ) # If first one is not \d\d/\d\d/\d\d\d?\d set it to default if !reg_match @endian_precedence = [:middle, :little] elsif reg_match[1].to_i > 12 @endian_precedence = [:little] elsif reg_match[2].to_i > 12 @endian_precedence = [:middle] end end end self.push( value ) end # if endian_precedence still nil, raise error unless @endian_precedence || [:date_format] raise( "Unable to determine date format. Please specify using --date-format" ) end end |
Instance Attribute Details
#endian_precedence ⇒ Object
Returns the value of attribute endian_precedence.
3 4 5 |
# File 'lib/reckon/date_column.rb', line 3 def endian_precedence @endian_precedence end |
Class Method Details
.likelihood(entry) ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/reckon/date_column.rb', line 59 def self.likelihood(entry) date_score = 0 date_score += 10 if entry =~ /\b(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i date_score += 5 if entry =~ /^[\-\/\.\d:\[\]]+$/ date_score += entry.gsub(/[^\-\/\.\d:\[\]]/, '').length if entry.gsub(/[^\-\/\.\d:\[\]]/, '').length > 3 date_score -= entry.gsub(/[\-\/\.\d:\[\]]/, '').length date_score += 30 if entry =~ /^\d+[:\/\.-]\d+[:\/\.-]\d+([ :]\d+[:\/\.]\d+)?$/ date_score += 10 if entry =~ /^\d+\[\d+:GMT\]$/i return date_score end |
Instance Method Details
#for(index) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/reckon/date_column.rb', line 41 def for( index ) value = self.at( index ) guess = Chronic.parse(value, :context => :past, :endian_precedence => @endian_precedence ) if guess.to_i < 953236800 && value =~ /\// guess = Chronic.parse((value.split("/")[0...-1] + [(2000 + value.split("/").last.to_i).to_s]).join("/"), :context => :past, :endian_precedence => @endian_precedence) end guess && guess.to_date end |
#pretty_for(index) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/reckon/date_column.rb', line 52 def pretty_for(index) date = self.for(index) return "" if date.nil? date.iso8601 end |