sutty-cli 0.2.1 → 0.3.0rc3

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/config/locales/en.yml +290 -0
  3. data/config/locales/es.yml +285 -0
  4. data/lib/sutty/cli/cli.rb +43 -35
  5. data/lib/sutty/cli/commands/container.rb +4 -1
  6. data/lib/sutty/cli/commands/field.rb +94 -38
  7. data/lib/sutty/cli/commands/layout.rb +34 -21
  8. data/lib/sutty/cli/commands/theme.rb +18 -7
  9. data/lib/sutty/cli/i18n.rb +12 -0
  10. data/lib/sutty/cli/version.rb +1 -1
  11. data/lib/sutty/drop_stub.rb +10 -0
  12. data/lib/sutty/schema.rb +250 -0
  13. metadata +51 -29
  14. data/lib/sutty/cli/templates/field/array.yml.erb +0 -14
  15. data/lib/sutty/cli/templates/field/belongs_to.yml.erb +0 -16
  16. data/lib/sutty/cli/templates/field/boolean.yml.erb +0 -11
  17. data/lib/sutty/cli/templates/field/color.yml.erb +0 -11
  18. data/lib/sutty/cli/templates/field/content.yml.erb +0 -14
  19. data/lib/sutty/cli/templates/field/date.yml.erb +0 -11
  20. data/lib/sutty/cli/templates/field/email.yml.erb +0 -14
  21. data/lib/sutty/cli/templates/field/encrypted_text.yml.erb +0 -11
  22. data/lib/sutty/cli/templates/field/event.yml.erb +0 -40
  23. data/lib/sutty/cli/templates/field/file.yml.erb +0 -19
  24. data/lib/sutty/cli/templates/field/geo.yml.erb +0 -17
  25. data/lib/sutty/cli/templates/field/has_and_belongs_to_many.yml.erb +0 -16
  26. data/lib/sutty/cli/templates/field/has_many.yml.erb +0 -16
  27. data/lib/sutty/cli/templates/field/image.yml.erb +0 -19
  28. data/lib/sutty/cli/templates/field/locales.yml.erb +0 -11
  29. data/lib/sutty/cli/templates/field/markdown.yml.erb +0 -14
  30. data/lib/sutty/cli/templates/field/markdown_content.yml.erb +0 -14
  31. data/lib/sutty/cli/templates/field/number.yml.erb +0 -11
  32. data/lib/sutty/cli/templates/field/order.yml.erb +0 -11
  33. data/lib/sutty/cli/templates/field/predefined_array.yml.erb +0 -18
  34. data/lib/sutty/cli/templates/field/related_posts.yml.erb +0 -15
  35. data/lib/sutty/cli/templates/field/string.yml.erb +0 -14
  36. data/lib/sutty/cli/templates/field/tel.yml.erb +0 -14
  37. data/lib/sutty/cli/templates/field/text.yml.erb +0 -14
  38. data/lib/sutty/cli/templates/field/url.yml.erb +0 -14
@@ -6,8 +6,10 @@ 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
- attr_reader :name
12
+ attr_reader :name, :options
11
13
 
12
14
  def initialize(name, options)
13
15
  @name = name
@@ -20,27 +22,36 @@ module Sutty
20
22
  Dir.chdir theme_name do
21
23
  cmd.run('git remote rename origin upstream')
22
24
  cmd.run('git remote add origin', origin)
23
- cmd.run('git push -u origin master')
24
- cmd.run('bundle install')
25
- cmd.run('yarn install')
25
+ cmd.run('git lfs fetch --all upstream')
26
+
27
+ unless options[:no_push]
28
+ cmd.run('git lfs push --all origin')
29
+ cmd.run('git push -u origin master')
30
+ end
31
+
26
32
  cmd.run('git mv sutty-base-jekyll-theme.gemspec', gemspec)
33
+ cmd.run('make install')
27
34
  end
28
35
  end
29
36
 
30
37
  private
31
38
 
39
+ # @return [String]
32
40
  def theme_name
33
- @theme_name ||= name + '-jekyll-theme'
41
+ @theme_name ||= "#{name}-jekyll-theme"
34
42
  end
35
43
 
44
+ # @return [String]
36
45
  def origin
37
- @origin ||= 'git@0xacab.org:sutty/jekyll/' + theme_name + '.git'
46
+ @origin ||= "git@0xacab.org:sutty/jekyll/#{theme_name}.git"
38
47
  end
39
48
 
49
+ # @return [String]
40
50
  def gemspec
41
- @gemspec ||= theme_name + '.gemspec'
51
+ @gemspec ||= "#{theme_name}.gemspec"
42
52
  end
43
53
 
54
+ # @return [TTY::Command]
44
55
  def cmd
45
56
  @cmd ||= TTY::Command.new
46
57
  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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sutty
4
4
  module Cli
5
- VERSION = "0.2.1"
5
+ VERSION = "0.3.0rc3"
6
6
  end
7
7
  end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A veces necesitamos una versión falsa de esto para Jekyll::Utils
4
+ unless Object.const_defined? 'Jekyll::Drops::Drop'
5
+ module Jekyll
6
+ module Drops
7
+ class Drop ; end
8
+ end
9
+ end
10
+ end
@@ -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.2.1
4
+ version: 0.3.0rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - f
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-21 00:00:00.000000000 Z
11
+ date: 2021-08-26 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
@@ -134,6 +176,8 @@ extra_rdoc_files:
134
176
  files:
135
177
  - LICENSE.txt
136
178
  - README.md
179
+ - config/locales/en.yml
180
+ - config/locales/es.yml
137
181
  - exe/sutty-cli
138
182
  - lib/sutty/cli.rb
139
183
  - lib/sutty/cli/cli.rb
@@ -143,32 +187,10 @@ files:
143
187
  - lib/sutty/cli/commands/layout.rb
144
188
  - lib/sutty/cli/commands/post.rb
145
189
  - lib/sutty/cli/commands/theme.rb
146
- - lib/sutty/cli/templates/field/array.yml.erb
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
190
+ - lib/sutty/cli/i18n.rb
171
191
  - lib/sutty/cli/version.rb
192
+ - lib/sutty/drop_stub.rb
193
+ - lib/sutty/schema.rb
172
194
  homepage: https://0xacab.org/sutty/sutty-cli
173
195
  licenses:
174
196
  - MIT
@@ -196,9 +218,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
218
  version: 2.6.0
197
219
  required_rubygems_version: !ruby/object:Gem::Requirement
198
220
  requirements:
199
- - - ">="
221
+ - - ">"
200
222
  - !ruby/object:Gem::Version
201
- version: '0'
223
+ version: 1.3.1
202
224
  requirements: []
203
225
  rubygems_version: 3.1.2
204
226
  signing_key: