controller-testing-kwargs 0.1.0 → 1.0.0

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
  SHA1:
3
- metadata.gz: 1cfbdf0a08f8925a6725626f947e766e79075ec8
4
- data.tar.gz: dd0db95be2052e95f41bd762b092a60104b542f5
3
+ metadata.gz: d73c4de37761656efc91f3e08bb894ed62a009da
4
+ data.tar.gz: f9a4c5810fba29f702bd104c094090f7be4cda49
5
5
  SHA512:
6
- metadata.gz: 7ac2b59d33909eaf0881d465493bef526bf942a0105ab29ba150b04ff47a022c5e05df76b7df16c00a0ef9b4f7ffdddc228823a271a3016701554af8a15311f9
7
- data.tar.gz: 122f134d856a219171d7f57680d298376c4370cbfcd0631f79fe1841ebe929579f4234c2f5c8456636aeeac2a672222f1a96f02f1d8f90eceac65ddcb2c524cc
6
+ metadata.gz: 61329363599e362de4b82e85e47aea47029e6fc9eef263e074c973e6c4f85f5352724cf09ecb3eab32bbc9aac224ca08d02b4dfa132581aeada636b49429a0c5
7
+ data.tar.gz: 1bd91c023b29ec0d0da0e41222866dd44a5e343b75015115239601c7bd96026b651c576d7346bc4e161d0a52eea6d7d57f55d1386f9a5a4cbce4da3708112db8
data/README.md CHANGED
@@ -7,7 +7,7 @@ Backport Rails 5 style controller/integration testing syntax using kwargs to Rai
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'controller-testing-kwargs'
10
+ gem 'controller-testing-kwargs', require: false
11
11
  ```
12
12
 
13
13
  And then execute:
@@ -18,6 +18,12 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install controller-testing-kwargs
20
20
 
21
+ At the appropriate spot in your `test_helper.rb`, `spec_helper.rb`, or similar file add the following line:
22
+
23
+ ```ruby
24
+ require 'controller/testing/kwargs'
25
+ ```
26
+
21
27
  ## Usage
22
28
 
23
29
  Allows you to simultaneously use the old and new syntax while making HTTP calls to your controllers
@@ -37,6 +43,26 @@ get #{url_or_action}, xhr: true, params: params, headers: headers
37
43
 
38
44
  should work while you transition your test suite.
39
45
 
46
+ ## Modes of Operation
47
+
48
+ Deprecation warnings will appear by default when executing statements that
49
+ utilize the old method. Deprecation warnings can be disabled by adding the
50
+ following to your appropriate test helper:
51
+
52
+ ```ruby
53
+ Controller::Testing::Kwargs.ignore
54
+ ```
55
+
56
+ The above is useful if you simply want to support the Rails 5 syntax. If
57
+ instead you want to prevent new uses of the old syntax, add the following:
58
+
59
+ ```ruby
60
+ Controller::Testing::Kwargs.raise_exception
61
+ ```
62
+
63
+ The above is useful when you're done coverting the syntax but are not yet ready
64
+ to make the switch to Rails 5.
65
+
40
66
  ## Development
41
67
 
42
68
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -4,12 +4,43 @@ require "rails/test_help"
4
4
  module Controller
5
5
  module Testing
6
6
  module Kwargs
7
+ ERROR_MESSAGE = 'Please use Rails 5 syntax. See: https://github.com/appfolio/controller-testing-kwargs'
8
+
9
+ class <<self
10
+ @on_old = :deprecate
11
+
12
+ attr_reader :on_old
13
+
14
+ def deprecate
15
+ @on_old = :warn
16
+ end
17
+
18
+ def deprecated?
19
+ @on_old == :warn
20
+ end
21
+
22
+ def ignore
23
+ @on_old = :ignore
24
+ end
25
+
26
+ def raise_exception
27
+ @on_old = :raise
28
+ end
29
+
30
+ def raise_exception?
31
+ @on_old == :raise
32
+ end
33
+ end
34
+
7
35
  %i[get post patch put head delete].each do |method|
8
36
  define_method(method) do |action, *args|
9
37
  request_params = args[0]&.dup
10
38
  request_headers = args[1]&.dup
39
+
40
+ old_method = false
41
+ xhr = false
11
42
  if request_params && request_params.is_a?(Hash)
12
- xhr = request_params.delete(:xhr) || false
43
+ xhr = request_params.delete(:xhr)
13
44
  if request_params[:params].is_a?(Hash)
14
45
  request_params.merge!(request_params.delete(:params) || {})
15
46
  request_headers = request_params.delete(:headers) || request_headers
@@ -19,12 +50,34 @@ module Controller
19
50
  elsif request_params[:headers]
20
51
  request_headers = request_params[:headers]
21
52
  request_params = nil
53
+ else
54
+ old_method = true
55
+ end
56
+ elsif request_headers.is_a?(Hash)
57
+ old_method = true
58
+ end
59
+
60
+ raise Exception, ERROR_MESSAGE if Controller::Testing::Kwargs.raise_exception? && old_method
61
+
62
+ if xhr
63
+ previous_value = Controller::Testing::Kwargs.on_old
64
+ Controller::Testing::Kwargs.ignore
65
+ begin
66
+ return xhr(method, action, request_params, request_headers)
67
+ ensure
68
+ Controller::Testing::Kwargs.instance_variable_set(:@on_old, previous_value)
22
69
  end
23
- return xhr(method, action, request_params, request_headers) if xhr
24
70
  end
71
+ ActiveSupport::Deprecation.warn(ERROR_MESSAGE) if Controller::Testing::Kwargs.deprecated?
25
72
  super(action, request_params, request_headers)
26
73
  end
27
74
  end
75
+
76
+ def xhr(request_method, action, parameters = nil, *args)
77
+ raise Exception ERROR_MESSAGE if Controller::Testing::Kwargs.raise_exception?
78
+ ActiveSupport::Deprecation.warn(ERROR_MESSAGE) if Controller::Testing::Kwargs.deprecated?
79
+ super(request_method, action, parameters, *args)
80
+ end
28
81
  end
29
82
  end
30
83
  end
@@ -1,7 +1,7 @@
1
1
  module Controller
2
2
  module Testing
3
3
  module Kwargs
4
- VERSION = "0.1.0"
4
+ VERSION = "1.0.0"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: controller-testing-kwargs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chad Shaffer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-03 00:00:00.000000000 Z
11
+ date: 2017-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler