Module: Rester::Utils

Defined in:
lib/rester/utils.rb,
lib/rester/utils/rspec.rb,
lib/rester/utils/stub_file.rb,
lib/rester/utils/logger_wrapper.rb,
lib/rester/utils/circuit_breaker.rb

Defined Under Namespace

Modules: RSpec Classes: CircuitBreaker, LoggerWrapper, StubFile

Class Method Summary collapse

Class Method Details

.classify(str) ⇒ Object



93
94
95
# File 'lib/rester/utils.rb', line 93

def classify(str)
  str.to_s.split("_").map(&:capitalize).join
end

.decode_www_data(data) ⇒ Object



49
50
51
# File 'lib/rester/utils.rb', line 49

def decode_www_data(data)
  Rack::Utils.parse_nested_query(data)
end

.deep_freeze(value) ⇒ Object



101
102
103
104
105
106
107
108
109
110
# File 'lib/rester/utils.rb', line 101

def deep_freeze(value)
  value.freeze

  case value
  when Hash
    value.values.each { |v| deep_freeze(v) }
  when Array
    value.each { |v| deep_freeze(v) }
  end
end

.encode_www_data(value, prefix = nil) ⇒ Object

Copied from Rack::Utils.build_nested_query (version 1.6.0)

We want to be able to support Rack >= 1.5.2, but this method is broken in that version.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rester/utils.rb', line 30

def encode_www_data(value, prefix = nil)
  # Rack::Utils.build_nested_query(value)
  case value
  when Array
    value.map { |v|
      encode_www_data(v, "#{prefix}[]")
    }.join("&")
  when Hash
    value.map { |k, v|
      encode_www_data(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
    }.reject(&:empty?).join('&')
  when nil
    prefix
  else
    raise ArgumentError, "value must be a Hash" if prefix.nil?
    "#{prefix}=#{escape(value)}"
  end
end

.escape(value) ⇒ Object



53
54
55
# File 'lib/rester/utils.rb', line 53

def escape(value)
  URI.encode_www_form_component(value)
end

.extract_method_verb(meth) ⇒ Object

Determines the HTTP method/verb based on the method name. Defaults to GET but if the method ends with “!” it uses POST.



15
16
17
18
19
20
21
22
23
# File 'lib/rester/utils.rb', line 15

def extract_method_verb(meth)
  meth = meth.to_s

  if meth[-1] == '!'
    [:post, meth[0..-2]]
  else
    [:get, meth]
  end
end

.join_paths(*paths) ⇒ Object



57
58
59
60
# File 'lib/rester/utils.rb', line 57

def join_paths(*paths)
  paths.map(&:to_s).reject { |p| p.nil? || p.empty? }
    .join('/').gsub(/\/+/, '/')
end

.stringify(hash = {}) ⇒ Object

Converts all keys and values to strings.



89
90
91
# File 'lib/rester/utils.rb', line 89

def stringify(hash={})
  decode_www_data(encode_www_data(hash))
end

.symbolize_keys(hash) ⇒ Object



83
84
85
# File 'lib/rester/utils.rb', line 83

def symbolize_keys(hash)
  hash.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
end

.underscore(str) ⇒ Object



97
98
99
# File 'lib/rester/utils.rb', line 97

def underscore(str)
  str.scan(/[A-Z][a-z]*/).map(&:downcase).join('_')
end

.walk(object, context = nil, &block) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/rester/utils.rb', line 62

def walk(object, context=nil, &block)
  case object
  when Hash
    Hash[
      object.map { |key, val|
        [walk(key, :hash_key, &block), walk(val, :hash_value, &block)]
      }
    ]
  when Array
    object.map { |obj| walk(obj, :array_elem, &block) }
  when Range
    Range.new(
      walk(object.begin, :range_begin, &block),
      walk(object.end, :range_end, &block),
      object.exclude_end?
    )
  else
    yield object, context
  end
end