Module: Regressor::Controller::Routing::Rest::Routes

Included in:
RegressionController
Defined in:
lib/generators/regressor/controller/routing/rest/routes.rb

Instance Method Summary collapse

Instance Method Details

#rest_routesObject



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
# File 'lib/generators/regressor/controller/routing/rest/routes.rb', line 6

def rest_routes
  controller_path = @controller.constantize.controller_path
  @controller.constantize.action_methods.map do |action_method|
    journey_route = Rails.application.routes.routes.routes.select do |route|
      if route.defaults.present?
        route.defaults[:controller].to_sym == controller_path.to_sym && route.defaults[:action].to_sym == action_method.to_sym
      else
        false
      end
    end.first

    required_parts = journey_route.required_parts.inject({}) do |required_part_hash, required_part|
      required_part_hash.merge!({
                                    required_part => 1
                                })
    end
    url = url_for({controller: controller_path, action: action_method, only_path: true}.merge(required_parts))

    if journey_route.constraints[:request_method].match('GET')
      "it { should route(:get, '#{url}').to(#{{controller: controller_path, action: action_method}.merge(required_parts).to_s}) } "
    elsif journey_route.constraints[:request_method].match('POST')
      "it { should route(:post, '#{url}').to(#{{controller: controller_path, action: action_method}.merge(required_parts).to_s}) } "
    elsif journey_route.constraints[:request_method].match('PUT')
      "it { should route(:put, '#{url}').to(#{{controller: controller_path, action: action_method}.merge(required_parts).to_s}) } "
    elsif journey_route.constraints[:request_method].match('PATCH')
      "it { should route(:patch, '#{url}').to(#{{controller: controller_path, action: action_method}.merge(required_parts).to_s}) } "
    elsif journey_route.constraints[:request_method].match('DELETE')
      "it { should route(:delete, '#{url}').to(#{{controller: controller_path, action: action_method}.merge(required_parts).to_s}) } "
    end

  end.uniq.compact.join("\n\t")
end