rails-rapido 0.9.3 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c62492980ddb246461582385eb1c9fa069b025ccbd39c4ae94189d33bafc836a
4
- data.tar.gz: 14eb7a3269938509bb01ca8517cf68398445f05b6b93c92e918516e8c7c2aabd
3
+ metadata.gz: 4f94a2c707b7325512f48fee292918d01321378d6cfb6d87bbe9dc92e71a60ed
4
+ data.tar.gz: 954e3e1b070f353a3f4023202f301f52dc620498ff54aeea1cf7bc8e65a5dfd4
5
5
  SHA512:
6
- metadata.gz: 05e5f8e6d38877005df077ab7b767c890158ba7a0be2f48130e0e16a41e5973f1ae4f16e40291f56481c9218425b9548707f22aeab2125b543515264d12f54eb
7
- data.tar.gz: 26916c6b6672d778eec56db5fb1b52d1a03c805655a80322de84c5c8137a7ddc606c73d8bd7ad4a432aa557f849e0be2dcb01a56276a3459d399c8663210bf93
6
+ metadata.gz: 1a92e60537cca20540113fb1b6186ac9469e11d024127ddeda4391249a926909897198cc56472d7cdeeb80a18d41922601615199934ffc65cd1c993528662c63
7
+ data.tar.gz: b08530e8028fefcff3d737bb5d6ebd2580fe7949f0eda51b3c7747644433c56c800b4afb901d4b4a49e113fb384b37472336d097d595a722e5530dbb2cf9211a
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.2
1
+ 3.1.0
data/README.md CHANGED
@@ -14,8 +14,14 @@ Below is a typical example of a class using Rapido. More examples are available
14
14
 
15
15
  class DocumentsController < ApplicationController
16
16
  include Rapido::ApiController
17
+
18
+ allow_if do
19
+ current_user.is_editor?
20
+ end
21
+
22
+ allow_only :create, :delete, :index, :show, :update
17
23
 
18
- attr_permitted :file, file_name, :category
24
+ attr_permitted :file, :file_name, :category
19
25
 
20
26
  belongs_to :user, getter: :current_user
21
27
 
@@ -46,6 +52,14 @@ end
46
52
 
47
53
  ## API
48
54
 
55
+ ### `allow_if`
56
+
57
+ Accepts a method name as symbol or block. Method supplied or block must return true to allow the action to proceed, otherwise a status 401 is returned with no body.
58
+
59
+ ### `allow_only`
60
+
61
+ Accepts a list of symbols. These symbols specify the controller actions that are allowed for this controller.
62
+
49
63
  ### `attr_permitted`
50
64
 
51
65
  Accepts a list of symbols. These symbols specify the attributes that are supplied to StrongParameters as permitted parameters in `create` and `update` actions.
@@ -18,21 +18,61 @@ module Rapido
18
18
  end
19
19
 
20
20
  before_action :permit_only_allowed_actions
21
+
22
+ before_action :permit_only_if
21
23
  end
22
24
 
23
25
  def index
24
26
  return if performed?
25
- render json: resource_collection_presenter
27
+ if request.format.to_sym == :json
28
+ if(params["filename"])
29
+ send_data resource_collection_presenter.as_json.to_json, filename: params["filename"]
30
+ else
31
+ render json: resource_collection_presenter
32
+ end
33
+ elsif request.format.to_sym == :xml
34
+ if(params["filename"])
35
+ send_data resource_collection_presenter.to_xml, filename: params["filename"]
36
+ else
37
+ render xml: resource_collection_presenter
38
+ end
39
+ elsif request.format.to_sym == :csv
40
+ if(params["filename"])
41
+ send_data resource_collection_presenter.to_csv, filename: params["filename"]
42
+ else
43
+ render plain: resource_collection_presenter.send("to_csv")
44
+ end
45
+ else
46
+ render json: resource_collection_presenter
47
+ end
26
48
  end
27
49
 
28
50
  def show
29
51
  return if performed?
30
52
  if request.format.to_sym == :json
31
- render json: resource_presenter
53
+ if(params["filename"])
54
+ send_data resource_presenter.as_json.to_json, filename: params["filename"]
55
+ else
56
+ render json: resource_presenter
57
+ end
58
+ elsif request.format.to_sym == :html && !request.headers["accept"].include?("application/json")
59
+ if(params["filename"])
60
+ send_data resource_presenter.to_html, filename: params["filename"]
61
+ else
62
+ render html: resource_presenter.to_html.html_safe
63
+ end
32
64
  elsif request.format.to_sym == :xml
33
- render xml: resource_presenter
65
+ if(params["filename"])
66
+ send_data resource_presenter.to_xml, filename: params["filename"]
67
+ else
68
+ render xml: resource_presenter
69
+ end
34
70
  elsif request.format.to_sym == :csv
35
- render plain: resource_presenter.send("to_csv")
71
+ if(params["filename"])
72
+ send_data resource_presenter.to_csv, filename: params["filename"]
73
+ else
74
+ render plain: resource_presenter.send("to_csv")
75
+ end
36
76
  else
37
77
  render json: resource_presenter
38
78
  end
@@ -117,6 +157,14 @@ module Rapido
117
157
  head :unauthorized unless allowed_actions.include?(params[:action].to_sym)
118
158
  end
119
159
 
160
+ def permit_only_if
161
+ if(allow_if)
162
+ unless (allow_if.is_a?(Symbol) ? send(allow_if) : instance_eval(&allow_if))
163
+ head :unauthorized
164
+ end
165
+ end
166
+ end
167
+
120
168
  def resource_presenter(new_resource = nil)
121
169
  @resource_presenter ||= begin
122
170
  args = presenter_args.nil? ? nil : presenter_args.map { |arg| params[arg] }
@@ -28,6 +28,10 @@ module Rapido
28
28
  @allowed_actions = ary
29
29
  end
30
30
 
31
+ def allow_if(str = nil, &block)
32
+ @allow_if = str || block
33
+ end
34
+
31
35
  def attr_permitted(*ary)
32
36
  @resource_permitted_params = ary
33
37
  end
@@ -101,6 +105,10 @@ module Rapido
101
105
  setting(:allowed_actions)
102
106
  end
103
107
 
108
+ def allow_if
109
+ setting(:allow_if)
110
+ end
111
+
104
112
  def build_resource(params = {})
105
113
  return owner.send('build_' + resource_class_name, params) if setting(:has_one)
106
114
  return owner.send(resource_class_name.pluralize).build(params) if owner && owner.respond_to?(resource_class_name.pluralize)
@@ -1,3 +1,3 @@
1
1
  module Rapido
2
- VERSION = '0.9.3'
2
+ VERSION = '0.9.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-rapido
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Kirst
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-11 00:00:00.000000000 Z
11
+ date: 2022-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -68,7 +68,7 @@ homepage: https://github.com/jskirst/rapido
68
68
  licenses:
69
69
  - MIT
70
70
  metadata: {}
71
- post_install_message:
71
+ post_install_message:
72
72
  rdoc_options: []
73
73
  require_paths:
74
74
  - lib
@@ -83,8 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  requirements: []
86
- rubygems_version: 3.1.4
87
- signing_key:
86
+ rubygems_version: 3.3.3
87
+ signing_key:
88
88
  specification_version: 4
89
89
  summary: Rails API Dryer-o
90
90
  test_files: []