Class: Rad::RestfulRouter

Inherits:
Object show all
Includes:
AbstractRouter
Defined in:
lib/rad/router/routers/restful_router.rb

Instance Method Summary collapse

Constructor Details

#initializeRestfulRouter

Returns a new instance of RestfulRouter.



5
6
7
# File 'lib/rad/router/routers/restful_router.rb', line 5

def initialize
  @resources, @classes = {}, {}
end

Instance Method Details

#add(resource, options = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rad/router/routers/restful_router.rb', line 9

def add resource, options = {}
  # parsing options
  resource = resource.to_s
  resource.must_not =~ /\//      
  raise "resource should be in plural form!" unless resource.pluralize == resource
  klass = options.delete(:class) || raise("no class!")      
  url_root = parse_url_root options
  prefix = parse_prefix options
  raise "unknown options :#{options.to_h.keys.join(': ')}!" unless options.empty?      
  
  # logic
  meta = {
    class: klass,
    resource: resource,
    url_root: url_root,
    prefix: prefix
  }
        
  resources.must_not.include(resource.pluralize)
  classes.must_not.include(klass)      
  resources[resource.pluralize] = meta
  resources[resource.singularize] = meta
  classes[klass] = meta
end

#decode(path, params) ⇒ Object



50
51
52
# File 'lib/rad/router/routers/restful_router.rb', line 50

def decode path, params
  decode_as_object_resource(path, params) || decode_as_static_resource(path, params)
end

#encode(klass, method, params) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/rad/router/routers/restful_router.rb', line 34

def encode klass, method, params
  meta = classes[klass]
  return nil unless meta
  
  path = if id = params.delete(:id)
    "/#{meta[:resource]}/#{id}/#{method}"
  else
    "/#{meta[:resource]}/#{method}"
  end
  
  path = encode_prefix_params! path, params, meta
  path = encode_url_root! path, meta
  
  [path, params]
end

#encode_method(route_method) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/rad/router/routers/restful_router.rb', line 54

def encode_method route_method      
  token = route_method.sub(/_path$/, '')

  resources.each do |name, meta|
    if i = token.rindex(name)
      route_method.size == i + name.size and route_method[(i-1)..(i-1)] == '_'
      return meta[:class], route_method[0..(i-2)].to_sym
    end
  end
  
  return nil
end