Module: Vaultify::EdtfHelper

Included in:
VaultifyController
Defined in:
app/helpers/vaultify/edtf_helper.rb

Instance Method Summary collapse

Instance Method Details

#add_separators(str) ⇒ Object



44
45
46
47
48
49
50
51
52
53
# File 'app/helpers/vaultify/edtf_helper.rb', line 44

def add_separators str

  str.gsub(/([\dX?~])\s+([\dX?~])/, '\\1-\\2')
      .gsub(' ', '').gsub(/([\dX?~])\/([\dX?~])/, '\\1-\\2')
      .gsub(Regexp.new('(' + d2 + '-' + d4 + ')-(' + d2 + '-' + d4 + ')'), '\\1/\\2')
      .gsub(Regexp.new('(' + d2 + '-' + d4 + ')-(' + d2 + '-' + d2 + '-' + d4 + ')'), '\\1/\\2')
      .gsub(Regexp.new('(' + d4 + ')-(' + d4 + ')'), '\\1/\\2')
      .gsub(Regexp.new('(' + d4 + '-' + d2 + ')-(' + d4 + ')'), '\\1/\\2')
      .gsub(Regexp.new('(' + d4 + '-' + d2 + '-' + d2 + ')-(' + d4 + ')'), '\\1/\\2')
end

#add_zeroes(str) ⇒ Object



32
33
34
# File 'app/helpers/vaultify/edtf_helper.rb', line 32

def add_zeroes str
  str.strip.gsub(/\b(\d)\b/, '0\\1').gsub(/\b([\dX][\dX][\dX])[^\dX]/, '\\1X')
end

#arrange(str) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'app/helpers/vaultify/edtf_helper.rb', line 55

def arrange str
  if Regexp.new(d4 + '-' + d2 + '-' + d2, 'g').match(str)
    str
  elsif Regexp.new(d2 + '-' + d2 + '-' + d4, 'g').match(str)
    str.gsub(Regexp.new('(' + d2 + ')-(' + d2 + ')-(' + d4 + ')'), '\\3-\\2-\\1')
  elsif Regexp.new(d2 + '-' + d4 + '-' + d2, 'g').match(str)
    str.gsub(Regexp.new('(' + d2 + ')-(' + d4 + ')-(' + d2 + ')'), '\\2-\\1-\\3')
  elsif Regexp.new(d4 + '-' + d2, 'g').match(str)
    str
  elsif Regexp.new(d2 + '-' + d4, 'g').match(str)
    str.gsub(Regexp.new('(' + d2 + ')-(' + d4 + ')'), '\\2-\\1')
  else
    str
  end
end

#clean_extra_words(str) ⇒ Object



28
29
30
# File 'app/helpers/vaultify/edtf_helper.rb', line 28

def clean_extra_words str
  str.strip.gsub(/[a-z]/, '').gsub(/ +/, ' ')
end

#clean_words(str) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'app/helpers/vaultify/edtf_helper.rb', line 9

def clean_words str
  cleaned_string = str.strip.downcase
  months.each do |month, value|
    cleaned_string = cleaned_string.gsub(Regexp.new(month), value)
  end
  seasons.each do |season, value|
    cleaned_string = cleaned_string.gsub(Regexp.new(season), value)
  end
  descriptors.each do |descriptor, value|
    cleaned_string = cleaned_string.gsub(Regexp.new(descriptor), value)
  end
  cleaned_string
end

#convert_date(input) ⇒ Object



85
86
87
88
89
90
# File 'app/helpers/vaultify/edtf_helper.rb', line 85

def convert_date input
  return input if Date.edtf(input)
  clean_date = clean_extra_words(machine_clean(clean_words(scrub(input))))
  clean_date = dirty(rearrange(add_separators(add_zeroes(clean_date))))
  Date.edtf(clean_date) ? clean_date : nil
end

#d2Object



40
41
42
# File 'app/helpers/vaultify/edtf_helper.rb', line 40

def d2
  '[\\dX][\\dX][?~]?'
end

#d4Object



36
37
38
# File 'app/helpers/vaultify/edtf_helper.rb', line 36

def d4
  '[\\dX][\\dX][\\dX][\\dX][?~]?'
end

#descriptorsObject



118
119
120
121
122
123
# File 'app/helpers/vaultify/edtf_helper.rb', line 118

def descriptors
  {
      '(\\d.*)to(.*\\d)' => '\\1/\\2',
      '\\s*(around|about|abt|estimated|est|circa|approximately|approx)\\s*' => '~'
  }
end

#dirty(str) ⇒ Object



80
81
82
83
# File 'app/helpers/vaultify/edtf_helper.rb', line 80

def dirty str
  clean_input = str.gsub(/^\*|\*$/, 'open').gsub(/^\//, 'unknown/').gsub(/\/$/, '/unknown')
  clean_input.gsub(/X/, 'u')
end

#machine_clean(str) ⇒ Object



23
24
25
26
# File 'app/helpers/vaultify/edtf_helper.rb', line 23

def machine_clean str
  clean_input = str.gsub(/open/, '*').gsub(/unknown/, '').gsub(/[^\du]u[^\du]/, '')
  clean_input.gsub(/u/, 'X')
end

#monthsObject



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/helpers/vaultify/edtf_helper.rb', line 92

def months
  {
      'january|jan' => '01',
      'february|feb' => '02',
      'march|mar' => '03',
      'april|apr' => '04',
      'may' => '05',
      'june|jun' => '06',
      'july|jul' => '07',
      'august|aug' => '08',
      'september|sep' => '09',
      'october|oct' => '10',
      'november|nov' => '11',
      'december|dec' => '12'
  }
end

#rearrange(str) ⇒ Object



71
72
73
74
75
76
77
78
# File 'app/helpers/vaultify/edtf_helper.rb', line 71

def rearrange str
  if str.include? '/'
    split_string = str.split('/')
    arrange(split_string[0]) + '/' + arrange(split_string[1])
  else
    arrange(str)
  end
end

#scrub(str) ⇒ Object



5
6
7
# File 'app/helpers/vaultify/edtf_helper.rb', line 5

def scrub str
  str.strip.downcase.gsub(/[\|,.\[\]'"]/, ' ').gsub(/(\d+)\s*(st|nd|rd|th)\b/, '\\1')
end

#seasonsObject



109
110
111
112
113
114
115
116
# File 'app/helpers/vaultify/edtf_helper.rb', line 109

def seasons
  {
      'spring|spr' => '21',
      'summer|summ|sum' => '22',
      'autumn|aut|fall|fal' => '23',
      'winter|wint|win' => '24'
  }
end