ocean-rails 8.1.1 → 8.2.0

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: 3596b974401cfe0867bf975504a31661b1463a234149e709e6072ce01b441ff1
4
- data.tar.gz: 1a4c958efe9086c93bfdd0108d8d7d6836093b1d00bfa19fbfe4e814b6df868f
3
+ metadata.gz: 5d9060f6156d98438b9ce3dd4deba2fb97461ce44ece562fe3dcea701755c52d
4
+ data.tar.gz: a1a06a85ea3ccada5b17e83062db49a927936fc2d51f2262f9403d05a040d2f6
5
5
  SHA512:
6
- metadata.gz: c2a9521aec078ca1aebc09d86e38c7aadaf13a0a5b194df9ad6d53399ddd5d9b4615d3d0b03d6a43df1ebdb4927120b7650682cbf84e1684aa8481482e9b7749
7
- data.tar.gz: ba7a5f5800f613ad257ed1408f70afc86221c1130cb7eb7fb1e3e1b92b4188676dc63c6e55766dca9c4a70f77def9d2b8e0645857a6dca1ba11c8e390820f6e5
6
+ metadata.gz: '080c8feb9696e384a95ff51c1e9e3f56649c252ed9ad478d90e27c982d108177d395e79aabea3a937eb1041fb83a32b7f419e5cec60571401b46fd95afbea2d5'
7
+ data.tar.gz: 694b220450f368176bd3a5df6125efacd4d166494b2c29d815516327e0d10728819ec8c32366c5b4d71e0e725fb84205efc9e180e7158bf731b9d0871b714d23
@@ -8,8 +8,9 @@ class <%= controller_class_name %>Controller < ApplicationController
8
8
  ocean_resource_controller
9
9
 
10
10
  before_action :find_<%= singular_table_name %>, :only => [:show, :update, :destroy]
11
-
12
-
11
+ before_action :verify_attributes, only: :update
12
+
13
+
13
14
  # GET <%= route_url %>
14
15
  def index
15
16
  expires_in 0, 's-maxage' => DEFAULT_CACHE_TIME
@@ -17,9 +18,9 @@ class <%= controller_class_name %>Controller < ApplicationController
17
18
  # Instead, we get all the instances and compute the ETag manually.
18
19
  # You may wish to remove this action entirely. You may also wish to remove the caching,
19
20
  # in which case you don't need to compute the Etag at all.
20
- @<%= plural_table_name %> = <%= class_name %>.all
21
+ @<%= plural_table_name %> = <%= class_name %>.all
21
22
  latest = @<%= plural_table_name %>.max_by(&:updated_at)
22
- last_updated = latest && latest.updated_at
23
+ last_updated = latest && latest.updated_at
23
24
  if stale?(etag: "<%= class_name %>:#{@<%= plural_table_name %>.length}:#{last_updated}")
24
25
  api_render @<%= plural_table_name %>
25
26
  end
@@ -50,10 +51,6 @@ class <%= controller_class_name %>Controller < ApplicationController
50
51
 
51
52
  # PUT <%= route_url %>/a-b-c-d-e
52
53
  def update
53
- if missing_attributes?
54
- render_api_error 422, "Missing resource attributes"
55
- return
56
- end
57
54
  @<%= singular_table_name %>.name = params[:name] if params[:name]
58
55
  @<%= singular_table_name %>.description = params[:description] if params[:description]
59
56
  set_updater(@<%= singular_table_name %>)
@@ -67,10 +64,10 @@ class <%= controller_class_name %>Controller < ApplicationController
67
64
  @<%= singular_table_name %>.destroy
68
65
  render_head_204
69
66
  end
70
-
71
-
67
+
68
+
72
69
  private
73
-
70
+
74
71
  def find_<%= singular_table_name %>
75
72
  ActionController::Parameters.permit_all_parameters = true
76
73
  @<%= singular_table_name %> = <%= class_name %>.find_by_key(params['id'], consistent: true)
@@ -78,6 +75,6 @@ class <%= controller_class_name %>Controller < ApplicationController
78
75
  render_api_error 404, "<%= class_name %> not found"
79
76
  false
80
77
  end
81
-
78
+
82
79
  end
83
80
  <% end -%>
@@ -229,6 +229,15 @@ module OceanApplicationController
229
229
  end
230
230
 
231
231
 
232
+ def verify_attributes
233
+ missing = missing_attributes?
234
+ if missing
235
+ render_api_error 422, "Missing resource attributes: #{missing.join(', ')}"
236
+ return false
237
+ end
238
+ return true
239
+ end
240
+
232
241
  #
233
242
  # Cache values for collections. Accepts a class, a scope, or an array.
234
243
  # The cache value is based on three components:
@@ -14,12 +14,12 @@ module Ocean
14
14
  # to be written in a very terse, clear and understandable manner.
15
15
  #
16
16
  module OceanResourceController
17
-
17
+
18
18
  extend ActiveSupport::Concern
19
19
 
20
20
  included do
21
21
  if defined? ActiveRecord
22
- rescue_from ActiveRecord::RecordNotUnique,
22
+ rescue_from ActiveRecord::RecordNotUnique,
23
23
  ActiveRecord::StatementInvalid do |x|
24
24
  render_api_error 422, "Resource not unique"
25
25
  end
@@ -56,7 +56,7 @@ module Ocean
56
56
  # three optional keyword parameters:
57
57
  #
58
58
  # +required_attributes+: a list of keywords naming model attributes which must be
59
- # present. If an API consumer submits data where any of these attributes isn't present,
59
+ # present. If an API consumer submits data where any of these attributes isn't present,
60
60
  # an API error will be generated.
61
61
  #
62
62
  # ocean_resource_controller required_attributes: [:lock_version, :title]
@@ -73,7 +73,7 @@ module Ocean
73
73
  # ocean_resource_controller no_validation_errors_on: [:password_hash, :password_salt]
74
74
  #
75
75
  # +extra_actions+: a hash containing information about extra controller actions
76
- # apart from the standard Rails ones of +index+, +show+, +create+, +update+, and
76
+ # apart from the standard Rails ones of +index+, +show+, +create+, +update+, and
77
77
  # +destroy+. One entry per extra action is required in order to process authorisation
78
78
  # requests. Here's an example:
79
79
  #
@@ -113,13 +113,16 @@ module Ocean
113
113
 
114
114
 
115
115
  #
116
- # Returns true if the params hash lacks a required attribute declared using
117
- # +ocean_resource_controller+.
116
+ # If the params hash lacks any required attributes declared using
117
+ # +ocean_resource_controller+, returns a list of those attributes.
118
+ # Otherwise return false.
118
119
  #
119
120
  def missing_attributes?
121
+ missing = []
120
122
  self.class.ocean_resource_controller_required_attributes.each do |attr|
121
- return true unless params[attr]
123
+ missing << attr unless params[attr]
122
124
  end
125
+ return missing unless missing.blank?
123
126
  return false
124
127
  end
125
128
 
@@ -1,3 +1,3 @@
1
1
  module Ocean
2
- VERSION = "8.1.1"
2
+ VERSION = "8.2.0"
3
3
  end
@@ -8,8 +8,9 @@ class <%= controller_class_name %>Controller < ApplicationController
8
8
  ocean_resource_controller
9
9
 
10
10
  before_action :find_<%= singular_table_name %>, :only => [:show, :update, :destroy]
11
-
12
-
11
+ before_action :verify_attributes, only: :update
12
+
13
+
13
14
  # GET <%= route_url %>
14
15
  def index
15
16
  expires_in 0, 's-maxage' => DEFAULT_CACHE_TIME
@@ -39,10 +40,6 @@ class <%= controller_class_name %>Controller < ApplicationController
39
40
 
40
41
  # PUT <%= route_url %>/1
41
42
  def update
42
- if missing_attributes?
43
- render_api_error 422, "Missing resource attributes"
44
- return
45
- end
46
43
  @<%= singular_table_name %>.assign_attributes(filtered_params <%= class_name %>)
47
44
  set_updater(@<%= singular_table_name %>)
48
45
  @<%= singular_table_name %>.save!
@@ -55,10 +52,10 @@ class <%= controller_class_name %>Controller < ApplicationController
55
52
  @<%= orm_instance.destroy %>
56
53
  render_head_204
57
54
  end
58
-
59
-
55
+
56
+
60
57
  private
61
-
58
+
62
59
  def find_<%= singular_table_name %>
63
60
  @<%= singular_table_name %> = <%= class_name %>.find_by_id params[:id]
64
61
  # If your table has app and context columns and you have created Rights utilising them,
@@ -68,6 +65,6 @@ class <%= controller_class_name %>Controller < ApplicationController
68
65
  render_api_error 404, "<%= class_name %> not found"
69
66
  false
70
67
  end
71
-
68
+
72
69
  end
73
70
  <% end -%>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocean-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.1
4
+ version: 8.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Bengtson