takelage 0.18.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.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +674 -0
  3. data/README.md +213 -0
  4. data/bin/tau +6 -0
  5. data/lib/Thorfile +3 -0
  6. data/lib/takelage.rb +230 -0
  7. data/lib/takelage/bit/check/cli.rb +23 -0
  8. data/lib/takelage/bit/check/workspace.rb +37 -0
  9. data/lib/takelage/bit/cli.rb +15 -0
  10. data/lib/takelage/bit/clipboard/cli.rb +73 -0
  11. data/lib/takelage/bit/clipboard/copy.rb +140 -0
  12. data/lib/takelage/bit/clipboard/lib.rb +132 -0
  13. data/lib/takelage/bit/clipboard/paste.rb +57 -0
  14. data/lib/takelage/bit/clipboard/pull.rb +37 -0
  15. data/lib/takelage/bit/clipboard/push.rb +37 -0
  16. data/lib/takelage/bit/scope/add.rb +55 -0
  17. data/lib/takelage/bit/scope/cli.rb +74 -0
  18. data/lib/takelage/bit/scope/inbit.rb +13 -0
  19. data/lib/takelage/bit/scope/list.rb +41 -0
  20. data/lib/takelage/bit/scope/new.rb +44 -0
  21. data/lib/takelage/completion/cli.rb +24 -0
  22. data/lib/takelage/default.yml +68 -0
  23. data/lib/takelage/docker/check/cli.rb +23 -0
  24. data/lib/takelage/docker/check/running.rb +23 -0
  25. data/lib/takelage/docker/cli.rb +18 -0
  26. data/lib/takelage/docker/container/check/cli.rb +57 -0
  27. data/lib/takelage/docker/container/check/existing.rb +31 -0
  28. data/lib/takelage/docker/container/check/network.rb +31 -0
  29. data/lib/takelage/docker/container/check/orphaned.rb +31 -0
  30. data/lib/takelage/docker/container/clean.rb +39 -0
  31. data/lib/takelage/docker/container/cli.rb +114 -0
  32. data/lib/takelage/docker/container/command.rb +33 -0
  33. data/lib/takelage/docker/container/daemon.rb +13 -0
  34. data/lib/takelage/docker/container/lib.rb +160 -0
  35. data/lib/takelage/docker/container/login.rb +46 -0
  36. data/lib/takelage/docker/container/prune.rb +30 -0
  37. data/lib/takelage/docker/image/check/cli.rb +39 -0
  38. data/lib/takelage/docker/image/check/outdated.rb +40 -0
  39. data/lib/takelage/docker/image/cli.rb +44 -0
  40. data/lib/takelage/docker/image/tag/check/cli.rb +48 -0
  41. data/lib/takelage/docker/image/tag/check/local.rb +42 -0
  42. data/lib/takelage/docker/image/tag/check/remote.rb +38 -0
  43. data/lib/takelage/docker/image/tag/cli.rb +15 -0
  44. data/lib/takelage/docker/image/tag/latest/cli.rb +57 -0
  45. data/lib/takelage/docker/image/tag/latest/local.rb +20 -0
  46. data/lib/takelage/docker/image/tag/latest/remote.rb +25 -0
  47. data/lib/takelage/docker/image/tag/list/cli.rb +53 -0
  48. data/lib/takelage/docker/image/tag/list/local.rb +19 -0
  49. data/lib/takelage/docker/image/tag/list/remote.rb +28 -0
  50. data/lib/takelage/docker/image/update.rb +33 -0
  51. data/lib/takelage/docker/socket/cli.rb +75 -0
  52. data/lib/takelage/docker/socket/host.rb +25 -0
  53. data/lib/takelage/docker/socket/lib.rb +88 -0
  54. data/lib/takelage/docker/socket/scheme.rb +63 -0
  55. data/lib/takelage/docker/socket/start.rb +34 -0
  56. data/lib/takelage/docker/socket/stop.rb +55 -0
  57. data/lib/takelage/git/check/clean.rb +46 -0
  58. data/lib/takelage/git/check/cli.rb +49 -0
  59. data/lib/takelage/git/check/master.rb +26 -0
  60. data/lib/takelage/git/check/workspace.rb +33 -0
  61. data/lib/takelage/git/cli.rb +9 -0
  62. data/lib/takelage/info/cli.rb +9 -0
  63. data/lib/takelage/info/project/cli.rb +56 -0
  64. data/lib/takelage/lib/config.rb +114 -0
  65. data/lib/takelage/lib/logging.rb +47 -0
  66. data/lib/takelage/lib/project.rb +69 -0
  67. data/lib/takelage/lib/subcmd.rb +16 -0
  68. data/lib/takelage/lib/system.rb +104 -0
  69. data/lib/takelage/self/cli.rb +43 -0
  70. data/lib/takelage/self/config/cli.rb +82 -0
  71. data/lib/takelage/self/list.rb +30 -0
  72. data/lib/takelage/version +1 -0
  73. metadata +298 -0
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage git check clean
4
+ module GitCheckClean
5
+ # Backend method for git check clean.
6
+ # @return [Boolean] is git workspace clean?
7
+ def git_check_clean
8
+ log.debug 'Checking if git workspace is clean'
9
+
10
+ return false unless git_check_workspace
11
+
12
+ status_unstaged = _git_check_clean_get_status_unstaged
13
+ status_uncommitted = _git_check_clean_get_status_uncommitted
14
+ stdout_str_status = _git_check_clean_get_str_status
15
+
16
+ # only return true if neither unstaged nor uncommitted nor empty files
17
+ sum = status_unstaged.exitstatus +
18
+ status_uncommitted.exitstatus +
19
+ stdout_str_status.length
20
+
21
+ sum.zero?
22
+ end
23
+
24
+ private
25
+
26
+ # Get git status of unstaged changes.
27
+ def _git_check_clean_get_status_unstaged
28
+ cmd_git_unstaged =
29
+ config.active['cmd_git_check_clean_git_unstaged']
30
+ try cmd_git_unstaged
31
+ end
32
+
33
+ # Get git status of uncommitted changes.
34
+ def _git_check_clean_get_status_uncommitted
35
+ cmd_git_uncommitted =
36
+ config.active['cmd_git_check_clean_git_uncommitted']
37
+ try cmd_git_uncommitted
38
+ end
39
+
40
+ # Get git status result.
41
+ def _git_check_clean_get_str_status
42
+ cmd_git_status =
43
+ config.active['cmd_git_check_clean_git_status']
44
+ run cmd_git_status
45
+ end
46
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage git check
5
+ class GitCheck < SubCommandBase
6
+ include LoggingModule
7
+ include SystemModule
8
+ include ConfigModule
9
+ include GitCheckClean
10
+ include GitCheckMaster
11
+ include GitCheckWorkspace
12
+
13
+ #
14
+ # git check clean
15
+ #
16
+ desc 'clean', 'Check if the git workspace is clean'
17
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
18
+ Check if the git workspace is clean
19
+ LONGDESC
20
+ # Check if the git workspace is clean.
21
+ def clean
22
+ exit git_check_clean
23
+ end
24
+
25
+ #
26
+ # git check master
27
+ #
28
+ desc 'master', 'Check if we are on the git master branch'
29
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
30
+ Check if we are on the git master branch
31
+ LONGDESC
32
+ # Check if we are on the git master branch.
33
+ def master
34
+ exit git_check_master
35
+ end
36
+
37
+ #
38
+ # git check workspace
39
+ #
40
+ desc 'workspace', 'Check if a git workspace exists'
41
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
42
+ Check if a git workspace exists
43
+ LONGDESC
44
+ # Check if a git workspace exists.
45
+ def workspace
46
+ exit git_check_workspace
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage git check master
4
+ module GitCheckMaster
5
+ # Backend method for git check master.
6
+ # @return [Boolean] are we on the git master branch?
7
+ def git_check_master
8
+ log.debug 'Check if we are on the git master branch'
9
+
10
+ return false unless git_check_workspace
11
+
12
+ branch = _git_check_master_get_branch
13
+ log.debug "We are on git branch \"#{branch}\""
14
+
15
+ branch == 'master'
16
+ end
17
+
18
+ private
19
+
20
+ # Get git branch.
21
+ def _git_check_master_get_branch
22
+ cmd_get_branch =
23
+ config.active['cmd_git_check_master_git_branch']
24
+ (run cmd_get_branch).strip.split('/')[-1]
25
+ end
26
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage git check workspace
4
+ module GitCheckWorkspace
5
+ # Backend method for git check workspace.
6
+ # @return [Boolean] is this a git workspace?
7
+ def git_check_workspace
8
+ log.debug 'Check if this is a git workspace'
9
+ status_repo = _git_check_workspace_get_status_repo
10
+ dir = _git_check_workspace_get_dir
11
+ unless status_repo.exitstatus.zero?
12
+ log.debug "No git workspace found in \"#{dir}\""
13
+ return false
14
+ end
15
+ true
16
+ end
17
+
18
+ private
19
+
20
+ # Get git repository status.
21
+ def _git_check_workspace_get_status_repo
22
+ cmd_git_repo =
23
+ config.active['cmd_git_check_workspace_git_repo']
24
+ try cmd_git_repo
25
+ end
26
+
27
+ # Get current working directory.
28
+ def _git_check_workspace_get_dir
29
+ cmd_pwd =
30
+ config.active['cmd_git_check_workspace_pwd']
31
+ (run cmd_pwd).strip
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage git
5
+ class Git < SubCommandBase
6
+ desc 'check [COMMAND]', 'Check git state'
7
+ subcommand 'check', GitCheck
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage info
5
+ class Info < SubCommandBase
6
+ desc 'project [COMMAND]', 'Get project info'
7
+ subcommand 'project', InfoProject
8
+ end
9
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Takelage
4
+ # takelage info project
5
+ class InfoProject < SubCommandBase
6
+ include LoggingModule
7
+ include SystemModule
8
+ include ConfigModule
9
+ include ProjectModule
10
+
11
+ #
12
+ # info project active
13
+ #
14
+ desc 'active', 'Print active project info'
15
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
16
+ Print active project info
17
+ LONGDESC
18
+ # Print active project info.
19
+ def active
20
+ project_active_yaml = hash_to_yaml(project.active)
21
+ exit false if project_active_yaml == false
22
+ say project_active_yaml
23
+ true
24
+ end
25
+
26
+ #
27
+ # info project private
28
+ #
29
+ desc 'private', 'Print private project info'
30
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
31
+ Print private project info
32
+ LONGDESC
33
+ # Print private project info.
34
+ def private
35
+ project_private_yaml = hash_to_yaml(project.private)
36
+ exit false if project_private_yaml == false
37
+ say project_private_yaml
38
+ true
39
+ end
40
+
41
+ #
42
+ # info project main
43
+ #
44
+ desc 'main', 'Print main project info'
45
+ long_desc <<-LONGDESC.gsub("\n", "\x5")
46
+ Print main project info
47
+ LONGDESC
48
+ # Print main project info.
49
+ def main
50
+ project_main_yaml = hash_to_yaml(project.main)
51
+ exit false if project_main_yaml == false
52
+ say project_main_yaml
53
+ true
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage config module
4
+ module ConfigModule
5
+ # takelage config class.
6
+ class TakelageConfig
7
+ include Singleton
8
+ include LoggingModule
9
+ include SystemModule
10
+
11
+ attr_accessor :active, :default, :home, :project
12
+
13
+ def initialize
14
+ @active = {}
15
+ @default = {}
16
+ @home = {}
17
+ @project = {}
18
+ end
19
+ end
20
+
21
+ # Initialze config
22
+ def initialize_config
23
+ log.debug "takelage version: #{Takelage::VERSION}"
24
+ log.debug "Current working directory: #{Dir.pwd}"
25
+
26
+ TakelageConfig.instance.default = _config_read_default
27
+ TakelageConfig.instance.home = _config_read_home
28
+ TakelageConfig.instance.project = _config_read_project
29
+ TakelageConfig.instance.active = _config_merge_active
30
+ end
31
+
32
+ # @return [Object] global singleton config
33
+ def config
34
+ TakelageConfig.instance
35
+ end
36
+
37
+ # @return [Boolean] check if config keys are configured
38
+ def configured?(config_keys)
39
+ @configured = true
40
+ config_keys.each do |config_key|
41
+ next unless _check_key_defined? config_key
42
+ next unless _check_key_set? config_key
43
+ end
44
+ @configured
45
+ end
46
+
47
+ private
48
+
49
+ # Check if config key is defined.
50
+ def _check_key_defined?(config_key)
51
+ return true if TakelageConfig.instance.active.key? config_key
52
+
53
+ log.error "Undefined config key. Please configure \"#{config_key}\""
54
+ @configured = false
55
+ false
56
+ end
57
+
58
+ # Check if config key is nil or empty
59
+ def _check_key_set?(config_key)
60
+ takel_config_key = TakelageConfig.instance.active[config_key]
61
+ return true unless takel_config_key.nil? || takel_config_key.empty?
62
+
63
+ log.error "Unset config key. Please configure \"#{config_key}\""
64
+ @configured = false
65
+ false
66
+ end
67
+
68
+ # Read default config file in lib.
69
+ def _config_read_default
70
+ default_file = File.expand_path("#{File.dirname(__FILE__)}/../default.yml")
71
+
72
+ return {} unless File.exist? default_file
73
+
74
+ default_yaml = read_yaml_file(default_file) || {}
75
+
76
+ default_yaml.sort.to_h
77
+ end
78
+
79
+ # Read custom config file in $HOME.
80
+ def _config_read_home
81
+ home_file = "#{Dir.home}/.takelage.yml"
82
+
83
+ return {} unless File.exist? home_file
84
+
85
+ home_yaml = read_yaml_file(home_file) || {}
86
+
87
+ home_yaml.sort.to_h
88
+ end
89
+
90
+ # Read custom config file next to Rakefile.
91
+ def _config_read_project
92
+ _rakefile, path = Rake.application.find_rakefile_location
93
+ project_file = "#{path}/takelage.yml"
94
+
95
+ return {} unless File.exist? project_file
96
+
97
+ project_yaml = read_yaml_file(project_file) || {}
98
+
99
+ project_yaml.sort.to_h
100
+ end
101
+
102
+ # Merge active config
103
+ def _config_merge_active
104
+ # make a clone or else we'll change the original hash
105
+ default = TakelageConfig.instance.default.clone
106
+ home = TakelageConfig.instance.home.clone
107
+ project = TakelageConfig.instance.project.clone
108
+
109
+ # merge default and home and project to active
110
+ # project wins against home wins against default
111
+ project_over_home = home.merge!(project)
112
+ default.merge!(project_over_home).sort.to_h
113
+ end
114
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage logging module
4
+ module LoggingModule
5
+ # takelage logger
6
+ class TakelageLogger
7
+ include Singleton
8
+
9
+ attr_accessor :logger
10
+
11
+ def initialize
12
+ @logger = Logger.new(STDOUT)
13
+ end
14
+ end
15
+
16
+ # Initialize logger with loglevel.
17
+ def initialize_logging(loglevel)
18
+ TakelageLogger.instance.logger.formatter = _logging_get_log_format
19
+ log_level_in_use = _logging_get_log_level loglevel
20
+ TakelageLogger.instance.logger.level = log_level_in_use
21
+ TakelageLogger.instance.logger.debug "Using loglevel #{log_level_in_use}"
22
+ end
23
+
24
+ # @return [Object] global singleton logger
25
+ def log
26
+ TakelageLogger.instance.logger
27
+ end
28
+
29
+ private
30
+
31
+ def _logging_get_log_format
32
+ proc do |severity, _datetime, _progname, msg|
33
+ "[#{severity}] #{msg}\n"
34
+ end
35
+ end
36
+
37
+ def _logging_get_log_level(loglevel)
38
+ if %w[FATAL ERROR WARN INFO DEBUG].include? loglevel
39
+ loglevel
40
+ else
41
+ TakelageLogger.instance.logger.error 'The parameter "loglevel"' \
42
+ ' must be one of FATAL, ERROR, WARN, INFO, DEBUG'
43
+ TakelageLogger.instance.logger.info 'Using loglevel INFO'
44
+ Logger::INFO
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ # takelage project module
4
+ module ProjectModule
5
+ # takelage config class.
6
+ class TakelageProject
7
+ include Singleton
8
+ include LoggingModule
9
+ include SystemModule
10
+ include ConfigModule
11
+
12
+ attr_accessor :active, :private, :main
13
+
14
+ def initialize
15
+ @active = {}
16
+ @private = {}
17
+ @main = {}
18
+ end
19
+ end
20
+
21
+ # Initialze project
22
+ def initialize_project
23
+ TakelageProject.instance.main = _project_read_main
24
+ TakelageProject.instance.private = _project_read_private
25
+ TakelageProject.instance.active = _project_merge_active
26
+ end
27
+
28
+ # @return [Object] global singleton project
29
+ def project
30
+ TakelageProject.instance
31
+ end
32
+
33
+ private
34
+
35
+ # Read main YAML file.
36
+ def _project_read_main
37
+ _rakefile, @path = Rake.application.find_rakefile_location
38
+ main_file = "#{@path}/" \
39
+ "#{TakelageProject.instance.config.active['info_project_main']}"
40
+
41
+ return {} unless File.exist? main_file
42
+
43
+ read_yaml_file(main_file).sort.to_h || {}
44
+ end
45
+
46
+ # Read private YAML file.
47
+ def _project_read_private
48
+ _rakefile, @path = Rake.application.find_rakefile_location
49
+ private_file = "#{@path}/" \
50
+ "#{TakelageProject.instance.config.active['info_project_private']}"
51
+
52
+ return {} unless File.exist? private_file
53
+
54
+ private_yaml = read_yaml_file(private_file) || {}
55
+
56
+ private_yaml.sort.to_h
57
+ end
58
+
59
+ # Merge active configuration.
60
+ def _project_merge_active
61
+ # make a clone or else we'll change the original hash
62
+ main = TakelageProject.instance.main.clone
63
+ private = TakelageProject.instance.private.clone
64
+
65
+ # merge main and private to active
66
+ # private wins against main
67
+ main.merge!(private).sort.to_h
68
+ end
69
+ end