Module: Eco::API::UseCases::OozeSamples::Helpers::Shortcuts

Included in:
Eco::API::UseCases::OozeSamples::Helpers, Eco::API::UseCases::OozeSamples::HelpersMigration::TypedFieldsPairing
Defined in:
lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb

Instance Method Summary collapse

Instance Method Details

#bracked_regexObject

Matches anything between two consecutive (), inclusive



13
14
15
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 13

def bracked_regex
  @bracked_regex ||= /(?<bracked>\([^\)]+?\))/
end

#clean_question(str) ⇒ Object



96
97
98
99
100
101
102
103
104
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 96

def clean_question(str)
  return nil unless str
  normalize_string(str) do |str|
    str.gsub(/\r\n/, ' ').yield_self do |str|
      str = yield(str) if block_given?
      str
    end
  end
end

#is_number?(value) ⇒ Boolean

Returns:

  • (Boolean)


134
135
136
137
138
139
140
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 134

def is_number?(value)
  begin
    true if Float(value)
  rescue ArgumentError => e
    false
  end
end

#non_letters_regexObject

Basic simplification pattern (matches all but a-z and blank space)



8
9
10
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 8

def non_letters_regex
  @non_letters_regex ||= /[^a-z ]+/
end

#normalize_string(str) ⇒ Object



85
86
87
88
89
90
91
92
93
94
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 85

def normalize_string(str)
  return nil unless str
  str.gsub(/[^[:print:]]/, '')
  .gsub(/[[:space:]]+/, ' ')
  .gsub(/[[:space:]]$/, '')
  .gsub(/[-\u2011\u2012\u2013]/, '-').yield_self do |str|
    str = yield(str) if block_given?
    str
  end
end

#object_reference(obj) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 106

def object_reference(obj)
  return "No reference" unless obj
  "".tap do |ref|
    case obj
    when Ecoportal::API::V2::Page::Stage
      ref << "Stage"
    when Ecoportal::API::V2::Pages::PageStage
      ref << "Page (#{obj.id}) (#{object_reference(obj.current_stage)})"
    when Ecoportal::API::V2::Page
      ref << "Page"
    when Ecoportal::API::V2::Page::Section
      ref << "Section '#{obj.heading || "(unnamed)"}'"
    when Ecoportal::API::V2::Page::Component
      ref << "Component '#{obj.label || "(unnamed of type '#{obj.type}')"}' in #{object_reference(obj.section)}"
    when Ecoportal::API::V2::Page::Force
      ref << "Force '#{obj.name}'"
    when Ecoportal::API::V2::Page::Force::Binding
      ref << "Binding '#{obj.name}' in #{object_reference(obj.force)}"
    end
    ref << " '#{obj.name}'" if obj.respond_to?(:name)
  end
end

#same_string?(value1, value2, exact: false, mild: false, ignore: false) ⇒ Boolean

Note:

only one of the values can be a Regexp

Offers multiple simplification methods to compare two strings

Parameters:

  • value1 (String, Regexp, Nil)
  • value2 (String, Regexp, Nil)
  • exact (Boolean) (defaults to: false)
    • when true: requiring the values to be exactly the same
    • otherwise (false): compares in downcase, with no extra spaces
  • mild (Boolean) (defaults to: false)

    only a-z comparison

  • ignore (see @simplify_string) (defaults to: false)

Returns:

  • (Boolean)


48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 48

def same_string?(value1, value2, exact: false, mild: false, ignore: false)
  return true  if value1.to_s.strip.empty? && value2.to_s.strip.empty?
  return false if value1.to_s.strip.empty? || value2.to_s.strip.empty?
  val1, val2 = value1, value2
  unless exact
    if val1.is_a?(String)
      val1 = simplify_string(val1, ignore: ignore) if ignore
      val1 = simplify_string(val1, ignore: non_letters_regex) if mild
    end
    if val2.is_a?(String)
      val2 = simplify_string(val2, ignore: ignore) if ignore
      val2 = simplify_string(val2, ignore: non_letters_regex) if mild
    end
  end
  case
  when val1.is_a?(String) && val2.is_a?(String)
    val1 == val2
  when val1.is_a?(Regexp) && val2.is_a?(String)
    val2 =~ val1
  when val1.is_a?(String) && val2.is_a?(Regexp)
    val1 =~ val2
  else
    #val1 == val2
    raise "Expected at least one String, and either a String or Regex. Given: (1: #{val1.class}) and (2: #{val2.class})"
  end
end

#simplify_string(str, ignore: false) ⇒ Object

It always downcase, trim and remove double spaces.

Parameters:

  • ignore (defaults to: false)

    Boolean, Regexp] ingored when exact is true

    • when false: it does not do anything additional
    • when Regex: it removes all characters that match the expression.
    • when String: each character listed is removed.
    • when Array: reduces str processing ignore in order.
    • when true (or otherwise): it removes all non a-zA-Z characters but blank spaces.


24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 24

def simplify_string(str, ignore: false)
  str = str.to_s.strip.downcase.gsub(/\s+/, ' ')
  return str unless ignore
  sub = non_letters_regex
  case ignore
  when Regexp; sub = ignore
  when String; sub = /[#{ignore}]+/
  when Array
    return ignore.reduce(str) do |out, sub|
      simplify_string(out, ignore: sub)
    end
  end
  str.gsub(sub, '').gsub(/\s+/, ' ').strip
end

#titleize(str) ⇒ Object



75
76
77
78
79
80
81
82
83
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 75

def titleize(str)
  return nil unless str
  return str if str.strip.empty?
  str.split(/\s+/).map do |part|
    part[0] = part[0].upcase
    part[1..-1] = part[1..-1].downcase
    part
  end.join(" ")
end

#to_i(value) ⇒ Object



129
130
131
# File 'lib/eco/api/usecases/ooze_samples/helpers/shortcuts.rb', line 129

def to_i(value)
  Float(value).to_i
end