asker-tool 2.1.3 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +17 -17
- data/lib/asker.rb +40 -83
- data/lib/asker/application.rb +1 -1
- data/lib/asker/checker.rb +42 -25
- data/lib/asker/cli.rb +1 -1
- data/lib/asker/data/world.rb +2 -0
- data/lib/asker/{exporter/code_screen_exporter.rb → displayer/code_displayer.rb} +6 -6
- data/lib/asker/{exporter/concept_ai_screen_exporter.rb → displayer/concept_ai_displayer.rb} +27 -29
- data/lib/asker/displayer/concept_displayer.rb +27 -0
- data/lib/asker/displayer/stats_displayer.rb +13 -0
- data/lib/asker/exporter/code_gift_exporter.rb +10 -11
- data/lib/asker/exporter/concept_ai_gift_exporter.rb +9 -9
- data/lib/asker/exporter/concept_ai_yaml_exporter.rb +2 -4
- data/lib/asker/exporter/concept_doc_exporter.rb +9 -15
- data/lib/asker/exporter/output_file_exporter.rb +18 -0
- data/lib/asker/files/example-concept.haml +25 -8
- data/lib/asker/formatter/concept_string_formatter.rb +9 -8
- data/lib/asker/lang/lang.rb +3 -4
- data/lib/asker/lang/locales/du/templates.yaml +50 -0
- data/lib/asker/lang/locales/en/connectors.yaml +44 -0
- data/lib/asker/lang/locales/en/mistakes.yaml +37 -0
- data/lib/asker/lang/locales/en/templates.yaml +29 -0
- data/lib/asker/lang/locales/es/connectors.yaml +92 -0
- data/lib/asker/lang/locales/es/mistakes.yaml +82 -0
- data/lib/asker/lang/locales/es/templates.yaml +29 -0
- data/lib/asker/lang/locales/fr/connectors.yaml +92 -0
- data/lib/asker/lang/locales/fr/mistakes.yaml +82 -0
- data/lib/asker/lang/locales/fr/templates.yaml +29 -0
- data/lib/asker/lang/locales/javascript/connectors.yaml +11 -0
- data/lib/asker/lang/locales/javascript/mistakes.yaml +30 -0
- data/lib/asker/lang/locales/javascript/templates.yaml +3 -0
- data/lib/asker/lang/locales/math/connectors.yaml +2 -0
- data/lib/asker/lang/locales/math/mistakes.yaml +2 -0
- data/lib/asker/lang/locales/math/templates.yaml +1 -0
- data/lib/asker/lang/locales/python/connectors.yaml +11 -0
- data/lib/asker/lang/locales/python/mistakes.yaml +26 -0
- data/lib/asker/lang/locales/python/templates.yaml +3 -0
- data/lib/asker/lang/locales/ruby/connectors.yaml +11 -0
- data/lib/asker/lang/locales/ruby/mistakes.yaml +33 -0
- data/lib/asker/lang/locales/ruby/templates.yaml +3 -0
- data/lib/asker/lang/locales/sql/connectors.yaml +6 -0
- data/lib/asker/lang/locales/sql/mistakes.yaml +11 -0
- data/lib/asker/lang/locales/sql/templates.yaml +2 -0
- data/lib/asker/loader/input_loader.rb +22 -5
- data/lib/asker/loader/project_loader.rb +25 -24
- data/lib/asker/logger.rb +1 -2
- data/lib/asker/project.rb +5 -3
- data/lib/asker/skeleton.rb +25 -24
- metadata +47 -63
- data/docs/changelog/v2.1.md +0 -99
- data/docs/commands.md +0 -12
- data/docs/contributions.md +0 -18
- data/docs/history.md +0 -40
- data/docs/idea.md +0 -44
- data/docs/inputs/README.md +0 -39
- data/docs/inputs/code.md +0 -69
- data/docs/inputs/concepts.md +0 -142
- data/docs/inputs/jedi.md +0 -68
- data/docs/inputs/tables.md +0 -112
- data/docs/inputs/templates.md +0 -87
- data/docs/install/README.md +0 -38
- data/docs/install/manual.md +0 -26
- data/docs/install/scripts.md +0 -38
- data/docs/revise/asker-file.md +0 -41
- data/docs/revise/buenas-practicas/01-convocatoria.md +0 -30
- data/docs/revise/buenas-practicas/02-formulario.md +0 -35
- data/docs/revise/buenas-practicas/03-descripcion.md +0 -63
- data/docs/revise/buenas-practicas/04-resultados.md +0 -17
- data/docs/revise/buenas-practicas/05-reproducir.md +0 -10
- data/docs/revise/ejemplos/01/README.md +0 -27
- data/docs/revise/ejemplos/02/README.md +0 -31
- data/docs/revise/ejemplos/03/README.md +0 -31
- data/docs/revise/ejemplos/04/README.md +0 -37
- data/docs/revise/ejemplos/05/README.md +0 -25
- data/docs/revise/ejemplos/06/README.md +0 -43
- data/docs/revise/ejemplos/README.md +0 -11
- data/docs/revise/projects.md +0 -74
- data/lib/asker/exporter/concept_screen_exporter.rb +0 -25
- data/lib/asker/exporter/main.rb +0 -9
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
:none: "Aucune réponse n'est correcte"
|
3
|
+
:error: 'Erreur'
|
4
|
+
:misspelling: 'Erreur ortographique'
|
5
|
+
:true: 'Vrai'
|
6
|
+
:false: 'Faux'
|
7
|
+
:d1: "Définition \\: <i><%=text1%></i><br/>Choisissez l'option qui correspond le mieux à la définition précédente.<br/>"
|
8
|
+
:d2: 'Définition de <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/>'
|
9
|
+
:d3: 'Définition de <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/></br><p>Note: Chaque symbole ? représente une lettre, et * un ou plusieurs mots.</p>'
|
10
|
+
:d4: 'Définition de <b><%=text1%></b>\:<br/> <i><%=text2%></i><br/><br/>(Mettez chaque mot à la bonne position dans le texte)'
|
11
|
+
:b1: 'Par rapport au concept <b><%=text1%></b>, associez chaque "<%=text2%>" avec son,sa "<%=text3%>".<br/>'
|
12
|
+
:f1: 'Les éléments suivants sont "<%=text2%>" du concept <b><%=text1%></b>\:<ul><li><%=text3%></li></ul>'
|
13
|
+
:f2: "Les éléments suivants sont \"<%=text2%>\".<br/>Sélectionnez l' option qui n'appartient pas au concept <b><%=text1%></b>."
|
14
|
+
:f3: 'Les éléments suivants sont "<%=text2%>" du concept <b><%=text1%></b>\:<br><p><%=text3%></p>(Mettez chaque mot à la bonne position dans le texte)'
|
15
|
+
:i1: "<img src=\"<%=text1%>\" alt\\=\"image\" width=\"400\" height=\"300\"><br/>Choisissez l'option qui correspond le mieux à l'image précédente.<br/>"
|
16
|
+
:i2: "<img src=\"<%=text1%>\" alt\\=\"image\" width=\"400\" height=\"300\"><br/>L'image précédente correspond à <b><%=text2%></b>."
|
17
|
+
:i3: "<img src=\"<%=text1%>\" alt\\=\"image\" width=\"400\" height=\"300\"><br/>Écrivez l'option <%=text2%>, qui correspond le mieux à l'image précédente.<br/>"
|
18
|
+
:i4: '<img src="<%=text1%>" alt\="image" width="400" height="300"><br/>Définition\: <i><%=text2%></i><br/><br/>(Mettez chaque mot à la bonne position dans le texte)'
|
19
|
+
:s1: 'Par rapport au concept <b><%=text1%></b>, mettez dans l'ordre chaque "<%=text2%>" afin que le critère soit rempli "<%=text3%>".<br/>'
|
20
|
+
:t1table: 'Concept <b><%=text1%></b><br/><%=text2%>\: [*]<br/><%=text3%>\: "<%=text4%>"<br/>Choisissez l'option correcte.<br/>'
|
21
|
+
:t2table: 'Concept <b><%=text1%></b><br/><%=text2%>\: [*]<br/><%=text3%>\: "<%=text4%>"<br/>Choisissez l'option correcte.<br/>'
|
22
|
+
:t3table: 'Concept <b><%=text1%></b><br/><%=text2%>\: "<%=text3%>"<br/><%=text4%>: [*]<br/>Choisissez l'option correcte.<br/>'
|
23
|
+
:t4table: 'Concept <b><%=text1%></b><br/><%=text2%>\: "<%=text3%>"<br/><%=text4%>: [*]<br/>Choisissez l'option correcte.<br/>'
|
24
|
+
:t5table: 'Concept <b><%=text1%></b><br/>L'association suivante est correcte\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
|
25
|
+
:t6table: 'Concept <b><%=text1%></b><br/>L'association suivante est correcte\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
|
26
|
+
:t7table: 'Concept <b><%=text1%></b><br/>L'association suivante est correcte\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: "<%=text5%>"</li></ul>'
|
27
|
+
:t8table: 'Concept <b><%=text1%></b><br/>Complétez l'association suivante\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: [*]</li></ul>Écrire un mot.<br/>'
|
28
|
+
:t9table: 'Concept <b><%=text1%></b><br/>Complétez l'association suivante\:<br/><ul><li><%=text2%>\: "<%=text3%>"</li><li><%=text4%>\: <%=text5%></li></ul>Écrire<%=text6%> mots.<br/>'
|
29
|
+
:code1: '<pre><%=text1%></pre><br/><p>Écrire le numéro de ligne où se trouve la première erreur. Écrire 0 s'il n'y a aucune erreur.</p>'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
---
|
2
|
+
:'else': 'else:'
|
3
|
+
:elif: 'elseif,else if,elsif'
|
4
|
+
:if: 'fi'
|
5
|
+
:'document.': 'documento.,document .'
|
6
|
+
:'write(': 'write.(,print(,(write '
|
7
|
+
:alert: 'alerta,aletr,alart'
|
8
|
+
:new: 'nev,naw'
|
9
|
+
:function: 'funtion,funtcion,def,defun'
|
10
|
+
:#!: '#'
|
11
|
+
:": "', "
|
12
|
+
:': '", '
|
13
|
+
:', ': '; ,. '
|
14
|
+
:.: ' ,:,;,. '
|
15
|
+
:,: ' ,.,;'
|
16
|
+
:;: ':, '
|
17
|
+
:(: '[,\{,),(('
|
18
|
+
:((: '('
|
19
|
+
:): '],\},(,))'
|
20
|
+
:)): ')'
|
21
|
+
:{: '[,(,\}'
|
22
|
+
:}: '],),\}'
|
23
|
+
:==: '\=,!='
|
24
|
+
:=>: '==,\=,<=,>>,->'
|
25
|
+
:' = ': ' == '
|
26
|
+
:'!=': '==,\='
|
27
|
+
:' + ': ' - '
|
28
|
+
:' - ': ' + '
|
29
|
+
:'-': '_'
|
30
|
+
:'_': '-'
|
@@ -0,0 +1 @@
|
|
1
|
+
---
|
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
:'else:': 'else '
|
3
|
+
:elif: 'elseif,else if,elsif'
|
4
|
+
:if: 'fi'
|
5
|
+
:' print ': ' puts , prints, echo '
|
6
|
+
:#!: '#'
|
7
|
+
:": "', "
|
8
|
+
:': '", '
|
9
|
+
:', ': '; ,. '
|
10
|
+
:.: ' ,:,;'
|
11
|
+
:,: ' ,.,;'
|
12
|
+
:;: ':'
|
13
|
+
:(: '[,\{,)'
|
14
|
+
:((: '('
|
15
|
+
:): '],\},('
|
16
|
+
:)): ')'
|
17
|
+
:{: '[,(,\}'
|
18
|
+
:}: '],),\}'
|
19
|
+
:==: '\=,!='
|
20
|
+
:=>: '==,\=,<=,>>,->'
|
21
|
+
:' = ': ' == '
|
22
|
+
:'!=': '==,\='
|
23
|
+
:' + ': ' - '
|
24
|
+
:' - ': ' + '
|
25
|
+
:'-': '_'
|
26
|
+
:'_': '-'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
---
|
2
|
+
:' do ': ' ( , [ '
|
3
|
+
:' elsif ': ' elif , else if , elseif '
|
4
|
+
:' else ': ' if , els , elseif '
|
5
|
+
:end: 'edn,begin,],), '
|
6
|
+
:' if ': ' unless , fi , else '
|
7
|
+
:' unless ': ' if , unles '
|
8
|
+
:' puts ': ' put , prints, echo '
|
9
|
+
:system(: 'sistem(,execute('
|
10
|
+
:'.each ': 'each ,.split '
|
11
|
+
:.split: '.each,.spilt,split'
|
12
|
+
:#!: '# '
|
13
|
+
:": "', "
|
14
|
+
:': '", '
|
15
|
+
:', ': '; ,. '
|
16
|
+
:|: ' ,('
|
17
|
+
:.: ' ,:,;'
|
18
|
+
:,: ' ,.,;'
|
19
|
+
:;: ':'
|
20
|
+
:(: '[,)'
|
21
|
+
:((: '('
|
22
|
+
:): '],('
|
23
|
+
:)): ')'
|
24
|
+
:{: 'do,[,('
|
25
|
+
:}: 'end,],)'
|
26
|
+
:==: '\=,!='
|
27
|
+
:=>: '==,\=,<=,>>,->'
|
28
|
+
:' = ': ' == '
|
29
|
+
:'!=': '==,\='
|
30
|
+
:' + ': ' - '
|
31
|
+
:' - ': ' + '
|
32
|
+
:'-': '_'
|
33
|
+
:'_': '-'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
---
|
2
|
+
:ALTER: 'MODIFICAR,ATLER,CREATE,DROP'
|
3
|
+
:CREATE: 'CREAR,CRETAE,DROP,ALTER'
|
4
|
+
:DROP: 'ELIMINAR,DORP,CREATE,ALTER'
|
5
|
+
:INTEGER: 'ENTERO,INTEGUER,VARCHAR'
|
6
|
+
:TABLE: 'TABLA,TALBE,INDEX,DATABASE'
|
7
|
+
:VARCHAR: 'TEXTO,VARHCAR'
|
8
|
+
:;: ':'
|
9
|
+
:);: ')'
|
10
|
+
:(: '[,{'
|
11
|
+
:): '],}'
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'directory_loader'
|
4
|
+
require_relative '../ai/concept_ai'
|
5
|
+
require_relative '../data/world'
|
4
6
|
require_relative '../logger'
|
5
7
|
|
6
8
|
# Load DATA defined into our Project
|
@@ -9,16 +11,31 @@ module InputLoader
|
|
9
11
|
# Load input data from every input directory
|
10
12
|
# @param inputdirs (Array)
|
11
13
|
def self.load(inputdirs)
|
12
|
-
|
14
|
+
data = { concepts: [], codes: [], world: nil, concepts_ai: [] }
|
13
15
|
Logger.verbose "\n[INFO] Loading input data"
|
14
16
|
|
15
17
|
# inputdirs = project.inputdirs.split(',')
|
16
18
|
inputdirs.each do |dirname|
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
temp = DirectoryLoader.load(dirname)
|
20
|
+
data[:concepts] += temp[:concepts]
|
21
|
+
data[:codes] += temp[:codes]
|
20
22
|
end
|
23
|
+
create_questions(data)
|
24
|
+
end
|
21
25
|
|
22
|
-
|
26
|
+
private_class_method def self.create_questions(data)
|
27
|
+
# Create World data
|
28
|
+
# * Calculate concept neighbours
|
29
|
+
# * TO-DO: Calculate code neighbours
|
30
|
+
data[:world] = World.new(data[:concepts])
|
31
|
+
# Create ConceptAI data and make concept questions
|
32
|
+
data[:concepts].each do |concept|
|
33
|
+
concept_ai = ConceptAI.new(concept, data[:world])
|
34
|
+
concept_ai.make_questions
|
35
|
+
data[:concepts_ai] << concept_ai
|
36
|
+
end
|
37
|
+
# Make code questions
|
38
|
+
data[:codes].each(&:make_questions)
|
39
|
+
data
|
23
40
|
end
|
24
41
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'yaml'
|
4
4
|
require_relative '../project'
|
5
|
+
require_relative '../logger'
|
5
6
|
|
6
7
|
# Load params into Project class using arg input
|
7
8
|
# * load
|
@@ -10,40 +11,48 @@ require_relative '../project'
|
|
10
11
|
# * load_from_directory
|
11
12
|
# * load_error
|
12
13
|
module ProjectLoader
|
13
|
-
|
14
|
+
##
|
15
|
+
# Load project from args
|
16
|
+
# @param args (String or Hash)
|
17
|
+
def self.load(args)
|
14
18
|
project = Project.instance
|
15
19
|
|
16
20
|
if args.class == Hash
|
17
21
|
project.param.merge!(args)
|
18
|
-
return
|
22
|
+
return project
|
19
23
|
elsif args.class == String
|
20
24
|
ProjectLoader.load_from_string(args)
|
21
|
-
return
|
25
|
+
return project
|
22
26
|
end
|
23
27
|
|
24
28
|
msg = '[ERROR] ProjectLoader:'
|
25
29
|
msg += "Configuration params format is <#{pArgs.class}>!"
|
26
|
-
|
30
|
+
Logger.verbose Rainbow(msg).red
|
27
31
|
raise msg
|
28
32
|
end
|
29
33
|
|
30
|
-
|
34
|
+
##
|
35
|
+
# Load project from filepath. Options:
|
36
|
+
# * HAML filepath
|
37
|
+
# * XML filepath
|
38
|
+
# * YAML filepath
|
39
|
+
# @param filepath (String)
|
40
|
+
def self.load_from_string(filepath)
|
31
41
|
project = Project.instance
|
32
|
-
unless File.exist?(
|
42
|
+
unless File.exist?(filepath)
|
33
43
|
msg = Rainbow("[WARN] ProjectLoader.load: #{arg} dosn't exists!").yellow.bright
|
34
44
|
project.verbose msg
|
35
45
|
raise msg
|
36
46
|
end
|
37
47
|
|
38
|
-
if File.extname(
|
39
|
-
project.set(:inputdirs, File.dirname(
|
40
|
-
project.set(:process_file, File.basename(
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
load_from_directory(arg)
|
48
|
+
if File.extname(filepath) == '.haml' || File.extname(filepath) == '.xml'
|
49
|
+
project.set(:inputdirs, File.dirname(filepath))
|
50
|
+
project.set(:process_file, File.basename(filepath))
|
51
|
+
return project
|
52
|
+
elsif File.extname(filepath) == '.yaml'
|
53
|
+
return load_from_yaml(filepath)
|
45
54
|
else
|
46
|
-
load_error(
|
55
|
+
load_error(filepath)
|
47
56
|
end
|
48
57
|
end
|
49
58
|
|
@@ -52,19 +61,11 @@ module ProjectLoader
|
|
52
61
|
project.param.merge!(YAML.load(File.open(arg)))
|
53
62
|
project.set(:configfilename, arg)
|
54
63
|
project.set(:projectdir, File.dirname(arg))
|
55
|
-
|
56
|
-
|
57
|
-
def self.load_from_directory(dirpath)
|
58
|
-
msg = Rainbow('[WARN] ProjectLoader.load: Directory input ').yellow
|
59
|
-
msg += Rainbow(dirpath).bright.yellow
|
60
|
-
msg += Rainbow(' not implemented!').yellow
|
61
|
-
Project.instance.verbose msg
|
62
|
-
exit 1
|
64
|
+
project
|
63
65
|
end
|
64
66
|
|
65
67
|
def self.load_error(arg)
|
66
|
-
msg = Rainbow(
|
67
|
-
msg += Rainbow(arg).red.bright + Rainbow(' unkown').red
|
68
|
+
msg = Rainbow("[ERROR] ProjectLoader.Input unkown: #{arg}").red.bright
|
68
69
|
Project.instance.verbose msg
|
69
70
|
raise msg
|
70
71
|
end
|
data/lib/asker/logger.rb
CHANGED
@@ -9,8 +9,7 @@ module Logger
|
|
9
9
|
def self.verbose(msg)
|
10
10
|
project = Project.instance
|
11
11
|
puts msg if project.get(:verbose)
|
12
|
-
project.get(:logfile)
|
13
|
-
# project.get(:logfile)&.project.get(:logfile).write("#{msg}\n")
|
12
|
+
project.get(:logfile)&.write("#{msg}\n")
|
14
13
|
end
|
15
14
|
|
16
15
|
##
|
data/lib/asker/project.rb
CHANGED
@@ -4,6 +4,7 @@ require 'singleton'
|
|
4
4
|
require 'rainbow'
|
5
5
|
require 'fileutils'
|
6
6
|
require_relative 'application'
|
7
|
+
require_relative 'logger'
|
7
8
|
|
8
9
|
# Contains Project data and methods
|
9
10
|
class Project
|
@@ -105,6 +106,7 @@ class Project
|
|
105
106
|
def verbose(msg)
|
106
107
|
puts msg if get(:verbose)
|
107
108
|
get(:logfile).write(msg.to_s + "\n") if get(:logfile)
|
109
|
+
raise "verbose"
|
108
110
|
end
|
109
111
|
|
110
112
|
##
|
@@ -131,9 +133,9 @@ class Project
|
|
131
133
|
f.write("Author : David Vargas Ruiz\n")
|
132
134
|
f.write('=' * 50 + "\n\n")
|
133
135
|
|
134
|
-
verbose '[INFO] Project open'
|
135
|
-
verbose ' ├── inputdirs = ' + Rainbow(get(:inputdirs)).bright
|
136
|
-
verbose ' └── process_file = ' + Rainbow(get(:process_file)).bright
|
136
|
+
Logger.verbose '[INFO] Project open'
|
137
|
+
Logger.verbose ' ├── inputdirs = ' + Rainbow(get(:inputdirs)).bright
|
138
|
+
Logger.verbose ' └── process_file = ' + Rainbow(get(:process_file)).bright
|
137
139
|
end
|
138
140
|
|
139
141
|
# Create or reset output file
|
data/lib/asker/skeleton.rb
CHANGED
@@ -10,26 +10,28 @@ require 'rainbow'
|
|
10
10
|
# * create_dirs
|
11
11
|
# * copyfile
|
12
12
|
module Skeleton
|
13
|
+
##
|
14
|
+
# Create skeleton for asker input files
|
15
|
+
# @param dirpath (String) Folder path to save example files
|
13
16
|
def self.create(dirpath)
|
14
17
|
puts "\n[INFO] Creating #{Rainbow(dirpath).bright} project skeleton"
|
15
18
|
create_dir dirpath
|
16
19
|
copy_files_into(dirpath)
|
17
20
|
end
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
#
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
source = File.join(source_basedir, item[:source])
|
28
|
-
target = File.join(project_dir, item[:target])
|
29
|
-
copyfile(source, target)
|
30
|
-
end
|
22
|
+
##
|
23
|
+
# Copy lib/asker/files into Folder
|
24
|
+
# @param dirpath (String)
|
25
|
+
def self.copy_files_into(dirpath)
|
26
|
+
# Directory and files: example-concept.haml
|
27
|
+
source = File.join(File.dirname(__FILE__), 'files/example-concept.haml')
|
28
|
+
target = File.join(dirpath, 'example-concept.haml')
|
29
|
+
copyfile(source, target)
|
31
30
|
end
|
32
31
|
|
32
|
+
##
|
33
|
+
# Create folder
|
34
|
+
# @param dirpath (String)
|
33
35
|
def self.create_dir(dirpath)
|
34
36
|
if Dir.exist? dirpath
|
35
37
|
puts "* Exists dir! => #{Rainbow(dirpath).yellow}"
|
@@ -43,21 +45,20 @@ module Skeleton
|
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
##
|
49
|
+
# Copy target file to dest
|
50
|
+
# @param target (String)
|
51
|
+
# @param dest (String)
|
50
52
|
def self.copyfile(target, dest)
|
51
53
|
if File.exist? dest
|
52
54
|
puts "* Exists file! => #{Rainbow(dest).yellow}"
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
55
|
+
return true
|
56
|
+
end
|
57
|
+
begin
|
58
|
+
FileUtils.cp(target, dest)
|
59
|
+
puts "* Create file => #{Rainbow(dest).green}"
|
60
|
+
rescue StandardError
|
61
|
+
puts "* Create file ERROR => #{Rainbow(dest).red}"
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|