sutty-cli 0.1.2 → 0.2.1
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 +9 -3
- data/lib/sutty/cli/commands/post.rb +110 -9
- data/lib/sutty/cli/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb3fe159753323120692f2a9362297ad2d426c86c9157c201701c4ea1550f751
|
4
|
+
data.tar.gz: 15cc8ce51e749cecf5b5d3660c94849315a9701eae3e6aab52e2a1a066f37ae0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc9d1c193c52b4acca35a8ced028728d87f6146fbecc31be425922e057d0f4b1e40665409cab9a724cfe3c9fcb239095458ab2f274ee8ca3ece7f621d0ebf772
|
7
|
+
data.tar.gz: 6de2d1ab46cd4850bdd227a6c8820b603e5154438e6b117929211e37180d3e05fda67c2204be03331991533623e6fd3be38d2f334aab8bdfc4df97c2abd5a725
|
data/lib/sutty/cli/cli.rb
CHANGED
@@ -22,7 +22,7 @@ module Sutty
|
|
22
22
|
end
|
23
23
|
map %w(--version -v) => :version
|
24
24
|
|
25
|
-
desc 'post
|
25
|
+
desc 'post', 'Adds a post'
|
26
26
|
method_option :help, aliases: '-h', type: :boolean,
|
27
27
|
desc: 'Display usage information'
|
28
28
|
|
@@ -36,8 +36,7 @@ module Sutty
|
|
36
36
|
method_option :title,
|
37
37
|
aliases: '-t',
|
38
38
|
type: :string,
|
39
|
-
desc: 'Title'
|
40
|
-
required: true
|
39
|
+
desc: 'Title'
|
41
40
|
|
42
41
|
method_option :date,
|
43
42
|
aliases: '-d',
|
@@ -52,6 +51,13 @@ module Sutty
|
|
52
51
|
desc: 'Locale collection',
|
53
52
|
default: 'posts'
|
54
53
|
|
54
|
+
method_option :content,
|
55
|
+
aliases: '-c',
|
56
|
+
type: :string,
|
57
|
+
desc: 'Text length',
|
58
|
+
default: 'short',
|
59
|
+
enum: %w[short long]
|
60
|
+
|
55
61
|
def post
|
56
62
|
if options[:help]
|
57
63
|
invoke :help, ['post']
|
@@ -6,6 +6,7 @@ require 'tty-file'
|
|
6
6
|
require 'yaml'
|
7
7
|
require 'securerandom'
|
8
8
|
require 'jekyll/utils'
|
9
|
+
require 'faker'
|
9
10
|
|
10
11
|
module Sutty
|
11
12
|
module Cli
|
@@ -16,7 +17,8 @@ module Sutty
|
|
16
17
|
CONTENT_FIELDS = %w[content markdown_content].freeze
|
17
18
|
|
18
19
|
def initialize(options)
|
19
|
-
@options = options
|
20
|
+
@options = options.to_h
|
21
|
+
@options['title'] ||= random_string(10)
|
20
22
|
end
|
21
23
|
|
22
24
|
def execute(input: $stdin, output: $stdout)
|
@@ -25,7 +27,10 @@ module Sutty
|
|
25
27
|
return true
|
26
28
|
end
|
27
29
|
|
28
|
-
TTY::File.create_file path,
|
30
|
+
TTY::File.create_file path,
|
31
|
+
YAML.dump(data) +
|
32
|
+
"---\n\n" +
|
33
|
+
(content? ? random_markdown : '')
|
29
34
|
end
|
30
35
|
|
31
36
|
private
|
@@ -33,11 +38,13 @@ module Sutty
|
|
33
38
|
def data
|
34
39
|
return @data if @data
|
35
40
|
|
36
|
-
@data =
|
41
|
+
@data = (data_layout.keys - CONTENT_FIELDS).map do |k|
|
42
|
+
[k, generate_data(k)]
|
43
|
+
end.to_h
|
37
44
|
|
38
45
|
# Required fields
|
39
|
-
@data['title'] = options[
|
40
|
-
@data['layout'] = options[
|
46
|
+
@data['title'] = options['title']
|
47
|
+
@data['layout'] = options['layout']
|
41
48
|
@data['uuid'] = SecureRandom.uuid
|
42
49
|
@data['liquid'] = false
|
43
50
|
|
@@ -45,24 +52,118 @@ module Sutty
|
|
45
52
|
end
|
46
53
|
|
47
54
|
def data_layout
|
48
|
-
@data_layout ||= YAML.safe_load(File.read(File.join('_data', 'layouts', options[
|
55
|
+
@data_layout ||= YAML.safe_load(File.read(File.join('_data', 'layouts', options['layout'] + '.yml')))
|
49
56
|
end
|
50
57
|
|
51
58
|
def slug
|
52
|
-
@slug ||= Jekyll::Utils.slugify(options[
|
59
|
+
@slug ||= Jekyll::Utils.slugify(options['title'])
|
53
60
|
end
|
54
61
|
|
55
62
|
def dir
|
56
|
-
@dir ||= '_' + options[
|
63
|
+
@dir ||= '_' + options['locale']
|
57
64
|
end
|
58
65
|
|
59
66
|
def path
|
60
|
-
@path ||= File.join(dir, options[
|
67
|
+
@path ||= File.join(dir, options['date'] + '-' + slug + '.markdown')
|
61
68
|
end
|
62
69
|
|
63
70
|
def logger
|
64
71
|
@logger ||= TTY::Logger.new
|
65
72
|
end
|
73
|
+
|
74
|
+
def generate_data(key)
|
75
|
+
# TODO: Generate private data
|
76
|
+
return if data_layout[key]['private']
|
77
|
+
# Sometimes data is optional
|
78
|
+
return unless data_layout[key]['required'] || random_boolean
|
79
|
+
|
80
|
+
case data_layout[key]['type']
|
81
|
+
when 'string' then random_text(1)
|
82
|
+
when 'text' then random_text(3)
|
83
|
+
when 'markdown' then random_markdown(3)
|
84
|
+
when 'number' then random_number(255)
|
85
|
+
when 'order' then random_number(255)
|
86
|
+
when 'tel' then Faker::PhoneNumber.phone_number
|
87
|
+
when 'date' then Faker::Date.in_date_period
|
88
|
+
when 'array' then Array.new(random_number(10)) { random_string(random_number(3)) }
|
89
|
+
when 'predefined_array' then data_layout[key]['values'].keys.sample
|
90
|
+
when 'boolean' then random_boolean
|
91
|
+
when 'color' then random_color
|
92
|
+
when 'email' then Faker::Internet.email
|
93
|
+
when 'url' then Faker::Internet.url
|
94
|
+
when 'file' then random_file
|
95
|
+
when 'image' then random_file
|
96
|
+
when 'belongs_to' then random_post(key)
|
97
|
+
when 'has_many' then random_posts(key)
|
98
|
+
when 'has_and_belongs_to_many' then random_posts(key)
|
99
|
+
when 'locales' then random_posts(key)
|
100
|
+
when 'related_posts' then random_posts
|
101
|
+
when 'geo'
|
102
|
+
{
|
103
|
+
'lat' => Faker::Address.latitude,
|
104
|
+
'lng' => Faker::Address.longitude
|
105
|
+
}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def random_number(digits)
|
110
|
+
rand(1..digits)
|
111
|
+
end
|
112
|
+
|
113
|
+
def random_text(longitude = nil)
|
114
|
+
longitude ||= long? ? random_number(20) : random_number(5)
|
115
|
+
|
116
|
+
Faker::Lorem.paragraphs(number: longitude).join("\n\n")
|
117
|
+
end
|
118
|
+
|
119
|
+
def random_string(longitude = random_number(10))
|
120
|
+
Faker::Lorem.sentence(word_count: longitude)
|
121
|
+
end
|
122
|
+
|
123
|
+
def random_markdown(longitude = nil)
|
124
|
+
longitude ||= long? ? random_number(20) : random_number(5)
|
125
|
+
|
126
|
+
Faker::Markdown.sandwich(sentences: longitude,
|
127
|
+
repeat: long? ? random_number(5) : 1)
|
128
|
+
end
|
129
|
+
|
130
|
+
def long?
|
131
|
+
options['content'] == 'long'
|
132
|
+
end
|
133
|
+
|
134
|
+
def random_color
|
135
|
+
Random.bytes(3).unpack1('H*')
|
136
|
+
end
|
137
|
+
|
138
|
+
def random_boolean
|
139
|
+
@random_boolean ||= [true,false]
|
140
|
+
|
141
|
+
@random_boolean.sample
|
142
|
+
end
|
143
|
+
|
144
|
+
def random_file
|
145
|
+
{
|
146
|
+
'path' => 'public/placeholder.png',
|
147
|
+
'description' => random_string(1)
|
148
|
+
}
|
149
|
+
end
|
150
|
+
|
151
|
+
# TODO: Implement relationships between posts
|
152
|
+
def random_post(key = nil)
|
153
|
+
SecureRandom.uuid
|
154
|
+
end
|
155
|
+
|
156
|
+
def random_posts(key = nil)
|
157
|
+
Array.new(random_number(10)) { random_post(key) }
|
158
|
+
end
|
159
|
+
|
160
|
+
def types
|
161
|
+
@types ||= data_layout.values.map { |v| v['type'] }.uniq
|
162
|
+
end
|
163
|
+
|
164
|
+
def content?
|
165
|
+
@content ||= CONTENT_FIELDS.map { |f| types.include? f }.any?
|
166
|
+
end
|
66
167
|
end
|
67
168
|
end
|
68
169
|
end
|
data/lib/sutty/cli/version.rb
CHANGED
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.1
|
4
|
+
version: 0.2.1
|
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-
|
11
|
+
date: 2020-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tty-command
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '4'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: thor
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faker
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.14'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.14'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: tty
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|