breezy 0.17.1 → 0.18.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: 6794f98f6bd5666982f236806055298cd4b0df48143e406ead4936d331e9e347
4
- data.tar.gz: 92ffded4848bb5186d80e3a765a52e219ace61a731baa8e911e446b3fb70df9a
3
+ metadata.gz: 5c5e2d6ff06a62de207f2b867d1e64044b66816d5abbad514ea00a321bd01e04
4
+ data.tar.gz: e0b800f96939f33d719212de311eb8d692b5d8e7122a0a3cf424572239358a77
5
5
  SHA512:
6
- metadata.gz: 3050c6a3e48f1253afd24a709fee2a2a57a95ffe09ba373b4431c1b5f8e0c258cedfbe4b139d1053d8ebfa8e812fc441872b0abff261a72ddf30c8420840aa19
7
- data.tar.gz: 859522594cd933e0370ed9fbedb6c9d7c6b61b464cb178fe615f0ef16a8d03316d5376bf8a994188fdc276f827bd8760bb0ede1f807f0b4caae99bb5fe2d2c8e
6
+ metadata.gz: d4d58896fa261c4aeb545dc749624643d270645753a952ac56ff71d6dd66f8eada37ec9e426816eeda6a69d8021348b83049732bb77c36b5c4242aa884d42849
7
+ data.tar.gz: f1631849823a71fc7211f432f4a514e38e82f31df7a24da6c567c0e461dc957e221a40ff939efde7ef5dd063df1d783b4cd7845ae045e8dbcff24f10ee11730b
@@ -1,40 +1,31 @@
1
1
  import React from 'react'
2
- import {mapStateToProps, mapDispatchToProps} from '@jho406/breezy'
3
- import {connect} from 'react-redux'
4
2
  import RailsTag from '@jho406/breezy/components/RailsTag'
5
- import * as applicationActionCreators from 'javascript/packs/action_creators'
3
+ // import * as actionCreators from 'javascript/packs/action_creators'
4
+ // import {useDispatch} from 'react-redux'
6
5
 
7
- class <%= plural_table_name.camelize %>Edit extends React.Component {
8
- render () {
9
- const {
10
- form,
11
- flash,
12
- <%= singular_table_name.camelize(:lower) %>Path,
13
- <%= plural_table_name.camelize(:lower) %>Path,
14
- } = this.props
15
- const error = flash.form_error
6
+ export default function <%= plural_table_name.camelize %>Edit ({
7
+ // visit,
8
+ // remote,
9
+ form,
10
+ flash,
11
+ <%= singular_table_name.camelize(:lower) %>Path,
12
+ <%= plural_table_name.camelize(:lower) %>Path,
13
+ }) {
14
+ const error = flash.form_error
16
15
 
17
- const messagesEl = error && (
18
- <div id="error_explanation">
19
- <h2>{ error.explanation }</h2>
20
- <ul>{ error.messages.map(({body})=> <li key={body}>{body}</li>) }</ul>
21
- </div>
22
- )
16
+ const messagesEl = error && (
17
+ <div id="error_explanation">
18
+ <h2>{ error.explanation }</h2>
19
+ <ul>{ error.messages.map(({body})=> <li key={body}>{body}</li>) }</ul>
20
+ </div>
21
+ )
23
22
 
24
- return (
25
- <div>
26
- {messagesEl}
27
- <RailsTag {...form} data-bz-visit={true}/>
28
- <a href={<%= singular_table_name.camelize(:lower) %>Path} data-bz-visit={true}>Show</a>
29
- <a href={<%= plural_table_name.camelize(:lower) %>Path} data-bz-visit={true}>Back</a>
30
- </div>
31
- )
32
- }
23
+ return (
24
+ <div>
25
+ {messagesEl}
26
+ <RailsTag {...form} data-bz-visit={true}/>
27
+ <a href={<%= singular_table_name.camelize(:lower) %>Path} data-bz-visit={true}>Show</a>
28
+ <a href={<%= plural_table_name.camelize(:lower) %>Path} data-bz-visit={true}>Back</a>
29
+ </div>
30
+ )
33
31
  }
34
-
35
- export default connect(
36
- mapStateToProps,
37
- {...mapDispatchToProps, ...applicationActionCreators}
38
- )(<%= plural_table_name.camelize %>Edit)
39
-
40
-
@@ -1,59 +1,49 @@
1
1
  import React from 'react'
2
- import {mapStateToProps, mapDispatchToProps} from '@jho406/breezy'
3
- import { connect } from 'react-redux'
4
-
5
- class <%= plural_table_name.camelize %>Index extends React.Component {
6
- static defaultProps = {
7
- <%= plural_table_name.camelize(:lower) %>: []
8
- }
9
-
10
- render () {
11
- const {
12
- flash,
13
- new<%= singular_table_name.camelize %>Path,
14
- } = this.props
15
- const <%= singular_table_name.camelize(:lower) %>Items = this.props.<%= plural_table_name.camelize(:lower) %>.map((<%= singular_table_name.camelize(:lower) %>, key) => {
16
- return (
17
- <tr key={<%= singular_table_name.camelize(:lower) %>.id}>
18
- <%- attributes_list.select{|attr| attr != :id }.each do |attr| -%>
19
- <td>{<%=singular_table_name.camelize(:lower)%>.<%=attr.camelize(:lower)%>}</td>
20
- <%- end -%>
21
- <td><a href={ <%=singular_table_name%>.<%=singular_table_name.camelize(:lower)%>Path } data-bz-visit={true}>Show</a></td>
22
- <td><a href={ <%=singular_table_name%>.edit<%=singular_table_name.camelize%>Path } data-bz-visit={true}>Edit</a></td>
23
- <td><a href={ <%=singular_table_name%>.delete<%=singular_table_name.camelize%>Path }data-bz-visit={true} data-bz-method={"DELETE"}>Delete</a></td>
24
- </tr>
25
- )
26
- })
27
-
2
+ // import * as actionCreators from 'javascript/packs/action_creators'
3
+ // import {useDispatch} from 'react-redux'
4
+
5
+ export default function <%= plural_table_name.camelize %>Index({
6
+ // visit,
7
+ // remote,
8
+ flash,
9
+ new<%= singular_table_name.camelize %>Path,
10
+ <%= plural_table_name.camelize(:lower) %> = [],
11
+ }) {
12
+ const <%= singular_table_name.camelize(:lower) %>Items = <%= plural_table_name.camelize(:lower) %>.map((<%= singular_table_name.camelize(:lower) %>, key) => {
28
13
  return (
29
- <div>
30
- <p id="notice">{flash.notice}</p>
14
+ <tr key={<%= singular_table_name.camelize(:lower) %>.id}>
15
+ <%- attributes_list.select{|attr| attr != :id }.each do |attr| -%>
16
+ <td>{<%=singular_table_name.camelize(:lower)%>.<%=attr.camelize(:lower)%>}</td>
17
+ <%- end -%>
18
+ <td><a href={ <%=singular_table_name%>.<%=singular_table_name.camelize(:lower)%>Path } data-bz-visit={true}>Show</a></td>
19
+ <td><a href={ <%=singular_table_name%>.edit<%=singular_table_name.camelize%>Path } data-bz-visit={true}>Edit</a></td>
20
+ <td><a href={ <%=singular_table_name%>.delete<%=singular_table_name.camelize%>Path }data-bz-visit={true} data-bz-method={"DELETE"}>Delete</a></td>
21
+ </tr>
22
+ )
23
+ })
31
24
 
32
- <h1><%= plural_table_name.capitalize %></h1>
25
+ return (
26
+ <div>
27
+ <p id="notice">{flash.notice}</p>
33
28
 
34
- <table>
35
- <thead>
36
- <%- attributes_list.select{|attr| attr != :id }.each do |attr| -%>
37
- <tr><th><%=attr.capitalize%></th></tr>
38
- <%- end -%>
39
- <tr>
40
- <th colSpan="3"></th>
41
- </tr>
42
- </thead>
29
+ <h1><%= plural_table_name.capitalize %></h1>
43
30
 
44
- <tbody>
45
- {<%= singular_table_name %>Items}
46
- </tbody>
47
- </table>
48
- <br />
49
- <a href={new<%= singular_table_name.camelize %>Path} data-bz-visit={true}>New <%= singular_table_name.capitalize %></a>
50
- </div>
51
- )
52
- }
31
+ <table>
32
+ <thead>
33
+ <%- attributes_list.select{|attr| attr != :id }.each do |attr| -%>
34
+ <tr><th><%=attr.capitalize%></th></tr>
35
+ <%- end -%>
36
+ <tr>
37
+ <th colSpan="3"></th>
38
+ </tr>
39
+ </thead>
40
+
41
+ <tbody>
42
+ {<%= singular_table_name %>Items}
43
+ </tbody>
44
+ </table>
45
+ <br />
46
+ <a href={new<%= singular_table_name.camelize %>Path} data-bz-visit={true}>New <%= singular_table_name.capitalize %></a>
47
+ </div>
48
+ )
53
49
  }
54
-
55
- export default connect(
56
- mapStateToProps,
57
- mapDispatchToProps
58
- )(<%= plural_table_name.camelize %>Index)
59
-
@@ -1,37 +1,29 @@
1
1
  import React from 'react'
2
- import {mapStateToProps, mapDispatchToProps} from '@jho406/breezy'
3
- import {connect} from 'react-redux'
4
2
  import RailsTag from '@jho406/breezy/components/RailsTag'
5
- import * as applicationActionCreators from 'javascript/packs/action_creators'
3
+ // import * as actionCreators from 'javascript/packs/action_creators'
4
+ // import { useDispatch } from 'react-redux'
6
5
 
7
- class <%= plural_table_name.camelize %>New extends React.Component {
8
- render () {
9
- const {
10
- form,
11
- flash,
12
- <%= plural_table_name.camelize(:lower) %>Path,
13
- } = this.props
14
- const error = flash.form_error
6
+ export default function <%= plural_table_name.camelize %>New({
7
+ // visit,
8
+ // remote
9
+ form,
10
+ flash,
11
+ <%= plural_table_name.camelize(:lower) %>Path,
12
+ }) {
13
+ const error = flash.form_error
15
14
 
16
- const messagesEl = error && (
17
- <div id="error_explanation">
18
- <h2>{ error.explanation }</h2>
19
- <ul>{ error.messages.map(({body})=> <li key={body}>{body}</li>) }</ul>
20
- </div>
21
- )
15
+ const messagesEl = error && (
16
+ <div id="error_explanation">
17
+ <h2>{ error.explanation }</h2>
18
+ <ul>{ error.messages.map(({body})=> <li key={body}>{body}</li>) }</ul>
19
+ </div>
20
+ )
22
21
 
23
- return (
24
- <div>
25
- {messagesEl}
26
- <RailsTag {...this.props.form} data-bz-visit={true}/>
27
- <a href={<%= plural_table_name.camelize(:lower) %>Path} data-bz-visit={true}>Back</a>
28
- </div>
29
- )
30
- }
22
+ return (
23
+ <div>
24
+ {messagesEl}
25
+ <RailsTag {...form} data-bz-visit={true}/>
26
+ <a href={<%= plural_table_name.camelize(:lower) %>Path} data-bz-visit={true}>Back</a>
27
+ </div>
28
+ )
31
29
  }
32
-
33
- export default connect(
34
- mapStateToProps,
35
- {...mapDispatchToProps, ...applicationActionCreators}
36
- )(<%= plural_table_name.camelize %>New)
37
-
@@ -1,27 +1,28 @@
1
1
  import React from 'react'
2
- import {mapStateToProps, mapDispatchToProps} from '@jho406/breezy'
3
- import { connect } from 'react-redux'
2
+ // import * as actionCreators from 'javascript/packs/action_creators'
3
+ // import {useDispatch} from 'react-redux'
4
4
 
5
- class <%= plural_table_name.camelize %>Show extends React.Component {
6
- render () {
7
- return (
8
- <div>
9
- <p id="notice">{this.props.flash && this.props.flash.notice}</p>
10
- <%- attributes_list_with_timestamps.select{|attr| attr != :id }.each do |attr| -%>
11
- <p>
12
- <strong><%= attr.capitalize %>:</strong>
13
- {this.props.<%=attr.camelize(:lower)%>}
14
- </p>
15
- <%- end -%>
16
- <a href={ this.props.edit<%= singular_table_name.camelize %>Path } data-bz-visit={true}>Edit</a>
17
- <a href={ this.props.<%= plural_table_name.camelize(:lower) %>Path } data-bz-visit={true}>Back</a>
18
- </div>
19
- )
20
- }
5
+ export default function <%= plural_table_name.camelize %>Show({
6
+ // visit,
7
+ // remote,
8
+ flash,
9
+ <%- attributes_list_with_timestamps.select{|attr| attr != :id }.each do |attr| -%>
10
+ <%=attr.camelize(:lower)%>,
11
+ <%- end -%>
12
+ edit<%= singular_table_name.camelize %>Path,
13
+ <%= plural_table_name.camelize(:lower) %>Path
14
+ }) {
15
+ return (
16
+ <div>
17
+ <p id="notice">{flash && flash.notice}</p>
18
+ <%- attributes_list_with_timestamps.select{|attr| attr != :id }.each do |attr| -%>
19
+ <p>
20
+ <strong><%= attr.capitalize %>:</strong>
21
+ {<%=attr.camelize(:lower)%>}
22
+ </p>
23
+ <%- end -%>
24
+ <a href={ edit<%= singular_table_name.camelize %>Path } data-bz-visit={true}>Edit</a>
25
+ <a href={ <%= plural_table_name.camelize(:lower) %>Path } data-bz-visit={true}>Back</a>
26
+ </div>
27
+ )
21
28
  }
22
-
23
- export default connect(
24
- mapStateToProps,
25
- mapDispatchToProps
26
- )(<%= plural_table_name.camelize %>Show)
27
-
@@ -1,115 +1,63 @@
1
- import React from 'react'
2
- import {combineReducers, createStore, applyMiddleware, compose} from 'redux'
3
- import reduceReducers from 'reduce-reducers'
4
- import thunk from 'redux-thunk'
5
- import { Provider } from 'react-redux'
6
- import { render } from 'react-dom'
7
- import { createBrowserHistory, createMemoryHistory } from 'history'
8
- import { start } from '@jho406/breezy'
9
- import Nav from '@jho406/breezy/components/NavComponent'
10
- import { ujsHandlers } from '@jho406/breezy/utils'
11
- import { persistStore, persistReducer } from 'redux-persist'
12
- import storage from 'redux-persist/lib/storage'
13
- import { applicationRootReducer, applicationPagesReducer } from './reducer'
14
- import { buildVisitAndRemote } from './application_visit'
15
-
16
- if(typeof window !== 'undefined' ) {
17
- document.addEventListener("DOMContentLoaded", function() {
18
- const appEl = document.getElementById('app')
19
- const location = window.location
1
+ import React from 'react';
2
+ import { combineReducers, createStore, applyMiddleware, compose } from 'redux';
3
+ import reduceReducers from 'reduce-reducers';
4
+ import thunk from 'redux-thunk';
5
+ import { Provider } from 'react-redux';
6
+ import { render } from 'react-dom';
7
+ import { ApplicationBase } from '@jho406/breezy';
8
+ import { persistStore, persistReducer } from 'redux-persist';
9
+ import storage from 'redux-persist/lib/storage';
10
+ import { applicationRootReducer, applicationPagesReducer } from './reducer';
11
+ import { buildVisitAndRemote } from './application_visit';
12
+
13
+ // Mapping between your props template to Component, you must add to this
14
+ // to register any new page level component you create. If you are using the
15
+ // scaffold, it will auto append the identifers for you.
16
+ //
17
+ // e.g {'posts/new': PostNew}
18
+ const identifierToComponentMapping = {
19
+ };
20
+
21
+ if (typeof window !== "undefined") {
22
+ document.addEventListener("DOMContentLoaded", function () {
23
+ const appEl = document.getElementById("app");
24
+ const location = window.location;
20
25
 
21
26
  if (appEl) {
22
27
  render(
23
28
  <Application
24
29
  appEl={appEl}
25
- // The base url is an optional prefix to all calls made by the `visit`
30
+ // The base url prefixed to all calls made by the `visit`
26
31
  // and `remote` thunks.
27
- baseUrl={''}
32
+ baseUrl={location.origin}
28
33
  // The global var BREEZY_INITIAL_PAGE_STATE is set by your erb
29
34
  // template, e.g., index.html.erb
30
35
  initialPage={window.BREEZY_INITIAL_PAGE_STATE}
31
36
  // The initial path of the page, e.g., /foobar
32
37
  path={location.pathname + location.search + location.hash}
33
- />, appEl)
38
+ buildVisitAndRemote={buildVisitAndRemote}
39
+ />,
40
+ appEl
41
+ );
34
42
  }
35
- })
43
+ });
36
44
  }
37
45
 
38
- export default class Application extends React.Component {
39
- constructor(props) {
40
- super(props)
41
- this.hasWindow = typeof window !== 'undefined'
42
-
43
- // Mapping between your props template to Component, you must add to this
44
- // to register any new page level component you create. If you are using the
45
- // scaffold, it will auto append the identifers for you.
46
- //
47
- // e.g {'posts/new': PostNew}
48
- this.identifierToComponentMapping = {
49
- }
50
-
51
- // Create a navigator Ref for UJS attributes and to enhance the base `visit`
52
- // and `visit` thunks
53
- this.navigatorRef = React.createRef()
54
-
55
- // Start Breezy and return an object to prepare the Redux store
56
- const breezy = start({
57
- initialPage: this.props.initialPage,
58
- baseUrl: this.props.baseUrl,
59
- path: this.props.path,
60
- fetch: this.hasWindow ? window.fetch : undefined,
61
- })
62
- this.breezy = breezy
63
-
64
- // Build the store and pass Breezy's provided reducer to be combined with
65
- // your reducers located at `application_reducer.js`
66
- const {initialState, reducer} = breezy
67
- this.store = this.buildStore(initialState, reducer)
68
-
69
- // Fire initial events and populate the store
70
- breezy.prepareStore(this.store)
71
-
72
- // Build visit and remote thunks
73
- // Your modified `visit` and `remote` will get passed below to the
74
- // NavComponent then to your components through the provided
75
- // mapDispatchToProps.
76
- //
77
- // You can access them via `this.props.visit` or `this.props.remote`. In
78
- // your page components
79
- const {visit, remote} = buildVisitAndRemote(this.navigatorRef, this.store)
80
- this.visit = visit
81
- this.remote = remote
82
- }
83
-
84
- componentDidMount() {
85
- const { appEl } = this.props
86
- // Create the ujs event handlers. You can change the ujsAttributePrefix
87
- // in the event the data attribute conflicts with another.
88
- this.ujsHandlers = ujsHandlers({
89
- visit: this.visit,
90
- remote: this.remote,
91
- store: this.store,
92
- ujsAttributePrefix: 'data-bz'
93
- })
94
- const {onClick, onSubmit} = this.ujsHandlers
95
-
96
- appEl.addEventListener('click', onClick)
97
- appEl.addEventListener('submit', onSubmit)
46
+ export default class Application extends ApplicationBase {
47
+ mapping() {
48
+ return identifierToComponentMapping;
98
49
  }
99
50
 
100
- componentWillUnmount() {
101
- const { appEl } = this.props
102
- const {onClick, onSubmit} = this.ujsHandlers
103
-
104
- appEl.removeEventListener('click', onClick)
105
- appEl.removeEventListener('submit', onSubmit)
106
- this.breezy.stop()
51
+ visitAndRemote(navRef, store) {
52
+ return buildVisitAndRemote(navRef, store);
107
53
  }
108
54
 
109
- buildStore(initialState, {breezy: breezyReducer, pages: pagesReducer}) {
55
+ buildStore(initialState, { breezy: breezyReducer, pages: pagesReducer }) {
110
56
  // Create the store
111
57
  // See `./reducer.js` for an explaination of the two included reducers
112
- const composeEnhancers = (this.hasWindow && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;
58
+ const composeEnhancers =
59
+ (this.hasWindow && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) ||
60
+ compose;
113
61
  const reducer = this.wrapWithPersistReducer(
114
62
  reduceReducers(
115
63
  combineReducers({
@@ -118,19 +66,19 @@ export default class Application extends React.Component {
118
66
  }),
119
67
  applicationRootReducer
120
68
  )
121
- )
69
+ );
122
70
  const store = createStore(
123
71
  reducer,
124
72
  initialState,
125
73
  composeEnhancers(applyMiddleware(thunk))
126
- )
74
+ );
127
75
 
128
- if(this.hasWindow) {
76
+ if (this.hasWindow) {
129
77
  // Persist the store using Redux-Persist
130
- persistStore(store)
78
+ persistStore(store);
131
79
  }
132
80
 
133
- return store
81
+ return store;
134
82
  }
135
83
 
136
84
  wrapWithPersistReducer(reducers) {
@@ -138,53 +86,29 @@ export default class Application extends React.Component {
138
86
  // The key is set to the stringified JS asset path to remove the need for
139
87
  // migrations when hydrating.
140
88
  if (!this.hasWindow) {
141
- return reducers
89
+ return reducers;
142
90
  }
143
- const prefix = 'breezy'
144
- const persistKey = prefix + this.props.initialPage.assets.filter( asset => asset.endsWith('.js')).join(",")
91
+ const prefix = "breezy";
92
+ const persistKey =
93
+ prefix +
94
+ this.props.initialPage.assets
95
+ .filter((asset) => asset.endsWith(".js"))
96
+ .join(",");
145
97
  const persistConfig = {
146
98
  key: persistKey,
147
99
  storage,
148
- }
100
+ };
149
101
 
150
102
  // Remove older storage items that were used by previous JS assets
151
103
  if (this.hasWindow) {
152
- const storedKeys = Object.keys(localStorage)
104
+ const storedKeys = Object.keys(localStorage);
153
105
  storedKeys.forEach((key) => {
154
106
  if (key.startsWith(`persist:${prefix}`) && key !== persistKey) {
155
- localStorage.removeItem(key)
107
+ localStorage.removeItem(key);
156
108
  }
157
- })
158
- }
159
-
160
- return persistReducer(persistConfig, reducers)
161
- }
162
-
163
- createHistory() {
164
- if(this.hasWindow) {
165
- // This is used for client side rendering
166
- return createBrowserHistory({})
167
- } else {
168
- // This is used for server side rendering
169
- return createMemoryHistory({})
109
+ });
170
110
  }
171
- }
172
-
173
- render() {
174
- const history = this.createHistory()
175
111
 
176
- // The Nav component is pretty bare and can be inherited from for custom
177
- // behavior or replaced with your own.
178
- return <Provider store={this.store}>
179
- <Nav
180
- store={this.store}
181
- ref={this.navigatorRef}
182
- visit={this.visit}
183
- remote={this.remote}
184
- mapping={this.identifierToComponentMapping}
185
- history={history}
186
- initialPageKey={this.breezy.initialPageKey}
187
- />
188
- </Provider>
112
+ return persistReducer(persistConfig, reducers);
189
113
  }
190
114
  }
@@ -19,14 +19,9 @@ export function buildVisitAndRemote(ref, store) {
19
19
  return
20
20
  }
21
21
 
22
- // There can only be one visit at a time, if `canNavigate` is false,
23
- // then this request will be saved to the store but should be ignored
24
- // for a more recent visit.
25
- if (meta.canNavigate) {
26
- ref.current.navigateTo(meta.pageKey, {
27
- action: meta.suggestedAction,
28
- })
29
- }
22
+ ref.current.navigateTo(meta.pageKey, {
23
+ action: meta.suggestedAction,
24
+ })
30
25
  })
31
26
  .finally(() => {
32
27
  // Do something after
data/lib/install/web.rb CHANGED
@@ -59,7 +59,7 @@ say "Installing React, Redux, and Breezy"
59
59
  run "yarn add babel-plugin-module-resolver history@\"^4\" html-react-parser@\"^0.13\" react-redux redux-thunk redux redux-persist reduce-reducers immer @jho406/breezy --save"
60
60
 
61
61
  say "Updating webpack config to include .jsx file extension and resolved_paths"
62
- insert_into_file Webpacker.config.config_path, " - .jsx\n", after: /extensions:\n/
62
+ insert_into_file Webpacker.config.config_path, " - .jsx\n", after: /\bextensions:\n/
63
63
  # For newer webpacker
64
64
  insert_into_file Webpacker.config.config_path, "'app/views', 'app/components'", after: /additional_paths: \[/
65
65
  # For older webpacker
@@ -15,7 +15,7 @@ namespace :breezy do
15
15
  package_json = JSON.parse(File.read(Rails.root.join("package.json")))
16
16
 
17
17
  if package_json['dependencies']['react'].nil?
18
- $stderr.puts "React not installed. Did you run `rails webpacker:install:react`?"
18
+ $stderr.puts "React not installed. Did you install React? https://github.com/rails/webpacker#react"
19
19
  $stderr.puts "Exiting!" && exit!
20
20
  end
21
21
  end
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.17.1
4
+ version: 0.18.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: 2021-01-09 00:00:00.000000000 Z
11
+ date: 2021-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -28,16 +28,16 @@ dependencies:
28
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.17.1
33
+ version: 0.20.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.17.1
40
+ version: 0.20.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: webpacker
43
43
  requirement: !ruby/object:Gem::Requirement