bin/devist
#!/usr/bin/env ruby
require 'devist'
require 'colorize'
##############################################################
#
# bin/devist
# Halis Duraki <duraki.halis@nsoft.ba>
#
##############################################################
# bin/devist
# This file is a part of the devist package (2017).
#
# This is the main entry point of the Devist. It creates a binary instance and
# parse, execute and work with actions based on given arguments.
class Binary
def print_start
puts <<EOL
Use --help for details.
$ #{"devist init".blue} to initialize a new changelog
EOL
end
def logo
puts <<EOL
__ _ __
____/ /__ _ __(_)____/ /_
/ __ / _ \\ | / / / ___/ __/
/ /_/ / __/ |/ / (__ ) /_
\\__,_/\\___/|___/_/____/\\__/
EOL
end
def print_about
puts <<EOL
- Release notes generator.
#{"https://devist.io".yellow} - Halis Duraki <duraki@linuxmail.org>
EOL
end
# Print small about / info msg
def print_info
puts <<EOL
Use devist to keep & export beautiful release notes. Use syntax
defined by devist or keepachangelog standards. Various integration
supported, including `git` and `deployment` hooks.
EOL
end
# Print help menu.
def print_help
print_info
puts <<EOL
# To initialize a new changelog use:
$ #{"devist init".green}
-
# Other commands:
$ #{"devist".green} | run devist cli
$ #{"devist --cmd".green} | usage / commands
$ #{"devist --help".green} | usage / this menu
$ #{"devist --v".green} | show current version
-
# Generate HTML output:
$ #{"devist [CHANGELOG] [THEME]".green}
Example:
$ #{"devist changelog".green}
$ #{"devist changelog polar".green}
EOL
end
# Entry point. Main.
def ep (arguments)
@arguments = arguments
logo
print_about
# Recieved filename + theme as args
if @arguments.count.equal?(2)
return theme
end
if @arguments[0].nil?
print_info
print_start
end
# Check other arguments
case @arguments[0]
when '--h', '--help', '--cmd'
print_help
when '--v', '--version'
version
when '--new', 'init'
create # Deperecated version
else
default # Try to export with filename and default theme
return
end
end
# Generate with default theme.
def default
file_name = @arguments[0]
unless file_name.nil?
decompile(file_name)
end
end
# Generate with specific theme file.
def theme
file_name = @arguments[0]
theme_name = @arguments[1]
unless file_name.nil?
decompile(file_name, theme_name)
end
end
# Display devist version.
def version
print " * devist version: #{Devist::VERSION}\n"
end
# Create new changelog.
def create
print " * Generating CHANGELOG.md ...\n"
if File.file?(Dir.pwd + '/CHANGELOG.md')
print " * File CHANGELOG.md already exists. Backup it, remove, and try again.\n"
print " * You may try to run '#{"devist changelog".blue}' to try generate the export.\n"
abort
end
new = File.new(Dir.pwd + '/CHANGELOG.md', 'w')
print " * Output .devist as a way of thinkering ...\n"
thinkering(new)
print " -\n"
print " ** All done! Continue editing CHANGELOG.md.\n"
end
def name
`git config --global user.name`
end
def email
`git config --global user.email`
end
def origtoweb
remote = `git config --get remote.origin.url`
remote = 'git@github.com:duraki/devist.git'
web = remote[/@(.*?):/m, 1]
if web.empty?
web = "https://github.com/"
end
user = remote[/:(.*?)\//m, 1]
if user.empty?
user = "<username>"
end
project = remote[/\/(.*?)\./m, 1]
if project.empty?
project = "#{File.basename(Dir.pwd)}"
end
"https://#{web}/#{user}/#{project}"
end
# Fill new changelog.
def thinkering(new)
new.puts("@project: #{File.basename(Dir.pwd)} ")
new.puts("@author: #{name.strip} <#{email.strip}> ")
new.puts("@homepage: #{origtoweb} ")
new.puts('')
new.puts("### Version 1.0.0 of #{Time.now.strftime("%d %b %Y")}")
new.puts('+ #added: something goes here')
new.puts('')
new.puts('.devist')
new.close
end
# Decompile
def decompile(file_name, theme_name = 'default')
print " * devist will try to generate export for file '#{file_name}' with theme '#{theme_name}'\n"
@devist = Devist.new(file_name, theme_name)
@devist.decompile
@devist.recompile
end
end
# Create new bin/ep with argv
devistbin = Binary.new
devistbin.ep(ARGV)