breezy 0.13.0 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
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