disloku 0.2.0 → 0.4.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/disloku/BaseCommand.rb +79 -0
  3. data/lib/disloku/ChangeSet.rb +13 -1
  4. data/lib/disloku/CliAdapter.rb +36 -0
  5. data/lib/disloku/Constants.rb +4 -0
  6. data/lib/disloku/FileChange.rb +7 -2
  7. data/lib/disloku/Log.rb +39 -12
  8. data/lib/disloku/Repository.rb +10 -1
  9. data/lib/disloku/SysCmd.rb +2 -2
  10. data/lib/disloku/commands/Build.rb +30 -0
  11. data/lib/disloku/commands/Config.rb +17 -0
  12. data/lib/disloku/commands/Deploy.rb +38 -0
  13. data/lib/disloku/config/Connection.rb +34 -0
  14. data/lib/disloku/config/ConnectionStore.rb +19 -0
  15. data/lib/disloku/config/Mapping.rb +84 -0
  16. data/lib/disloku/config/MappingStore.rb +19 -0
  17. data/lib/disloku/config/NamedConfigStore.rb +41 -0
  18. data/lib/disloku/config/Options.rb +51 -0
  19. data/lib/disloku/config/Target.rb +37 -0
  20. data/lib/disloku/config/YamlConfig.rb +54 -0
  21. data/lib/disloku/git/ChangeSetProvider.rb +19 -6
  22. data/lib/disloku/git/Repository.rb +16 -2
  23. data/lib/disloku/svn/ChangeSetProvider.rb +44 -41
  24. data/lib/disloku/svn/Repository.rb +24 -21
  25. data/lib/disloku/tasks/FolderTask.rb +5 -5
  26. data/lib/disloku/tasks/NetSftpTask.rb +39 -29
  27. data/lib/disloku/util/File.rb +9 -3
  28. data/lib/disloku.rb +24 -10
  29. metadata +20 -15
  30. data/lib/disloku/Commit.rb +0 -7
  31. data/lib/disloku/Config.rb +0 -52
  32. data/lib/disloku/Connection.rb +0 -31
  33. data/lib/disloku/ConnectionStore.rb +0 -16
  34. data/lib/disloku/Disloku.rb +0 -103
  35. data/lib/disloku/Mapping.rb +0 -81
  36. data/lib/disloku/MappingStore.rb +0 -16
  37. data/lib/disloku/NamedConfigStore.rb +0 -39
  38. data/lib/disloku/Options.rb +0 -46
  39. data/lib/disloku/Target.rb +0 -35
  40. data/lib/disloku/tasks/PsFtpTask.rb +0 -58
@@ -0,0 +1,54 @@
1
+ require('yaml')
2
+
3
+ module Disloku
4
+ module Config
5
+
6
+ class YamlConfig
7
+ attr_accessor :yaml
8
+
9
+ def initialize(config, isFile = true)
10
+ if (isFile)
11
+ @yaml = YAML.load_file(config)
12
+ else
13
+ @yaml = config
14
+ end
15
+ end
16
+
17
+ def merge(base)
18
+ @yaml = base.yaml.recursive_merge(@yaml)
19
+ end
20
+
21
+ def has?(key)
22
+ return self[key] != nil
23
+ end
24
+
25
+ def get(keys)
26
+ if (keys.empty?())
27
+ return self
28
+ end
29
+ current = keys.shift()
30
+ return @yaml.has_key?(current) ? YamlConfig.new(@yaml[current], false).get(keys) : nil
31
+ end
32
+
33
+ def [](key)
34
+ return self.get(key.split('.'))
35
+ end
36
+
37
+ def value()
38
+ if (@yaml.kind_of?(Array))
39
+ return @yaml.map() { |item| YamlConfig.new(item, false) }
40
+ end
41
+ return @yaml
42
+ end
43
+
44
+ def to_s()
45
+ return value().to_s()
46
+ end
47
+
48
+ def to_yaml()
49
+ return @yaml.to_yaml()
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -25,16 +25,29 @@ module Disloku
25
25
  from = "HEAD"
26
26
  end
27
27
 
28
+ dirtyPaths = {}
29
+ status = SysCmd.new("git status --untracked-files=no --porcelain #{repository.root}").execute()
30
+ status.output.each_line() do |line|
31
+ match = /^(.)(.)\s+"([^"]+)"/.match(line) || /^(.)(.)\s+([^ \n\r]+)/.match(line)
32
+ dirtyPaths[match[3]] = true
33
+ end
34
+
35
+ result = ChangeSet.new(@repository.getHashOfRefspec(from), to || @repository.getHashOfRefspec("HEAD"))
36
+
28
37
  if (to == nil)
29
- status = SysCmd.new("git diff --name-status --staged #{from} #{repository.root}").execute()
38
+ diff = SysCmd.new("git diff --name-status --staged #{from} #{repository.root}").execute()
30
39
  else
31
- status = SysCmd.new("git diff --name-status #{from} #{to} #{repository.root}").execute()
40
+ diff = SysCmd.new("git diff --name-status #{from} #{to} #{repository.root}").execute()
32
41
  end
33
42
 
34
- result = ChangeSet.new()
35
- status.output.each_line do |line|
36
- match = /^(.)\s+(.*)$/.match(line)
37
- result << FileChange.new(repository, match[2], getChangeType(match[1]))
43
+ Log.instance.scope([:default, :logfile]) do
44
+ diff.output.each_line() do |line|
45
+ match = /^(.)\s+(.*)$/.match(line)
46
+ dirty = dirtyPaths.has_key?(match[2])
47
+ change = FileChange.new(repository, match[2], getChangeType(match[1]), dirty)
48
+ Log.instance.info(change.to_s())
49
+ result << change
50
+ end
38
51
  end
39
52
 
40
53
  return [result]
@@ -19,8 +19,22 @@ module Disloku
19
19
  end
20
20
 
21
21
  def getBranchName()
22
- branch = SysCmd.new("git --git-dir=\"#{@gitDir}\" rev-parse --abbrev-ref HEAD").execute()
23
- return branch.output.strip()
22
+ return @branch || begin
23
+ branch = SysCmd.new("git --git-dir=\"#{@gitDir}\" rev-parse --abbrev-ref HEAD").execute()
24
+ @branch = branch.output.strip()
25
+ end
26
+ end
27
+
28
+ def getHashOfRefspec(refspec)
29
+ hash = SysCmd.new("git --git-dir=\"#{@gitDir}\" rev-parse #{refspec}").execute()
30
+ return hash.output.strip()
31
+ end
32
+
33
+ def getHeadHash()
34
+ return @headHash || begin
35
+ headHash = SysCmd.new("git --git-dir=\"#{@gitDir}\" rev-parse HEAD").execute()
36
+ @headHash = branch.output.strip()
37
+ end
24
38
  end
25
39
 
26
40
  def getProvider()
@@ -1,41 +1,44 @@
1
- require_relative('../ChangeSetProvider');
2
- require_relative('../ChangeSet');
3
- require_relative('../FileChange');
4
- require_relative('../SysCmd');
5
-
6
- module Disloku
7
- module Svn
8
-
9
- CHANGE_MAP = {
10
- ' ' => :nochange,
11
- 'A' => :added,
12
- 'C' => :conflicted,
13
- 'D' => :deleted,
14
- 'I' => :ignored,
15
- 'M' => :modified,
16
- 'R' => :replaced,
17
- 'X' => :external,
18
- '?' => :unversioned,
19
- '!' => :missing,
20
- '~' => :obstructed,
21
- }
22
-
23
- class ChangeSetProvider < Disloku::ChangeSetProvider
24
- def getChangeSets(from, to)
25
- status = SysCmd.new("svn status #{repository.root}").execute()
26
-
27
- result = ChangeSet.new()
28
- status.output.each_line do |line|
29
- match = /^(.)......\s+(.*)$/.match(line)
30
- result << FileChange.new(repository, match[2], getChangeType(match[1]))
31
- end
32
-
33
- return [result]
34
- end
35
-
36
- def getChangeType(changeChar)
37
- return CHANGE_MAP[changeChar]
38
- end
39
- end
40
- end
41
- end
1
+
2
+ # TODO: start from scratch for SVN repository provider
3
+
4
+ # require_relative('../ChangeSetProvider');
5
+ # require_relative('../ChangeSet');
6
+ # require_relative('../FileChange');
7
+ # require_relative('../SysCmd');
8
+
9
+ # module Disloku
10
+ # module Svn
11
+
12
+ # CHANGE_MAP = {
13
+ # ' ' => :nochange,
14
+ # 'A' => :added,
15
+ # 'C' => :conflicted,
16
+ # 'D' => :deleted,
17
+ # 'I' => :ignored,
18
+ # 'M' => :modified,
19
+ # 'R' => :replaced,
20
+ # 'X' => :external,
21
+ # '?' => :unversioned,
22
+ # '!' => :missing,
23
+ # '~' => :obstructed,
24
+ # }
25
+
26
+ # class ChangeSetProvider < Disloku::ChangeSetProvider
27
+ # def getChangeSets(from, to)
28
+ # status = SysCmd.new("svn status #{repository.root}").execute()
29
+
30
+ # result = ChangeSet.new()
31
+ # status.output.each_line do |line|
32
+ # match = /^(.)......\s+(.*)$/.match(line)
33
+ # result << FileChange.new(repository, match[2], getChangeType(match[1]))
34
+ # end
35
+
36
+ # return [result]
37
+ # end
38
+
39
+ # def getChangeType(changeChar)
40
+ # return CHANGE_MAP[changeChar]
41
+ # end
42
+ # end
43
+ # end
44
+ # end
@@ -1,22 +1,25 @@
1
- require_relative('../Repository')
2
- require_relative('ChangeSetProvider')
3
1
 
4
- module Disloku
5
- module Svn
6
- class Repository < Disloku::Repository
7
- def initialize(location)
8
- super(location)
9
- end
10
-
11
- def getRepositoryRoot()
12
- info = %x[svn info --xml #{location}]
13
- m = /<wcroot-abspath>(.*)<\/wcroot-abspath>/.match(info)
14
- return m[1]
15
- end
16
-
17
- def getProvider()
18
- return ChangeSetProvider.new(self)
19
- end
20
- end
21
- end
22
- end
2
+ # TODO: start from scratch for SVN repository provider
3
+
4
+ # require_relative('../Repository')
5
+ # require_relative('ChangeSetProvider')
6
+
7
+ # module Disloku
8
+ # module Svn
9
+ # class Repository < Disloku::Repository
10
+ # def initialize(location)
11
+ # super(location)
12
+ # end
13
+
14
+ # def getRepositoryRoot()
15
+ # info = %x[svn info --xml #{location}]
16
+ # m = /<wcroot-abspath>(.*)<\/wcroot-abspath>/.match(info)
17
+ # return m[1]
18
+ # end
19
+
20
+ # def getProvider()
21
+ # return ChangeSetProvider.new(self)
22
+ # end
23
+ # end
24
+ # end
25
+ # end
@@ -1,6 +1,7 @@
1
1
  require_relative('../Log')
2
2
  require_relative('../BaseTask')
3
- require_relative('../util/Kernel')
3
+ require_relative('../config/Options')
4
+ require_relative('../config/Target')
4
5
  require('fileutils')
5
6
  require('stringio')
6
7
 
@@ -10,10 +11,9 @@ module Disloku
10
11
 
11
12
  def initialize(input)
12
13
  super()
13
- @options = getInputParam(input, :options, Options)
14
+ @options = getInputParam(input, :options, Config::Options)
14
15
  @changesets = getInputParam(input, :changesets, Array)
15
- @target = getInputParam(input, :target, Target)
16
- @allowOverride = getInputParam(input, :allowOverride, Object)
16
+ @target = getInputParam(input, :target, Config::Target)
17
17
  @deletes = StringIO.new()
18
18
 
19
19
  @targetDirectory = File.join(@options.packageDir, @target.name)
@@ -22,7 +22,7 @@ module Disloku
22
22
  def beforeExecute()
23
23
  if (!Dir.exists?(@targetDirectory))
24
24
  FileUtils.mkpath(@targetDirectory)
25
- elsif (Dir.exists?(@targetDirectory) and !@allowOverride)
25
+ elsif (Dir.exists?(@targetDirectory) and !@options.allowOverride)
26
26
  raise Exception.new("Directory '#{@targetDirectory}' already exists")
27
27
  elsif (Dir.exists?(@targetDirectory))
28
28
  FileUtils.rm_r(@targetDirectory, :force => true)
@@ -1,7 +1,10 @@
1
1
  require_relative('../DislokuError')
2
2
  require_relative('../Log')
3
3
  require_relative('../BaseTask')
4
+ require_relative('../CliAdapter')
4
5
  require_relative('../SessionManager')
6
+ require_relative('../config/Options')
7
+ require_relative('../config/Target')
5
8
 
6
9
  module Net; module SFTP; module Operations
7
10
  class Upload
@@ -26,11 +29,11 @@ module Disloku
26
29
 
27
30
  def initialize(input)
28
31
  super()
29
- @repository = getInputParam(input, :repository, Repository)
30
- @options = getInputParam(input, :options, Options)
32
+ @repository = getInputParam(input, :repository, Disloku::Repository)
33
+ @options = getInputParam(input, :options, Config::Options)
31
34
  @directory = getInputParam(input, :directory, String)
32
35
  @files = getInputParam(input, :files, Array)
33
- @target = getInputParam(input, :target, Target)
36
+ @target = getInputParam(input, :target, Config::Target)
34
37
  end
35
38
 
36
39
  def beforeExecute()
@@ -46,46 +49,53 @@ module Disloku
46
49
  @files.each() do |file|
47
50
  puts(file)
48
51
  end
49
- puts()
50
- puts("Continue with deployment (Y/N)?")
51
- response = STDIN.readline().chomp()
52
- @skip = response.match(/^[Yy]/) == nil
53
- puts("skipping: #{@skip}")
52
+
53
+ @skip = !CliAdapter.queryYesNo("Continue with deployment?")
54
54
  end
55
55
 
56
56
  def executeTask()
57
57
  if (@skip)
58
58
  return
59
59
  end
60
+ CliAdapter.puts("Doploying target [#{@target.name}]")
61
+
62
+ Log.instance.scope([:default, :logfile]) do
63
+
64
+ SessionManager.instance.get(@target.connection) do |sftp|
65
+ Log.instance.info("connection with [#{@target.name}] established")
60
66
 
61
- SessionManager.instance.get(@target.connection) do |sftp|
62
- Log.instance.info("copying new files...")
63
- sftp.upload!(@directory, @target.targetDir, { :ignoreMkdirError => true }) do |event, uploader, *args|
64
- case event
65
- when :open then
66
- # args[0] : file metadata
67
- # "starting upload: #{args[0].local} -> #{args[0].remote} (#{args[0].size} bytes}"
68
- print(".")
67
+ sftp.upload!(@directory, @target.targetDir, { :ignoreMkdirError => true }) do |event, uploader, *args|
68
+ case event
69
+ when :open then
70
+ # args[0] : file metadata
71
+ # "starting upload: #{args[0].local} -> #{args[0].remote} (#{args[0].size} bytes}"
72
+ CliAdapter.print(".")
73
+ Log.instance.info("#{args[0].local} -> #{args[0].remote} (#{args[0].size} bytes)")
74
+ end
69
75
  end
70
- end
71
- puts()
76
+ CliAdapter.puts()
72
77
 
73
- @files.each() do |file|
74
- if (file.change.changeType == :deleted)
75
- path = file.getAbsoluteDstPath()
76
- Log.instance.info("deleting file #{path}")
77
- begin
78
- sftp.remove!(path)
79
- rescue
80
- if (!@options.ignoreDeleteErrors)
81
- raise
82
- else
83
- Log.instance.info("unable to delete file #{path} (it probably doesn't exist)")
78
+ @files.each() do |file|
79
+ if (file.change.changeType == :deleted)
80
+ path = file.getAbsoluteDstPath()
81
+ Log.instance.info("deleting file #{path}")
82
+ begin
83
+ sftp.remove!(path)
84
+ CliAdapter.print("x")
85
+ rescue
86
+ if (!@options.ignoreDeleteErrors)
87
+ Log.instance.fatal("unable to delete file #{path} - failing")
88
+ raise
89
+ else
90
+ Log.instance.warn("unable to delete file #{path} (it probably doesn't exist)")
91
+ end
84
92
  end
85
93
  end
86
94
  end
87
95
  end
96
+
88
97
  end
98
+
89
99
  end
90
100
 
91
101
  def afterExecute()
@@ -4,6 +4,11 @@ module Disloku
4
4
  SPLIT_EXP = "\\#{File::SEPARATOR}|\\#{File::ALT_SEPARATOR}"
5
5
 
6
6
  class File
7
+
8
+ def self.getSegments(path)
9
+ return path.split(/#{SPLIT_EXP}/)
10
+ end
11
+
7
12
  attr_accessor :srcPath, :change
8
13
 
9
14
  def initialize(filePath, basePath, target, change)
@@ -11,8 +16,8 @@ module Disloku
11
16
  @target = target
12
17
  @change = change
13
18
 
14
- fileSegments = filePath.split(/#{SPLIT_EXP}/)
15
- baseSegments = basePath.split(/#{SPLIT_EXP}/)
19
+ fileSegments = File.getSegments(filePath)
20
+ baseSegments = File.getSegments(basePath)
16
21
  index = 0
17
22
  while (fileSegments[index] == baseSegments[index])
18
23
  index += 1
@@ -40,7 +45,8 @@ module Disloku
40
45
  end
41
46
 
42
47
  def to_s()
43
- return "#{srcPath} -> #{getAbsoluteDstPath()}"
48
+ operation = (@change.changeType == :deleted ? "x>" : "->")
49
+ return "#{srcPath} #{operation} #{getAbsoluteDstPath()}"
44
50
  end
45
51
  end
46
52
  end
data/lib/disloku.rb CHANGED
@@ -1,32 +1,46 @@
1
- require_relative('disloku/Disloku')
1
+ require_relative('disloku/Constants')
2
+ require_relative('disloku/commands/Config')
3
+ require_relative('disloku/commands/Build')
4
+ require_relative('disloku/commands/Deploy')
2
5
  require_relative('disloku/SysCmd')
3
6
  require_relative('disloku/SessionManager')
4
7
  require('thor')
5
8
 
6
9
  class DislokuCli < Thor
10
+ class_option :verbose, :aliases => "-v", :type => :boolean, :desc => "verbose output"
11
+ class_option :debug, :aliases => "-d", :type => :boolean, :desc => "debug output"
12
+ class_option :scm, :aliases => "-s", :type => :string, :desc => "source control adapter to use (git) - defaults to git"
13
+
7
14
  desc "deploy [FROM] [TO]", "deploy changes"
8
15
  method_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory"
9
16
  method_option :target, :aliases => "-t", :desc => "target"
17
+ method_option :packageDir, :aliases => "-p", :desc => "directory in which the deployment package will be created (a temp folder is created if this option is omitted)"
18
+ method_option :ignoreDeleteErrors, :aliases => "--ignore-delete-errors", :type => :boolean, :desc => "ignore remote delete errors"
10
19
  def deploy(from = nil, to = nil)
11
- puts "deploy #{options.inspect}"
12
-
13
- disloku = Disloku::Disloku.new(options)
14
- disloku.deployPackage(from, to)
20
+ cmd = Disloku::Commands::Deploy.new(options)
21
+ cmd.execute(from, to)
15
22
  end
16
23
 
17
24
  desc "build [FROM] [TO]", "build change package"
18
25
  method_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory"
19
26
  method_option :target, :aliases => "-t", :desc => "target"
27
+ method_option :packageDir, :default => "~/disloku", :aliases => "-p", :desc => "directory in which the deployment package will be created (~/disloku if this option is omitted)"
28
+ method_option :allowOverride, :aliases => "-f", :type => :boolean, :desc => "overwrites existing deployment packages in packageDir"
29
+ method_option :createDeletesFile, :aliases => "--create-deletes-file", :type => :boolean, :desc => "creates a .deletes file containing a list of deleted files"
20
30
  def build(from = nil, to = nil)
21
- p(options)
22
- disloku = Disloku::Disloku.new(options)
23
- dir = disloku.buildPackage(from, to)
31
+ cmd = Disloku::Commands::Build.new(options)
32
+ cmd.execute(from, to)
24
33
  end
25
34
 
26
35
  desc "config", "show configuration"
27
36
  method_option :dir, :default => ".", :aliases => "-d", :desc => "repository directory"
28
37
  def config()
29
- disloku = Disloku::Disloku.new(options)
30
- puts(disloku.config.to_yaml())
38
+ cmd = Disloku::Commands::Config.new(options)
39
+ cmd.execute()
40
+ end
41
+
42
+ desc "version", "show version"
43
+ def version()
44
+ puts(Disloku::VERSION)
31
45
  end
32
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disloku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Angerer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-05 00:00:00.000000000 Z
11
+ date: 2014-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -66,40 +66,45 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 2.14.1
69
- description: A deployment tool that allows copying of Git changesets via sftp
70
- email: executor.dev@gmail.com
69
+ description: A deployment tool that allows copying of Git changesets via sftp (version
70
+ 0.4.0 [e5344aa1bb])
71
+ email:
72
+ - executor.dev@gmail.com
71
73
  executables:
72
74
  - disloku
73
75
  extensions: []
74
76
  extra_rdoc_files: []
75
77
  files:
78
+ - lib/disloku/BaseCommand.rb
76
79
  - lib/disloku/BaseTask.rb
77
80
  - lib/disloku/ChangeSet.rb
78
81
  - lib/disloku/ChangeSetProvider.rb
79
- - lib/disloku/Commit.rb
80
- - lib/disloku/Config.rb
81
- - lib/disloku/Connection.rb
82
- - lib/disloku/ConnectionStore.rb
83
- - lib/disloku/Disloku.rb
82
+ - lib/disloku/CliAdapter.rb
83
+ - lib/disloku/commands/Build.rb
84
+ - lib/disloku/commands/Config.rb
85
+ - lib/disloku/commands/Deploy.rb
86
+ - lib/disloku/config/Connection.rb
87
+ - lib/disloku/config/ConnectionStore.rb
88
+ - lib/disloku/config/Mapping.rb
89
+ - lib/disloku/config/MappingStore.rb
90
+ - lib/disloku/config/NamedConfigStore.rb
91
+ - lib/disloku/config/Options.rb
92
+ - lib/disloku/config/Target.rb
93
+ - lib/disloku/config/YamlConfig.rb
94
+ - lib/disloku/Constants.rb
84
95
  - lib/disloku/DislokuError.rb
85
96
  - lib/disloku/FileChange.rb
86
97
  - lib/disloku/git/ChangeSetProvider.rb
87
98
  - lib/disloku/git/Repository.rb
88
99
  - lib/disloku/Log.rb
89
- - lib/disloku/Mapping.rb
90
- - lib/disloku/MappingStore.rb
91
- - lib/disloku/NamedConfigStore.rb
92
- - lib/disloku/Options.rb
93
100
  - lib/disloku/Repository.rb
94
101
  - lib/disloku/SessionManager.rb
95
102
  - lib/disloku/svn/ChangeSetProvider.rb
96
103
  - lib/disloku/svn/Repository.rb
97
104
  - lib/disloku/SysCmd.rb
98
105
  - lib/disloku/SysCmdResult.rb
99
- - lib/disloku/Target.rb
100
106
  - lib/disloku/tasks/FolderTask.rb
101
107
  - lib/disloku/tasks/NetSftpTask.rb
102
- - lib/disloku/tasks/PsFtpTask.rb
103
108
  - lib/disloku/util/File.rb
104
109
  - lib/disloku/util/Hash.rb
105
110
  - lib/disloku/util/Kernel.rb
@@ -1,7 +0,0 @@
1
-
2
- module Disloku
3
- class Commit
4
- def initialize()
5
- end
6
- end
7
- end
@@ -1,52 +0,0 @@
1
- require('yaml')
2
- require_relative('util/Hash')
3
-
4
- module Disloku
5
- class Config
6
- attr_accessor :yaml
7
-
8
- def initialize(config, isFile = true)
9
- if (isFile)
10
- @yaml = YAML.load_file(config)
11
- else
12
- @yaml = config
13
- end
14
- end
15
-
16
- def merge(base)
17
- @yaml = base.yaml.recursive_merge(@yaml)
18
- end
19
-
20
- def has?(key)
21
- return self[key] != nil
22
- end
23
-
24
- def get(keys)
25
- if (keys.empty?())
26
- return self
27
- end
28
- current = keys.shift()
29
- return @yaml.has_key?(current) ? Config.new(@yaml[current], false).get(keys) : nil
30
- end
31
-
32
- def [](key)
33
- return self.get(key.split('.'))
34
- end
35
-
36
- def value()
37
- if (@yaml.kind_of?(Array))
38
- return @yaml.map() { |item| Config.new(item, false) }
39
- end
40
- return @yaml
41
- end
42
-
43
- def to_s()
44
- return value().to_s()
45
- end
46
-
47
- def to_yaml()
48
- return @yaml.to_yaml()
49
- end
50
-
51
- end
52
- end
@@ -1,31 +0,0 @@
1
- require('net/sftp')
2
- require('digest/sha1')
3
-
4
- module Disloku
5
- class Connection
6
- attr_accessor :hash, :host, :user, :options
7
-
8
- def initialize(config)
9
- @host = config["host"].value()
10
- @user = config["user"].value() if !config["user"].nil?
11
- @options = {}
12
- addOption(config, :password)
13
- addOption(config, :port)
14
- addOption(config, :keys, true)
15
-
16
- @hash = Digest::SHA1.hexdigest([@host, @user, @options].join())
17
- end
18
-
19
- def addOption(config, key, unwrap = false)
20
- value = config[key.to_s()]
21
- if (!value.nil?)
22
- if (unwrap)
23
- @options[key] = value.value().map() { |e| e.value() }
24
- else
25
- @options[key] = value.value()
26
- end
27
- end
28
- end
29
-
30
- end
31
- end
@@ -1,16 +0,0 @@
1
- require_relative('NamedConfigStore')
2
- require_relative('Connection')
3
-
4
- module Disloku
5
- class ConnectionStore < NamedConfigStore
6
-
7
- def initialize(config = nil)
8
- super(config)
9
- end
10
-
11
- def transformConfig(configObject)
12
- return Connection.new(configObject)
13
- end
14
-
15
- end
16
- end