sutty-cli 0.1.0

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 (39) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +168 -0
  3. data/README.md +60 -0
  4. data/exe/sutty-cli +18 -0
  5. data/lib/sutty/cli.rb +8 -0
  6. data/lib/sutty/cli/cli.rb +163 -0
  7. data/lib/sutty/cli/command.rb +123 -0
  8. data/lib/sutty/cli/commands/container.rb +39 -0
  9. data/lib/sutty/cli/commands/field.rb +87 -0
  10. data/lib/sutty/cli/commands/layout.rb +57 -0
  11. data/lib/sutty/cli/commands/post.rb +69 -0
  12. data/lib/sutty/cli/commands/theme.rb +49 -0
  13. data/lib/sutty/cli/templates/field/array.yml.erb +14 -0
  14. data/lib/sutty/cli/templates/field/belongs_to.yml.erb +16 -0
  15. data/lib/sutty/cli/templates/field/boolean.yml.erb +11 -0
  16. data/lib/sutty/cli/templates/field/color.yml.erb +11 -0
  17. data/lib/sutty/cli/templates/field/content.yml.erb +14 -0
  18. data/lib/sutty/cli/templates/field/date.yml.erb +11 -0
  19. data/lib/sutty/cli/templates/field/email.yml.erb +14 -0
  20. data/lib/sutty/cli/templates/field/encrypted_text.yml.erb +11 -0
  21. data/lib/sutty/cli/templates/field/event.yml.erb +40 -0
  22. data/lib/sutty/cli/templates/field/file.yml.erb +19 -0
  23. data/lib/sutty/cli/templates/field/geo.yml.erb +17 -0
  24. data/lib/sutty/cli/templates/field/has_and_belongs_to_many.yml.erb +16 -0
  25. data/lib/sutty/cli/templates/field/has_many.yml.erb +16 -0
  26. data/lib/sutty/cli/templates/field/image.yml.erb +19 -0
  27. data/lib/sutty/cli/templates/field/locales.yml.erb +11 -0
  28. data/lib/sutty/cli/templates/field/markdown.yml.erb +14 -0
  29. data/lib/sutty/cli/templates/field/markdown_content.yml.erb +14 -0
  30. data/lib/sutty/cli/templates/field/number.yml.erb +11 -0
  31. data/lib/sutty/cli/templates/field/order.yml.erb +11 -0
  32. data/lib/sutty/cli/templates/field/predefined_array.yml.erb +18 -0
  33. data/lib/sutty/cli/templates/field/related_posts.yml.erb +15 -0
  34. data/lib/sutty/cli/templates/field/string.yml.erb +14 -0
  35. data/lib/sutty/cli/templates/field/tel.yml.erb +14 -0
  36. data/lib/sutty/cli/templates/field/text.yml.erb +14 -0
  37. data/lib/sutty/cli/templates/field/url.yml.erb +14 -0
  38. data/lib/sutty/cli/version.rb +5 -0
  39. metadata +179 -0
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../command'
4
+ require 'tty-command'
5
+
6
+ module Sutty
7
+ module Cli
8
+ module Commands
9
+ class Container < Sutty::Cli::Command
10
+ attr_reader :name
11
+
12
+ def initialize(name, options)
13
+ @name = name
14
+ @options = options
15
+ end
16
+
17
+ def execute(input: $stdin, output: $stdout)
18
+ cmd.run('git clone https://0xacab.org/sutty/containers/skel.git', name)
19
+
20
+ Dir.chdir name do
21
+ cmd.run('git remote rename origin upstream')
22
+ cmd.run('git remote add origin', origin)
23
+ cmd.run('git push -u origin master')
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def origin
30
+ @origin ||= 'git@0xacab.org:sutty/containers/' + name + '.git'
31
+ end
32
+
33
+ def cmd
34
+ @cmd ||= TTY::Command.new
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../command'
4
+ require 'tty-file'
5
+ require 'tty-logger'
6
+ require 'pry'
7
+
8
+ module Sutty
9
+ module Cli
10
+ module Commands
11
+ class Field < Sutty::Cli::Command
12
+ attr_reader :name, :options
13
+
14
+ INVERSE_REQUIRED = %w[has_many belongs_to has_and_belongs_to_many].freeze
15
+ VALUE_REQUIRED = %w[-F --filter].freeze
16
+
17
+ def initialize(name, options)
18
+ @name = name
19
+ @options = options
20
+ end
21
+
22
+ def execute(input: $stdin, output: $stdout)
23
+ unless data_layout_contents.scan(/\n#{name}:\n/).empty?
24
+ logger.info "The #{name} field is already present, please edit #{data_layout}"
25
+ return true
26
+ end
27
+
28
+ TTY::File.safe_append_to_file(data_layout) do
29
+ ERB.new(template_contents, trim_mode: '<>', eoutvar: '@output_buffer').result(context)
30
+ end
31
+ end
32
+
33
+ def self.fields
34
+ @@fields ||= Dir.glob(source_dir.to_s + '/*.yml.erb').map do |f|
35
+ File.basename f, '.yml.erb'
36
+ end
37
+ end
38
+
39
+ def self.inverse_required?
40
+ ARGV.any? { |f| INVERSE_REQUIRED.include? f }
41
+ end
42
+
43
+ def self.value_required?
44
+ ARGV.any? { |f| VALUE_REQUIRED.include? f }
45
+ end
46
+
47
+ private
48
+
49
+ def self.source_dir
50
+ @@source_dir ||= Pathname(__dir__).join('..', 'templates', 'field')
51
+ end
52
+
53
+ def source_dir
54
+ self.class.source_dir
55
+ end
56
+
57
+ def context
58
+ return @context if @context
59
+ @context = OpenStruct.new(**options.transform_keys(&:to_sym))
60
+ @context[:name] = name
61
+
62
+ @context = @context.instance_eval('binding')
63
+ end
64
+
65
+ def template
66
+ @template ||= source_dir.join(options[:type] + '.yml.erb')
67
+ end
68
+
69
+ def template_contents
70
+ @template_contents ||= File.binread template
71
+ end
72
+
73
+ def data_layout
74
+ @data_layout ||= File.join('_data', 'layouts', options[:layout] + '.yml')
75
+ end
76
+
77
+ def data_layout_contents
78
+ @data_layout_contents ||= File.binread data_layout
79
+ end
80
+
81
+ def logger
82
+ @logger ||= TTY::Logger.new
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../command'
4
+ require 'tty-file'
5
+ require 'yaml'
6
+
7
+ module Sutty
8
+ module Cli
9
+ module Commands
10
+ class Layout < Sutty::Cli::Command
11
+ attr_reader :name
12
+
13
+ def initialize(name, options)
14
+ @name = name
15
+ @options = options
16
+ end
17
+
18
+ def execute(input: $stdin, output: $stdout)
19
+ TTY::File.create_file data_layout, YAML.dump(data_default_fields)
20
+ TTY::File.create_file html_layout, "---\nlayout: default\n---\n\n"
21
+ end
22
+
23
+ def self.layouts
24
+ @@layouts ||= Dir.glob(File.join('_data', 'layouts') + '/*.yml').map do |d|
25
+ File.basename d, '.yml'
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def data_default_fields
32
+ @data_default_fields ||= {
33
+ 'title' => {
34
+ 'type' => 'string',
35
+ 'label' => {
36
+ 'es' => 'Título',
37
+ 'en' => 'Title'
38
+ },
39
+ 'help' => {
40
+ 'es' => '',
41
+ 'en' => ''
42
+ }
43
+ }
44
+ }
45
+ end
46
+
47
+ def data_layout
48
+ @data_layout ||= File.join('_data', 'layouts', name + '.yml')
49
+ end
50
+
51
+ def html_layout
52
+ @html_layout ||= File.join('_layouts', name + '.html')
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../command'
4
+ require 'tty-logger'
5
+ require 'tty-file'
6
+ require 'yaml'
7
+ require 'securerandom'
8
+ require 'jekyll/utils'
9
+
10
+ module Sutty
11
+ module Cli
12
+ module Commands
13
+ class Post < Sutty::Cli::Command
14
+ attr_reader :options
15
+
16
+ CONTENT_FIELDS = %w[content markdown_content].freeze
17
+
18
+ def initialize(options)
19
+ @options = options
20
+ end
21
+
22
+ def execute(input: $stdin, output: $stdout)
23
+ if File.exist? path
24
+ logger.info "The file #{path} already exists"
25
+ return true
26
+ end
27
+
28
+ TTY::File.create_file path, YAML.dump(data) + "---\n\n"
29
+ end
30
+
31
+ private
32
+
33
+ def data
34
+ return @data if @data
35
+
36
+ @data = Hash[(data_layout.keys - CONTENT_FIELDS).map { |k| [k, nil] }]
37
+
38
+ # Required fields
39
+ @data['title'] = options[:title]
40
+ @data['layout'] = options[:layout]
41
+ @data['uuid'] = SecureRandom.uuid
42
+ @data['liquid'] = false
43
+
44
+ @data
45
+ end
46
+
47
+ def data_layout
48
+ @data_layout ||= YAML.safe_load(File.read(File.join('_data', 'layouts', options[:layout] + '.yml')))
49
+ end
50
+
51
+ def slug
52
+ @slug ||= Jekyll::Utils.slugify(options[:title])
53
+ end
54
+
55
+ def dir
56
+ @dir ||= '_' + options[:locale]
57
+ end
58
+
59
+ def path
60
+ @path ||= File.join(dir, options[:date] + '-' + slug + '.markdown')
61
+ end
62
+
63
+ def logger
64
+ @logger ||= TTY::Logger.new
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../command'
4
+ require 'tty-command'
5
+
6
+ module Sutty
7
+ module Cli
8
+ module Commands
9
+ class Theme < Sutty::Cli::Command
10
+ attr_reader :name
11
+
12
+ def initialize(name, options)
13
+ @name = name
14
+ @options = options
15
+ end
16
+
17
+ def execute(input: $stdin, output: $stdout)
18
+ cmd.run('git clone https://0xacab.org/sutty/jekyll/sutty-base-jekyll-theme.git', theme_name)
19
+
20
+ Dir.chdir theme_name do
21
+ cmd.run('git remote rename origin upstream')
22
+ cmd.run('git remote add origin', origin)
23
+ cmd.run('bundle install')
24
+ cmd.run('yarn install')
25
+ cmd.run('git mv sutty-base-jekyll-theme.gemspec', gemspec)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def theme_name
32
+ @theme_name ||= name + '-jekyll-theme'
33
+ end
34
+
35
+ def origin
36
+ @origin ||= 'git@0xacab.org:sutty/jekyll/' + theme_name + '.git'
37
+ end
38
+
39
+ def gemspec
40
+ @gemspec ||= theme_name + '.gemspec'
41
+ end
42
+
43
+ def cmd
44
+ @cmd ||= TTY::Command.new
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,14 @@
1
+ <%= name %>:
2
+ type: 'array'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ <% if private %>
7
+ private: true
8
+ <% end %>
9
+ label:
10
+ es: 'Nombre'
11
+ en: 'Name'
12
+ help:
13
+ es: 'Ayuda'
14
+ en: 'Ayuda'
@@ -0,0 +1,16 @@
1
+ <%= name %>:
2
+ type: 'belongs_to'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ inverse: '<%= inverse %>'
7
+ <% if filter %>
8
+ filter:
9
+ <%= filter %>: <%= value %>
10
+ <% end %>
11
+ label:
12
+ es: 'Nombre'
13
+ en: 'Name'
14
+ help:
15
+ es: 'Ayuda'
16
+ en: 'Ayuda'
@@ -0,0 +1,11 @@
1
+ <%= name %>:
2
+ type: 'boolean'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ label:
7
+ es: 'Nombre'
8
+ en: 'Name'
9
+ help:
10
+ es: 'Ayuda'
11
+ en: 'Ayuda'
@@ -0,0 +1,11 @@
1
+ <%= name %>:
2
+ type: 'color'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ label:
7
+ es: 'Nombre'
8
+ en: 'Name'
9
+ help:
10
+ es: 'Ayuda'
11
+ en: 'Ayuda'
@@ -0,0 +1,14 @@
1
+ <%= name %>:
2
+ type: 'content'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ <% if private %>
7
+ private: true
8
+ <% end %>
9
+ label:
10
+ es: 'Nombre'
11
+ en: 'Name'
12
+ help:
13
+ es: 'Ayuda'
14
+ en: 'Ayuda'
@@ -0,0 +1,11 @@
1
+ <%= name %>:
2
+ type: 'date'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ label:
7
+ es: 'Nombre'
8
+ en: 'Name'
9
+ help:
10
+ es: 'Ayuda'
11
+ en: 'Ayuda'
@@ -0,0 +1,14 @@
1
+ <%= name %>:
2
+ type: 'email'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ <% if private %>
7
+ private: true
8
+ <% end %>
9
+ label:
10
+ es: 'Nombre'
11
+ en: 'Name'
12
+ help:
13
+ es: 'Ayuda'
14
+ en: 'Ayuda'
@@ -0,0 +1,11 @@
1
+ <%= name %>:
2
+ type: 'encrypted_text'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ label:
7
+ es: 'Nombre'
8
+ en: 'Name'
9
+ help:
10
+ es: 'Ayuda'
11
+ en: 'Ayuda'
@@ -0,0 +1,40 @@
1
+ <%= name %>:
2
+ type: 'event'
3
+ <% if required %>
4
+ required: true
5
+ <% end %>
6
+ zone:
7
+ label:
8
+ es: 'Zona horaria'
9
+ en: 'Time zone'
10
+ help:
11
+ es: 'Ayuda'
12
+ en: 'Ayuda'
13
+ date:
14
+ label:
15
+ es: 'Fecha'
16
+ en: 'Date'
17
+ help:
18
+ es: 'Ayuda'
19
+ en: 'Ayuda'
20
+ time:
21
+ label:
22
+ es: 'Horario'
23
+ en: 'Time'
24
+ help:
25
+ es: 'Ayuda'
26
+ en: 'Ayuda'
27
+ dtstart:
28
+ label:
29
+ es: 'Comienzo del evento'
30
+ en: 'Event start'
31
+ help:
32
+ es: 'Ayuda'
33
+ en: 'Ayuda'
34
+ dtend:
35
+ label:
36
+ es: 'Fin del evento'
37
+ en: 'Event end'
38
+ help:
39
+ es: 'Ayuda'
40
+ en: 'Ayuda'