vue-generators 0.1.1 → 0.1.2
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +61 -4
- data/lib/vue/generators/version.rb +1 -1
- data/lib/vue/generators/vue/store/USAGE +23 -0
- data/lib/vue/generators/vue/store/store_generator.rb +24 -0
- data/lib/vue/generators/vue/store/templates/Store.template +27 -0
- data/lib/vue/generators/vue/store/templates/actions.template +18 -0
- data/lib/vue/generators/vue/store/templates/getters.template +15 -0
- data/lib/vue/generators/vue/store/templates/mutations.template +16 -0
- data/lib/vue/generators/vue/store/templates/state.template +12 -0
- data/lib/vue/generators.rb +1 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ca22a1be57230f90cb0848c49db99329c9cb4eb3eebc90f30e797b98347dc95
|
4
|
+
data.tar.gz: 30f654be8f2d389b3f17ded84a6d5c23e90fbbe4a09fb2f4724e57041e5f4a90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d4d78678668437f5694f7a383a17da40f1fbfaa2057f81a75c7d547c3ffea7ea0e6e41e23e1f9bcb952b396edc117330ef1118bca3ac0cace0bca91c390a3ea
|
7
|
+
data.tar.gz: 0bacaedd570143d4605a0bbd801eab4e0971ebe05eee83c48d7ea27a2176338a319656a3e7c23427a10947fad32ab966568ec588842f47069a1c9abd30ccbfba
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Vue::Generators
|
2
|
-
vue-generators is an opinionated library for generating Vue components
|
3
|
-
for a Rails project.
|
2
|
+
vue-generators is an opinionated library for generating Vue components, mixins,
|
3
|
+
and stores for a Rails project.
|
4
4
|
|
5
5
|
## Usage
|
6
6
|
|
@@ -8,6 +8,7 @@ for a Rails project.
|
|
8
8
|
```bash
|
9
9
|
rails g vue:component -h
|
10
10
|
rails g vue:mixin -h
|
11
|
+
rails g vue:store -h
|
11
12
|
```
|
12
13
|
|
13
14
|
### Generate a component
|
@@ -16,7 +17,9 @@ rails g vue:mixin -h
|
|
16
17
|
rails g vue:component ButtonCounter
|
17
18
|
```
|
18
19
|
|
19
|
-
|
20
|
+
**This will generate:**
|
21
|
+
|
22
|
+
*`app/javascript/components/ButtonCounter.vue`*
|
20
23
|
```JavaScript
|
21
24
|
<template>
|
22
25
|
<div>
|
@@ -80,8 +83,9 @@ export default {
|
|
80
83
|
```bash
|
81
84
|
rails g vue:mixin MyMixin
|
82
85
|
```
|
86
|
+
**This will generate:**
|
83
87
|
|
84
|
-
|
88
|
+
*`app/javascript/mixins/MyMixin.js`*
|
85
89
|
|
86
90
|
```JavaScript
|
87
91
|
export default {
|
@@ -120,6 +124,59 @@ export default {
|
|
120
124
|
},
|
121
125
|
}
|
122
126
|
```
|
127
|
+
### Generate a store
|
128
|
+
|
129
|
+
```bash
|
130
|
+
rails g vue:store Application
|
131
|
+
```
|
132
|
+
|
133
|
+
**This will generate:**
|
134
|
+
|
135
|
+
*`app/javascript/application/store/Store.js`*
|
136
|
+
```JavaScript
|
137
|
+
import { actions } from "./actions"
|
138
|
+
import { getters } from "./getters"
|
139
|
+
import { mutations } from "./mutations"
|
140
|
+
import { state } from "./state"
|
141
|
+
|
142
|
+
export default {
|
143
|
+
namespaced: true,
|
144
|
+
|
145
|
+
actions: actions,
|
146
|
+
getters: getters,
|
147
|
+
mutations: mutations,
|
148
|
+
state: state
|
149
|
+
}
|
150
|
+
```
|
151
|
+
|
152
|
+
*`app/javascript/application/store/actions.js`*
|
153
|
+
```JavaScript
|
154
|
+
export const actions = {
|
155
|
+
|
156
|
+
}
|
157
|
+
```
|
158
|
+
|
159
|
+
*`app/javascript/application/store/getters.js`*
|
160
|
+
```JavaScript
|
161
|
+
export const getters = {
|
162
|
+
|
163
|
+
}
|
164
|
+
```
|
165
|
+
|
166
|
+
*`app/javascript/application/store/mutations.js`*
|
167
|
+
```JavaScript
|
168
|
+
export const mutations = {
|
169
|
+
}
|
170
|
+
|
171
|
+
```
|
172
|
+
|
173
|
+
*`app/javascript/application/store/state.js`*
|
174
|
+
```JavaScript
|
175
|
+
export const state = {
|
176
|
+
|
177
|
+
}
|
178
|
+
```
|
179
|
+
|
123
180
|
|
124
181
|
## Installation
|
125
182
|
Add this line to your application's Gemfile:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a namespaced, blank Vuex store split into multiple files
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate vue:store Application
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
app/javascript/application/store/Store.js
|
9
|
+
app/javascript/application/store/actions.js
|
10
|
+
app/javascript/application/store/getters.js
|
11
|
+
app/javascript/application/store/mutations.js
|
12
|
+
app/javascript/application/store/state.js
|
13
|
+
|
14
|
+
Example:
|
15
|
+
rails generate vue:store pets/Kittens
|
16
|
+
|
17
|
+
This will create:
|
18
|
+
app/javascript/pets/kittens/store/Store.js
|
19
|
+
app/javascript/pets/kittens/store/actions.js
|
20
|
+
app/javascript/pets/kittens/store/getters.js
|
21
|
+
app/javascript/pets/kittens/store/mutations.js
|
22
|
+
app/javascript/pets/kittens/store/state.js
|
23
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Vue
|
2
|
+
class StoreGenerator < Rails::Generators::NamedBase
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
|
5
|
+
def generate_store
|
6
|
+
[
|
7
|
+
'Store', 'actions', 'getters', 'mutations', 'state'
|
8
|
+
].each do |template|
|
9
|
+
template "#{template}.template", Rails.root.join("app", "javascript", *path, "#{template}.js")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
def store_name
|
15
|
+
# name is from Rails::Generators::NamedBase which expects a single argument to the generator
|
16
|
+
store = name.split("/").last
|
17
|
+
store.camelize(:lower) # makesTheFirstLetterLowerCase
|
18
|
+
end
|
19
|
+
|
20
|
+
def path
|
21
|
+
name.split("/").map {|part| part.underscore.tr('_', '-') } + ['store']
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { actions } from "./actions"
|
2
|
+
import { getters } from "./getters"
|
3
|
+
import { mutations } from "./mutations"
|
4
|
+
import { state } from "./state"
|
5
|
+
|
6
|
+
// https://vuex.vuejs.org/guide/
|
7
|
+
//
|
8
|
+
// At the center of every Vuex application is the store. A "store" is basically a
|
9
|
+
// container that holds your application state. There are two things that make a
|
10
|
+
// Vuex store different from a plain global object:
|
11
|
+
//
|
12
|
+
// Vuex stores are reactive. When Vue components retrieve state from it, they will
|
13
|
+
// reactively and efficiently update if the store's state changes.
|
14
|
+
//
|
15
|
+
// You cannot directly mutate the store's state. The only way to change a store's
|
16
|
+
// state is by explicitly committing mutations. This ensures every state change
|
17
|
+
// leaves a track-able record, and enables tooling that helps us better understand
|
18
|
+
// our applications
|
19
|
+
//
|
20
|
+
export default {
|
21
|
+
namespaced: true,
|
22
|
+
|
23
|
+
actions: actions,
|
24
|
+
getters: getters,
|
25
|
+
mutations: mutations,
|
26
|
+
state: state
|
27
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
// https://vuex.vuejs.org/guide/actions.html
|
2
|
+
//
|
3
|
+
// Actions are similar to mutations, the differences being that:
|
4
|
+
// - Instead of mutating the state, actions commit mutations.
|
5
|
+
// - Actions can contain arbitrary asynchronous operations.
|
6
|
+
//
|
7
|
+
// Action handlers receive a context object which exposes the same set of
|
8
|
+
// methods/properties on the store instance, so you can call context.commit to
|
9
|
+
// commit a mutation, or access the state and getters via context.state and
|
10
|
+
// context.getters. We can even call other actions with context.dispatch
|
11
|
+
//
|
12
|
+
// Mutations have to be synchronous. Actions don't
|
13
|
+
export const actions = {
|
14
|
+
// // this.$store.dispatch('<%= store_name %>/createPost', { .. } )
|
15
|
+
// createPost(context, payload) {
|
16
|
+
// ...
|
17
|
+
// },
|
18
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// https://vuex.vuejs.org/guide/getters.html
|
2
|
+
//
|
3
|
+
// Getters provide a way to re-use a computation of derived state. Getters
|
4
|
+
// are like computed properties for stores. A getter's result is cached based
|
5
|
+
// on its dependencies, and will only re-evaluate when some of its dependencies
|
6
|
+
// have changed.
|
7
|
+
//
|
8
|
+
export const getters = {
|
9
|
+
// /**
|
10
|
+
// * getters['<%= store_name %>/counter']
|
11
|
+
// */
|
12
|
+
// counter: (state) => () => {
|
13
|
+
// return state.counter
|
14
|
+
// },
|
15
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// https://vuex.vuejs.org/guide/mutations.html
|
2
|
+
//
|
3
|
+
// The only way to actually change state in a Vuex store is by committing a
|
4
|
+
// mutation. Vuex mutations are very similar to events: each mutation has a
|
5
|
+
// string type and a handler. The handler function is where we perform actual
|
6
|
+
// state modifications, and it will receive the state as the first argument
|
7
|
+
//
|
8
|
+
// One important rule to remember is that mutation handler functions must be
|
9
|
+
// synchronous
|
10
|
+
//
|
11
|
+
export const mutations = {
|
12
|
+
// // this.$store.commit('<%= store_name %>/incrementCounter', 42 )
|
13
|
+
// setCounter(state, payload) {
|
14
|
+
// state.counter = payload
|
15
|
+
// },
|
16
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// https://vuex.vuejs.org/guide/state.html
|
2
|
+
//
|
3
|
+
// Vuex uses a single state tree - that is, this single object contains all your
|
4
|
+
// application level state and serves as the "single source of truth.
|
5
|
+
//
|
6
|
+
export const state = {
|
7
|
+
// // this.$store.state.<%= store_name %>.posts
|
8
|
+
// posts: [],
|
9
|
+
|
10
|
+
// // this.$store.state.<%= store_name %>.counter
|
11
|
+
// counter: 0
|
12
|
+
}
|
data/lib/vue/generators.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vue-generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Naegle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -59,6 +59,13 @@ files:
|
|
59
59
|
- lib/vue/generators/vue/mixin/USAGE
|
60
60
|
- lib/vue/generators/vue/mixin/mixin_generator.rb
|
61
61
|
- lib/vue/generators/vue/mixin/templates/Mixin.template
|
62
|
+
- lib/vue/generators/vue/store/USAGE
|
63
|
+
- lib/vue/generators/vue/store/store_generator.rb
|
64
|
+
- lib/vue/generators/vue/store/templates/Store.template
|
65
|
+
- lib/vue/generators/vue/store/templates/actions.template
|
66
|
+
- lib/vue/generators/vue/store/templates/getters.template
|
67
|
+
- lib/vue/generators/vue/store/templates/mutations.template
|
68
|
+
- lib/vue/generators/vue/store/templates/state.template
|
62
69
|
homepage: https://github.com/GoodMeasuresLLC/vue-generators
|
63
70
|
licenses:
|
64
71
|
- MIT
|