breezy 0.13.0 → 0.17.1

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/breezy.rb +3 -3
  3. data/lib/breezy/helpers.rb +523 -0
  4. data/lib/breezy/redirection.rb +30 -0
  5. data/lib/breezy/xhr_headers.rb +0 -10
  6. data/lib/generators/rails/breezy_generator.rb +12 -5
  7. data/lib/generators/rails/templates/_form.json.props +13 -0
  8. data/lib/generators/rails/templates/controller.rb.tt +0 -28
  9. data/lib/generators/rails/templates/edit.json.props +7 -12
  10. data/lib/generators/rails/templates/index.json.props +1 -2
  11. data/lib/generators/rails/templates/new.json.props +12 -3
  12. data/lib/generators/rails/templates/show.json.props +0 -2
  13. data/lib/generators/rails/templates/web/edit.html.erb +7 -0
  14. data/lib/generators/rails/templates/web/edit.jsx +21 -28
  15. data/lib/generators/rails/templates/web/index.html.erb +7 -0
  16. data/lib/generators/rails/templates/web/index.jsx +10 -7
  17. data/lib/generators/rails/templates/web/new.html.erb +7 -0
  18. data/lib/generators/rails/templates/web/new.jsx +18 -25
  19. data/lib/generators/rails/templates/web/show.html.erb +7 -0
  20. data/lib/generators/rails/templates/web/show.jsx +3 -4
  21. data/lib/install/templates/web/action_creators.js +14 -12
  22. data/lib/install/templates/web/actions.js +4 -1
  23. data/lib/install/templates/web/application.js +173 -47
  24. data/lib/install/templates/web/application.json.props +5 -2
  25. data/lib/install/templates/web/application_visit.js +65 -0
  26. data/lib/install/templates/web/initializer.rb +1 -0
  27. data/lib/install/templates/web/reducer.js +62 -9
  28. data/lib/install/web.rb +10 -28
  29. metadata +16 -13
  30. data/app/views/breezy/response.html.erb +0 -0
  31. data/lib/generators/rails/templates/web/base.jsx +0 -11
  32. data/lib/generators/rails/templates/web/form.jsx +0 -31
  33. data/test/breezy_test.rb +0 -121
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: breezy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johny Ho
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-20 00:00:00.000000000 Z
11
+ date: 2021-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.13.0
33
+ version: 0.17.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.13.0
40
+ version: 0.17.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: webpacker
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -156,33 +156,37 @@ executables: []
156
156
  extensions: []
157
157
  extra_rdoc_files: []
158
158
  files:
159
- - app/views/breezy/response.html.erb
160
159
  - lib/breezy.rb
161
160
  - lib/breezy/helpers.rb
161
+ - lib/breezy/redirection.rb
162
162
  - lib/breezy/x_domain_blocker.rb
163
163
  - lib/breezy/xhr_headers.rb
164
164
  - lib/breezy/xhr_url_for.rb
165
165
  - lib/generators/rails/breezy_generator.rb
166
166
  - lib/generators/rails/scaffold_controller_generator.rb
167
+ - lib/generators/rails/templates/_form.json.props
167
168
  - lib/generators/rails/templates/controller.rb.tt
168
169
  - lib/generators/rails/templates/edit.json.props
169
170
  - lib/generators/rails/templates/index.json.props
170
171
  - lib/generators/rails/templates/new.json.props
171
172
  - lib/generators/rails/templates/show.json.props
172
- - lib/generators/rails/templates/web/base.jsx
173
+ - lib/generators/rails/templates/web/edit.html.erb
173
174
  - lib/generators/rails/templates/web/edit.jsx
174
- - lib/generators/rails/templates/web/form.jsx
175
+ - lib/generators/rails/templates/web/index.html.erb
175
176
  - lib/generators/rails/templates/web/index.jsx
177
+ - lib/generators/rails/templates/web/new.html.erb
176
178
  - lib/generators/rails/templates/web/new.jsx
179
+ - lib/generators/rails/templates/web/show.html.erb
177
180
  - lib/generators/rails/templates/web/show.jsx
178
181
  - lib/install/templates/web/action_creators.js
179
182
  - lib/install/templates/web/actions.js
180
183
  - lib/install/templates/web/application.js
181
184
  - lib/install/templates/web/application.json.props
185
+ - lib/install/templates/web/application_visit.js
186
+ - lib/install/templates/web/initializer.rb
182
187
  - lib/install/templates/web/reducer.js
183
188
  - lib/install/web.rb
184
189
  - lib/tasks/install.rake
185
- - test/breezy_test.rb
186
190
  - test/engine_test.rb
187
191
  - test/helpers_test.rb
188
192
  - test/render_test.rb
@@ -191,7 +195,7 @@ homepage: https://github.com/jho406/breezy/
191
195
  licenses:
192
196
  - MIT
193
197
  metadata: {}
194
- post_install_message:
198
+ post_install_message:
195
199
  rdoc_options: []
196
200
  require_paths:
197
201
  - lib
@@ -206,8 +210,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
210
  - !ruby/object:Gem::Version
207
211
  version: '0'
208
212
  requirements: []
209
- rubygems_version: 3.0.3
210
- signing_key:
213
+ rubygems_version: 3.1.2
214
+ signing_key:
211
215
  specification_version: 4
212
216
  summary: Rails integration for BreezyJS
213
217
  test_files:
@@ -215,4 +219,3 @@ test_files:
215
219
  - test/helpers_test.rb
216
220
  - test/engine_test.rb
217
221
  - test/test_helper.rb
218
- - test/breezy_test.rb
File without changes
@@ -1,11 +0,0 @@
1
- import React from 'react'
2
- import {enhanceVisitWithBrowserBehavior} from '@jho406/breezy'
3
-
4
- export default class extends React.Component {
5
- constructor (props) {
6
- super(props)
7
- const visit = enhanceVisitWithBrowserBehavior(props.visit)
8
- this.enhancedVisit = visit.bind(this)
9
- }
10
- }
11
-
@@ -1,31 +0,0 @@
1
- import React from 'react'
2
- import { Formik, Form, Field } from 'formik';
3
-
4
- export default React.forwardRef(
5
- ({initialValues = {
6
- <%- attributes_list.select{|attr| attr != :id }.each do |attr| -%>
7
- <%=attr.camelize(:lower).to_s%>:'',
8
- <%- end -%>
9
- }, onSubmit}, ref) => {
10
- return (
11
- <Formik
12
- initialValues={initialValues}
13
- onSubmit={onSubmit}
14
- ref={ref}
15
- >
16
- {({ errors, touched, isSubmitting }) => (
17
- <Form>
18
- <%- attributes_list.select{|attr| attr != :id }.each do |attr| -%>
19
- <Field type="text" name="<%=attr.to_s%>" />
20
- {errors.<%=attr.camelize(:lower).to_s%> && touched.<%=attr.camelize(:lower).to_s%> && errors.<%=attr.camelize(:lower).to_s%>}
21
- <%- end -%>
22
-
23
- <button type="submit" disabled={isSubmitting}>
24
- Submit
25
- </button>
26
- </Form>
27
- )}
28
- </Formik>
29
- )
30
- }
31
- )
@@ -1,121 +0,0 @@
1
- require 'test_helper'
2
-
3
- class BreezyController < TestController
4
- def simple_action
5
- render inline: ''
6
- end
7
-
8
- def redirect_to_same_origin
9
- redirect_to "#{request.protocol}#{request.host}/path"
10
- end
11
-
12
- def redirect_to_different_host
13
- redirect_to "#{request.protocol}foo.#{request.host}/path"
14
- end
15
-
16
- def redirect_to_different_protocol
17
- redirect_to "#{request.protocol == 'http://' ? 'https://' : 'http://'}#{request.host}/path"
18
- end
19
-
20
- def redirect_to_back
21
- if Rails.version >= "5.0"
22
- redirect_back(fallback_location: '/')
23
- else
24
- redirect_to :back
25
- end
26
- end
27
-
28
- def redirect_to_unescaped_path
29
- redirect_to "#{request.protocol}#{request.host}/foo bar"
30
- end
31
- end
32
-
33
- class BreezyTest < ActionController::TestCase
34
- tests BreezyController
35
-
36
- test "request referer returns xhr referer or standard referer" do
37
- @request.env['HTTP_REFERER'] = 'referer'
38
- assert_equal 'referer', @request.referer
39
-
40
- @request.env['HTTP_X_XHR_REFERER'] = 'xhr-referer'
41
- assert_equal 'xhr-referer', @request.referer
42
- end
43
-
44
- test "url for with back uses xhr referer when available" do
45
- @request.env['HTTP_REFERER'] = 'referer'
46
- assert_equal 'referer', @controller.view_context.url_for(:back)
47
-
48
- @request.env['HTTP_X_XHR_REFERER'] = 'xhr-referer'
49
- assert_equal 'xhr-referer', @controller.view_context.url_for(:back)
50
- end
51
-
52
- test "redirect to back uses xhr referer when available" do
53
- @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
54
- @request.headers['X-BREEZY-REQUEST'] = 't'
55
-
56
- @request.env['HTTP_REFERER'] = 'http://test.host/referer'
57
- get :redirect_to_back
58
- assert_response :ok
59
- assert_equal @response.headers['X-BREEZY-LOCATION'], 'http://test.host/referer'
60
-
61
- @request.env['HTTP_X_XHR_REFERER'] = 'http://test.host/referer'
62
- get :redirect_to_back
63
- assert_response :ok
64
- assert_equal @response.headers['X-BREEZY-LOCATION'], 'http://test.host/referer'
65
- end
66
-
67
- test "sets X-BREEZY-LOCATION header on redirect requests coming from breezy" do
68
- @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
69
- @request.headers['X-BREEZY-REQUEST'] = 't'
70
-
71
- get :redirect_to_same_origin
72
- get :simple_action
73
- assert_nil @response.headers['X-BREEZY-LOCATION']
74
-
75
- @request.env['HTTP_X_XHR_REFERER'] = 'http://test.host/'
76
- get :redirect_to_same_origin
77
- assert_equal 'http://test.host/path', @response.headers['X-BREEZY-LOCATION']
78
- end
79
-
80
- test "changes status to 403 on breezy requests redirecting to different origin" do
81
- @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
82
- @request.headers['X-BREEZY-REQUEST'] = 't'
83
-
84
- get :redirect_to_different_host
85
- assert_response :ok
86
- assert @response.headers['X-BREEZY-LOCATION']
87
-
88
- get :redirect_to_different_protocol
89
- assert_response :ok
90
- assert @response.headers['X-BREEZY-LOCATION']
91
-
92
- @request.env['HTTP_X_XHR_REFERER'] = 'http://test.host'
93
- get :redirect_to_different_host
94
- assert_response :forbidden
95
-
96
- get :redirect_to_different_protocol
97
- assert_response :forbidden
98
-
99
- get :redirect_to_same_origin
100
- assert_response :ok
101
- assert @response.headers['X-BREEZY-LOCATION']
102
- end
103
-
104
- test "handles invalid xhr referer on redirection" do
105
- @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
106
- @request.headers['X-BREEZY-REQUEST'] = 't'
107
- @request.env['HTTP_X_XHR_REFERER'] = ':'
108
- get :redirect_to_same_origin
109
- assert_response :ok
110
- assert @response.headers['X-BREEZY-LOCATION']
111
- end
112
-
113
- test "handles unescaped same origin location on redirection" do
114
- @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
115
- @request.headers['X-BREEZY-REQUEST'] = 't'
116
- @request.env['HTTP_X_XHR_REFERER'] = 'http://test.host/'
117
- get :redirect_to_unescaped_path
118
- assert_response :ok
119
- assert @response.headers['X-BREEZY-LOCATION']
120
- end
121
- end