Class: CrudService::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/api.rb

Overview

This class provides a static method, crud_api, to configure a sinatra class with the provided service, resource and primary key.

Class Method Summary collapse

Class Method Details

.crud_api(sinatra, service_name, name, primary_key_name) ⇒ Object



5
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
38
39
40
41
42
43
44
45
46
47
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
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/api.rb', line 5

def self.crud_api(sinatra, service_name, name, primary_key_name)

  sinatra.options '/'+name do
    204
  end

  sinatra.post '/'+name do
    # Get The data
    begin
      data = JSON.parse(request.body.read)
    rescue Exception => e
      return 400
    end

    # Valid POST?
    return 400 unless settings.send(service_name).valid_insert?(data)

    # Already Exists?
    return 409 if settings.send(service_name).exists_by_primary_key?(data['code'])

    # Do Insert
    record = settings.send(service_name).insert(data)

    # Other Error
    return 500 if record == false

    # Output new record
    JSON.fast_generate record
  end

  sinatra.get '/'+name do
    sanitize_params(params)
    # Check query validity
    return 400 unless settings.send(service_name).valid_query?(params)

    # Return Regions on Query
    JSON.fast_generate settings.send(service_name).get_all_by_query(params)
  end

  sinatra.get '/'+name+'/:'+primary_key_name do
    sanitize_params(params)
    return 400 unless settings.send(service_name).valid_query?(params)

    record = settings.send(service_name).get_one_by_query(params)
    return 404 if record.nil?
    JSON.fast_generate record
  end

  sinatra.put '/'+name+'/:'+primary_key_name do
    # Must Exist
    return 404 unless settings.send(service_name).exists_by_primary_key?(params[:code])

    # Get The Data
    begin
      data = JSON.parse(request.body.read)
    rescue Exception => e
      return 400
    end

    # Valid Update?
    return 400 unless settings.send(service_name).valid_update?(data)

    # Do Update
    record = settings.send(service_name).update_by_primary_key(params[:code],data)

    # Other Error
    return 500 if record.nil?

    # Return new Region
    JSON.fast_generate record
  end

  sinatra.delete '/'+name+'/:'+primary_key_name do
    # Must Exist
    return 404 unless settings.send(service_name).exists_by_primary_key?(params[:code])

    # Do Delete
    return 400 unless settings.send(service_name).delete_by_primary_key(params[:code])

    204
  end
end