sutty-cli 0.2.1 → 0.3.0rc
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/lib/sutty/cli/cli.rb +42 -35
- data/lib/sutty/cli/commands/container.rb +4 -1
- data/lib/sutty/cli/commands/field.rb +94 -38
- data/lib/sutty/cli/commands/layout.rb +34 -21
- data/lib/sutty/cli/commands/theme.rb +9 -5
- data/lib/sutty/cli/i18n.rb +12 -0
- data/lib/sutty/cli/version.rb +1 -1
- data/lib/sutty/drop_stub.rb +10 -0
- data/lib/sutty/schema.rb +250 -0
- metadata +49 -29
- data/lib/sutty/cli/templates/field/array.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/belongs_to.yml.erb +0 -16
- data/lib/sutty/cli/templates/field/boolean.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/color.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/content.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/date.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/email.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/encrypted_text.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/event.yml.erb +0 -40
- data/lib/sutty/cli/templates/field/file.yml.erb +0 -19
- data/lib/sutty/cli/templates/field/geo.yml.erb +0 -17
- data/lib/sutty/cli/templates/field/has_and_belongs_to_many.yml.erb +0 -16
- data/lib/sutty/cli/templates/field/has_many.yml.erb +0 -16
- data/lib/sutty/cli/templates/field/image.yml.erb +0 -19
- data/lib/sutty/cli/templates/field/locales.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/markdown.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/markdown_content.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/number.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/order.yml.erb +0 -11
- data/lib/sutty/cli/templates/field/predefined_array.yml.erb +0 -18
- data/lib/sutty/cli/templates/field/related_posts.yml.erb +0 -15
- data/lib/sutty/cli/templates/field/string.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/tel.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/text.yml.erb +0 -14
- data/lib/sutty/cli/templates/field/url.yml.erb +0 -14
|
@@ -6,6 +6,8 @@ require 'tty-command'
|
|
|
6
6
|
module Sutty
|
|
7
7
|
module Cli
|
|
8
8
|
module Commands
|
|
9
|
+
# Genera una plantilla nueva, a partir de sutty-base-jekyll-theme
|
|
10
|
+
# y realiza la configuración inicial del repositorio.
|
|
9
11
|
class Theme < Sutty::Cli::Command
|
|
10
12
|
attr_reader :name
|
|
11
13
|
|
|
@@ -21,26 +23,28 @@ module Sutty
|
|
|
21
23
|
cmd.run('git remote rename origin upstream')
|
|
22
24
|
cmd.run('git remote add origin', origin)
|
|
23
25
|
cmd.run('git push -u origin master')
|
|
24
|
-
cmd.run('bundle install')
|
|
25
|
-
cmd.run('yarn install')
|
|
26
26
|
cmd.run('git mv sutty-base-jekyll-theme.gemspec', gemspec)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
private
|
|
31
31
|
|
|
32
|
+
# @return [String]
|
|
32
33
|
def theme_name
|
|
33
|
-
@theme_name ||= name
|
|
34
|
+
@theme_name ||= "#{name}-jekyll-theme"
|
|
34
35
|
end
|
|
35
36
|
|
|
37
|
+
# @return [String]
|
|
36
38
|
def origin
|
|
37
|
-
@origin ||=
|
|
39
|
+
@origin ||= "git@0xacab.org:sutty/jekyll/#{theme_name}.git"
|
|
38
40
|
end
|
|
39
41
|
|
|
42
|
+
# @return [String]
|
|
40
43
|
def gemspec
|
|
41
|
-
@gemspec ||= theme_name
|
|
44
|
+
@gemspec ||= "#{theme_name}.gemspec"
|
|
42
45
|
end
|
|
43
46
|
|
|
47
|
+
# @return [TTY::Command]
|
|
44
48
|
def cmd
|
|
45
49
|
@cmd ||= TTY::Command.new
|
|
46
50
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'i18n'
|
|
4
|
+
|
|
5
|
+
locale = ENV['LANG'].split('_', 2).first.to_sym
|
|
6
|
+
locales = Dir["#{File.expand_path(File.join(__dir__, '..', '..', '..', 'config', 'locales'))}/*.yml"]
|
|
7
|
+
|
|
8
|
+
I18n::Backend::Simple.include(I18n::Backend::Memoize)
|
|
9
|
+
I18n.load_path = locales
|
|
10
|
+
I18n.available_locales = locales.map { |l| File.basename(l, '.yml') }.map(&:to_sym)
|
|
11
|
+
I18n.default_locale = :es
|
|
12
|
+
I18n.locale = I18n.available_locales.include?(locale) ? locale : :es
|
data/lib/sutty/cli/version.rb
CHANGED
data/lib/sutty/schema.rb
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'jekyll/utils'
|
|
4
|
+
|
|
5
|
+
module Sutty
|
|
6
|
+
# Genera definiciones de campos para Sutty
|
|
7
|
+
class Schema
|
|
8
|
+
class << self
|
|
9
|
+
ATTRIBUTES = %i[type required private writable inverse filter]
|
|
10
|
+
|
|
11
|
+
# Definición base.
|
|
12
|
+
#
|
|
13
|
+
# Se eliminan los valores que son falsos o están vacíos.
|
|
14
|
+
#
|
|
15
|
+
# @return [Hash]
|
|
16
|
+
def base(**args)
|
|
17
|
+
validate_field_type(args[:type])
|
|
18
|
+
|
|
19
|
+
args.slice(*ATTRIBUTES).transform_keys(&:to_s).reject do |_, v|
|
|
20
|
+
v == false || v.nil?
|
|
21
|
+
end.merge(t(**args))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create(type:, **args)
|
|
25
|
+
validate_field_type(type)
|
|
26
|
+
|
|
27
|
+
public_send :"#{type}_field", **args
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Aplica traducciones
|
|
31
|
+
#
|
|
32
|
+
# @param :type [String]
|
|
33
|
+
# @param :name [String]
|
|
34
|
+
# @return [Hash] traducciones
|
|
35
|
+
def t(**args)
|
|
36
|
+
require_relative 'drop_stub'
|
|
37
|
+
|
|
38
|
+
I18n.available_locales.map do |locale|
|
|
39
|
+
I18n.with_locale(locale) do
|
|
40
|
+
%i[name type].map do |translation|
|
|
41
|
+
translation = I18n.t("fields.common_by_#{translation}.#{args[translation]}")
|
|
42
|
+
|
|
43
|
+
next if translation.is_a? String
|
|
44
|
+
|
|
45
|
+
translation
|
|
46
|
+
end.compact.first
|
|
47
|
+
end
|
|
48
|
+
end.compact.reduce({}) do |t, l|
|
|
49
|
+
Jekyll::Utils.deep_merge_hashes(t, l)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Texto de una sola línea
|
|
54
|
+
#
|
|
55
|
+
# @return [Hash]
|
|
56
|
+
def string_field(name:, **args)
|
|
57
|
+
{ name => base(type: 'string', name: name, **args) }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Texto de varias líneas
|
|
61
|
+
#
|
|
62
|
+
# @return [Hash]
|
|
63
|
+
def text_field(name:, **args)
|
|
64
|
+
{ name => base(type: 'text', name: name, **args) }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Números
|
|
68
|
+
#
|
|
69
|
+
# @return [Hash]
|
|
70
|
+
def number_field(name:, **args)
|
|
71
|
+
{ name => base(type: 'number', name: name, **args) }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# URL
|
|
75
|
+
#
|
|
76
|
+
# @return [Hash]
|
|
77
|
+
def url_field(name:, **args)
|
|
78
|
+
{ name => base(type: 'url', name: name, **args) }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# E-mail
|
|
82
|
+
#
|
|
83
|
+
# @return [Hash]
|
|
84
|
+
def email_field(name:, **args)
|
|
85
|
+
{ name => base(type: 'email', name: name, **args) }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Teléfono
|
|
89
|
+
#
|
|
90
|
+
# @return [Hash]
|
|
91
|
+
def tel_field(name:, **args)
|
|
92
|
+
{ name => base(type: 'tel', name: name, **args) }
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Color
|
|
96
|
+
#
|
|
97
|
+
# @return [Hash]
|
|
98
|
+
def color_field(name:, **args)
|
|
99
|
+
{ name => base(type: 'color', name: name, **args) }
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# SKU
|
|
103
|
+
#
|
|
104
|
+
# @return [Hash]
|
|
105
|
+
def sku_field(name:, **args)
|
|
106
|
+
{ name => base(type: 'sku', name: name, **args) }
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Precio. Los precios se escriben una sola vez.
|
|
110
|
+
#
|
|
111
|
+
# @return [Hash]
|
|
112
|
+
def price_field(name:, **args)
|
|
113
|
+
{ name => base(type: 'price', name: name, writable: 'once', **args) }
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Permalinks
|
|
117
|
+
#
|
|
118
|
+
# @return [Hash]
|
|
119
|
+
def permalink_field(name:, **args)
|
|
120
|
+
{ name => base(type: 'permalink', name: name, **args) }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Orden
|
|
124
|
+
#
|
|
125
|
+
# @return [Hash]
|
|
126
|
+
def order_field(name:, **args)
|
|
127
|
+
{ name => base(type: 'order', name: name, **args) }
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Verdadero/falso
|
|
131
|
+
#
|
|
132
|
+
# @return [Hash]
|
|
133
|
+
def boolean_field(name:, **args)
|
|
134
|
+
{ name => base(type: 'boolean', name: name, **args) }
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Contenido
|
|
138
|
+
#
|
|
139
|
+
# @return [Hash]
|
|
140
|
+
def content_field(name:, **args)
|
|
141
|
+
{ name => base(type: 'content', name: name, **args) }
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# HTML
|
|
145
|
+
#
|
|
146
|
+
# @return [Hash]
|
|
147
|
+
def html_field(name:, **args)
|
|
148
|
+
{ name => base(type: 'html', name: name, **args) }
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Oculto
|
|
152
|
+
#
|
|
153
|
+
# @return [Hash]
|
|
154
|
+
def hidden_field(name:, **args)
|
|
155
|
+
{ name => base(type: 'hidden', name: name, **args) }
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Fecha
|
|
159
|
+
#
|
|
160
|
+
# @return [Hash]
|
|
161
|
+
def date_field(name:, **args)
|
|
162
|
+
{ name => base(type: 'date', name: name, **args) }
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# Coordenadas geográficas
|
|
166
|
+
#
|
|
167
|
+
# @return [Hash]
|
|
168
|
+
def geo_field(name:, **args)
|
|
169
|
+
{ name => base(type: 'geo', name: name, **args) }
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Archivo
|
|
173
|
+
#
|
|
174
|
+
# @return [Hash]
|
|
175
|
+
def file_field(name:, **args)
|
|
176
|
+
{ name => base(type: 'file', name: name, **args) }
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Imagen
|
|
180
|
+
#
|
|
181
|
+
# @return [Hash]
|
|
182
|
+
def image_field(name:, **args)
|
|
183
|
+
{ name => base(type: 'image', name: name, **args) }
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Array
|
|
187
|
+
#
|
|
188
|
+
# @return [Hash]
|
|
189
|
+
def array_field(name:, **args)
|
|
190
|
+
{ name => base(type: 'array', name: name, **args) }
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Relacionados sin relación recíproca
|
|
194
|
+
#
|
|
195
|
+
# @return [Hash]
|
|
196
|
+
def related_posts_field(name:, **args)
|
|
197
|
+
{ name => base(type: 'related_posts', name: name, **args) }
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Relación de muchos a uno, la relación recíproca es has_many
|
|
201
|
+
#
|
|
202
|
+
# @return [Hash]
|
|
203
|
+
def belongs_to_field(name:, filter:, value:, **args)
|
|
204
|
+
{ name => base(type: 'belongs_to', name: name, filter: { filter => value }, **args) }
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Relación de uno a muchos, la relación recíproca es belongs_to
|
|
208
|
+
#
|
|
209
|
+
# @return [Hash]
|
|
210
|
+
def has_many_field(name:, filter:, value:, **args)
|
|
211
|
+
{ name => base(type: 'has_many', name: name, filter: { filter => value }, **args) }
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Relación de muchos a muchos, la relación recíproca es
|
|
215
|
+
# has_and_belongs_to_many.
|
|
216
|
+
#
|
|
217
|
+
# @return [Hash]
|
|
218
|
+
def has_and_belongs_to_many_field(name:, filter:, value:, **args)
|
|
219
|
+
{ name => base(type: 'has_and_belongs_to_many', name: name, filter: { filter => value }, **args) }
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# Los tipos de campos válidos son los que esta clase define como
|
|
223
|
+
# métodos terminados en _field
|
|
224
|
+
#
|
|
225
|
+
# @return [Array]
|
|
226
|
+
def field_types
|
|
227
|
+
@field_types ||= self.public_methods.select do |m|
|
|
228
|
+
m.to_s.end_with? '_field'
|
|
229
|
+
end.map do |m|
|
|
230
|
+
m.to_s.sub(/_field\z/, '').to_sym
|
|
231
|
+
end.sort
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Valida si el tipo de campo está definido
|
|
235
|
+
#
|
|
236
|
+
# @param [String,Symbol]
|
|
237
|
+
# @return [Boolean]
|
|
238
|
+
def field_type?(type)
|
|
239
|
+
self.respond_to? :"#{type}_field"
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Devuelve un error si el tipo del campo no es válido
|
|
243
|
+
#
|
|
244
|
+
# @return [Nil]
|
|
245
|
+
def validate_field_type(type)
|
|
246
|
+
raise ArgumentError, "#{type} must be one of #{field_types.map(&:to_s).join(', ')}" unless field_type? type
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sutty-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0rc
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- f
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-06-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: tty-command
|
|
@@ -94,6 +94,20 @@ dependencies:
|
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: '2.14'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: activesupport
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: 6.1.3
|
|
104
|
+
type: :runtime
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: 6.1.3
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
112
|
name: tty
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,6 +136,34 @@ dependencies:
|
|
|
122
136
|
- - "~>"
|
|
123
137
|
- !ruby/object:Gem::Version
|
|
124
138
|
version: '0'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: minitest
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '5.14'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '5.14'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: rake
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '12.3'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '12.3'
|
|
125
167
|
description: Tools to develop Sutty's themes and plugins
|
|
126
168
|
email:
|
|
127
169
|
- f@sutty.nl
|
|
@@ -143,32 +185,10 @@ files:
|
|
|
143
185
|
- lib/sutty/cli/commands/layout.rb
|
|
144
186
|
- lib/sutty/cli/commands/post.rb
|
|
145
187
|
- lib/sutty/cli/commands/theme.rb
|
|
146
|
-
- lib/sutty/cli/
|
|
147
|
-
- lib/sutty/cli/templates/field/belongs_to.yml.erb
|
|
148
|
-
- lib/sutty/cli/templates/field/boolean.yml.erb
|
|
149
|
-
- lib/sutty/cli/templates/field/color.yml.erb
|
|
150
|
-
- lib/sutty/cli/templates/field/content.yml.erb
|
|
151
|
-
- lib/sutty/cli/templates/field/date.yml.erb
|
|
152
|
-
- lib/sutty/cli/templates/field/email.yml.erb
|
|
153
|
-
- lib/sutty/cli/templates/field/encrypted_text.yml.erb
|
|
154
|
-
- lib/sutty/cli/templates/field/event.yml.erb
|
|
155
|
-
- lib/sutty/cli/templates/field/file.yml.erb
|
|
156
|
-
- lib/sutty/cli/templates/field/geo.yml.erb
|
|
157
|
-
- lib/sutty/cli/templates/field/has_and_belongs_to_many.yml.erb
|
|
158
|
-
- lib/sutty/cli/templates/field/has_many.yml.erb
|
|
159
|
-
- lib/sutty/cli/templates/field/image.yml.erb
|
|
160
|
-
- lib/sutty/cli/templates/field/locales.yml.erb
|
|
161
|
-
- lib/sutty/cli/templates/field/markdown.yml.erb
|
|
162
|
-
- lib/sutty/cli/templates/field/markdown_content.yml.erb
|
|
163
|
-
- lib/sutty/cli/templates/field/number.yml.erb
|
|
164
|
-
- lib/sutty/cli/templates/field/order.yml.erb
|
|
165
|
-
- lib/sutty/cli/templates/field/predefined_array.yml.erb
|
|
166
|
-
- lib/sutty/cli/templates/field/related_posts.yml.erb
|
|
167
|
-
- lib/sutty/cli/templates/field/string.yml.erb
|
|
168
|
-
- lib/sutty/cli/templates/field/tel.yml.erb
|
|
169
|
-
- lib/sutty/cli/templates/field/text.yml.erb
|
|
170
|
-
- lib/sutty/cli/templates/field/url.yml.erb
|
|
188
|
+
- lib/sutty/cli/i18n.rb
|
|
171
189
|
- lib/sutty/cli/version.rb
|
|
190
|
+
- lib/sutty/drop_stub.rb
|
|
191
|
+
- lib/sutty/schema.rb
|
|
172
192
|
homepage: https://0xacab.org/sutty/sutty-cli
|
|
173
193
|
licenses:
|
|
174
194
|
- MIT
|
|
@@ -196,9 +216,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
196
216
|
version: 2.6.0
|
|
197
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
218
|
requirements:
|
|
199
|
-
- - "
|
|
219
|
+
- - ">"
|
|
200
220
|
- !ruby/object:Gem::Version
|
|
201
|
-
version:
|
|
221
|
+
version: 1.3.1
|
|
202
222
|
requirements: []
|
|
203
223
|
rubygems_version: 3.1.2
|
|
204
224
|
signing_key:
|