webappsword_sdk 0.0.1
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.
- data/.gitignore +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/README.md +67 -0
- data/Rakefile +20 -0
- data/VERSION +1 -0
- data/bin/webappsword_sdk +85 -0
- data/easy_installer-0.0.1.gem +0 -0
- data/example/Rakefile +72 -0
- data/example/additional/after_install.rb +1 -0
- data/example/additional/return_callback.rb +2 -0
- data/example/arch.zip +0 -0
- data/example/config.yml +6 -0
- data/example/files/joomla/index.php +54 -0
- data/example/installers/global.rb +2 -0
- data/example/installers/local.rb +2 -0
- data/example/validators/ftp.rb +6 -0
- data/example/validators/local.rb +0 -0
- data/lib/easy_installer.rb +4 -0
- data/lib/easy_installer/autoload.rb +28 -0
- data/lib/easy_installer/coffeescript_sandbox.rb +95 -0
- data/lib/easy_installer/config.rb +138 -0
- data/lib/easy_installer/config_validator.rb +73 -0
- data/lib/easy_installer/fake/ftp/install_helper.rb +34 -0
- data/lib/easy_installer/fake/ftp/validate_helper.rb +12 -0
- data/lib/easy_installer/fake/local/install_helper.rb +30 -0
- data/lib/easy_installer/fake/local/standart_input.yml +2 -0
- data/lib/easy_installer/fake/local/validate_helper.rb +6 -0
- data/lib/easy_installer/fake/php/validate_helper.rb +12 -0
- data/lib/easy_installer/fake/validator.rb +0 -0
- data/lib/easy_installer/fake/zip.rb +9 -0
- data/lib/easy_installer/generators/base.rb +25 -0
- data/lib/easy_installer/generators/config.rb +58 -0
- data/lib/easy_installer/install.rb +56 -0
- data/lib/easy_installer/install_helpers/result.rb +14 -0
- data/lib/easy_installer/install_helpers/template.rb +19 -0
- data/lib/easy_installer/install_helpers/zip.rb +9 -0
- data/lib/easy_installer/methods/ftp/install_helper.rb +105 -0
- data/lib/easy_installer/methods/ftp/standart_input.yml +5 -0
- data/lib/easy_installer/methods/ftp/standart_input.yml~ +5 -0
- data/lib/easy_installer/methods/ftp/validate_helper.rb +24 -0
- data/lib/easy_installer/methods/local/install_helper.rb +37 -0
- data/lib/easy_installer/methods/local/standart_input.yml +2 -0
- data/lib/easy_installer/methods/local/validate_helper.rb +4 -0
- data/lib/easy_installer/methods/sample/install_helper.rb +67 -0
- data/lib/easy_installer/methods/sample/standart_input.yml +5 -0
- data/lib/easy_installer/methods/sample/standart_input.yml~ +5 -0
- data/lib/easy_installer/methods/sample/validate_helper.rb +17 -0
- data/lib/easy_installer/modules/php/standart_input.yml +6 -0
- data/lib/easy_installer/modules/php/validate_helper.rb +47 -0
- data/lib/easy_installer/sandbox.rb +100 -0
- data/lib/easy_installer/sandbox_modules/message.rb +62 -0
- data/lib/easy_installer/steps.rb +36 -0
- data/lib/easy_installer/temp.rb +23 -0
- data/lib/easy_installer/translate.rb +70 -0
- data/lib/easy_installer/validator.rb +99 -0
- data/lib/easy_installer/validator_support_methods.rb +37 -0
- data/tests/files/additional/after_install.rb +1 -0
- data/tests/files/config.yml +10 -0
- data/tests/files/installers/global.rb +1 -0
- data/tests/files/installers/local.rb +1 -0
- data/tests/files/sample.zip +0 -0
- data/tests/files/template.erb +1 -0
- data/tests/files/translations/pl.yml +11 -0
- data/tests/files/validators/ftp.rb +3 -0
- data/tests/files/validators/local.rb +0 -0
- data/tests/files/validators/sample.rb +2 -0
- data/tests/test_config.rb +30 -0
- data/tests/test_config_validator.rb +22 -0
- data/tests/test_ftp.rb +51 -0
- data/tests/test_install.rb +19 -0
- data/tests/test_sandbox.rb +48 -0
- data/tests/test_sandbox_messages.rb +18 -0
- data/tests/test_steps.rb +19 -0
- data/tests/test_temp.rb +14 -0
- data/tests/test_template.rb +17 -0
- data/tests/test_validator.rb +31 -0
- data/tests/test_zip.rb +26 -0
- data/tests/wrong_config/config.yml +6 -0
- data/tests/wrong_config/install/global.rb +2 -0
- data/tests/wrong_config/install/local.rb +1 -0
- data/tests/wrong_config/translations/pl.yml +11 -0
- data/tests/wrong_config/validators/ftp.rb +4 -0
- data/tests/wrong_config/validators/local.rb +0 -0
- data/tests/wrong_config/validators/sample.rb +3 -0
- data/tests/~test_translator.rb +17 -0
- data/webappsword_sdk.gemspec +24 -0
- metadata +149 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'singleton'
|
3
|
+
class Hash
|
4
|
+
def flattern namespace = nil
|
5
|
+
result = {}
|
6
|
+
self.each do |k, v|
|
7
|
+
if v.class != Hash
|
8
|
+
result["#{namespace}_#{k}"] = v if namespace
|
9
|
+
result["#{k}"] = v unless namespace
|
10
|
+
else
|
11
|
+
result.merge!(v.flattern "#{namespace}_#{k}") if namespace
|
12
|
+
result.merge!(v.flattern "#{k}") unless namespace
|
13
|
+
end
|
14
|
+
end
|
15
|
+
result
|
16
|
+
end
|
17
|
+
|
18
|
+
def flatern_to_array namespace = nil
|
19
|
+
result = []
|
20
|
+
self.each do |k, v|
|
21
|
+
if v.class == String
|
22
|
+
result << "#{namespace}_#{v}" if namespace
|
23
|
+
result << "#{v}" unless namespace
|
24
|
+
elsif v.class == Array
|
25
|
+
v.each{|val| result << "#{namespace}_#{val}" if namespace
|
26
|
+
result << "#{val}" unless namespace
|
27
|
+
|
28
|
+
}
|
29
|
+
else
|
30
|
+
result += (v.flatern_to_array "#{namespace}_#{k}") if namespace
|
31
|
+
result += (v.flatern_to_array "#{k}") unless namespace
|
32
|
+
end
|
33
|
+
end
|
34
|
+
result
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module EasyInstaller
|
39
|
+
class Config
|
40
|
+
attr_accessor :method
|
41
|
+
require 'easy_installer/config_validator'
|
42
|
+
|
43
|
+
def initialize(config_yaml)
|
44
|
+
if config_yaml.class == String
|
45
|
+
config_yaml = File.open(config_yaml)
|
46
|
+
end
|
47
|
+
@config = YAML::load config_yaml
|
48
|
+
@installer_files_path = File.split(config_yaml.path)[0]
|
49
|
+
end
|
50
|
+
|
51
|
+
def valid?
|
52
|
+
raise "No InstallerConfig.File " if !@config
|
53
|
+
@validator = Config::Validator.new(self)
|
54
|
+
@validator.check
|
55
|
+
end
|
56
|
+
|
57
|
+
def validator
|
58
|
+
@validator
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_hash
|
62
|
+
@config
|
63
|
+
end
|
64
|
+
|
65
|
+
def [](arg)
|
66
|
+
@config[arg]
|
67
|
+
end
|
68
|
+
|
69
|
+
def required_inputs_for_method(method)
|
70
|
+
required_inputs_for_method_as_tree(method).flatern_to_array
|
71
|
+
end
|
72
|
+
|
73
|
+
def required_inputs_for_method_as_tree(method)
|
74
|
+
required_input = Hash.new
|
75
|
+
lang_file = File.open(self.path_to_gem+"/lib/easy_installer/modules/"+@config["lang"]+"/standart_input.yml")
|
76
|
+
method_file = File.open(self.path_to_gem+"/lib/easy_installer/methods/#{method}/standart_input.yml")
|
77
|
+
method_input = YAML::load method_file
|
78
|
+
lang_input = YAML::load lang_file
|
79
|
+
|
80
|
+
required_input['lang'] = lang_input[@config["lang"]] if lang_input[@config["lang"]]
|
81
|
+
required_input['method'] = method_input if method_input
|
82
|
+
required_input.merge! @config["additonal_inputs"] if @config["additonal_inputs"]
|
83
|
+
if @config["submodules"]
|
84
|
+
@config["submodules"].each do |submodule|
|
85
|
+
required_input[submodule] = lang_input[submodule] if lang_input[submodule]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
required_input
|
90
|
+
end
|
91
|
+
|
92
|
+
def install_code(method)
|
93
|
+
if File.exist?(File.join(@installer_files_path, "installers/#{method}.rb"))
|
94
|
+
return File::open(File.join(@installer_files_path, "installers/#{method}.rb")).read
|
95
|
+
else
|
96
|
+
return File::open(File.join(@installer_files_path, "installers/global.rb")).read
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def validating_code(method)
|
101
|
+
File.read(File.join(@installer_files_path, "validators/#{method}.rb"))
|
102
|
+
end
|
103
|
+
|
104
|
+
def after_install_code
|
105
|
+
if(File.exists?(File.join(@installer_files_path, "additional/after_install.rb")))
|
106
|
+
File.read(File.join(@installer_files_path, "additional/after_install.rb"))
|
107
|
+
else
|
108
|
+
""
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def return_callback_code
|
113
|
+
if(File.exists?(File.join(@installer_files_path, "additional/return_callback.rb")))
|
114
|
+
File.read(File.join(@installer_files_path, "additional/return_callback.rb"))
|
115
|
+
else
|
116
|
+
""
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def create_input_for_method(method)
|
121
|
+
$user_input = Hash.new
|
122
|
+
required_input_for_method(method).each do |input|
|
123
|
+
$user_input[input] = Input::create_by_name(input)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def has_key?(key)
|
128
|
+
@config.has_key?(key)
|
129
|
+
end
|
130
|
+
|
131
|
+
protected
|
132
|
+
|
133
|
+
def path_to_gem
|
134
|
+
Gem.loaded_specs['easy_installer'].full_gem_path
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module EasyInstaller
|
2
|
+
class Config::Validator
|
3
|
+
|
4
|
+
def initialize (config)
|
5
|
+
@config = config
|
6
|
+
end
|
7
|
+
|
8
|
+
def check
|
9
|
+
begin
|
10
|
+
self.validate_config_keys
|
11
|
+
self.validate_validator_code
|
12
|
+
self.validate_install_code
|
13
|
+
true
|
14
|
+
rescue Exception => e
|
15
|
+
@error_message = e.message
|
16
|
+
@error_backtrace = e.backtrace
|
17
|
+
false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return error returned by validating function
|
22
|
+
def error_message
|
23
|
+
@error_message
|
24
|
+
end
|
25
|
+
|
26
|
+
def error_backtrace
|
27
|
+
@error_backtrace
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def validate_config_keys
|
33
|
+
(@config.has_key?("methods") || @config.has_key?(:methods)) &&
|
34
|
+
(@config.has_key?("lang") || @config.has_key?(:lang)) &&
|
35
|
+
(@config.has_key?("submodules") || @config.has_key?(:submodules))
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate_install_code
|
39
|
+
require 'easy_installer/install'
|
40
|
+
require 'easy_installer/fake/zip'
|
41
|
+
@config["methods"].each do |method|
|
42
|
+
require "easy_installer/fake/#{method}/install_helper"
|
43
|
+
code = @config.install_code method
|
44
|
+
run = Installer::RunInstall.new
|
45
|
+
run.inputs = {}
|
46
|
+
run.extend FakeLib::ZipFile
|
47
|
+
run.extend FakeLib::InstallHelper
|
48
|
+
run.instance_eval code
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def validate_validator_code
|
53
|
+
require 'easy_installer/validator'
|
54
|
+
validator = Validator.new(@config)
|
55
|
+
@config["methods"].each do |method|
|
56
|
+
validator.import_from_config_by_method(method)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def deep_validation
|
61
|
+
return false if @config["methods"].class != Array
|
62
|
+
@config["methods"].each do |method|
|
63
|
+
return false unless Dir.exist?(File.join(path_to_gem, "lib", "easy_installer", "methods", method))
|
64
|
+
end
|
65
|
+
return false unless Dir.exist?(File.join(path_to_gem, "lib", "easy_installer", "modules", @config["methods"]))
|
66
|
+
end
|
67
|
+
|
68
|
+
def path_to_gem
|
69
|
+
gem_root = Gem.loaded_specs['easy_installer'].full_gem_path
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module EasyInstaller
|
2
|
+
module FakeLib
|
3
|
+
module InstallHelper
|
4
|
+
def setup params = {}
|
5
|
+
host = params[:host] || $user_input["ftp_host"].value
|
6
|
+
username = params[:username] || $user_input["ftp_username"].value
|
7
|
+
password = params[:password] || $user_input["ftp_password"].value
|
8
|
+
@ftp = Net::FTP.new(host)
|
9
|
+
@ftp.login(username, password)
|
10
|
+
end
|
11
|
+
|
12
|
+
def move_directory(local_directory,remote_directory)
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_directory(dirpath, chmod=664)
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def move_file(local_file,remote_file, chmod=664)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def chmod(remote_file, chmod)
|
25
|
+
true
|
26
|
+
end
|
27
|
+
#need to test
|
28
|
+
def chmod_r(remote_dir, chmod)
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'easy_installer/methods/ftp/install_helper'
|
2
|
+
module FakeLib
|
3
|
+
module MethodValidateHelper
|
4
|
+
include InstallHelper
|
5
|
+
def check_connection params = {}
|
6
|
+
host = params[:host]
|
7
|
+
username = params[:username]
|
8
|
+
password = params[:password]
|
9
|
+
true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
module EasyInstaller
|
3
|
+
module FakeLib
|
4
|
+
module InstallHelper
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def move_directory(from_directory, to_directory)
|
9
|
+
true
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_directory(dirpath,chmod=664)
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def move_file(local_file,remote_file, chmod=664)
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def chmod(remote_file, chmod)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def chmod_r(remote_dir, chmod)
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
File without changes
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
module EasyInstaller
|
3
|
+
module Generator
|
4
|
+
class Base
|
5
|
+
def initialize(dir, &block)
|
6
|
+
@base_path = dir
|
7
|
+
if block
|
8
|
+
block.call(self)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_directories(dirs)
|
13
|
+
dirs.each do |dir|
|
14
|
+
FileUtils.mkdir_p(File.join(@base_path, dir))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_files(files)
|
19
|
+
files.each do |file|
|
20
|
+
File.open(File.join(@base_path, file), "w"){}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'erb'
|
2
|
+
module EasyInstaller
|
3
|
+
module Generator
|
4
|
+
class Config
|
5
|
+
attr_accessor :methods, :submodules, :lang
|
6
|
+
|
7
|
+
# Sets avabile methods
|
8
|
+
# ==== Attributes
|
9
|
+
# * +methods+ - Array of String
|
10
|
+
# ==== Example
|
11
|
+
# set_methods(['ftp','local'])
|
12
|
+
def set_methods(methods)
|
13
|
+
@methods = methods
|
14
|
+
end
|
15
|
+
|
16
|
+
#Same like set_methods
|
17
|
+
def set_submodules(submodules)
|
18
|
+
@submodules = methods
|
19
|
+
end
|
20
|
+
|
21
|
+
# Sets used lang
|
22
|
+
# ==== Attributes
|
23
|
+
# * +lang+ - String
|
24
|
+
# ==== Example
|
25
|
+
# set_lang('php')
|
26
|
+
def set_lang(lang)
|
27
|
+
@lang = lang
|
28
|
+
end
|
29
|
+
|
30
|
+
# Saves current config to file
|
31
|
+
# ==== Attributes
|
32
|
+
# +file+ - could be File or String
|
33
|
+
# ==== Example
|
34
|
+
# save(File.new("sample.yml", "w"))
|
35
|
+
# save("sample.yml")
|
36
|
+
def save(file)
|
37
|
+
if file.class == String
|
38
|
+
file = File.exist?(file) ? File::open(file, "w") : File::new(file, "w")
|
39
|
+
end
|
40
|
+
file.write(self.generate)
|
41
|
+
file.close
|
42
|
+
end
|
43
|
+
|
44
|
+
#Returns config as string
|
45
|
+
def generate
|
46
|
+
template = ERB.new <<-EOF
|
47
|
+
methods:
|
48
|
+
<% @methods.each do |method| %> - <%=method%>
|
49
|
+
<% end %>lang: <%=@lang%>
|
50
|
+
submodules:
|
51
|
+
<% @submodules.each do |submodule| %> - <%=submodule%>
|
52
|
+
<% end %>additonal_inputs:
|
53
|
+
EOF
|
54
|
+
template.result binding
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'easy_installer/install_helpers/zip'
|
2
|
+
module EasyInstaller
|
3
|
+
class Installer
|
4
|
+
class RunInstall
|
5
|
+
attr_accessor :inputs
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@config = config
|
10
|
+
end
|
11
|
+
# Runs code in temporary directory
|
12
|
+
# * *Args* :
|
13
|
+
# - +inputs+ -> Hash of inputs
|
14
|
+
# * *Returns* :
|
15
|
+
# - EasyInstaller::Sandbox
|
16
|
+
|
17
|
+
def install(inputs = {})
|
18
|
+
require "easy_installer/methods/#{@config.method}/install_helper"
|
19
|
+
create_and_go_to_temp
|
20
|
+
evaluate = Sandbox.new(@config.install_code(@config.method), inputs)
|
21
|
+
evaluate.helpers << InstallHelper::ZipFile
|
22
|
+
evaluate.helpers << InstallHelper
|
23
|
+
evaluate.modules << EasyInstaller::Sandbox::Message
|
24
|
+
result = evaluate.eval
|
25
|
+
unless result
|
26
|
+
raise evaluate.returned
|
27
|
+
end
|
28
|
+
@success = true
|
29
|
+
clear_temp
|
30
|
+
|
31
|
+
evaluate
|
32
|
+
end
|
33
|
+
|
34
|
+
def returned
|
35
|
+
@returned
|
36
|
+
end
|
37
|
+
|
38
|
+
def success?
|
39
|
+
@success
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def create_and_go_to_temp
|
45
|
+
@current_dir = Dir.pwd
|
46
|
+
@temp = EasyInstaller::Temp.new
|
47
|
+
@temp.copy_to_tempdir(".")
|
48
|
+
Dir.chdir(@temp.tempdir)
|
49
|
+
end
|
50
|
+
|
51
|
+
def clear_temp
|
52
|
+
Dir.chdir(@current_dir)
|
53
|
+
@temp.clear
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|