forked from mixonic/ember-community-versions
-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathcreate_badge.rb
More file actions
99 lines (76 loc) · 1.97 KB
/
Copy pathcreate_badge.rb
File metadata and controls
99 lines (76 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env ruby
require 'highline/import'
require 'versionomy'
class Wizard
attr_reader :name, :start_version, :end_version
def run
say('Welcome to the ember-cli-deploy badge creator!')
@name = ask('What is the name of your plugin?') do |q|
q.validate = /\A(\w|-|_)+\z/
end
@start_version = ask('What is the first supported ember-cli-deploy version?', lambda(&method(:extract_version))) do |q|
q.validate = lambda { |v| v.empty? ? false : extract_version(v) }
end
@end_version = ask('What is the last supported ember-cli-deploy version (if any)?', lambda(&method(:extract_version))) do |q|
q.validate = lambda { |v| v.empty? ? true : extract_version(v) }
end
self
end
private
def extract_version(v)
v.empty? ? false : Versionomy.parse(v)
rescue Versionomy::Errors::ParseError
false
end
end
class Output
def initialize(wizard)
@wizard = wizard
end
def to_yml
yml = <<STR
---
layout: plugin
start_version: #{wizard.start_version.unparse(required_fields: [:major, :minor, :tiny])}
STR
if wizard.end_version
yml += "end_version: #{wizard.end_version.unparse(required_fields: [:major, :minor, :tiny])}\n"
yml += "max_supported_version: #{serialize_version(wizard.end_version)}\n"
end
yml += <<STR
permalink: /plugins/#{wizard.name}.svg
---
STR
yml
end
private
attr_reader :wizard
def serialize_version(v)
b = v.beta_version rescue 0
sprintf("%03d%03d%03d%03d", v.major, v.minor, v.tiny, b)
end
end
class Writer
def initialize(name, data)
@name = "#{name}.svg"
@data = data
end
def write
File.open(path, 'w+') do |f|
f << data
end
end
def path
File.join(File.dirname(File.expand_path((__FILE__))), "/plugins/#{name}")
end
private
attr_reader :name, :data
end
class PluginCreator
def run
wizard = Wizard.new.run
data = Output.new(wizard).to_yml
Writer.new(wizard.name, data).write
end
end
PluginCreator.new.run