breezy 0.12.0 → 0.13.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 +5 -5
- data/lib/breezy.rb +4 -7
- data/lib/breezy/helpers.rb +21 -14
- data/lib/generators/rails/breezy_generator.rb +2 -2
- data/lib/generators/rails/templates/controller.rb.tt +28 -3
- data/lib/generators/rails/templates/{edit.js.props → edit.json.props} +4 -1
- data/lib/generators/rails/templates/{index.js.props → index.json.props} +0 -0
- data/lib/generators/rails/templates/new.json.props +6 -0
- data/lib/generators/rails/templates/{show.js.props → show.json.props} +0 -0
- data/lib/install/templates/web/application.js +2 -2
- data/lib/install/templates/web/application.json.props +23 -0
- data/lib/install/web.rb +22 -42
- data/lib/tasks/install.rake +11 -1
- data/test/breezy_test.rb +1 -5
- data/test/helpers_test.rb +9 -17
- data/test/render_test.rb +19 -95
- data/test/test_helper.rb +1 -1
- metadata +15 -21
- data/lib/breezy/configuration.rb +0 -35
- data/lib/breezy/render.rb +0 -37
- data/lib/generators/rails/templates/new.js.props +0 -4
- data/lib/install/templates/web/babelrc +0 -35
- data/lib/install/templates/web/initializer.rb +0 -15
- data/test/configuration_test.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fd987af4f1d0ee06d70daa8e0c0b0610a909d61dfbabdb1271e1bbe6e8b32d5d
|
4
|
+
data.tar.gz: fd191505d7d3af65c6c462f675206cbff52464bee535082498dd79bb4251f339
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e064246ef16613bf7bbcf31e29bda96162c0bd68e9f542fbd91a5862ce0ddc35b409b1edb142668c488fbde4b7dc7d6e227ba4301ad72c7b36897bc8885a7163
|
7
|
+
data.tar.gz: de7cba9c77dcc53fad1408d0d06aab6683b4c59718d3f91e56c5672839cbe8110cf04121a3f5b9731093342b3943231252b9556055749e022f1745001364b21c
|
data/lib/breezy.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'breezy/xhr_headers'
|
2
2
|
require 'breezy/xhr_url_for'
|
3
3
|
require 'breezy/x_domain_blocker'
|
4
|
-
require 'breezy/render'
|
5
4
|
require 'breezy/helpers'
|
6
|
-
require '
|
7
|
-
require 'breezy_template'
|
5
|
+
require 'props_template'
|
8
6
|
|
9
7
|
module Breezy
|
10
8
|
module Controller
|
11
|
-
include XHRHeaders, XDomainBlocker,
|
9
|
+
include XHRHeaders, XDomainBlocker, Helpers
|
12
10
|
|
13
11
|
def self.included(base)
|
14
12
|
if base.respond_to?(:before_action)
|
@@ -20,9 +18,8 @@ module Breezy
|
|
20
18
|
end
|
21
19
|
|
22
20
|
if base.respond_to?(:helper_method)
|
23
|
-
base.helper_method :
|
24
|
-
base.helper_method :
|
25
|
-
base.helper_method :breezy_filter
|
21
|
+
base.helper_method :param_to_search_path
|
22
|
+
base.helper_method :search_path_to_camelized_param
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
data/lib/breezy/helpers.rb
CHANGED
@@ -1,22 +1,29 @@
|
|
1
1
|
module Breezy
|
2
2
|
module Helpers
|
3
|
-
def
|
4
|
-
if
|
5
|
-
|
6
|
-
|
3
|
+
def param_to_search_path(param)
|
4
|
+
if param
|
5
|
+
param.gsub(/[^\da-zA-Z\_\=\.]+/, '')
|
6
|
+
.gsub(/\.+/, '.')
|
7
|
+
.split('.')
|
8
|
+
.map do |part|
|
9
|
+
if part =~ /^-?[0-9]+$/
|
10
|
+
part.to_i
|
11
|
+
else
|
12
|
+
part
|
13
|
+
end
|
14
|
+
end
|
7
15
|
end
|
8
16
|
end
|
9
17
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
18
|
+
def search_path_to_camelized_param(path)
|
19
|
+
path.map do |part|
|
20
|
+
if part.include? '='
|
21
|
+
key, rest = part.split('=')
|
22
|
+
[key.camelize(:lower), rest].join('=')
|
23
|
+
else
|
24
|
+
part.camelize(:lower)
|
25
|
+
end
|
26
|
+
end.join('.')
|
20
27
|
end
|
21
28
|
end
|
22
29
|
end
|
@@ -48,7 +48,7 @@ module Rails
|
|
48
48
|
"\nimport #{component_name} from 'views/#{controller_file_path}/#{action}'"
|
49
49
|
end
|
50
50
|
|
51
|
-
inject_into_file app_js, after: 'const
|
51
|
+
inject_into_file app_js, after: 'const identifierToComponentMapping = {' do
|
52
52
|
"\n '#{[controller_file_path, action].join('/')}': #{component_name},"
|
53
53
|
end
|
54
54
|
end
|
@@ -62,7 +62,7 @@ module Rails
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def filename_with_extensions(name)
|
65
|
-
[name, :
|
65
|
+
[name, :json, :props] * '.'
|
66
66
|
end
|
67
67
|
|
68
68
|
def filename_with_jsx_extensions(name)
|
@@ -5,26 +5,51 @@ require_dependency "<%= namespaced_path %>/application_controller"
|
|
5
5
|
<% module_namespacing do -%>
|
6
6
|
class <%= controller_class_name %>Controller < ApplicationController
|
7
7
|
before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy]
|
8
|
-
# `use_breezy` enables breezy functionality
|
9
|
-
# on application.html.erb
|
10
|
-
before_action :use_breezy
|
11
8
|
|
12
9
|
# GET <%= route_url %>
|
13
10
|
def index
|
14
11
|
@<%= plural_table_name %> = <%= orm_class.all(class_name) %>
|
12
|
+
respond_to do |format|
|
13
|
+
format.html {
|
14
|
+
@initial_state = render_to_string(formats: [:json], layout: true)
|
15
|
+
render inline: '', layout: true
|
16
|
+
}
|
17
|
+
format.json { render layout: true }
|
18
|
+
end
|
15
19
|
end
|
16
20
|
|
17
21
|
# GET <%= route_url %>/1
|
18
22
|
def show
|
23
|
+
respond_to do |format|
|
24
|
+
format.html {
|
25
|
+
@initial_state = render_to_string(formats: [:json], layout: true)
|
26
|
+
render inline: '', layout: true
|
27
|
+
}
|
28
|
+
format.json { render layout: true }
|
29
|
+
end
|
19
30
|
end
|
20
31
|
|
21
32
|
# GET <%= route_url %>/new
|
22
33
|
def new
|
23
34
|
@<%= singular_table_name %> = <%= orm_class.build(class_name) %>
|
35
|
+
respond_to do |format|
|
36
|
+
format.html {
|
37
|
+
@initial_state = render_to_string(formats: [:json], layout: true)
|
38
|
+
render inline: '', layout: true
|
39
|
+
}
|
40
|
+
format.json { render layout: true }
|
41
|
+
end
|
24
42
|
end
|
25
43
|
|
26
44
|
# GET <%= route_url %>/1/edit
|
27
45
|
def edit
|
46
|
+
respond_to do |format|
|
47
|
+
format.html {
|
48
|
+
@initial_state = render_to_string(formats: [:json], layout: true)
|
49
|
+
render inline: '', layout: true
|
50
|
+
}
|
51
|
+
format.json { render layout: true }
|
52
|
+
end
|
28
53
|
end
|
29
54
|
|
30
55
|
# POST <%= route_url %>
|
@@ -1,5 +1,8 @@
|
|
1
1
|
json.flash flash.to_h
|
2
|
-
|
2
|
+
|
3
|
+
if @<%= singular_table_name %>.errors
|
4
|
+
json.errors @<%= singular_table_name %>.errors.to_h
|
5
|
+
end
|
3
6
|
|
4
7
|
<%- attributes_list_with_timestamps.each do |attr| -%>
|
5
8
|
json.<%=attr%> @<%= singular_table_name %>.<%=attr%>
|
File without changes
|
File without changes
|
@@ -12,7 +12,7 @@ import applicationReducer from './reducer'
|
|
12
12
|
|
13
13
|
// Mapping between your props template to Component
|
14
14
|
// e.g {'posts/new': PostNew}
|
15
|
-
const
|
15
|
+
const identifierToComponentMapping = {
|
16
16
|
}
|
17
17
|
|
18
18
|
const history = createHistory({})
|
@@ -60,5 +60,5 @@ class App extends React.Component {
|
|
60
60
|
}
|
61
61
|
|
62
62
|
document.addEventListener("DOMContentLoaded", function() {
|
63
|
-
render(<App mapping={
|
63
|
+
render(<App mapping={identifierToComponentMapping}/>, document.getElementById('app'))
|
64
64
|
})
|
@@ -0,0 +1,23 @@
|
|
1
|
+
path = param_to_search_path(params[:bzq])
|
2
|
+
|
3
|
+
json.data(search: path) do
|
4
|
+
yield json
|
5
|
+
end
|
6
|
+
|
7
|
+
json.component_identifier "#{params[:controller]}/#{params[:action]}"
|
8
|
+
json.defers json.deferred!
|
9
|
+
json.fragments json.fragments!
|
10
|
+
json.assets [
|
11
|
+
asset_pack_path('application.js'),
|
12
|
+
asset_path('application.css')
|
13
|
+
]
|
14
|
+
|
15
|
+
if protect_against_forgery?
|
16
|
+
json.csrf_token form_authenticity_token
|
17
|
+
end
|
18
|
+
|
19
|
+
if path
|
20
|
+
json.action 'graft'
|
21
|
+
json.path search_path_to_camelized_param(path)
|
22
|
+
end
|
23
|
+
|
data/lib/install/web.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "webpacker/configuration"
|
2
2
|
|
3
|
-
babelrc = Rails.root.join(".babelrc")
|
4
3
|
babel_config = Rails.root.join("babel.config.js")
|
5
4
|
|
6
5
|
def append_js_tags
|
@@ -8,7 +7,7 @@ def append_js_tags
|
|
8
7
|
js_tag = <<-JS_TAG
|
9
8
|
|
10
9
|
<script type="text/javascript">
|
11
|
-
window.BREEZY_INITIAL_PAGE_STATE=<%=
|
10
|
+
window.BREEZY_INITIAL_PAGE_STATE=<%= @initial_state.html_safe %>;
|
12
11
|
</script>
|
13
12
|
JS_TAG
|
14
13
|
|
@@ -21,6 +20,7 @@ def append_js_tags
|
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
23
|
+
#TODO: add member_key
|
24
24
|
def add_member_methods
|
25
25
|
inject_into_file "app/models/application_record.rb", after: "class ApplicationRecord < ActiveRecord::Base\n" do
|
26
26
|
<<-RUBY
|
@@ -29,51 +29,31 @@ def add_member_methods
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def self.member_by(attr, value)
|
32
|
-
find_by(Hash[attr,
|
32
|
+
find_by(Hash[attr, value])
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.member_key
|
36
|
+
"id"
|
33
37
|
end
|
34
38
|
|
35
39
|
RUBY
|
36
40
|
end
|
37
41
|
end
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
"javascript": "./app/javascript"
|
43
|
+
say "Copying module-resolver preset to your babel.config.js"
|
44
|
+
resolver_snippet = <<~JAVASCRIPT
|
45
|
+
[
|
46
|
+
require('babel-plugin-module-resolver').default, {
|
47
|
+
"root": ["./app"],
|
48
|
+
"alias": {
|
49
|
+
"views": "./app/views",
|
50
|
+
"components": "./app/components",
|
51
|
+
"javascript": "./app/javascript"
|
52
|
+
}
|
50
53
|
}
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
File.open(babelrc, "w") do |f|
|
56
|
-
f.puts JSON.pretty_generate(react_babelrc)
|
57
|
-
end
|
58
|
-
elsif File.exist?(babel_config)
|
59
|
-
say "Copying module-resolver preset to your babel.config.js"
|
60
|
-
resolver_snippet = <<~PLUGIN
|
61
|
-
[
|
62
|
-
require('babel-plugin-module-resolver').default, {
|
63
|
-
"root": ["./app"],
|
64
|
-
"alias": {
|
65
|
-
"views": "./app/views",
|
66
|
-
"components": "./app/components",
|
67
|
-
"javascript": "./app/javascript"
|
68
|
-
}
|
69
|
-
}
|
70
|
-
],
|
71
|
-
PLUGIN
|
72
|
-
insert_into_file "babel.config.js", resolver_snippet, after: /plugins: \[\n/
|
73
|
-
else
|
74
|
-
say "Copying .babelrc to app root directory"
|
75
|
-
copy_file "#{__dir__}/templates/web/babelrc", ".babelrc"
|
76
|
-
end
|
54
|
+
],
|
55
|
+
JAVASCRIPT
|
56
|
+
insert_into_file "babel.config.js", resolver_snippet, after: /plugins: \[\n/
|
77
57
|
|
78
58
|
say "Copying application.js file to #{Webpacker.config.source_entry_path}"
|
79
59
|
copy_file "#{__dir__}/templates/web/application.js", "#{Webpacker.config.source_entry_path}/application.js"
|
@@ -87,8 +67,8 @@ copy_file "#{__dir__}/templates/web/action_creators.js", "#{Webpacker.config.sou
|
|
87
67
|
say "Copying actions.js file to #{Webpacker.config.source_entry_path}"
|
88
68
|
copy_file "#{__dir__}/templates/web/actions.js", "#{Webpacker.config.source_entry_path}/actions.js"
|
89
69
|
|
90
|
-
say "Copying
|
91
|
-
copy_file "#{__dir__}/templates/web/
|
70
|
+
say "Copying application.json.props"
|
71
|
+
copy_file "#{__dir__}/templates/web/application.json.props", "app/views/layouts/application.json.props"
|
92
72
|
|
93
73
|
say "Appending js tags to your application.html.erb"
|
94
74
|
append_js_tags
|
data/lib/tasks/install.rake
CHANGED
@@ -10,6 +10,16 @@ namespace :breezy do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
desc "Verifies if any version of react is in package.json"
|
14
|
+
task :verify_react do
|
15
|
+
package_json = JSON.parse(File.read(Rails.root.join("package.json")))
|
16
|
+
|
17
|
+
if package_json['dependencies']['react'].nil?
|
18
|
+
$stderr.puts "React not installed. Did you run `rails webpacker:install:react`?"
|
19
|
+
$stderr.puts "Exiting!" && exit!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
13
23
|
desc "Verifies webpacker has been installed"
|
14
24
|
task "verify_webpacker" do
|
15
25
|
begin
|
@@ -23,7 +33,7 @@ namespace :breezy do
|
|
23
33
|
|
24
34
|
namespace :install do
|
25
35
|
desc "Install everything needed for breezy web"
|
26
|
-
task 'web' => ["breezy:verify_webpacker", "webpacker:verify_install"] do
|
36
|
+
task 'web' => ["breezy:verify_webpacker", "webpacker:verify_install", "breezy:verify_react"] do
|
27
37
|
template = File.expand_path("../install/web.rb", __dir__)
|
28
38
|
exec "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{template}"
|
29
39
|
end
|
data/test/breezy_test.rb
CHANGED
data/test/helpers_test.rb
CHANGED
@@ -2,30 +2,22 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class HelpersTest < ActiveSupport::TestCase
|
4
4
|
include Breezy::Helpers
|
5
|
-
attr_reader :request
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
def initialize(params = {})
|
10
|
-
@params = params
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
test 'breezy_filter returns a valid bzq param' do
|
15
|
-
@request = Request.new({:bzq => 'foo.bar.baz_baz'})
|
6
|
+
test 'clean_bzq returns nil if qry is nil' do
|
7
|
+
qry = nil
|
16
8
|
|
17
|
-
|
9
|
+
assert_nil param_to_search_path(qry)
|
18
10
|
end
|
19
11
|
|
20
|
-
test '
|
21
|
-
|
12
|
+
test 'clean_bzq returns a refined qry' do
|
13
|
+
qry = 'foo...bar/?)()-'
|
22
14
|
|
23
|
-
assert_equal
|
15
|
+
assert_equal param_to_search_path(qry), ['foo', 'bar']
|
24
16
|
end
|
25
17
|
|
26
|
-
test '
|
27
|
-
|
18
|
+
test 'camelize_path' do
|
19
|
+
path = ['foo_bar', 'foo_bar=1', 'foo_baz_roo']
|
28
20
|
|
29
|
-
|
21
|
+
assert_equal search_path_to_camelized_param(path), 'fooBar.fooBar=1.fooBazRoo'
|
30
22
|
end
|
31
23
|
end
|
data/test/render_test.rb
CHANGED
@@ -4,14 +4,14 @@ class RenderController < TestController
|
|
4
4
|
require 'action_view/testing/resolvers'
|
5
5
|
|
6
6
|
append_view_path(ActionView::FixtureResolver.new(
|
7
|
-
'render/
|
8
|
-
'render/
|
9
|
-
'
|
10
|
-
'
|
7
|
+
'render/simple_render_with_breezy.json.props' => 'json.author "john smith"',
|
8
|
+
'render/simple_render_with_breezy_with_bad_layout.json.props' => 'json.author "john smith"',
|
9
|
+
'layouts/application.json.props' => 'json.data {yield json}',
|
10
|
+
'layouts/does_not_exist.html.erb' => '',
|
11
11
|
'layouts/application.html.erb' => <<~HTML
|
12
12
|
<html>
|
13
13
|
<head>
|
14
|
-
<script><%=
|
14
|
+
<script><%= @initial_state.strip.html_safe %></script>
|
15
15
|
</head>
|
16
16
|
<body><%=yield%></body>
|
17
17
|
</html>
|
@@ -20,21 +20,18 @@ class RenderController < TestController
|
|
20
20
|
|
21
21
|
layout 'application'
|
22
22
|
|
23
|
-
before_action :use_breezy, only: [:simple_render_with_breezy, :implied_render_with_breezy]
|
24
|
-
|
25
23
|
def render_action
|
26
24
|
render :action
|
27
25
|
end
|
28
26
|
|
29
27
|
def simple_render_with_breezy
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
def implied_render_with_breezy
|
28
|
+
@initial_state = render_to_string(formats: [:json], layout: true)
|
29
|
+
render inline: '', layout: true
|
34
30
|
end
|
35
31
|
|
36
|
-
def
|
37
|
-
|
32
|
+
def simple_render_with_breezy_with_bad_layout
|
33
|
+
@initial_state = render_to_string(formats: [:json], layout: 'does_not_exist')
|
34
|
+
render inline: '', layout: true
|
38
35
|
end
|
39
36
|
|
40
37
|
def form_authenticity_token
|
@@ -50,108 +47,35 @@ class RenderTest < ActionController::TestCase
|
|
50
47
|
if Rails.version >= '6'
|
51
48
|
# In rails 6, the fixture orders the templates based on their appearance in the handler
|
52
49
|
# This doesn't happen IRL, so I'm going to explicitly set the handler here.
|
53
|
-
#
|
50
|
+
#
|
54
51
|
# Note that the original is the following
|
55
52
|
# @controller.lookup_context.handlers = [:raw, :breezy, :erb, :js, :html, :builder, :ruby]
|
56
|
-
@controller.lookup_context.handlers = [:
|
53
|
+
@controller.lookup_context.handlers = [:props, :erb]
|
57
54
|
end
|
58
|
-
|
59
|
-
Breezy.configuration.track_sprockets_assets = ['app.js']
|
60
|
-
Breezy.configuration.track_pack_assets = ['app.js']
|
61
|
-
end
|
62
|
-
|
63
|
-
teardown do
|
64
|
-
Breezy.configuration.track_sprockets_assets = []
|
65
|
-
Breezy.configuration.track_pack_assets = []
|
66
|
-
end
|
67
|
-
|
68
|
-
test "render action via get" do
|
69
|
-
get :render_action
|
70
|
-
assert_normal_render 'john smith'
|
71
55
|
end
|
72
56
|
|
73
57
|
test "simple render with breezy" do
|
74
58
|
get :simple_render_with_breezy
|
75
|
-
assert_breezy_html({author: "john smith"}, screen: 'render/action')
|
76
|
-
end
|
77
|
-
|
78
|
-
test "implied render with breezy" do
|
79
|
-
get :implied_render_with_breezy
|
80
|
-
assert_breezy_html({author: "john smith"}, screen: 'render/implied_render_with_breezy')
|
81
|
-
end
|
82
|
-
|
83
|
-
test "simple render with breezy via get js" do
|
84
|
-
@request.accept = 'application/javascript'
|
85
|
-
get :simple_render_with_breezy
|
86
|
-
assert_breezy_js({author: "john smith"})
|
87
|
-
end
|
88
|
-
|
89
|
-
test "render action via xhr and get js" do
|
90
|
-
@request.accept = 'application/javascript'
|
91
|
-
get :simple_render_with_breezy, xhr: true
|
92
|
-
assert_breezy_js({author: "john smith"})
|
93
|
-
end
|
94
|
-
|
95
|
-
test "render with breezy false" do
|
96
|
-
get :render_action_with_breezy_false
|
97
|
-
assert_normal_render("john smith")
|
98
|
-
end
|
99
|
-
|
100
|
-
test "render with breezy false via xhr get" do
|
101
|
-
@request.accept = 'text/html'
|
102
|
-
get :render_action_with_breezy_false, xhr: true
|
103
|
-
assert_normal_render("john smith")
|
104
|
-
end
|
105
|
-
|
106
|
-
test "render action via xhr and put" do
|
107
|
-
@request.accept = 'text/html'
|
108
|
-
put :render_action, xhr: true
|
109
|
-
assert_normal_render 'john smith'
|
110
|
-
end
|
111
59
|
|
112
|
-
private
|
113
|
-
|
114
|
-
def assert_breezy_html(content, opts={})
|
115
60
|
assert_response 200
|
116
|
-
|
117
61
|
rendered = <<~HTML
|
118
62
|
<html>
|
119
63
|
<head>
|
120
|
-
<script>
|
64
|
+
<script>{"data":{"author":"john smith"}}</script>
|
121
65
|
</head>
|
122
66
|
<body></body>
|
123
67
|
</html>
|
124
68
|
HTML
|
125
69
|
|
126
70
|
assert_equal rendered, @response.body
|
127
|
-
assert_equal 'text/html', @response.
|
128
|
-
end
|
129
|
-
|
130
|
-
def assert_breezy_js(content)
|
131
|
-
assert_response 200
|
132
|
-
assert_equal '(function(){var fragments={};var lastFragmentName;var lastFragmentPath;var cache={};var defers=[];return ({"data":' + content.to_json + ',"screen":"render/action","fragments":fragments,"privateOpts":{"csrfToken":"secret","assets":["/app.js"],"lastFragmentName":lastFragmentName,"lastFragmentPath":lastFragmentPath,"defers":defers}});})()', @response.body
|
133
|
-
assert_equal 'text/javascript', @response.content_type
|
134
|
-
end
|
135
|
-
|
136
|
-
def assert_breezy_replace_js(content)
|
137
|
-
assert_response 200
|
138
|
-
assert_equal 'Breezy.replace((function(){return ({"data":' + content.to_json + ',"csrfToken":"secret","assets":["/app.js"]});})());', @response.body
|
139
|
-
assert_equal 'text/javascript', @response.content_type
|
71
|
+
assert_equal 'text/html', @response.media_type
|
140
72
|
end
|
141
73
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
<html>
|
147
|
-
<head>
|
148
|
-
<script></script>
|
149
|
-
</head>
|
150
|
-
<body>#{content}</body>
|
151
|
-
</html>
|
152
|
-
HTML
|
74
|
+
test "simple render when the layout doesn't exist" do
|
75
|
+
err = assert_raise ActionView::MissingTemplate do |e|
|
76
|
+
get :simple_render_with_breezy_with_bad_layout
|
77
|
+
end
|
153
78
|
|
154
|
-
assert_equal
|
155
|
-
assert_equal 'text/html', @response.content_type
|
79
|
+
assert_equal(true, err.message.starts_with?('Missing template layouts/does_not_exist with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:props, :erb]}.'))
|
156
80
|
end
|
157
81
|
end
|
data/test/test_helper.rb
CHANGED
@@ -8,7 +8,7 @@ require 'active_record'
|
|
8
8
|
require 'active_support/testing/autorun'
|
9
9
|
require 'active_support/test_case'
|
10
10
|
|
11
|
-
require '
|
11
|
+
require 'props_template'
|
12
12
|
|
13
13
|
ActiveSupport::TestCase.test_order = :random if ActiveSupport::TestCase.respond_to?(:test_order=)
|
14
14
|
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
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.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johny Ho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 6.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 6.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: props_template
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.13.0
|
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.
|
40
|
+
version: 0.13.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: webpacker
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '6.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '6.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,19 +158,17 @@ extra_rdoc_files: []
|
|
158
158
|
files:
|
159
159
|
- app/views/breezy/response.html.erb
|
160
160
|
- lib/breezy.rb
|
161
|
-
- lib/breezy/configuration.rb
|
162
161
|
- lib/breezy/helpers.rb
|
163
|
-
- lib/breezy/render.rb
|
164
162
|
- lib/breezy/x_domain_blocker.rb
|
165
163
|
- lib/breezy/xhr_headers.rb
|
166
164
|
- lib/breezy/xhr_url_for.rb
|
167
165
|
- lib/generators/rails/breezy_generator.rb
|
168
166
|
- lib/generators/rails/scaffold_controller_generator.rb
|
169
167
|
- lib/generators/rails/templates/controller.rb.tt
|
170
|
-
- lib/generators/rails/templates/edit.
|
171
|
-
- lib/generators/rails/templates/index.
|
172
|
-
- lib/generators/rails/templates/new.
|
173
|
-
- lib/generators/rails/templates/show.
|
168
|
+
- lib/generators/rails/templates/edit.json.props
|
169
|
+
- lib/generators/rails/templates/index.json.props
|
170
|
+
- lib/generators/rails/templates/new.json.props
|
171
|
+
- lib/generators/rails/templates/show.json.props
|
174
172
|
- lib/generators/rails/templates/web/base.jsx
|
175
173
|
- lib/generators/rails/templates/web/edit.jsx
|
176
174
|
- lib/generators/rails/templates/web/form.jsx
|
@@ -180,13 +178,11 @@ files:
|
|
180
178
|
- lib/install/templates/web/action_creators.js
|
181
179
|
- lib/install/templates/web/actions.js
|
182
180
|
- lib/install/templates/web/application.js
|
183
|
-
- lib/install/templates/web/
|
184
|
-
- lib/install/templates/web/initializer.rb
|
181
|
+
- lib/install/templates/web/application.json.props
|
185
182
|
- lib/install/templates/web/reducer.js
|
186
183
|
- lib/install/web.rb
|
187
184
|
- lib/tasks/install.rake
|
188
185
|
- test/breezy_test.rb
|
189
|
-
- test/configuration_test.rb
|
190
186
|
- test/engine_test.rb
|
191
187
|
- test/helpers_test.rb
|
192
188
|
- test/render_test.rb
|
@@ -210,14 +206,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
206
|
- !ruby/object:Gem::Version
|
211
207
|
version: '0'
|
212
208
|
requirements: []
|
213
|
-
|
214
|
-
rubygems_version: 2.6.11
|
209
|
+
rubygems_version: 3.0.3
|
215
210
|
signing_key:
|
216
211
|
specification_version: 4
|
217
212
|
summary: Rails integration for BreezyJS
|
218
213
|
test_files:
|
219
214
|
- test/render_test.rb
|
220
|
-
- test/configuration_test.rb
|
221
215
|
- test/helpers_test.rb
|
222
216
|
- test/engine_test.rb
|
223
217
|
- test/test_helper.rb
|
data/lib/breezy/configuration.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Breezy
|
2
|
-
class Configuration
|
3
|
-
def initialize
|
4
|
-
BreezyTemplate.configuration = nil
|
5
|
-
end
|
6
|
-
|
7
|
-
def track_sprockets_assets=(assets)
|
8
|
-
BreezyTemplate.configuration.track_sprockets_assets = assets
|
9
|
-
end
|
10
|
-
|
11
|
-
def track_sprockets_assets
|
12
|
-
BreezyTemplate.configuration.track_sprockets_assets
|
13
|
-
end
|
14
|
-
|
15
|
-
def track_pack_assets=(assets)
|
16
|
-
BreezyTemplate.configuration.track_pack_assets = assets
|
17
|
-
end
|
18
|
-
|
19
|
-
def track_pack_assets
|
20
|
-
BreezyTemplate.configuration.track_pack_assets
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.configuration
|
25
|
-
@configuration ||= Configuration.new
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.configuration=(config)
|
29
|
-
@configuration = config
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.configure
|
33
|
-
yield configuration
|
34
|
-
end
|
35
|
-
end
|
data/lib/breezy/render.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module Breezy
|
2
|
-
module Render
|
3
|
-
def default_render(*args)
|
4
|
-
if @_use_breezy
|
5
|
-
render(*args)
|
6
|
-
else
|
7
|
-
super
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def render(*args, &block)
|
12
|
-
if !@_use_breezy
|
13
|
-
return super
|
14
|
-
end
|
15
|
-
|
16
|
-
render_options = args.extract_options!
|
17
|
-
breezy_options = render_options.delete(:breezy)
|
18
|
-
|
19
|
-
if !breezy_options
|
20
|
-
breezy = {}
|
21
|
-
end
|
22
|
-
|
23
|
-
render_options[:locals] ||= {}
|
24
|
-
render_options[:locals][:breezy] = breezy
|
25
|
-
|
26
|
-
if request.format == :html
|
27
|
-
original_formats = self.formats
|
28
|
-
@_breezy_snippet = render_to_string(*args, render_options.merge(formats: [:js]))
|
29
|
-
self.formats = original_formats
|
30
|
-
|
31
|
-
render_options.reverse_merge!(formats: original_formats, template: 'breezy/response')
|
32
|
-
end
|
33
|
-
|
34
|
-
super(*args, render_options, &block)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"presets": [
|
3
|
-
[
|
4
|
-
"env",
|
5
|
-
{
|
6
|
-
"modules": false,
|
7
|
-
"targets": {
|
8
|
-
"browsers": "> 1%",
|
9
|
-
"uglify": true
|
10
|
-
},
|
11
|
-
"useBuiltIns": true
|
12
|
-
}
|
13
|
-
],
|
14
|
-
"react"
|
15
|
-
],
|
16
|
-
"plugins": [
|
17
|
-
"syntax-dynamic-import",
|
18
|
-
["module-resolver", {
|
19
|
-
"root": ["./app"],
|
20
|
-
"alias": {
|
21
|
-
"views": "./app/views",
|
22
|
-
"components": "./app/components",
|
23
|
-
"javascript": "./app/javascript"
|
24
|
-
}
|
25
|
-
}],
|
26
|
-
"transform-object-rest-spread",
|
27
|
-
[
|
28
|
-
"transform-class-properties",
|
29
|
-
{
|
30
|
-
"spec": true
|
31
|
-
}
|
32
|
-
]
|
33
|
-
]
|
34
|
-
}
|
35
|
-
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'breezy_template/core_ext'
|
2
|
-
|
3
|
-
Breezy.configure do |config|
|
4
|
-
# Configure breezy.js to refresh the browser when sprockets or
|
5
|
-
# webpacker asset fingerpint changes. This is similar to Turbolink's
|
6
|
-
# `data-turbolinks-track`.
|
7
|
-
#
|
8
|
-
# Note that this file was generated without sprockets JS tracking.
|
9
|
-
# If you need to change this behavior, add it like so:
|
10
|
-
#
|
11
|
-
# config.track_sprockets_assets = ['application.js', 'application.css']
|
12
|
-
config.track_sprockets_assets = ['application.css']
|
13
|
-
|
14
|
-
config.track_pack_assets = ['application.js']
|
15
|
-
end
|
data/test/configuration_test.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ConfigurationTest < ActiveSupport::TestCase
|
4
|
-
def restore_default_config
|
5
|
-
Breezy.configuration = nil
|
6
|
-
Breezy.configure {}
|
7
|
-
end
|
8
|
-
|
9
|
-
setup do
|
10
|
-
restore_default_config
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'configuration with an empty block defaults to application.js and application.css' do
|
14
|
-
Breezy.configure do |config|
|
15
|
-
end
|
16
|
-
|
17
|
-
track_sprockets_assets = ['application.js', 'application.css']
|
18
|
-
track_pack_assets = ['application.js']
|
19
|
-
|
20
|
-
assert_equal track_sprockets_assets, Breezy.configuration.track_sprockets_assets
|
21
|
-
assert_equal track_pack_assets, Breezy.configuration.track_pack_assets
|
22
|
-
end
|
23
|
-
|
24
|
-
test 'configuration with track_assets specified' do
|
25
|
-
Breezy.configure do |config|
|
26
|
-
config.track_sprockets_assets = ['app.js']
|
27
|
-
config.track_pack_assets = ['pack.js']
|
28
|
-
end
|
29
|
-
|
30
|
-
track_sprockets_assets = ['app.js']
|
31
|
-
track_pack_assets = ['pack.js']
|
32
|
-
|
33
|
-
assert_equal track_sprockets_assets, Breezy.configuration.track_sprockets_assets
|
34
|
-
assert_equal track_pack_assets, Breezy.configuration.track_pack_assets
|
35
|
-
end
|
36
|
-
end
|