rails_action_deprecation 0.1.0 → 0.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: 819a233f23d2424bb400a0da7b1faddfd273ec32a82b78d491e3fe0592b2a7e7
4
- data.tar.gz: 33520a45d7a801d4f6776bb8ff98e7b170b51ac20f94459ffae86842571cbb03
3
+ metadata.gz: ccae3581cfc634686eb8f0a9b21309db739dff0f3e7b8b55a3667d0e2efd5abc
4
+ data.tar.gz: 525195bebf4b792f3819593bc1feb0390cd3c330ae90c26d710f59dd64548b23
5
5
  SHA512:
6
- metadata.gz: 67c50563383ec059a43075dde8df22d10e9ca2d76f3d64cab6e67d54b733d06aae45070795086062771d56a37eb30e313aae072ce1bb9c1ff025ec9ee55b8582
7
- data.tar.gz: 70a64ce006972448a010ce44c40242d00989e67a743e54f61056ebac28d9861a74ea7804c39a97a161a7225a4bcdb08b87cc35073f8532164bf5ba7a33980083
6
+ metadata.gz: 10767b6b4b23e8a294e6c27b88b5f804ac4bee8a9cbe38f6587c03c7e79c1b22e356beb084dd29e3346a07f18c6e8e886e4117df35e6bd421f306df2febf89c5
7
+ data.tar.gz: 78124ba4a85f6b869e8f500e119dffd2d238e24217865bf105d095a76bd4f1053dc588d05fde3b38cc824345a1cb71e1387939d5344db2e9a31605a213ca02b8
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Rails Action Deprecation Changelog
2
2
 
3
+ 0.2.0
4
+ ---
5
+ - Add link option to *_endpoint functions. This allows users to provide additional information at the specified URL
6
+
3
7
  0.1.0
4
8
  ---
5
9
  - Initial commit of the Rails Action Deprecation gem
data/README.md CHANGED
@@ -31,19 +31,58 @@ Or install it yourself as:
31
31
 
32
32
  ## Usage
33
33
 
34
- To enable deprecation and sunset in your controller, simply use the provided `deprecate_endpoint` and `sunset_endpoint` functions. These register an `after_action` hook that sets the relevant HTTP headers and outputs a message via `ActiveSupport::Deprecation`.
34
+ To enable deprecation and sunset in your controller, simply use the provided `deprecate_endpoint` and `sunset_endpoint` functions.
35
+ These register an `after_action` hook that sets the relevant HTTP headers and outputs a message via `ActiveSupport::Deprecation`.
35
36
 
36
- Both functions take exactly the same parameters. The first is a DateTime describing the date of deprecation or sunset. By default the deprecation or sunset is set for any action in the controller. To limit this the `only:` parameter can be used exactly as it is available for the rails controller hooks.
37
+ Both functions take exactly the same parameters.
38
+ The first is a DateTime describing the date of deprecation or sunset.
39
+ By default the deprecation or sunset is set for any action in the controller.
40
+ To limit this the `only:` parameter can be used exactly as it is available for the rails controller hooks.
41
+
42
+ If you want to make more information available to your users, the `link:` parameter must be specified with a percent encoded URL.
43
+ This URL will be part of the response's Link HTTP header with the relation `deprecation` or respectively `sunset`.
44
+
45
+ Example with deprecated and/or sunset `create` and `destroy` actions:
46
+ ```ruby
47
+ class ExampleController < ActionController::Base
48
+ deprecate_endpoint DateTime.new(2022, 07, 01, 12, 34, 56), only: [:create]
49
+ deprecate_endpoint DateTime.new(2022, 07, 01, 12, 34, 56), only: [:destroy], link: "https://github.com/Qurasoft"
50
+ sunset_endpoint DateTime.new(2023, 07, 01), only: [:destroy]
51
+
52
+ def index
53
+ render json: ['element1', 'element2']
54
+ end
55
+
56
+ def show
57
+ render json: 'element1'
58
+ end
59
+
60
+ def create
61
+ render json: 'newElement'
62
+ end
63
+
64
+ def update
65
+ render json: 'changedElement'
66
+ end
67
+
68
+ def destroy
69
+ head :no_content
70
+ end
71
+ end
72
+ ```
37
73
 
38
74
  ## Development
39
75
 
40
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
76
+ After checking out the repo, run `bin/setup` to install dependencies.
77
+ Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
41
78
 
42
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
79
+ To install this gem onto your local machine, run `bundle exec rake install`.
80
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
43
81
 
44
82
  ## Contributing
45
83
 
46
- Bug reports and pull requests are welcome on GitHub at https://github.com/qurasoft/rails_action_deprecation. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
84
+ Bug reports and pull requests are welcome on GitHub at https://github.com/qurasoft/rails_action_deprecation.
85
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
47
86
 
48
87
  ## License
49
88
 
@@ -3,21 +3,21 @@ module RailsActionDeprecation
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
- def deprecate_endpoint(datetime, only: nil)
6
+ def deprecate_endpoint(datetime, only: nil, link: nil)
7
7
  # Deliver the (draft) Deprecation HTTP header with the response
8
8
  # https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-deprecation-header
9
- deprecation 'Deprecation', datetime, only: only
9
+ deprecation 'Deprecation', datetime, only: only, link: link
10
10
  end
11
11
 
12
- def sunset_endpoint(datetime, only: nil)
12
+ def sunset_endpoint(datetime, only: nil, link: nil)
13
13
  # Deliver the Sunset HTTP header with the response
14
14
  # https://datatracker.ietf.org/doc/html/rfc8594
15
- deprecation 'Sunset', datetime, only: only
15
+ deprecation 'Sunset', datetime, only: only, link: link
16
16
  end
17
17
 
18
18
  protected
19
19
 
20
- def deprecation(header, datetime, only: nil)
20
+ def deprecation(header, datetime, only: nil, link: nil)
21
21
  after_action(only: only) do |controller|
22
22
  klass = controller.class
23
23
  user_agent = request.headers['User-Agent']
@@ -25,7 +25,18 @@ module RailsActionDeprecation
25
25
  # Log the deprecation
26
26
  ActiveSupport::Deprecation.warn("#{klass}##{method} deprecated endpoint (#{header.downcase} date #{datetime.iso8601}) has been called by #{user_agent}")
27
27
 
28
- response.headers[header] = datetime.httpdate
28
+ response.set_header header, datetime.httpdate
29
+
30
+ # Add a Link header with the correct relation if specified
31
+ if link.present?
32
+ link_header = "<#{link}>; rel=\"#{header.downcase}\""
33
+ # Append if a Link header is already present
34
+ if response.has_header? "Link"
35
+ response.set_header "Link", "#{response.get_header("Link")}, #{link_header}"
36
+ else
37
+ response.set_header "Link", link_header
38
+ end
39
+ end
29
40
  end
30
41
  end
31
42
  end
@@ -1,3 +1,3 @@
1
1
  module RailsActionDeprecation
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_action_deprecation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Keune
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-13 00:00:00.000000000 Z
11
+ date: 2022-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails