sutty-cli 0.1.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2861a746df3253cc323c20c175ecb6cff17f6698e5af27476a94b61be57a44ce
4
- data.tar.gz: d65178f01291d54edcc30151da1f931f9e14574bb53b2e81376cdda13afe072d
3
+ metadata.gz: bb3fe159753323120692f2a9362297ad2d426c86c9157c201701c4ea1550f751
4
+ data.tar.gz: 15cc8ce51e749cecf5b5d3660c94849315a9701eae3e6aab52e2a1a066f37ae0
5
5
  SHA512:
6
- metadata.gz: 0b7ade1e04b850371d13db0423a1609d57a2c8cd5aeaf9794f43d752673a6a0f6b1ec03287b3716aedff6698322aed693c0b27c4c945f0729e34242b9ed09187
7
- data.tar.gz: b6986ce3e917c661367984f55353c0f6db70b5f6e3302b7b035f386273f652704ea91ecaee9eab423b2779fee3c1cb7180333e89808da7310e3a55ccb19cc4bd
6
+ metadata.gz: dc9d1c193c52b4acca35a8ced028728d87f6146fbecc31be425922e057d0f4b1e40665409cab9a724cfe3c9fcb239095458ab2f274ee8ca3ece7f621d0ebf772
7
+ data.tar.gz: 6de2d1ab46cd4850bdd227a6c8820b603e5154438e6b117929211e37180d3e05fda67c2204be03331991533623e6fd3be38d2f334aab8bdfc4df97c2abd5a725
@@ -22,7 +22,7 @@ module Sutty
22
22
  end
23
23
  map %w(--version -v) => :version
24
24
 
25
- desc 'post NAME', 'Adds a 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, YAML.dump(data) + "---\n\n"
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 = Hash[(data_layout.keys - CONTENT_FIELDS).map { |k| [k, nil] }]
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[:title]
40
- @data['layout'] = options[:layout]
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[:layout] + '.yml')))
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[:title])
59
+ @slug ||= Jekyll::Utils.slugify(options['title'])
53
60
  end
54
61
 
55
62
  def dir
56
- @dir ||= '_' + options[:locale]
63
+ @dir ||= '_' + options['locale']
57
64
  end
58
65
 
59
66
  def path
60
- @path ||= File.join(dir, options[:date] + '-' + slug + '.markdown')
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sutty
4
4
  module Cli
5
- VERSION = "0.1.2"
5
+ VERSION = "0.2.1"
6
6
  end
7
7
  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.1.2
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-14 00:00:00.000000000 Z
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