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 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