appifier 0.1.0 → 0.1.2
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/.rubocop.yml +56 -2
- data/Gemfile +3 -1
- data/Rakefile +27 -15
- data/VERSION +1 -1
- data/appifier.gemspec +20 -19
- data/bin/console +4 -3
- data/config/appifier.registry +9 -0
- data/config/settings.yml +59 -0
- data/exe/appifier +2 -1
- data/lib/appifier/actors/collector.rb +67 -0
- data/lib/appifier/actors/generator.rb +92 -100
- data/lib/appifier/actors/init.rb +3 -1
- data/lib/appifier/actors/retriever.rb +35 -35
- data/lib/appifier/cli/configuration.rb +13 -14
- data/lib/appifier/cli/templates.rb +28 -8
- data/lib/appifier/cli.rb +108 -49
- data/lib/appifier/components/Appifile.rb +35 -0
- data/lib/appifier/components/init.rb +3 -0
- data/lib/appifier/components/templates.rb +34 -0
- data/lib/appifier/helpers/archives.rb +29 -31
- data/lib/appifier/helpers/datasets.rb +36 -0
- data/lib/appifier/helpers/gem.rb +31 -30
- data/lib/appifier/helpers/init.rb +3 -1
- data/lib/appifier/helpers/user.rb +29 -31
- data/lib/appifier/services/finisher.rb +52 -0
- data/lib/appifier/services/init.rb +3 -0
- data/lib/appifier/setup.rb +11 -7
- data/lib/appifier/version.rb +2 -0
- data/lib/appifier.rb +34 -23
- data/samples/dummy/Appifile +12 -0
- data/samples/{skeleton → dummy/skeleton}/%%APPNAME.downcase%%/.rspec +0 -0
- data/samples/{skeleton → dummy/skeleton}/%%APPNAME.downcase%%/Rakefile +0 -0
- data/samples/{skeleton → dummy/skeleton}/%%APPNAME.downcase%%/config.ru +0 -0
- data/samples/{skeleton → dummy/skeleton}/%%APPNAME.downcase%%/exe/%%APPNAME.downcase%% +0 -0
- data/samples/{skeleton → dummy/skeleton}/%%APPNAME.downcase%%/lib/%%APPNAME.downcase%%.rb +0 -0
- data/samples/{skeleton → dummy/skeleton}/%%APPNAME.downcase%%/spec/%%APPNAME.downcase%%_spec.rb +0 -0
- data/samples/dummy.tgz +0 -0
- metadata +53 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aeea227ea8e3eaa87c58fcbd7333297f73b7e2c82f7ba51da9b8bccb4f979f05
|
4
|
+
data.tar.gz: 3121f0753db7fbc4b8d68f2acfaf141cf9ee9785f5abfc5edca2b5a645faa942
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7aceeba188e836380bd52eebdfb87839c6227f79282e2ae90fe12d1486d03c4dbb53147c61abb84d4aab172bca8e10b8d7aa419b214e0f0bb151bbd30e4a17c
|
7
|
+
data.tar.gz: 90fa233237110cfc8c815e6d3002dbc831eaf08b9979d9f0d499f9d08228768c87e519f212fde8241ee9c944f158d90cadbe9924fc4031bd8a8eaa42a6165873
|
data/.rubocop.yml
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
|
2
|
+
|
1
3
|
AllCops:
|
2
4
|
NewCops: enable
|
3
5
|
SuggestExtensions: false
|
4
6
|
Exclude:
|
5
|
-
- '
|
6
|
-
|
7
|
+
- 'samples/**/*'
|
8
|
+
- 'spec/**/*'
|
7
9
|
|
8
10
|
|
9
11
|
# definitive :
|
@@ -28,3 +30,55 @@ Metrics/MethodLength:
|
|
28
30
|
Enabled: false
|
29
31
|
Metrics/PerceivedComplexity:
|
30
32
|
Enabled: false
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
# Offense count: 2
|
37
|
+
# Configuration parameters: AllowKeywordBlockArguments.
|
38
|
+
Lint/UnderscorePrefixedVariableName:
|
39
|
+
Exclude:
|
40
|
+
- 'lib/appifier/helpers/gem.rb'
|
41
|
+
|
42
|
+
# Offense count: 1
|
43
|
+
Lint/UselessAssignment:
|
44
|
+
Exclude:
|
45
|
+
- 'lib/appifier.rb'
|
46
|
+
|
47
|
+
# Offense count: 1
|
48
|
+
# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
|
49
|
+
# NamePrefix: is_, has_, have_
|
50
|
+
# ForbiddenPrefixes: is_, has_, have_
|
51
|
+
# AllowedMethods: is_a?
|
52
|
+
# MethodDefinitionMacros: define_method, define_singleton_method
|
53
|
+
Naming/PredicateName:
|
54
|
+
Exclude:
|
55
|
+
|
56
|
+
- 'lib/appifier/helpers/user.rb'
|
57
|
+
|
58
|
+
# Offense count: 1
|
59
|
+
Security/Open:
|
60
|
+
Exclude:
|
61
|
+
- 'lib/appifier/helpers/archives.rb'
|
62
|
+
|
63
|
+
# Offense count: 12
|
64
|
+
# Configuration parameters: AllowedConstants.
|
65
|
+
Style/Documentation:
|
66
|
+
Exclude:
|
67
|
+
- 'spec/**/*'
|
68
|
+
- 'test/**/*'
|
69
|
+
- 'lib/appifier.rb'
|
70
|
+
- 'lib/appifier/actors/generator.rb'
|
71
|
+
- 'lib/appifier/actors/retriever.rb'
|
72
|
+
- 'lib/appifier/cli/configuration.rb'
|
73
|
+
- 'lib/appifier/cli/templates.rb'
|
74
|
+
- 'lib/appifier/helpers/archives.rb'
|
75
|
+
- 'lib/appifier/helpers/gem.rb'
|
76
|
+
- 'lib/appifier/helpers/templates.rb'
|
77
|
+
- 'lib/appifier/helpers/user.rb'
|
78
|
+
- 'lib/appifier/setup.rb'
|
79
|
+
|
80
|
+
# Offense count: 2
|
81
|
+
Style/MixinUsage:
|
82
|
+
Exclude:
|
83
|
+
- 'exe/appifier'
|
84
|
+
- 'lib/appifier.rb'
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,35 +1,47 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'version'
|
4
6
|
require 'rake/version_task'
|
5
7
|
require 'code_statistics'
|
6
8
|
require 'yard'
|
7
|
-
require 'yard/rake/yardoc_task
|
9
|
+
require 'yard/rake/yardoc_task'
|
8
10
|
require 'rubocop/rake_task'
|
9
|
-
require
|
11
|
+
require 'carioca/rake/manage'
|
10
12
|
|
11
13
|
RuboCop::RakeTask.new
|
12
14
|
|
13
|
-
|
14
15
|
Rake::VersionTask.new
|
15
16
|
|
16
17
|
RSpec::Core::RakeTask.new(:spec)
|
17
18
|
|
18
|
-
|
19
|
-
task :default => :spec
|
19
|
+
task default: :spec
|
20
20
|
|
21
21
|
YARD::Rake::YardocTask.new do |t|
|
22
|
-
|
23
|
-
|
22
|
+
t.files = ['lib/**/*.rb', '-', 'doc/**/*', 'spec/**/*_spec.rb']
|
23
|
+
t.options += ['-o', 'yardoc']
|
24
24
|
end
|
25
25
|
|
26
26
|
YARD::Config.load_plugin('yard-rspec')
|
27
27
|
|
28
28
|
namespace :yardoc do
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
task :clobber do
|
30
|
+
begin
|
31
|
+
rm_r 'yardoc'
|
32
|
+
rescue StandardError
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
begin
|
36
|
+
rm_r '.yardoc'
|
37
|
+
rescue StandardError
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
begin
|
41
|
+
rm_r 'pkg'
|
42
|
+
rescue StandardError
|
43
|
+
nil
|
33
44
|
end
|
45
|
+
end
|
34
46
|
end
|
35
|
-
task :
|
47
|
+
task clobber: 'yardoc:clobber'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/appifier.gemspec
CHANGED
@@ -1,39 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
Gem::Specification.new do |spec|
|
3
|
-
spec.name =
|
4
|
+
spec.name = 'appifier'
|
4
5
|
spec.version = `cat VERSION`.chomp
|
5
|
-
spec.authors = [
|
6
|
-
spec.email = [
|
6
|
+
spec.authors = ['Camille Paquet', 'Romain GEORGES']
|
7
|
+
spec.email = ['gems@ultragreen.net']
|
7
8
|
|
8
|
-
spec.summary =
|
9
|
-
spec.description =
|
10
|
-
spec.homepage =
|
11
|
-
spec.license =
|
12
|
-
spec.required_ruby_version = Gem::Requirement.new(
|
9
|
+
spec.summary = 'Appifier : Applications templating and management tools '
|
10
|
+
spec.description = 'Appifier : Applications templating and management tools '
|
11
|
+
spec.homepage = 'https://github.com/Ultragreen/appifier'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
13
14
|
|
14
|
-
spec.metadata[
|
15
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
15
16
|
spec.metadata['source_code_uri'] = spec.homepage
|
16
17
|
spec.metadata['changelog_uri'] = spec.homepage
|
17
18
|
|
18
19
|
# Specify which files should be added to the gem when it is released.
|
19
20
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
-
spec.files
|
21
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
21
22
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
23
|
end
|
23
|
-
spec.bindir =
|
24
|
+
spec.bindir = 'exe'
|
24
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
-
spec.require_paths = [
|
26
|
+
spec.require_paths = ['lib']
|
26
27
|
|
28
|
+
spec.add_development_dependency 'code_statistics', '~> 0.2.13'
|
27
29
|
spec.add_development_dependency 'rake', '~> 12.0'
|
30
|
+
spec.add_development_dependency 'roodi', '~> 5.0'
|
28
31
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
32
|
spec.add_development_dependency 'rubocop', '~> 1.32'
|
30
|
-
spec.add_development_dependency "roodi", "~> 5.0"
|
31
|
-
spec.add_development_dependency 'code_statistics', '~> 0.2.13'
|
32
|
-
spec.add_development_dependency "yard", "~> 0.9.27"
|
33
|
-
spec.add_development_dependency "yard-rspec", "~> 0.1"
|
34
33
|
spec.add_development_dependency 'version', '~> 1.1'
|
34
|
+
spec.add_development_dependency 'yard', '~> 0.9.27'
|
35
|
+
spec.add_development_dependency 'yard-rspec', '~> 0.1'
|
35
36
|
spec.metadata['rubygems_mfa_required'] = 'false'
|
36
|
-
spec.add_dependency
|
37
|
-
spec.add_dependency
|
38
|
-
|
37
|
+
spec.add_dependency 'carioca', '~> 2.0.9'
|
38
|
+
spec.add_dependency 'thor', '~> 1.2'
|
39
|
+
spec.add_dependency 'tty-prompt', '~> 0.23.1'
|
39
40
|
end
|
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'appifier'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "appifier"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start(__FILE__)
|
data/config/settings.yml
CHANGED
@@ -6,3 +6,62 @@
|
|
6
6
|
:test: {}
|
7
7
|
:default:
|
8
8
|
:test: 'Romain'
|
9
|
+
:exit_cases:
|
10
|
+
:not_root:
|
11
|
+
:message: This operation need to be run as root (use sudo or rvmsudo)
|
12
|
+
:code: 10
|
13
|
+
:options_incompatibility:
|
14
|
+
:message: Options incompatibility
|
15
|
+
:code: 40
|
16
|
+
:service_dependence_missing:
|
17
|
+
:message: Appifier Service dependence missing
|
18
|
+
:code: 60
|
19
|
+
:config_required:
|
20
|
+
:message: Specific configuration required
|
21
|
+
:code: 30
|
22
|
+
:setup_error:
|
23
|
+
:message: Setup terminated unsuccessfully
|
24
|
+
:code: 25
|
25
|
+
:setup_success:
|
26
|
+
:message: Setup terminated successfully
|
27
|
+
:code: 0
|
28
|
+
:sanitycheck_error:
|
29
|
+
:messagee: Sanitycheck terminated unsuccessfully
|
30
|
+
:code: 20
|
31
|
+
:sanitycheck_success:
|
32
|
+
:message: Sanitycheck terminated successfully
|
33
|
+
:code: 0
|
34
|
+
:configuration_error:
|
35
|
+
:message: Configuration Error
|
36
|
+
:code: 50
|
37
|
+
|
38
|
+
|
39
|
+
# global
|
40
|
+
:quiet_exit:
|
41
|
+
:code: 0
|
42
|
+
:error_exit:
|
43
|
+
:code: 99
|
44
|
+
:message: Operation failure
|
45
|
+
|
46
|
+
# events
|
47
|
+
:interrupt:
|
48
|
+
:message: User operation interrupted
|
49
|
+
:code: 33
|
50
|
+
|
51
|
+
# request
|
52
|
+
:not_found:
|
53
|
+
:message: Object not found
|
54
|
+
:code: 44
|
55
|
+
:already_exist:
|
56
|
+
:message: Object already exist
|
57
|
+
:code: 48
|
58
|
+
|
59
|
+
# daemon
|
60
|
+
:status_ok:
|
61
|
+
:message: Status OK
|
62
|
+
:code: 0
|
63
|
+
:status_ko:
|
64
|
+
:message: Status KO
|
65
|
+
:code: 31
|
66
|
+
|
67
|
+
|
data/exe/appifier
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "tty-prompt"
|
3
|
+
|
4
|
+
module Appifier
|
5
|
+
module Actors
|
6
|
+
class Collector
|
7
|
+
|
8
|
+
extend Carioca::Injector
|
9
|
+
inject service: :output
|
10
|
+
|
11
|
+
attr_accessor :dataset
|
12
|
+
attr_reader :template
|
13
|
+
|
14
|
+
def initialize(template: ,dataset: nil,force: false )
|
15
|
+
@force = force
|
16
|
+
@template = template
|
17
|
+
get_defined_dataset(dataset)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def collect
|
22
|
+
|
23
|
+
appifilename = "#{File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH)}/#{template}/Appifile"
|
24
|
+
appifile = Appifier::Components::Appifile::new path: appifilename
|
25
|
+
prompt = TTY::Prompt.new
|
26
|
+
@dataset = {}
|
27
|
+
appifile.dataset_rules.each do |name, rule|
|
28
|
+
default = (rule[:default])? rule[:default] : ""
|
29
|
+
@dataset[name] = prompt.ask("Give #{rule[:description]} : ", default: default) do |q|
|
30
|
+
q.required true
|
31
|
+
q.validate Regexp.new(rule[:format]) if rule[:format]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
write_dataset template: @template, data: @dataset
|
35
|
+
@collected = true
|
36
|
+
output.info "Dataset recorded for #{@template}"
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def collected?
|
41
|
+
return @collected
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def get_defined_dataset(newdataset=nil)
|
46
|
+
if check_dataset_defined? template: @template then
|
47
|
+
@dataset = open_dataset template: @template
|
48
|
+
if @force
|
49
|
+
@dataset = newdataset
|
50
|
+
write_dataset template: @template, data: @dataset
|
51
|
+
else
|
52
|
+
raise "Dataset already collect for template : #{@template}"
|
53
|
+
end
|
54
|
+
@collected = true
|
55
|
+
elsif newdataset
|
56
|
+
@dataset = newdataset
|
57
|
+
write_dataset template: @template, data: @dataset
|
58
|
+
@collected = true
|
59
|
+
else
|
60
|
+
@dataset = nil
|
61
|
+
@collected = false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -1,105 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
module Appifier
|
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
|
-
template.map(@data)
|
72
|
-
content = template.output
|
73
|
-
File.open("#{@target_root}/#{@target_files[index]}", 'w') { |file| file.write(content) }
|
74
|
-
result = "[OK]"
|
75
|
-
rescue InvalidTokenList, NotAToken, NoTemplateFile
|
76
|
-
result = "[KO]"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
puts "#{result} #{@target_files[index]}"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
|
84
|
-
def calculate_target(type:)
|
85
|
-
if type == :folder then
|
86
|
-
target = @target_folders
|
87
|
-
src = @src_folders
|
88
|
-
else
|
89
|
-
target = @target_files
|
90
|
-
src = @src_files
|
91
|
-
end
|
92
|
-
src.each do |folder|
|
93
|
-
template = Template::new strict:false,
|
94
|
-
list_token: @data.keys,
|
95
|
-
template_content: folder.delete_prefix("#{@src_root}/" )
|
96
|
-
template.map(@data)
|
97
|
-
output = template.output
|
98
|
-
target.push output unless target.include? output
|
99
|
-
end
|
100
|
-
|
3
|
+
module Appifier
|
4
|
+
module Actors
|
5
|
+
class Generator
|
6
|
+
attr_reader :src_paths, :src_files, :src_folders, :target_folders, :target_files
|
7
|
+
|
8
|
+
extend Carioca::Injector
|
9
|
+
inject service: :output
|
10
|
+
|
11
|
+
|
12
|
+
def initialize(src_root:, target_root:, dataset: )
|
13
|
+
@src_root = src_root
|
14
|
+
@target_root = target_root
|
15
|
+
@target_folders = []
|
16
|
+
@target_files = []
|
17
|
+
@data = dataset
|
18
|
+
@src_paths = Dir.glob("#{@src_root}/**/*", File::FNM_DOTMATCH)
|
19
|
+
@src_paths.delete_if { |file| file =~ %r{/\.$} }
|
20
|
+
@src_folders = @src_paths.select { |item| File.directory? item }
|
21
|
+
@src_files = @src_paths.select { |item| File.file? item }
|
22
|
+
raise 'Application template not found' unless File.exist?(src_root)
|
23
|
+
end
|
24
|
+
|
25
|
+
def generate(dry_run: false, force: false)
|
26
|
+
output.info 'Running in dry_run (operation will be SKIPPED)' if dry_run
|
27
|
+
calculate
|
28
|
+
raise 'Folders and files already exist' if check_folder_already_exist && !force
|
29
|
+
FileUtils.rm_rf("#{@target_root}/#{@target_folders.first}") if force
|
30
|
+
output.info 'Generate folders'
|
31
|
+
generate_folders dry_run: dry_run
|
32
|
+
output.info 'Generate files'
|
33
|
+
generate_files dry_run: dry_run
|
34
|
+
end
|
35
|
+
|
36
|
+
def calculate
|
37
|
+
calculate_target type: :folder
|
38
|
+
calculate_target type: :file
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def check_folder_already_exist
|
44
|
+
File.directory?("#{@target_root}/#{@target_folders.first}")
|
45
|
+
end
|
46
|
+
|
47
|
+
def generate_folders(dry_run:)
|
48
|
+
output.info "Target path to create in #{@target_root} :"
|
49
|
+
@target_folders.each do |path|
|
50
|
+
action = dry_run ? :skipped : :ok
|
51
|
+
FileUtils.mkdir_p "#{@target_root}/#{path}", noop: dry_run
|
52
|
+
output.send action, "#{path}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def generate_files(dry_run:)
|
57
|
+
output.info "Target files to create in #{@target_root} :"
|
58
|
+
@src_files.each_with_index do |path, index|
|
59
|
+
if dry_run
|
60
|
+
result = :skipped
|
61
|
+
else
|
62
|
+
begin
|
63
|
+
template = Template.new strict: false,
|
64
|
+
list_token: @data.keys,
|
65
|
+
template_file: path
|
66
|
+
template.map(@data)
|
67
|
+
content = template.output
|
68
|
+
File.write("#{@target_root}/#{@target_files[index]}", content)
|
69
|
+
result = :ok
|
70
|
+
rescue InvalidTokenList, NotAToken, NoTemplateFile
|
71
|
+
result = :ko
|
101
72
|
end
|
102
|
-
|
73
|
+
end
|
74
|
+
output.send result,"#{@target_files[index]}"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def calculate_target(type:)
|
79
|
+
if type == :folder
|
80
|
+
target = @target_folders
|
81
|
+
src = @src_folders
|
82
|
+
else
|
83
|
+
target = @target_files
|
84
|
+
src = @src_files
|
85
|
+
end
|
86
|
+
src.each do |folder|
|
87
|
+
template = Template.new strict: false,
|
88
|
+
list_token: @data.keys,
|
89
|
+
template_content: folder.delete_prefix("#{@src_root}/")
|
90
|
+
template.map(@data)
|
91
|
+
output = template.output
|
92
|
+
target.push output unless target.include? output
|
103
93
|
end
|
94
|
+
end
|
104
95
|
end
|
96
|
+
end
|
105
97
|
end
|
data/lib/appifier/actors/init.rb
CHANGED
@@ -1,38 +1,38 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class Archive
|
13
|
-
def self.get(origin:, destination:)
|
14
|
-
untar_gz archive: origin, destination: destination
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
module Appifier
|
4
|
+
module Actors
|
5
|
+
module Retrivers
|
6
|
+
class Git
|
7
|
+
def self.get(origin:, destination:);
|
8
|
+
raise 'not yest implemented'
|
18
9
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@origin = origin
|
26
|
-
@type = type
|
27
|
-
@destination = destination
|
28
|
-
puts "retrieving template from #{origin}"
|
29
|
-
end
|
30
|
-
|
31
|
-
def get
|
32
|
-
TYPE[@type].get origin: @origin , destination: @destination
|
33
|
-
end
|
34
|
-
|
10
|
+
end
|
11
|
+
|
12
|
+
class Archive
|
13
|
+
def self.get(origin:, destination:)
|
14
|
+
raise "Archive : #{origin} not found" unless File::exist? origin
|
15
|
+
untar_gz archive: origin, destination: destination
|
35
16
|
end
|
36
|
-
|
17
|
+
end
|
37
18
|
end
|
38
|
-
|
19
|
+
|
20
|
+
class Retriever
|
21
|
+
extend Carioca::Injector
|
22
|
+
inject service: :output
|
23
|
+
|
24
|
+
TYPE = { archive: Appifier::Actors::Retrivers::Archive, git: Appifier::Actors::Retrivers::Git }
|
25
|
+
|
26
|
+
def initialize(origin:, type: :archive, destination: File.expand_path(Appifier::DEFAULT_TEMPLATES_PATH))
|
27
|
+
@origin = origin
|
28
|
+
@type = type
|
29
|
+
@destination = destination
|
30
|
+
output.info "retrieving template from #{origin}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def get
|
34
|
+
TYPE[@type].get origin: @origin, destination: @destination
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|