bootic_cli 0.4.5 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/GUIA.md +106 -0
- data/README.md +6 -5
- data/lib/bootic_cli/commands/themes.rb +1 -1
- data/lib/bootic_cli/themes/api_theme.rb +12 -4
- data/lib/bootic_cli/themes/fs_theme.rb +23 -4
- data/lib/bootic_cli/themes/updated_theme.rb +1 -1
- data/lib/bootic_cli/themes/workflows.rb +13 -5
- data/lib/bootic_cli/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d367fc55f094ab200cc69836ed66a79c153ce766
|
4
|
+
data.tar.gz: a3aeee896b866038b588991bab6bb742a1c7114b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f057c66358b85c1ceb1d58e874922a5ceec891aca95e9039e7a784d36d7fdb97662345d633e868d56eac19f7e0b09e95654ba3fe2fc5602120a5c808320f8498
|
7
|
+
data.tar.gz: e5ff8006d9b702befaf184822258306c194a947841ad5af8e7b3fa923ba5d4b0c6ca98cfa5df92e7c03f67fe5ddf91e3c9383c66a5455344f9216d60fb492cb2
|
data/GUIA.md
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
# Guía para usar la línea de comandos de Bootic (Bootic CLI)
|
2
|
+
|
3
|
+
El CLI de Bootic es una herramienta para diseñadores y desarrolladores que
|
4
|
+
quieran realizan tareas con la API de Bootic en forma local, ya sea para ver
|
5
|
+
o modificar datos, o bien para realizar cambios en la plantilla de la tienda.
|
6
|
+
|
7
|
+
## ¿Cómo se instala?
|
8
|
+
|
9
|
+
El CLI lo proveemos como una gema en `rubygems.org`, y requiere de
|
10
|
+
Ruby 2.2 o superior. Afortunadamente, en versiones recientes de macOS,
|
11
|
+
ya viene instalado Ruby 2.3 (esto lo puedes comprobar corriendo `ruby -v`
|
12
|
+
en un terminal).
|
13
|
+
|
14
|
+
$ ruby -v
|
15
|
+
ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]
|
16
|
+
|
17
|
+
Perfectirijillo. El paso siguiente es asegurarse que estén instaladas
|
18
|
+
las Developer Tools de Xcode:
|
19
|
+
|
20
|
+
$ xcode-select --install
|
21
|
+
|
22
|
+
Hecho eso, podemos instalar la gema:
|
23
|
+
|
24
|
+
$ sudo gem install bootic_cli
|
25
|
+
|
26
|
+
Lo cual debería escupir un montón de texto, y terminar con algo así como
|
27
|
+
"23 gems installed" si todo salió bien.
|
28
|
+
|
29
|
+
## ¿Cómo configurarlo?
|
30
|
+
|
31
|
+
Antes de poder usarlo, el CLI necesita saber que tú eres tú para saber a
|
32
|
+
qué datos darte acceso. Para eso corremos:
|
33
|
+
|
34
|
+
$ bootic setup
|
35
|
+
|
36
|
+
Te va a hacer algunas preguntas, pero el resumen es que debes entrar a
|
37
|
+
https://auth.bootic.net/dev/cli, seguir los pasos, y luego copiar las
|
38
|
+
credenciales de acceso que veas ahí.
|
39
|
+
|
40
|
+
Esto sólo hay que hacerlo una vez, por si aca.
|
41
|
+
|
42
|
+
## Primeros pasos y clonar plantilla
|
43
|
+
|
44
|
+
- En el terminal, para moverte entre carpetas se escribe `cd [nombreCarpeta]`,
|
45
|
+
por ejemplo `cd proyectos`. Si quieres subir un nivel, el comando es `cd ..`
|
46
|
+
|
47
|
+
- Siempre puedes correr el comando `pwd` para saber la ruta completa de la
|
48
|
+
carpeta en la que estás. el comando `ls` (con ELE) te muestra los archivos
|
49
|
+
y carpetas que hay en la ruta que estés.
|
50
|
+
|
51
|
+
- Una vez dentro de tu carpeta de trabajo (por ejemplo, `/Users/pedro/proyectos/supercliente`),
|
52
|
+
escribe `bootic themes clone`.
|
53
|
+
|
54
|
+
- Con esto se va a descargar una copia de la plantilla de tu tienda (la que
|
55
|
+
esté asociada a la cuenta con la que te logueaste antes).
|
56
|
+
|
57
|
+
- La plantilla se guardará en una carpeta con el mismo subdominio que la tienda.
|
58
|
+
deberías verla si corres `ls`.
|
59
|
+
|
60
|
+
## Modificando el código
|
61
|
+
|
62
|
+
- Luego, una vez dentro de esa carpeta (cd subdominio), puedes correr los
|
63
|
+
siguientes comandos:
|
64
|
+
|
65
|
+
- `bootic themes compare` para comparar los cambios entre tu version local y
|
66
|
+
la versión que está arriba,
|
67
|
+
- `bootic themes pull` para bajar cualquier cambio que haya arriba,
|
68
|
+
- `bootic themes push` para subir cualquier cambio que hagas local,
|
69
|
+
- `bootic themes sync` para sincronizar los cambios de arriba con los tuyos
|
70
|
+
(gana el archivo más reciente en cada lado), y por último,
|
71
|
+
- `bootic themes watch` que se queda escuchando cualquier cambio local que
|
72
|
+
ocurra, y cuando crees o cambies o elimines un archivo lo sube automáticamente.
|
73
|
+
|
74
|
+
El sitio lo sigues viendo "a distancia", remotamente, pero usando `bootic themes watch`
|
75
|
+
es casi instantáneo.
|
76
|
+
|
77
|
+
Todos estos cambios los puedes hacer directamente sobre el sitio público,
|
78
|
+
o bien hacerlo sobre el sitio/plantilla de desarrollo, que puedes crear al
|
79
|
+
momento de correr el comando `clone`.
|
80
|
+
|
81
|
+
Si elijes crear una plantilla de desarrollo todos los cambios que hagas van
|
82
|
+
a ser sobre un sitio de desarrollo, en `https://url.del.sitio/preview/dev`.
|
83
|
+
Los sitios de desarrollo no tienen caché, así que cualquier cambio que hagas
|
84
|
+
deberías verlo ipso-facto y sin retrasos.
|
85
|
+
|
86
|
+
## Publicando los cambios cambios
|
87
|
+
|
88
|
+
Y finalmente, cuando quieras subir los cambios de la plantilla de desarrollo
|
89
|
+
al sitio público, corres `bootic themes publish`. Esto obviamente no aplica
|
90
|
+
en caso de que estés trabajo directamente sobre la plantilla pública.
|
91
|
+
|
92
|
+
En caso de que inicialmente no hayas creado una plantilla de desarrollo y
|
93
|
+
luego quieras hacerlo, basta con que elimines la carpeta y corras el comando
|
94
|
+
`bootic clone` de nuevo.
|
95
|
+
|
96
|
+
## ¿Cómo lo hago para bajar la plantilla de otra tienda?
|
97
|
+
|
98
|
+
En ese caso debes correr `bootic login` para loguearte usando las credenciales
|
99
|
+
asociadas a la otra tienda. El CLI te advertirá que ya estás logueado (en caso
|
100
|
+
de que ya lo estés), pero simplemente dile que sí, que quieres reemplazar las
|
101
|
+
credenciales actuales por otras.
|
102
|
+
|
103
|
+
## Tengo más preguntas. ¿Qué hago?
|
104
|
+
|
105
|
+
Escríbenos a soporte@bootic.io o por el chat de soporte dentro del panel de
|
106
|
+
la tienda.
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Bootic CLI
|
2
2
|
|
3
|
-
CLI to interact with the [Bootic
|
3
|
+
CLI to interact with the [Bootic API](https://api.bootic.net/) and run custom API scripts. [Aquí hay una guía](https://github.com/bootic/bootic_cli/blob/master/GUIA.md) en castellano que explica cómo se instala y usa.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
Install
|
7
|
+
Install via Rubygems:
|
8
8
|
|
9
9
|
gem install bootic_cli
|
10
10
|
|
@@ -71,10 +71,10 @@ bootic runner list_products.rb
|
|
71
71
|
|
72
72
|
### Custom Thor commands
|
73
73
|
|
74
|
-
More advanced scripts can be written as [Thor]() commands. Any scripts in
|
74
|
+
More advanced scripts can be written as [Thor]() commands. Any scripts in `~/bootic` will be loaded automatically.
|
75
75
|
|
76
76
|
```ruby
|
77
|
-
# ~/.bootic/list_products
|
77
|
+
# ~/.bootic/list_products.rb
|
78
78
|
class ListProducts < BooticCli::Command
|
79
79
|
|
80
80
|
desc "list", "list products by status"
|
@@ -84,7 +84,8 @@ class ListProducts < BooticCli::Command
|
|
84
84
|
puts p.title
|
85
85
|
end
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
|
+
declare self, "list_products"
|
88
89
|
end
|
89
90
|
```
|
90
91
|
|
@@ -13,7 +13,7 @@ module BooticCli
|
|
13
13
|
# end
|
14
14
|
|
15
15
|
desc 'clone [dir]', 'Clone remote theme into directory [dir]'
|
16
|
-
option :shop, banner: '<shop_subdomain>', type: :string
|
16
|
+
option :shop, banner: '<shop_subdomain>', aliases: '-s', type: :string
|
17
17
|
option :public, banner: '<true|false>', type: :boolean, aliases: '-p', desc: 'Clones public theme, even if dev theme exists'
|
18
18
|
option :dev, banner: '<true|false>', type: :boolean, aliases: '-d', desc: 'Clones development theme, or creates one if missing'
|
19
19
|
def clone(dir = nil)
|
@@ -7,6 +7,10 @@ module BooticCli
|
|
7
7
|
def updated_on
|
8
8
|
Time.parse(super)
|
9
9
|
end
|
10
|
+
|
11
|
+
def ==(other)
|
12
|
+
self.updated_on == other.updated_on
|
13
|
+
end
|
10
14
|
end
|
11
15
|
|
12
16
|
class APIAsset < ItemWithTime
|
@@ -16,6 +20,11 @@ module BooticCli
|
|
16
20
|
StringIO.new(data)
|
17
21
|
)
|
18
22
|
end
|
23
|
+
|
24
|
+
def ==(other)
|
25
|
+
return super if digest.to_s == '' || other.digest.to_s == ''
|
26
|
+
self.file_size == other.file_size && self.digest == other.digest
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
21
30
|
class APITheme
|
@@ -32,10 +41,9 @@ module BooticCli
|
|
32
41
|
theme.can?(:publish_theme)
|
33
42
|
end
|
34
43
|
|
35
|
-
def publish
|
44
|
+
def publish
|
36
45
|
if theme.can?(:publish_theme)
|
37
46
|
@theme = theme.publish_theme
|
38
|
-
@theme.create_dev_theme if clone
|
39
47
|
reload!(false)
|
40
48
|
end
|
41
49
|
end
|
@@ -53,11 +61,11 @@ module BooticCli
|
|
53
61
|
end
|
54
62
|
|
55
63
|
def templates
|
56
|
-
@templates ||= theme.templates.map{|t| ItemWithTime.new(t) }
|
64
|
+
@templates ||= theme.templates.map { |t| ItemWithTime.new(t) }
|
57
65
|
end
|
58
66
|
|
59
67
|
def assets
|
60
|
-
@assets ||= theme.assets.map{|t| APIAsset.new(t) }
|
68
|
+
@assets ||= theme.assets.map { |t| APIAsset.new(t) }
|
61
69
|
end
|
62
70
|
|
63
71
|
def add_template(file_name, body)
|
@@ -1,11 +1,30 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'yaml/store'
|
3
|
+
require 'digest/md5'
|
3
4
|
|
4
5
|
module BooticCli
|
5
6
|
module Themes
|
6
7
|
class FSTheme
|
7
|
-
|
8
|
-
|
8
|
+
|
9
|
+
Template = Struct.new(:file_name, :body, :updated_on) do
|
10
|
+
def ==(other)
|
11
|
+
self.updated_on == other.updated_on
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
ThemeAsset = Struct.new(:file_name, :file, :updated_on) do
|
16
|
+
def body; @body ||= file.read; end
|
17
|
+
def file_size; body.length; end
|
18
|
+
def digest; @digest ||= Digest::MD5.hexdigest(body); end
|
19
|
+
|
20
|
+
def ==(other)
|
21
|
+
if other.digest.to_s == '' # api theme asset without a digest set
|
22
|
+
return self.updated_on == other.updated_on
|
23
|
+
end
|
24
|
+
|
25
|
+
self.file_size == other.file_size && self.digest == other.digest
|
26
|
+
end
|
27
|
+
end
|
9
28
|
|
10
29
|
ASSETS_DIR = 'assets'.freeze
|
11
30
|
TEMPLATE_PATTERNS = ['*.liquid', '*.html', '*.css', '*.js', 'theme.yml'].freeze
|
@@ -19,11 +38,11 @@ module BooticCli
|
|
19
38
|
|
20
39
|
def self.resolve_file(path)
|
21
40
|
file = File.new(path)
|
22
|
-
file_name = File.basename(path)
|
23
41
|
type = resolve_type(path)
|
42
|
+
file_name = File.basename(path)
|
24
43
|
|
25
44
|
item = if path =~ /assets\//
|
26
|
-
ThemeAsset.new(file_name, file
|
45
|
+
ThemeAsset.new(file_name, file, file.mtime.utc)
|
27
46
|
else
|
28
47
|
Template.new(file_name, file.read, file.mtime.utc)
|
29
48
|
end
|
@@ -110,12 +110,12 @@ module BooticCli
|
|
110
110
|
# now, download missing files on local end
|
111
111
|
notice 'Downloading missing local templates & assets...'
|
112
112
|
copy_templates(diff.missing_in_source, local_theme, download_opts)
|
113
|
-
copy_assets(diff.missing_in_source, local_theme,
|
113
|
+
copy_assets(diff.missing_in_source, local_theme, download_opts)
|
114
114
|
|
115
115
|
# now, upload missing files on remote
|
116
116
|
notice 'Uploading missing remote templates & assets...'
|
117
117
|
copy_templates(diff.missing_in_target, remote_theme, download_opts)
|
118
|
-
copy_assets(diff.missing_in_target, remote_theme,
|
118
|
+
copy_assets(diff.missing_in_target, remote_theme, download_opts)
|
119
119
|
|
120
120
|
prompt.say "Synced! Preview this theme at #{remote_theme.path}", :cyan
|
121
121
|
end
|
@@ -132,10 +132,14 @@ module BooticCli
|
|
132
132
|
notice "Local <--- Remote"
|
133
133
|
|
134
134
|
diff.updated_in_target.templates.each do |t|
|
135
|
-
puts "Updated in remote: #{t.file_name} (updated at #{t.updated_on})"
|
135
|
+
puts "Updated template in remote: #{t.file_name} (updated at #{t.updated_on})"
|
136
136
|
puts t.diff.to_s(:color)
|
137
137
|
end
|
138
138
|
|
139
|
+
diff.updated_in_target.assets.each do |t|
|
140
|
+
puts "Updated asset in remote: #{t.file_name} (updated at #{t.updated_on})"
|
141
|
+
end
|
142
|
+
|
139
143
|
diff.missing_in_source.templates.each do |t|
|
140
144
|
puts "Remote template not in local dir: #{t.file_name}"
|
141
145
|
end
|
@@ -151,6 +155,10 @@ module BooticCli
|
|
151
155
|
puts t.diff.to_s(:color)
|
152
156
|
end
|
153
157
|
|
158
|
+
diff.updated_in_source.assets.each do |t|
|
159
|
+
puts "Updated locally: #{t.file_name} (updated at #{t.updated_on})"
|
160
|
+
end
|
161
|
+
|
154
162
|
diff.missing_in_target.templates.each do |f|
|
155
163
|
puts "Local template not in remote: #{f.file_name}"
|
156
164
|
end
|
@@ -213,7 +221,7 @@ module BooticCli
|
|
213
221
|
end
|
214
222
|
|
215
223
|
prompt.notice "Alrighty! Publishing your development theme..."
|
216
|
-
remote_theme.publish
|
224
|
+
remote_theme.publish # syncs dev to public, without flipping them
|
217
225
|
prompt.notice "Yay! Your development theme has been made public. Take a look at #{remote_theme.path}"
|
218
226
|
end
|
219
227
|
|
@@ -275,7 +283,7 @@ module BooticCli
|
|
275
283
|
if opts[:overwrite]
|
276
284
|
true
|
277
285
|
else
|
278
|
-
target_asset = to.assets.find{ |t| t.file_name == a.file_name }
|
286
|
+
target_asset = to.assets.find { |t| t.file_name == a.file_name }
|
279
287
|
if target_asset
|
280
288
|
opts[:interactive] && prompt.yes_or_no?("Asset exists: #{highlight(a.file_name)}. Overwrite?", false)
|
281
289
|
else
|
data/lib/bootic_cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootic_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ismael Celis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -146,6 +146,7 @@ extra_rdoc_files: []
|
|
146
146
|
files:
|
147
147
|
- ".gitignore"
|
148
148
|
- ".travis.yml"
|
149
|
+
- GUIA.md
|
149
150
|
- Gemfile
|
150
151
|
- LICENSE.txt
|
151
152
|
- README.md
|