appifier 0.2.0 → 0.3.0
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 +4 -4
- data/VERSION +1 -1
- data/lib/appifier/actors/collector.rb +19 -15
- data/lib/appifier/actors/generator.rb +14 -3
- data/lib/appifier/cli/datasets.rb +75 -0
- data/lib/appifier/cli/templates.rb +11 -7
- data/lib/appifier/cli.rb +23 -13
- data/lib/appifier/components/dataset.rb +60 -0
- data/lib/appifier/components/template.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc6decc46de1031b29f5752b5a8e9e19ff34503910f853a796c13becde17f516
|
4
|
+
data.tar.gz: 7cf6cff0288638c120c74f815087ea5e668a1299b1cde1407f0e42b46286057a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1383dc7d00f324f6831066639eb4ae19577571ba6c3cf0eaa712fae13d41997ffa56ae10b90d74a9249c8fe8a18f29f1bc24b103f9a2bdaccb28934dc594ccd0
|
7
|
+
data.tar.gz: adb3a368020d53a60a880baba3f688b65e8b608224c1227e26acd9850d76753c85ddd64e77abe59635eed4f075369884eecadf29275ce8717866de29da36bb5d
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -7,6 +7,7 @@ module Appifier
|
|
7
7
|
|
8
8
|
extend Carioca::Injector
|
9
9
|
inject service: :output
|
10
|
+
inject service: :finisher
|
10
11
|
|
11
12
|
attr_accessor :dataset
|
12
13
|
attr_reader :template
|
@@ -19,22 +20,25 @@ module Appifier
|
|
19
20
|
|
20
21
|
|
21
22
|
def collect
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
23
|
+
begin
|
24
|
+
appifilename = "#{File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH)}/#{template}/Appifile"
|
25
|
+
appifile = Appifier::Components::Appifile::new path: appifilename
|
26
|
+
prompt = TTY::Prompt.new
|
27
|
+
@dataset = {}
|
28
|
+
appifile.dataset_rules.each do |name, rule|
|
29
|
+
default = (rule[:default])? rule[:default] : ""
|
30
|
+
@dataset[name] = prompt.ask("Give #{rule[:description]} : ", default: default) do |q|
|
31
|
+
q.required true
|
32
|
+
q.validate Regexp.new(rule[:format]) if rule[:format]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
write_dataset template: @template, data: @dataset
|
36
|
+
@collected = true
|
37
|
+
output.info "Dataset recorded for #{@template}"
|
38
|
+
rescue TTY::Reader::InputInterrupt
|
39
|
+
output.warn "Interactive collect interrupted"
|
40
|
+
finisher.terminate exit_case: :interrupt
|
33
41
|
end
|
34
|
-
write_dataset template: @template, data: @dataset
|
35
|
-
@collected = true
|
36
|
-
output.info "Dataset recorded for #{@template}"
|
37
|
-
|
38
42
|
end
|
39
43
|
|
40
44
|
def collected?
|
@@ -9,8 +9,9 @@ module Appifier
|
|
9
9
|
inject service: :output
|
10
10
|
|
11
11
|
|
12
|
-
def initialize(
|
13
|
-
@
|
12
|
+
def initialize(template_root:, target_root:, dataset: )
|
13
|
+
@template_root = template_root
|
14
|
+
@src_root = "#{template_root}/skeleton"
|
14
15
|
@target_root = target_root
|
15
16
|
@target_folders = []
|
16
17
|
@target_files = []
|
@@ -19,7 +20,7 @@ module Appifier
|
|
19
20
|
@src_paths.delete_if { |file| file =~ %r{/\.$} }
|
20
21
|
@src_folders = @src_paths.select { |item| File.directory? item }
|
21
22
|
@src_files = @src_paths.select { |item| File.file? item }
|
22
|
-
raise 'Application template not found' unless File.exist?(
|
23
|
+
raise 'Application template not found' unless File.exist?(@template_root)
|
23
24
|
end
|
24
25
|
|
25
26
|
def generate(dry_run: false, force: false)
|
@@ -31,6 +32,7 @@ module Appifier
|
|
31
32
|
generate_folders dry_run: dry_run
|
32
33
|
output.info 'Generate files'
|
33
34
|
generate_files dry_run: dry_run
|
35
|
+
copy_appifile dry_run: dry_run
|
34
36
|
end
|
35
37
|
|
36
38
|
def calculate
|
@@ -53,6 +55,15 @@ module Appifier
|
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
58
|
+
|
59
|
+
def copy_appifile(dry_run:)
|
60
|
+
output.info "Copy Appifile in #{@target_root} :"
|
61
|
+
action = dry_run ? :skipped : :ok
|
62
|
+
FileUtils.cp "#{@template_root}/Appifile", @target_root unless dry_run
|
63
|
+
output.send action, "Install Appifile"
|
64
|
+
end
|
65
|
+
|
66
|
+
|
56
67
|
def generate_files(dry_run:)
|
57
68
|
output.info "Target files to create in #{@target_root} :"
|
58
69
|
@src_files.each_with_index do |path, index|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Appifier
|
3
|
+
module CLI
|
4
|
+
module Subcommands
|
5
|
+
class Datasets < ::Thor
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
super
|
9
|
+
@output = Carioca::Registry.get.get_service name: :output
|
10
|
+
@finisher = Carioca::Registry.get.get_service name: :finisher
|
11
|
+
end
|
12
|
+
|
13
|
+
# Thor method : list availables datasets in user bundle
|
14
|
+
desc 'ls', 'list defined datasets in user bundle'
|
15
|
+
def ls
|
16
|
+
begin
|
17
|
+
Appifier::Components::Dataset::list
|
18
|
+
@finisher.terminate exit_case: :quiet_exit
|
19
|
+
rescue RuntimeError => e
|
20
|
+
@output.error e.message
|
21
|
+
@finisher.terminate exit_case: :error_exit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Thor method : show a specific dataset in user bundle
|
26
|
+
desc 'show DATASET', 'show a specific dataset in user bundle'
|
27
|
+
def show(dataset)
|
28
|
+
begin
|
29
|
+
Appifier::Components::Dataset::show dataset
|
30
|
+
@finisher.terminate exit_case: :quiet_exit
|
31
|
+
rescue RuntimeError => e
|
32
|
+
@output.error e.message
|
33
|
+
@finisher.terminate exit_case: :error_exit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Thor method : remove a dataset from user bundle
|
38
|
+
desc 'rm DATASET', 'Remove dataset from user bundle'
|
39
|
+
def rm(dataset)
|
40
|
+
begin
|
41
|
+
Appifier::Components::Dataset::rm(dataset)
|
42
|
+
@finisher.terminate exit_case: :quiet_exit
|
43
|
+
rescue RuntimeError => e
|
44
|
+
@output.error e.message
|
45
|
+
@finisher.terminate exit_case: :error_exit
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
# Thor method : Prune orphans datasets in user bundle
|
51
|
+
desc 'prune', 'Prune orphans datasets in user bundle'
|
52
|
+
long_desc <<-LONGDESC
|
53
|
+
Prune orphans datasets in user bundle\n
|
54
|
+
with --force, force pruning of dataset [DANGER]
|
55
|
+
LONGDESC
|
56
|
+
option :force, type: :boolean, aliases: '-F'
|
57
|
+
def prune
|
58
|
+
begin
|
59
|
+
ok = (options[:force]) ? true : TTY::Prompt.new.yes?("Do you want to prune datasets?")
|
60
|
+
if ok
|
61
|
+
Appifier::Components::Dataset::prune
|
62
|
+
@finisher.terminate exit_case: :quiet_exit
|
63
|
+
else
|
64
|
+
puts "Pruning cancelled"
|
65
|
+
@finisher.terminate exit_case: :quiet_exit
|
66
|
+
end
|
67
|
+
rescue TTY::Reader::InputInterrupt
|
68
|
+
@output.warn "Command interrupted"
|
69
|
+
@finisher.terminate exit_case: :interrupt
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -14,16 +14,20 @@ module Appifier
|
|
14
14
|
# Thor method : list availables templates in user bundle
|
15
15
|
desc 'ls', 'list templates availables in user bundle'
|
16
16
|
def ls
|
17
|
-
|
18
|
-
|
17
|
+
begin
|
18
|
+
Appifier::Components::Template::list
|
19
|
+
@finisher.terminate exit_case: :quiet_exit
|
20
|
+
rescue RuntimeError => e
|
21
|
+
@output.error e.message
|
22
|
+
@finisher.terminate exit_case: :error_exit
|
23
|
+
end
|
19
24
|
end
|
20
25
|
|
21
26
|
# Thor method : remove a template from user bundle
|
22
|
-
desc 'rm', '
|
27
|
+
desc 'rm TEMPLATE', 'Remove templates from user bundle'
|
23
28
|
def rm(template)
|
24
29
|
begin
|
25
30
|
Appifier::Components::Template::rm(template)
|
26
|
-
@output.info "Template #{template} removed"
|
27
31
|
@finisher.terminate exit_case: :quiet_exit
|
28
32
|
rescue RuntimeError => e
|
29
33
|
@output.error e.message
|
@@ -32,7 +36,7 @@ module Appifier
|
|
32
36
|
end
|
33
37
|
|
34
38
|
# Thor method : show information for a specific template in user bundle
|
35
|
-
desc 'show', 'show information for a specific template in user bundle'
|
39
|
+
desc 'show TEMPLATE', 'show information for a specific template in user bundle'
|
36
40
|
def show(template)
|
37
41
|
begin
|
38
42
|
Appifier::Components::Template::show(template)
|
@@ -50,7 +54,7 @@ module Appifier
|
|
50
54
|
end
|
51
55
|
|
52
56
|
# Thor method : display directory tree view for a specific template in user bundle
|
53
|
-
desc 'treeview', 'display directory tree view for a specific template in user bundle'
|
57
|
+
desc 'treeview TEMPLATE', 'display directory tree view for a specific template in user bundle'
|
54
58
|
def treeview(template)
|
55
59
|
begin
|
56
60
|
Appifier::Components::Template::treeview(template)
|
@@ -62,7 +66,7 @@ module Appifier
|
|
62
66
|
end
|
63
67
|
|
64
68
|
# Thor method : lint a specific template in user bundle
|
65
|
-
desc 'lint', 'Lint a specific template in user bundle'
|
69
|
+
desc 'lint TEMPLATE', 'Lint a specific template in user bundle'
|
66
70
|
def lint(template)
|
67
71
|
begin
|
68
72
|
Appifier::Components::Template::lint(template)
|
data/lib/appifier/cli.rb
CHANGED
@@ -21,6 +21,9 @@ module Appifier
|
|
21
21
|
true
|
22
22
|
end
|
23
23
|
|
24
|
+
desc 'datasets SUBCOMMAND ...ARGS', 'Managing apps datasets'
|
25
|
+
subcommand 'datasets', Subcommands::Datasets
|
26
|
+
|
24
27
|
desc 'templates SUBCOMMAND ...ARGS', 'Managing apps templates'
|
25
28
|
subcommand 'templates', Subcommands::Templates
|
26
29
|
|
@@ -39,27 +42,34 @@ module Appifier
|
|
39
42
|
option :force, type: :boolean, aliases: '-F'
|
40
43
|
def generate(template, target = '.')
|
41
44
|
root = "#{File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH)}/#{template}"
|
42
|
-
|
43
|
-
|
45
|
+
unless File::exist? root
|
46
|
+
@output.error "Template not found #{template}"
|
47
|
+
@finisher.terminate exit_case: :error_exit
|
48
|
+
end
|
44
49
|
if File::exist? File::expand_path("#{DEFAULT_DATASETS_PATH}/#{template}.yml") then
|
45
50
|
dataset = open_dataset(template: template)
|
46
51
|
@output.info "Dataset file found for #{template}"
|
47
52
|
else
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
53
|
+
begin
|
54
|
+
@output.warn "Dataset file not found for #{template}"
|
55
|
+
if TTY::Prompt.new.yes?("Do you want to collect dataset interactively ?")
|
56
|
+
@output.info "Beginning interactive Dataset input for #{template}"
|
57
|
+
collector = Appifier::Actors::Collector.new template: template
|
58
|
+
collector.collect
|
59
|
+
dataset = open_dataset(template: template)
|
60
|
+
else
|
61
|
+
puts "=> Exiting run 'appifier collect #{template}' for collecting data"
|
62
|
+
puts " (use -S for collecting from STDIN or -f <FILE>) "
|
63
|
+
@finisher.terminate exit_case: :quiet_exit
|
64
|
+
end
|
65
|
+
rescue TTY::Reader::InputInterrupt
|
66
|
+
@output.warn "Command interrupted"
|
67
|
+
@finisher.terminate exit_case: :interrupt
|
58
68
|
end
|
59
69
|
end
|
60
70
|
|
61
71
|
begin
|
62
|
-
generator = Appifier::Actors::Generator.new
|
72
|
+
generator = Appifier::Actors::Generator.new template_root: root, target_root: File.expand_path(target), dataset: dataset
|
63
73
|
generator.generate dry_run: options[:simulate], force: options[:force]
|
64
74
|
@finisher.terminate exit_case: :quiet_exit
|
65
75
|
rescue RuntimeError => e
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Appifier
|
2
|
+
module Components
|
3
|
+
class Dataset
|
4
|
+
|
5
|
+
extend Carioca::Injector
|
6
|
+
inject service: :output
|
7
|
+
|
8
|
+
|
9
|
+
def self.list
|
10
|
+
output.info "List of available Datasets for user : #{current_user} :"
|
11
|
+
templates_path = File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH)
|
12
|
+
datasets_path = File.expand_path(Appifier::DEFAULT_DATASETS_PATH)
|
13
|
+
templates = Dir.glob("#{templates_path}/*").map { |item| item.delete_prefix("#{templates_path}/") }
|
14
|
+
Dir.glob("#{datasets_path}/*").map { |item| item.delete_prefix("#{datasets_path}/") }.each do |file|
|
15
|
+
dataset = File::basename(file,'.yml')
|
16
|
+
res = dataset; res << " [TEMPLATE MISSING]" unless templates.include? dataset
|
17
|
+
output.item res
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def self.prune
|
23
|
+
output.info "Pruning Datasets for user : #{current_user} :"
|
24
|
+
templates_path = File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH)
|
25
|
+
datasets_path = File.expand_path(Appifier::DEFAULT_DATASETS_PATH)
|
26
|
+
templates = Dir.glob("#{templates_path}/*").map { |item| item.delete_prefix("#{templates_path}/") }
|
27
|
+
Dir.glob("#{datasets_path}/*").each do |file|
|
28
|
+
dataset = File::basename(file,'.yml')
|
29
|
+
unless templates.include? dataset
|
30
|
+
FileUtils::rm file
|
31
|
+
output.item "Pruned : #{dataset}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def self.show(dataset)
|
38
|
+
raise "Not yet Implemented"
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.rm(dataset)
|
42
|
+
output.info "Removing dataset #{dataset} for user : #{current_user}"
|
43
|
+
dataset_path = File.expand_path(Appifier::DEFAULT_DATASETS_PATH)
|
44
|
+
begin
|
45
|
+
if File::exist? "#{dataset_path}/#{dataset}.yml"
|
46
|
+
FileUtils.rm_rf "#{dataset_path}/#{dataset}.yml"
|
47
|
+
output.ok "Dataset #{dataset} deleted of bundle for user #{current_user}"
|
48
|
+
else
|
49
|
+
raise "Dataset #{dataset} not found in bundle for user #{current_user}"
|
50
|
+
end
|
51
|
+
rescue Errno::ENOENT
|
52
|
+
raise "Dataset #{dataset} not found in bundle for user #{current_user}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -52,7 +52,7 @@ module Appifier
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def self.list
|
55
|
-
output.info "List of
|
55
|
+
output.info "List of available templates for user : #{current_user} :"
|
56
56
|
template_path = File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH)
|
57
57
|
Dir.glob("#{template_path}/*").map { |item| item.delete_prefix("#{template_path}/") }.each do |template|
|
58
58
|
output.item "#{template}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Camille Paquet
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-10-
|
12
|
+
date: 2022-10-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: code_statistics
|
@@ -279,8 +279,10 @@ files:
|
|
279
279
|
- lib/appifier/actors/retriever.rb
|
280
280
|
- lib/appifier/cli.rb
|
281
281
|
- lib/appifier/cli/configuration.rb
|
282
|
+
- lib/appifier/cli/datasets.rb
|
282
283
|
- lib/appifier/cli/templates.rb
|
283
284
|
- lib/appifier/components/Appifile.rb
|
285
|
+
- lib/appifier/components/dataset.rb
|
284
286
|
- lib/appifier/components/init.rb
|
285
287
|
- lib/appifier/components/template.rb
|
286
288
|
- lib/appifier/helpers/archives.rb
|