Module: Flexirest::ProxyBase::ClassMethods

Defined in:
lib/flexirest/proxy_base.rb

Instance Method Summary collapse

Instance Method Details

#add_mapping(method_type, match, block) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/flexirest/proxy_base.rb', line 29

def add_mapping(method_type, match, block)
  @mappings ||= []

  if match.is_a?(String) && (param_keys = match.scan(/:\w+/)) && param_keys.any?
    param_keys.each do |key|
      match.gsub!(key, "([^/]+)")
    end
    param_keys = param_keys.map {|k| k.gsub(":", "").to_sym}
    match = Regexp.new(match)
  end

  @mappings << OpenStruct.new(http_method:method_type, match:match, block:block, param_keys:param_keys)
end

#body(value = nil) ⇒ Object



43
44
45
46
# File 'lib/flexirest/proxy_base.rb', line 43

def body(value = nil)
  @body = value if value
  @body
end

#delete(match, &block) ⇒ Object



25
26
27
# File 'lib/flexirest/proxy_base.rb', line 25

def delete(match, &block)
  add_mapping(:delete, match, block)
end

#find_mapping_for_current_requestObject



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/flexirest/proxy_base.rb', line 135

def find_mapping_for_current_request
  uri = URI.parse(@original_url)
  @mappings ||= []
  @params = {}
  @mappings.each do |mapping|
    match = mapping.match
    if (match_data = uri.path.match(match)) && @request.http_method.to_sym == mapping.http_method
      matches = match_data.to_a
      matches.shift
      matches.each_with_index do |value, index|
        @params[mapping.param_keys[index]] = value
      end
      return mapping
    end
  end
  nil
end

#get(match, &block) ⇒ Object



9
10
11
# File 'lib/flexirest/proxy_base.rb', line 9

def get(match, &block)
  add_mapping(:get, match, block)
end

#get_params(value = nil) ⇒ Object



53
54
55
56
# File 'lib/flexirest/proxy_base.rb', line 53

def get_params(value = nil)
  @get_params = value if value
  @get_params
end

#handle(request, &block) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/flexirest/proxy_base.rb', line 112

def handle(request, &block)
  @request = request
  @original_handler = block

  @original_body = request.body
  @body = @original_body.dup

  @original_get_params = request.get_params
  @get_params = @original_get_params.dup

  @original_post_params = request.post_params
  @post_params = (@original_post_params || {}).dup

  @original_url = request.url
  @url = @original_url.dup

  if mapping = find_mapping_for_current_request
    self.class_eval(&mapping.block)
  else
    passthrough
  end
end

#params(value = nil) ⇒ Object



63
64
65
66
# File 'lib/flexirest/proxy_base.rb', line 63

def params(value = nil)
  @params = value if value
  @params
end

#passthroughObject



68
69
70
71
# File 'lib/flexirest/proxy_base.rb', line 68

def passthrough
  rebuild_request
  @original_handler.call(@request)
end

#patch(match, &block) ⇒ Object



21
22
23
# File 'lib/flexirest/proxy_base.rb', line 21

def patch(match, &block)
  add_mapping(:patch, match, block)
end

#post(match, &block) ⇒ Object



13
14
15
# File 'lib/flexirest/proxy_base.rb', line 13

def post(match, &block)
  add_mapping(:post, match, block)
end

#post_params(value = nil) ⇒ Object



58
59
60
61
# File 'lib/flexirest/proxy_base.rb', line 58

def post_params(value = nil)
  @post_params = value if value
  @post_params
end

#put(match, &block) ⇒ Object



17
18
19
# File 'lib/flexirest/proxy_base.rb', line 17

def put(match, &block)
  add_mapping(:put, match, block)
end

#rebuild_requestObject



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/flexirest/proxy_base.rb', line 95

def rebuild_request
  if @url != @original_url
    @request.forced_url = @request.url = @url
  end
  if @body != @original_body
    @request.body = @body
  elsif @post_params != @original_post_params
    @request.body = nil
    @request.prepare_request_body(@post_params)
  end
  if @get_params != @original_get_params
    @request.get_params = @get_params
    @request.prepare_url
    @request.append_get_parameters
  end
end

#render(body, status = 200, content_type = "application/javascript", headers = {}) ⇒ Object



153
154
155
156
# File 'lib/flexirest/proxy_base.rb', line 153

def render(body, status=200, content_type="application/javascript", headers={})
  headers["Content-type"] = content_type
  FaradayResponseProxy.new(OpenStruct.new(body:body, status:status, response_headers:headers, proxied:true))
end

#result_is_json_or_unspecified?(result) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
77
# File 'lib/flexirest/proxy_base.rb', line 73

def result_is_json_or_unspecified?(result)
  result.headers['Content-Type'].include?('json')
rescue
  true
end

#translate(result, options = {}) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/flexirest/proxy_base.rb', line 79

def translate(result, options = {})
  incoming_content_type = result.headers['Content-Type']
  if result_is_json_or_unspecified?(result)
    result.headers["content-type"] = "application/hal+json"
  end
  result = FaradayResponseProxy.new(OpenStruct.new(status:result.status, response_headers:result.headers, body:result.body))
  if result.body.present?
    if incoming_content_type && incoming_content_type["xml"]
      result.body = yield Crack::XML.parse(result.body)
    else
      result.body = yield MultiJson.load(result.body)
    end
  end
  result
end

#url(value = nil) ⇒ Object



48
49
50
51
# File 'lib/flexirest/proxy_base.rb', line 48

def url(value = nil)
  @url = value if value
  @url
end