rest_framework 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0a9ae17435876f34d868d88ea187ae8844593a498f6d2d560c3ab2cfe1fa37a
4
- data.tar.gz: ea04580ad618ed1e15f28cb29ed079e64beead85d77479a52896c10aed226bc8
3
+ metadata.gz: ce317c05e27ab6421b18f37595dbb846a747c8616d19fc9a1927a9ecc30fefc7
4
+ data.tar.gz: b8f88631bfca835f395677af0e0c0079b40c079aa8d9a6cc8c8ee46dc5d589c2
5
5
  SHA512:
6
- metadata.gz: 3b596fb77e6bf656ce0fd7613ed2498019670b8576b022f6bda349d4f945d1502a2704bffb3d82a8cf2910ee0779f8fbcf2abae69bbd90e7734d59af1f2a8323
7
- data.tar.gz: 9c11d18a0805d17adb55b15d2e5b75e563c7e065bf0734e330c2584991ba0301a542466d9ee5d87387ecd97848451656c0740fa5488d77cd3f187b1f8988aacb
6
+ metadata.gz: abd9fc1e83d61c60af77d834d3a3e03a4a904863f3ad4bb851d8cf35a5a563a322eef508a273764ce727303e3e25f526cca03a643127957a7d9952e4988de743
7
+ data.tar.gz: 8aadf4ba5467c645da2404df61880bd741a491eea0c14a09b20e7056726022f7fc7bd4b8a3f90e9ac068b578e63870c85cfaa813296245cf8c4fddfb7d002a66
@@ -1 +1 @@
1
- 0.0.8
1
+ 0.0.9
@@ -36,6 +36,8 @@ module RESTFramework
36
36
  ])
37
37
  base.rescue_from(ActiveRecord::RecordNotFound, with: :record_not_found)
38
38
  base.rescue_from(ActiveRecord::RecordInvalid, with: :record_invalid)
39
+ base.rescue_from(ActiveRecord::RecordNotSaved, with: :record_not_saved)
40
+ base.rescue_from(ActiveRecord::RecordNotDestroyed, with: :record_not_destroyed)
39
41
  end
40
42
  end
41
43
 
@@ -51,6 +53,14 @@ module RESTFramework
51
53
  return api_response({message: "Record not found.", exception: e}, status: 404)
52
54
  end
53
55
 
56
+ def record_not_saved(e)
57
+ return api_response({message: "Record not saved.", exception: e}, status: 406)
58
+ end
59
+
60
+ def record_not_destroyed(e)
61
+ return api_response({message: "Record not destroyed.", exception: e}, status: 406)
62
+ end
63
+
54
64
  def _get_routes
55
65
  begin
56
66
  formatter = ActionDispatch::Routing::ConsoleFormatter::Sheet
@@ -71,6 +81,11 @@ module RESTFramework
71
81
  json_kwargs ||= {}
72
82
  xml_kwargs ||= {}
73
83
 
84
+ # make empty responses status 204 unless a status is already explicitly defined
85
+ if (payload.nil? || payload == '') && !kwargs.key?(:status)
86
+ kwargs[:status] = 204
87
+ end
88
+
74
89
  respond_to do |format|
75
90
  if payload.respond_to?(:to_json)
76
91
  format.json {
@@ -94,7 +109,8 @@ module RESTFramework
94
109
  kwargs = kwargs.merge(html_kwargs)
95
110
  begin
96
111
  render(**kwargs)
97
- rescue ActionView::MissingTemplate # fallback to rest_framework default view
112
+ rescue ActionView::MissingTemplate # fallback to rest_framework layout/view
113
+ kwargs[:layout] = "rest_framework"
98
114
  kwargs[:template] = "rest_framework/default"
99
115
  end
100
116
  render(**kwargs)
@@ -13,6 +13,8 @@ module RESTFramework
13
13
  :recordset,
14
14
  :fields,
15
15
  :action_fields,
16
+ :native_serializer_config,
17
+ :native_serializer_action_config,
16
18
  :filterset_fields,
17
19
  :allowed_parameters,
18
20
  :allowed_action_parameters,
@@ -42,6 +44,19 @@ module RESTFramework
42
44
  return action_fields[action] || self.class.fields || []
43
45
  end
44
46
 
47
+ # Get a native serializer config for an action (or the current action if none given).
48
+ def get_native_serializer_config(action: nil)
49
+ native_serializer_action_config = self.class.native_serializer_action_config || {}
50
+
51
+ # action will, by default, be the current action name
52
+ action = action_name.to_sym unless action
53
+
54
+ # index action should use :list serializer config if :index is not provided
55
+ action = :list if action == :index && !native_serializer_action_config.key?(:index)
56
+
57
+ return native_serializer_action_config[action] || self.class.native_serializer_config
58
+ end
59
+
45
60
  # Get a list of parameters allowed for an action (or the current action if none given).
46
61
  def get_allowed_parameters(action: nil)
47
62
  allowed_action_parameters = self.class.allowed_action_parameters || {}
@@ -178,12 +193,8 @@ module RESTFramework
178
193
  module DestroyModelMixin
179
194
  def destroy
180
195
  @record = self.get_record
181
- if @record
182
- @record.destroy!
183
- api_response('')
184
- else
185
- api_response({detail: "Method 'DELETE' not allowed."}, status: 405)
186
- end
196
+ @record.destroy!
197
+ api_response(nil)
187
198
  end
188
199
  end
189
200
 
@@ -24,17 +24,26 @@ module RESTFramework
24
24
 
25
25
  # Get a configuration passable to `as_json` for the model.
26
26
  def get_native_serializer_config
27
+ # return a serializer config if one is defined
28
+ serializer_config = @controller.send(:get_native_serializer_config)
29
+ return serializer_config if serializer_config
30
+
31
+ # build serializer config from fields
27
32
  fields = @controller.send(:get_fields)
28
33
  unless fields.blank?
29
34
  columns, methods = fields.partition { |f| f.to_s.in?(@model.column_names) }
30
35
  return {only: columns, methods: methods}
31
36
  end
37
+
32
38
  return {}
33
39
  end
34
40
 
35
41
  # Convert the object(s) to Ruby primitives.
36
42
  def serialize
37
- return @object.as_json(self.get_native_serializer_config)
43
+ if @object
44
+ return @object.as_json(self.get_native_serializer_config)
45
+ end
46
+ return nil
38
47
  end
39
48
  end
40
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregory N. Schmit