scaffnew 1.0.0.rc

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.
@@ -0,0 +1,48 @@
1
+ # scaffnew
2
+ A simple scaffold for many purposes
3
+
4
+ ## Comandos
5
+
6
+ ### repository
7
+
8
+ #### scaff repository
9
+ __Alias:__ scaff repo
10
+
11
+ Alias for scaffn repository list
12
+
13
+ #### scaff repository list
14
+ __Alias:__ scaff repo list
15
+
16
+ List all repositories
17
+
18
+ #### scaff repository add <url> [name]
19
+ __Alias:__ scaff repo add <url> [name]
20
+
21
+ Add a new repository
22
+
23
+ * __url__ : The url of repository file
24
+ * __name__ (optional) : A optional intenal name for this repository. Used de name of repository file if not informed
25
+
26
+ #### scaff repository remove <name>
27
+ __Alias:__ scaff repo remove <name>
28
+
29
+ Remove a repository
30
+
31
+ * __name__ : The repository name to be deleted
32
+
33
+ #### scaff repository packages <repository>
34
+ __Alias:__ scaff repo packages <repository>
35
+
36
+ List a packages of the repository or all repositories.
37
+
38
+ * __repository__ (optional) : Repository name to show packages, if suppressed, show packages for all repositories
39
+
40
+
41
+ ### new
42
+
43
+ #### scaff new
44
+
45
+ Create scaffold from a package
46
+
47
+ * __repository__ : The package repository name
48
+ * __package__ : The package name
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/scaffnew.rb'
4
+ Scaffnew::Cli.start
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/scaffnew.rb'
4
+ Scaffnew::Cli.start
@@ -0,0 +1,47 @@
1
+ # Plano de ataque
2
+
3
+ ## Comandos
4
+
5
+ ### repository
6
+
7
+ #### scaff repository
8
+ __Alias:__ scaff repo
9
+
10
+ Alias for scaffn repository list
11
+
12
+ #### scaff repository list
13
+ __Alias:__ scaff repo list
14
+
15
+ List all repositories
16
+
17
+ #### scaff repository add <url> [name]
18
+ __Alias:__ scaff repo add <url> [name]
19
+
20
+ Add a new repository
21
+
22
+ * __url__ : The url of repository file
23
+ * __name__ (optional) : A optional intenal name for this repository. Used de name of repository file if not informed
24
+
25
+ #### scaff repository remove <name>
26
+ __Alias:__ scaff repo remove <name>
27
+
28
+ Remove a repository
29
+
30
+ * __name__ : The repository name to be deleted
31
+
32
+ #### scaff repository packages <repository>
33
+ __Alias:__ scaff repo packages <repository>
34
+
35
+ List a packages of the repository or all repositories.
36
+
37
+ * __repository__ (optional) : Repository name to show packages, if suppressed, show packages for all repositories
38
+
39
+
40
+ ### new
41
+
42
+ #### scaff new
43
+
44
+ Create scaffold from a package
45
+
46
+ * __repository__ : The package repository name
47
+ * __package__ : The package name
@@ -0,0 +1 @@
1
+ require_relative 'scaffnew/cli'
@@ -0,0 +1,54 @@
1
+ require_relative "command"
2
+
3
+ module Scaffnew
4
+
5
+ class Add < Command
6
+
7
+ def command (params)
8
+
9
+ p_url = params[0]
10
+ p_name = params[1]
11
+
12
+ error "Package url is required" if p_url.nil?
13
+
14
+ @workPath = @io.createWorkFolder()
15
+
16
+ begin
17
+ metadata = @io.downloadRemotePack(p_url, @workPath)
18
+ rescue Exception => e
19
+ roolback e.message
20
+ end
21
+
22
+ rollback "Invalid package metadata format" unless validateDataPack(metadata)
23
+
24
+ p_name ||= metadata['name']
25
+
26
+ roolback "'#{p_name}' already exist. Please change name or delete the current package" if @io.getPackage(p_name)
27
+
28
+ @io.moveWorkToPackage(@workPath, p_name)
29
+
30
+ success "Package #{p_name} successful instaled XD"
31
+
32
+ end
33
+
34
+ private
35
+
36
+ def roolback (message)
37
+ @io.removeWorkFolder(@workPath)
38
+ error message
39
+ end
40
+
41
+ def validateDataPack (metadata)
42
+ required = ['name', 'description', 'version'];
43
+
44
+ required.each do |needed|
45
+ if metadata[needed].nil? then
46
+ return false
47
+ end
48
+ end
49
+
50
+ return true
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ require 'thor'
2
+
3
+ require_relative 'params'
4
+ require_relative 'add'
5
+ require_relative 'list'
6
+ require_relative 'remove'
7
+ require_relative 'new'
8
+ require_relative 'package'
9
+
10
+ module Scaffnew
11
+
12
+ class Cli < Thor
13
+
14
+ def self.exit_on_failure?
15
+ true
16
+ end
17
+
18
+ desc('add URL [NAME]', "Add a new package")
19
+ def add (*params)
20
+ Add.new(self, params)
21
+ end
22
+
23
+ desc('list', "List all packages")
24
+ def list (*params)
25
+ List.new(self, params)
26
+ end
27
+
28
+ desc('remove NAME', "Remove a package")
29
+ def remove (*params)
30
+ Remove.new(self, params)
31
+ end
32
+
33
+ desc('new NAME', "Extract a package into the current folder")
34
+ def new (*params)
35
+ New.new(self, params)
36
+ end
37
+
38
+ desc('package', "Create a package from current folder")
39
+ def package (*params)
40
+ Package.new(self, params)
41
+ end
42
+
43
+ desc('version', "Display scaffnew version")
44
+ map %w[-v --version] => :version
45
+ def version
46
+ say "Scaffnew version #{VERSION}"
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,30 @@
1
+ require_relative "io"
2
+
3
+ module Scaffnew
4
+
5
+ class Command
6
+
7
+ def initialize (cli, param=nil)
8
+ @cli = cli
9
+ @io = IO.new()
10
+
11
+ command(param)
12
+ end
13
+
14
+ def command (param)
15
+ @cli.say "method \"command\" not found"
16
+ end
17
+
18
+ def say (message)
19
+ @cli.say message
20
+ end
21
+
22
+ def success (message)
23
+ @cli.say message
24
+ end
25
+
26
+ def error (message)
27
+ raise Thor::Error, "Error: #{message}"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,114 @@
1
+ require 'open-uri'
2
+ require 'yaml'
3
+ require 'yaml/store'
4
+ require 'time'
5
+ #require 'dir'
6
+
7
+ require_relative 'params.rb'
8
+
9
+ module Scaffnew
10
+ class IO
11
+
12
+ def initialize ()
13
+ prepareLocalFolder()
14
+ end
15
+
16
+ # WORK TOOLS
17
+
18
+ def createWorkFolder ()
19
+ path = "#{LOCAL_WORK_PATH}/work_#{Time.now.getutc.to_i}";
20
+ FileUtils.mkdir_p(path)
21
+ return path
22
+ end
23
+
24
+ def removeWorkFolder (path)
25
+ FileUtils.rm_rf(path)
26
+ end
27
+
28
+ def downloadRemotePack (url, workPath)
29
+ `wget -q #{url} -O #{workPath}/package.scaff`
30
+ `tar -xvf #{workPath}/package.scaff -C #{workPath}`
31
+
32
+ return YAML.load_file("#{workPath}/metadata")
33
+ end
34
+
35
+ def moveWorkToPackage (workPath, packageName)
36
+ FileUtils.rm("#{workPath}/package.scaff")
37
+ FileUtils.mv(workPath, "#{LOCAL_REPO_PATH}/#{packageName}")
38
+ end
39
+
40
+ def createData (path, workPath)
41
+ files = (Dir.entries(path) - ['.', '..']) * ' '
42
+ `tar -zcf #{workPath}/data.tar.gz -C #{path} #{files}`
43
+ end
44
+
45
+ def createMetadata (metadata, workPath)
46
+ store = YAML::Store.new("#{workPath}/metadata")
47
+ store.transaction do
48
+ metadata.each do |key, value|
49
+ store[key.to_s] = value
50
+ end
51
+ end
52
+ end
53
+
54
+ def packageWork (name, workPath)
55
+ `tar -cf #{name}.scaff -C #{workPath} data.tar.gz metadata`
56
+ end
57
+
58
+ # PACKAGE MANIPULATION
59
+
60
+ def getPackage (name)
61
+ return packageInfo(name)
62
+ end
63
+
64
+ def getAllPackages ()
65
+ packages = []
66
+
67
+ Dir.glob("#{LOCAL_REPO_PATH}/*") do |path|
68
+ if File.directory?(path) then
69
+ packages << packageInfo(File.basename(path))
70
+ end
71
+ end
72
+
73
+ return packages
74
+ end
75
+
76
+ def extractPackage (name, dest)
77
+ path = "#{LOCAL_REPO_PATH}/#{name}/#{PACKAGE_DATA_NAME}"
78
+ `tar -zxf #{path} -C #{dest}`
79
+ end
80
+
81
+ def removePackageFolder (name)
82
+ FileUtils.rm_rf("#{LOCAL_REPO_PATH}/#{name}")
83
+ end
84
+
85
+ private
86
+
87
+ def createLocalFolders ()
88
+ FileUtils.mkdir_p(LOCAL_REPO_PATH)
89
+ FileUtils.mkdir_p(LOCAL_WORK_PATH)
90
+ end
91
+
92
+ def prepareLocalFolder ()
93
+ if !File.directory?(LOCAL_PATH) then
94
+ createLocalFolders()
95
+ end
96
+ end
97
+
98
+ def packageInfo (name)
99
+ path = "#{LOCAL_REPO_PATH}/#{name}"
100
+
101
+ begin
102
+ return {
103
+ name: name,
104
+ meta: YAML.load_file("#{path}/#{PACKAGE_METADATA_NAME}"),
105
+ data: "#{path}/#{PACKAGE_DATA_NAME}"
106
+ }
107
+ rescue
108
+ return nil
109
+ end
110
+
111
+ end
112
+
113
+ end
114
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "command"
2
+
3
+ module Scaffnew
4
+
5
+ class List < Command
6
+
7
+ def command (params)
8
+ @io.getAllPackages().each do |package|
9
+ say " #{package[:name]} #{package[:meta]["description"]}"
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ require_relative "command"
2
+
3
+ module Scaffnew
4
+
5
+ class New < Command
6
+
7
+ def command (params)
8
+
9
+ p_name = params[0]
10
+ p_dest = "."
11
+
12
+ error "Package name param uninformed" if p_name.nil?
13
+
14
+ metadata = @io.getPackage(p_name)
15
+
16
+ error "Package '#{p_name}' not found" if metadata.nil?
17
+
18
+ @io.extractPackage(p_name, p_dest)
19
+
20
+ success "Package #{p_name} successful extracted"
21
+
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,52 @@
1
+ require_relative "command"
2
+
3
+ module Scaffnew
4
+
5
+ class Package < Command
6
+
7
+ def command (params)
8
+
9
+ p_path = "."
10
+
11
+ answer_name = @cli.ask("Package name (without spaces)")
12
+ answer_description = @cli.ask("Package description")
13
+ answer_version = @cli.ask("Package version")
14
+
15
+ @workPath = @io.createWorkFolder()
16
+
17
+ begin
18
+ @io.createData(p_path, @workPath)
19
+ rescue Exception => e
20
+ roolback e.message
21
+ end
22
+
23
+ metadata = {
24
+ name: answer_name,
25
+ description: answer_description,
26
+ version: answer_version
27
+ }
28
+
29
+ begin
30
+ @io.createMetadata(metadata, @workPath)
31
+ rescue Exception => e
32
+ roolback e.message
33
+ end
34
+
35
+ begin
36
+ @io.packageWork("#{answer_name}", @workPath)
37
+ rescue Exception => e
38
+ roolback e.message
39
+ end
40
+
41
+ @io.removeWorkFolder(@workPath)
42
+ end
43
+
44
+ private
45
+
46
+ def roolback (message)
47
+ @io.removeWorkFolder(@workPath)
48
+ error message
49
+ end
50
+
51
+ end
52
+ end