fedux_org-stdlib 0.7.21 → 0.7.22
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 +3 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +23 -19
- data/Rakefile +16 -0
- data/config/rubocop/exclude.yml +44 -0
- data/config/rubocop/include.yml +0 -0
- data/fedux_org-stdlib.gemspec +9 -9
- data/fixtures/plugin-load-app/fedux_org_stdlib-fixtures-plugin_manager-plugin-load.gemspec +11 -11
- data/fixtures/plugin-no_load-app/fedux_org_stdlib-fixtures-plugin_manager-plugin-no_load.gemspec +11 -11
- data/lib/fedux_org_stdlib.rb +2 -1
- data/lib/fedux_org_stdlib/app_config.rb +22 -21
- data/lib/fedux_org_stdlib/colors/html_color.rb +8 -2
- data/lib/fedux_org_stdlib/command.rb +1 -0
- data/lib/fedux_org_stdlib/command/command_result.rb +1 -0
- data/lib/fedux_org_stdlib/command/run_command.rb +6 -5
- data/lib/fedux_org_stdlib/command/which.rb +17 -17
- data/lib/fedux_org_stdlib/core_ext/array/list.rb +6 -1
- data/lib/fedux_org_stdlib/core_ext/hash/list.rb +6 -1
- data/lib/fedux_org_stdlib/core_ext/hash/options.rb +1 -0
- data/lib/fedux_org_stdlib/core_ext/shellwords/clean.rb +8 -0
- data/lib/fedux_org_stdlib/core_ext/string/underline.rb +9 -1
- data/lib/fedux_org_stdlib/environment.rb +6 -4
- data/lib/fedux_org_stdlib/file_template.rb +8 -10
- data/lib/fedux_org_stdlib/filesystem.rb +30 -29
- data/lib/fedux_org_stdlib/filesystem/exceptions.rb +1 -1
- data/lib/fedux_org_stdlib/gem_plugins/exceptions.rb +1 -0
- data/lib/fedux_org_stdlib/gem_plugins/no_plugin.rb +1 -2
- data/lib/fedux_org_stdlib/gem_plugins/plugin.rb +6 -6
- data/lib/fedux_org_stdlib/gem_plugins/plugin_manager.rb +6 -7
- data/lib/fedux_org_stdlib/list.rb +24 -2
- data/lib/fedux_org_stdlib/logging.rb +3 -2
- data/lib/fedux_org_stdlib/logging/logger.rb +7 -7
- data/lib/fedux_org_stdlib/logging/severity.rb +3 -0
- data/lib/fedux_org_stdlib/logic_converters.rb +1 -0
- data/lib/fedux_org_stdlib/logic_converters/exceptions.rb +2 -2
- data/lib/fedux_org_stdlib/logic_converters/logic_converter.rb +9 -8
- data/lib/fedux_org_stdlib/logic_converters/on_off_converter.rb +5 -4
- data/lib/fedux_org_stdlib/logic_converters/true_false_converter.rb +3 -3
- data/lib/fedux_org_stdlib/logic_converters/y_n_converter.rb +3 -3
- data/lib/fedux_org_stdlib/logic_converters/yes_no_converter.rb +4 -3
- data/lib/fedux_org_stdlib/models/base_model.rb +24 -25
- data/lib/fedux_org_stdlib/models/class_based_model.rb +15 -14
- data/lib/fedux_org_stdlib/models/exceptions.rb +14 -15
- data/lib/fedux_org_stdlib/models/filesystem_based_model.rb +12 -15
- data/lib/fedux_org_stdlib/process_environment.rb +11 -1
- data/lib/fedux_org_stdlib/project.rb +0 -1
- data/lib/fedux_org_stdlib/project/generators/taskjuggler.rb +11 -10
- data/lib/fedux_org_stdlib/project/logger.rb +1 -0
- data/lib/fedux_org_stdlib/project/plan.rb +1 -1
- data/lib/fedux_org_stdlib/project/report.rb +8 -9
- data/lib/fedux_org_stdlib/rake/project.rb +4 -4
- data/lib/fedux_org_stdlib/rake/project_task.rb +2 -3
- data/lib/fedux_org_stdlib/rake/shell_task.rb +7 -7
- data/lib/fedux_org_stdlib/rake/sub_task.rb +2 -2
- data/lib/fedux_org_stdlib/rake/task.rb +7 -6
- data/lib/fedux_org_stdlib/rake/version_bump_task.rb +6 -7
- data/lib/fedux_org_stdlib/rake_tasks/console.rb +0 -1
- data/lib/fedux_org_stdlib/rake_tasks/documentation/yard.rb +2 -2
- data/lib/fedux_org_stdlib/rake_tasks/gems/bundler.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/gems/package.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/project/report/generate.rb +1 -2
- data/lib/fedux_org_stdlib/rake_tasks/project/report/open.rb +1 -2
- data/lib/fedux_org_stdlib/rake_tasks/project/report/open_shortcut.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/qa/rubocop.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/qa/travis.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/software_version/bump.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/software_version/restore.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/software_version/show.rb +2 -3
- data/lib/fedux_org_stdlib/rake_tasks/software_version/show_shortcut.rb +1 -1
- data/lib/fedux_org_stdlib/rake_tasks/tests/cucumber.rb +0 -1
- data/lib/fedux_org_stdlib/rake_tasks/tests/travis.rb +1 -1
- data/lib/fedux_org_stdlib/require_files.rb +5 -4
- data/lib/fedux_org_stdlib/roles/typable.rb +2 -3
- data/lib/fedux_org_stdlib/roles/versionable.rb +3 -2
- data/lib/fedux_org_stdlib/shell_language_detector.rb +21 -2
- data/lib/fedux_org_stdlib/shell_language_detector/language.rb +9 -1
- data/lib/fedux_org_stdlib/support_information.rb +60 -55
- data/lib/fedux_org_stdlib/template_directory.rb +8 -11
- data/lib/fedux_org_stdlib/version.rb +1 -1
- data/lib/fedux_org_stdlib/version_management/library_builder.rb +3 -2
- data/lib/fedux_org_stdlib/version_management/ruby_library.rb +2 -2
- data/lib/fedux_org_stdlib/version_management/rubygem_version_file.rb +3 -3
- data/lib/fedux_org_stdlib/version_management/rubygem_version_file_parser.rb +5 -5
- data/lib/fedux_org_stdlib/version_management/software_version.rb +4 -3
- data/lib/fedux_org_stdlib/version_management/version_builder.rb +1 -0
- data/rakefiles/default.rake +16 -0
- data/script/terminal +5 -5
- data/spec/app_config_spec.rb +6 -6
- data/spec/colors/html_color_spec.rb +1 -1
- data/spec/core_ext/array/list_spec.rb +8 -8
- data/spec/core_ext/hash/options_spec.rb +17 -17
- data/spec/core_ext/shellwords/clean_spec.rb +1 -1
- data/spec/environment_spec.rb +7 -5
- data/spec/examples/models/class_based/invalid_2.rb +1 -1
- data/spec/examples/models/class_based/valid_2.rb +1 -0
- data/spec/gem_plugins/plugin_manager_spec.rb +1 -1
- data/spec/logger/logger_spec.rb +1 -1
- data/spec/models/base_model_spec.rb +22 -22
- data/spec/models/class_based_model_spec.rb +66 -66
- data/spec/models/filesystem_based_model_spec.rb +28 -28
- data/spec/project/plan_spec.rb +1 -1
- data/spec/project/report_spec.rb +2 -2
- data/spec/project/taskjuggler_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -3
- data/spec/support/rspec.rb +1 -1
- data/spec/version_management/library_builder_spec.rb +2 -2
- data/spec/version_management/ruby_library_spec.rb +2 -2
- data/spec/version_management/rubygem_version_file_parser_spec.rb +8 -8
- data/spec/version_management/rubygem_version_file_spec.rb +8 -8
- data/spec/version_management/software_version_spec.rb +1 -1
- metadata +5 -2
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'fedux_org_stdlib/require_files'
|
|
3
|
-
require_library %w
|
|
3
|
+
require_library %w(open3)
|
|
4
4
|
|
|
5
5
|
require 'fedux_org_stdlib/environment'
|
|
6
6
|
require 'fedux_org_stdlib/command/command_result'
|
|
7
7
|
|
|
8
8
|
module FeduxOrgStdlib
|
|
9
9
|
module Command
|
|
10
|
+
# Run command
|
|
10
11
|
module RunCommand
|
|
11
12
|
include Environment
|
|
12
13
|
|
|
13
14
|
# Execute command
|
|
14
15
|
#
|
|
15
16
|
# @param [String] cmd
|
|
16
|
-
# the command
|
|
17
|
+
# the command
|
|
17
18
|
#
|
|
18
19
|
# @param [Hash] options
|
|
19
20
|
# the options for command execution
|
|
@@ -32,16 +33,16 @@ module FeduxOrgStdlib
|
|
|
32
33
|
#
|
|
33
34
|
# @return [CommandResult]
|
|
34
35
|
# the result of the command execution
|
|
35
|
-
def run_command(cmd,options={})
|
|
36
|
+
def run_command(cmd, options = {})
|
|
36
37
|
opts = {
|
|
37
38
|
env: nil,
|
|
38
39
|
stdin: nil,
|
|
39
40
|
binmode: false,
|
|
40
|
-
working_directory: Dir.getwd
|
|
41
|
+
working_directory: Dir.getwd
|
|
41
42
|
}.merge options
|
|
42
43
|
|
|
43
44
|
env = opts[:env] || ENV.to_hash
|
|
44
|
-
stdin = opts[:stdin]
|
|
45
|
+
stdin = opts[:stdin]
|
|
45
46
|
binmode = opts[:binmode]
|
|
46
47
|
working_directory = opts[:working_directory]
|
|
47
48
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'fedux_org_stdlib/require_files'
|
|
3
|
-
require_library %w
|
|
3
|
+
require_library %w(pathname active_support/core_ext/object/blank)
|
|
4
4
|
|
|
5
5
|
module FeduxOrgStdlib
|
|
6
6
|
module Command
|
|
7
|
+
# Find path to executable
|
|
7
8
|
module Which
|
|
8
|
-
|
|
9
9
|
# Search for command
|
|
10
10
|
# @param [String] cmd
|
|
11
11
|
# name of command or path to command (will be reduced to basename and then searched in PATH)
|
|
@@ -15,15 +15,15 @@ module FeduxOrgStdlib
|
|
|
15
15
|
#
|
|
16
16
|
# @param [Array,String] pathexts
|
|
17
17
|
# a string containing pathexts separated by ";" or an array of pathexts
|
|
18
|
-
#
|
|
19
|
-
# @return [String]
|
|
18
|
+
#
|
|
19
|
+
# @return [String]
|
|
20
20
|
# path to command
|
|
21
|
-
def which(cmd, options={})
|
|
21
|
+
def which(cmd, options = {})
|
|
22
22
|
options = {
|
|
23
23
|
paths: ENV['PATH'].split(File::PATH_SEPARATOR),
|
|
24
|
-
pathexts: ENV['PATHEXT'].to_s.split(
|
|
24
|
+
pathexts: ENV['PATHEXT'].to_s.split(/;/),
|
|
25
25
|
raise_error_on_not_executable: false,
|
|
26
|
-
raise_error_on_not_found: false
|
|
26
|
+
raise_error_on_not_found: false
|
|
27
27
|
}.merge options
|
|
28
28
|
|
|
29
29
|
cmd = Pathname.new(cmd)
|
|
@@ -33,26 +33,26 @@ module FeduxOrgStdlib
|
|
|
33
33
|
raise_error_on_not_executable = options[:raise_error_on_not_executable]
|
|
34
34
|
raise_error_on_not_found = options[:raise_error_on_not_found]
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
fail Exceptions::CommandNotFound if cmd.to_s.empty?
|
|
37
37
|
return nil if cmd.to_s.empty?
|
|
38
38
|
|
|
39
|
-
if cmd.absolute?
|
|
39
|
+
if cmd.absolute?
|
|
40
40
|
return cmd.to_s if cmd.executable?
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
fail Exceptions::CommandNotFound if raise_error_on_not_found && !cmd.exist?
|
|
42
|
+
fail Exceptions::CommandNotExecutable if raise_error_on_not_executable && !cmd.executable?
|
|
43
43
|
return nil
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
pathexts = [''] if pathexts.blank?
|
|
47
47
|
|
|
48
|
-
Array(
|
|
49
|
-
Array(
|
|
50
|
-
file = Pathname.new(
|
|
48
|
+
Array(paths).each do |path|
|
|
49
|
+
Array(pathexts).each do |ext|
|
|
50
|
+
file = Pathname.new(File.join(path, "#{cmd}#{ext}"))
|
|
51
51
|
return file.to_s if file.executable?
|
|
52
|
-
|
|
52
|
+
fail Exceptions::CommandNotExecutable if raise_error_on_not_executable && !cmd.executable?
|
|
53
53
|
end
|
|
54
|
-
end
|
|
55
|
-
|
|
54
|
+
end
|
|
55
|
+
fail Exceptions::CommandNotFound if raise_error_on_not_found
|
|
56
56
|
nil
|
|
57
57
|
end
|
|
58
58
|
end
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# Array
|
|
2
3
|
class Array
|
|
4
|
+
# Convert array to list
|
|
5
|
+
#
|
|
6
|
+
# @return [String]
|
|
7
|
+
# A string representation of list
|
|
3
8
|
def to_list(separator: ', ', last_separator: separator, around: '"')
|
|
4
|
-
items =
|
|
9
|
+
items = map { |l| format("#{around}%s#{around}", l) }
|
|
5
10
|
|
|
6
11
|
return items.join(last_separator) if items.size <= 2
|
|
7
12
|
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'fedux_org_stdlib/core_ext/array/list'
|
|
3
3
|
|
|
4
|
+
# Hash
|
|
4
5
|
class Hash
|
|
6
|
+
# Convert Hash to list
|
|
7
|
+
#
|
|
8
|
+
# @return [String]
|
|
9
|
+
# A string representation of hash as list
|
|
5
10
|
def to_list
|
|
6
|
-
|
|
11
|
+
map { |key, value| format('%s: %s', key, value) }.to_list
|
|
7
12
|
end
|
|
8
13
|
end
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'shellwords'
|
|
3
3
|
|
|
4
|
+
# Shellwords
|
|
4
5
|
module Shellwords
|
|
5
6
|
class << self
|
|
7
|
+
# Clean string based shell pattern
|
|
8
|
+
#
|
|
9
|
+
# @param [String] string
|
|
10
|
+
# The string which should be clean up
|
|
11
|
+
#
|
|
12
|
+
# @return [String]
|
|
13
|
+
# Every character which needs to be escape in a shell has been removed
|
|
6
14
|
def shellclean(string)
|
|
7
15
|
shellescape(string).gsub(/\\./, '')
|
|
8
16
|
end
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# String
|
|
2
3
|
class String
|
|
4
|
+
# Underline a string
|
|
5
|
+
#
|
|
6
|
+
# @param [String] character ('-')
|
|
7
|
+
# The character used to underline the string
|
|
8
|
+
#
|
|
9
|
+
# @return [String]
|
|
10
|
+
# The string + underline
|
|
3
11
|
def underline(character: '-')
|
|
4
12
|
result = []
|
|
5
13
|
result << self
|
|
6
|
-
result <<
|
|
14
|
+
result << gsub(/./, character)
|
|
7
15
|
|
|
8
16
|
result.join("\n")
|
|
9
17
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module FeduxOrgStdlib
|
|
3
|
+
# Enviroment helpers
|
|
4
|
+
#
|
|
5
|
+
# @deprecated Please use https://github.com/cucumber/aruba instead
|
|
3
6
|
module Environment
|
|
4
|
-
|
|
5
7
|
# Set environment variable for code block
|
|
6
8
|
#
|
|
7
9
|
# @param [Hash] new_environment_variables
|
|
@@ -11,11 +13,11 @@ module FeduxOrgStdlib
|
|
|
11
13
|
# options for environment manipulation
|
|
12
14
|
#
|
|
13
15
|
# @option options [True,False] :clear
|
|
14
|
-
# Should the environment clear before merge?
|
|
16
|
+
# Should the environment clear before merge?
|
|
15
17
|
#
|
|
16
18
|
# @yield
|
|
17
19
|
# the block which should be run which the change environment
|
|
18
|
-
def isolated_environment(new_environment_variables, options={}, &block)
|
|
20
|
+
def isolated_environment(new_environment_variables, options = {}, &block)
|
|
19
21
|
old_environment = ENV.to_hash
|
|
20
22
|
|
|
21
23
|
ENV.clear if options[:clear] == true
|
|
@@ -23,7 +25,7 @@ module FeduxOrgStdlib
|
|
|
23
25
|
|
|
24
26
|
block.call
|
|
25
27
|
ensure
|
|
26
|
-
ENV.clear
|
|
28
|
+
ENV.clear
|
|
27
29
|
ENV.update old_environment
|
|
28
30
|
end
|
|
29
31
|
|
|
@@ -3,7 +3,7 @@ require 'fedux_org_stdlib/require_files'
|
|
|
3
3
|
require 'fedux_org_stdlib/file_template/exceptions'
|
|
4
4
|
require 'fedux_org_stdlib/core_ext/array/list'
|
|
5
5
|
require 'fedux_org_stdlib/logging/logger'
|
|
6
|
-
require_library %w
|
|
6
|
+
require_library %w(json active_support/core_ext/string/inflections)
|
|
7
7
|
|
|
8
8
|
module FeduxOrgStdlib
|
|
9
9
|
# This class makes a template file available as an object. You can use
|
|
@@ -25,7 +25,7 @@ module FeduxOrgStdlib
|
|
|
25
25
|
# off, e.g "ClientTemplate" becomes "client.tt"
|
|
26
26
|
#
|
|
27
27
|
# Most conventions defined by me are implemented as separate methods. If one convention
|
|
28
|
-
# is not suitable for your use case, just overwrite the method.
|
|
28
|
+
# is not suitable for your use case, just overwrite the method.
|
|
29
29
|
#
|
|
30
30
|
# If you prefer to use a different path to the template file or name of the
|
|
31
31
|
# template file one of the following methods needs to be overwritten:
|
|
@@ -52,7 +52,6 @@ module FeduxOrgStdlib
|
|
|
52
52
|
# ---
|
|
53
53
|
# option1: 'data2'
|
|
54
54
|
class FileTemplate
|
|
55
|
-
|
|
56
55
|
attr_reader :working_directory, :output_directory, :logger, :file, :content
|
|
57
56
|
|
|
58
57
|
# Create a new instance of template
|
|
@@ -69,7 +68,7 @@ module FeduxOrgStdlib
|
|
|
69
68
|
# @return [AppTemplate]
|
|
70
69
|
# The template instance. If the resulting data structure created by the
|
|
71
70
|
# template_engine does not respond to `:[]` an empty template object will be
|
|
72
|
-
# created.
|
|
71
|
+
# created.
|
|
73
72
|
def initialize(
|
|
74
73
|
file: nil,
|
|
75
74
|
logger: FeduxOrgStdlib::Logging::Logger.new,
|
|
@@ -80,14 +79,14 @@ module FeduxOrgStdlib
|
|
|
80
79
|
@working_directory = working_directory
|
|
81
80
|
@output_directory = output_directory || working_directory
|
|
82
81
|
|
|
83
|
-
@file ||= available_template_file
|
|
84
|
-
|
|
82
|
+
@file ||= (file || available_template_file)
|
|
83
|
+
|
|
85
84
|
fail Exceptions::NoTemplateFileFound, "No template file found at #{allowed_template_file_paths.to_list}, therefor I'm stop working as there are methods which depend on an available template file path." unless @file
|
|
86
85
|
|
|
87
86
|
begin
|
|
88
87
|
@content = File.read(@file).chomp
|
|
89
88
|
rescue StandardError => e
|
|
90
|
-
|
|
89
|
+
raise Exceptions::TemplateFileNotReadable, JSON.dump(message: e.message, file: @file)
|
|
91
90
|
end
|
|
92
91
|
end
|
|
93
92
|
|
|
@@ -175,7 +174,6 @@ module FeduxOrgStdlib
|
|
|
175
174
|
::File.expand_path(::File.join(*path))
|
|
176
175
|
end
|
|
177
176
|
|
|
178
|
-
|
|
179
177
|
# Use this path as fall back path
|
|
180
178
|
def fallback_template_directory; end
|
|
181
179
|
|
|
@@ -188,11 +186,11 @@ module FeduxOrgStdlib
|
|
|
188
186
|
end
|
|
189
187
|
|
|
190
188
|
def available_template_file
|
|
191
|
-
allowed_template_file_paths.map { |f| Dir.glob(f).first }.compact.find { |f| ::File.
|
|
189
|
+
allowed_template_file_paths.map { |f| Dir.glob(f).first }.compact.find { |f| ::File.exist?(f) }
|
|
192
190
|
end
|
|
193
191
|
|
|
194
192
|
def self.reserved_key_words
|
|
195
|
-
(methods | instance_methods | private_methods | private_instance_methods
|
|
193
|
+
(methods | instance_methods | private_methods | private_instance_methods) - (Class.methods | Class.private_methods) | [:to_s]
|
|
196
194
|
end
|
|
197
195
|
|
|
198
196
|
def basename
|
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'fedux_org_stdlib/require_files'
|
|
3
|
-
require_library %w
|
|
3
|
+
require_library %w(fileutils)
|
|
4
4
|
|
|
5
5
|
require 'fedux_org_stdlib/filesystem/exceptions'
|
|
6
6
|
|
|
7
7
|
# helper for file system
|
|
8
8
|
module FeduxOrgStdlib
|
|
9
|
+
# File system
|
|
10
|
+
# @deprecated Please use https://github.com/cucumber/aruba instead
|
|
9
11
|
module Filesystem
|
|
10
|
-
|
|
11
12
|
# The root directory of the project
|
|
12
13
|
#
|
|
13
14
|
# @return [String]
|
|
14
15
|
# the root directory
|
|
15
16
|
def root_directory
|
|
16
17
|
#::File.expand_path('../../../', __FILE__)
|
|
17
|
-
|
|
18
|
+
fail Exceptions::InvalidUsageOfLibrary, 'Sorry, but you need to define the root directory yourself'
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
# The temporary directory for the project
|
|
21
22
|
#
|
|
22
23
|
# @return [String]
|
|
23
|
-
# the directory created for the tests
|
|
24
|
+
# the directory created for the tests
|
|
24
25
|
def working_directory
|
|
25
26
|
::File.join(root_directory, 'tmp', 'test')
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
# Create temporary directory
|
|
29
30
|
def create_working_directory
|
|
30
|
-
FileUtils.mkdir_p(working_directory) unless ::File.
|
|
31
|
+
FileUtils.mkdir_p(working_directory) unless ::File.exist? working_directory
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
# Delete temporary directory
|
|
34
35
|
def delete_working_directory
|
|
35
|
-
FileUtils.rm_rf(working_directory) if ::File.
|
|
36
|
+
FileUtils.rm_rf(working_directory) if ::File.exist? working_directory
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
# Clean up test directory
|
|
@@ -41,7 +42,7 @@ module FeduxOrgStdlib
|
|
|
41
42
|
create_working_directory
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
# Switch the current working directory to
|
|
45
|
+
# Switch the current working directory to
|
|
45
46
|
# the temporary one and execute code block
|
|
46
47
|
def switch_to_working_directory(&block)
|
|
47
48
|
Dir.chdir(working_directory, &block)
|
|
@@ -53,8 +54,8 @@ module FeduxOrgStdlib
|
|
|
53
54
|
# @param [String,Array] dirs
|
|
54
55
|
# the directories to be created, multiple arguments are possible as well
|
|
55
56
|
#
|
|
56
|
-
# @return [String,Array]
|
|
57
|
-
# returns a string if there was only one file given, and an array with
|
|
57
|
+
# @return [String,Array]
|
|
58
|
+
# returns a string if there was only one file given, and an array with
|
|
58
59
|
# muliple files
|
|
59
60
|
def create_directory(*dirs)
|
|
60
61
|
raise_if_forbidden_path_for_create_operation(dirs)
|
|
@@ -74,8 +75,8 @@ module FeduxOrgStdlib
|
|
|
74
75
|
# @param [String, Array] dirs
|
|
75
76
|
# the directories to be deleted, multiple arguments are possible as well
|
|
76
77
|
#
|
|
77
|
-
# @return [String,Array]
|
|
78
|
-
# returns a string if there was only one file given, and an array with
|
|
78
|
+
# @return [String,Array]
|
|
79
|
+
# returns a string if there was only one file given, and an array with
|
|
79
80
|
# muliple files
|
|
80
81
|
def delete_directory(*dirs)
|
|
81
82
|
raise_if_forbidden_path_for_delete_operation(dirs)
|
|
@@ -101,7 +102,7 @@ module FeduxOrgStdlib
|
|
|
101
102
|
raise_if_forbidden_path_for_create_operation(paths)
|
|
102
103
|
|
|
103
104
|
paths_expanded = expand_path(paths.flatten)
|
|
104
|
-
paths_expanded.flatten.all? { |p| ::File.
|
|
105
|
+
paths_expanded.flatten.all? { |p| ::File.exist?(p) }
|
|
105
106
|
end
|
|
106
107
|
|
|
107
108
|
# Check absence of path(s)
|
|
@@ -112,7 +113,7 @@ module FeduxOrgStdlib
|
|
|
112
113
|
# @return [TrueClass,FalseClass]
|
|
113
114
|
# the result of all checks done
|
|
114
115
|
def path_does_not_exist?(*paths)
|
|
115
|
-
|
|
116
|
+
!path_exists?(paths)
|
|
116
117
|
end
|
|
117
118
|
|
|
118
119
|
# Create a single file
|
|
@@ -125,14 +126,14 @@ module FeduxOrgStdlib
|
|
|
125
126
|
#
|
|
126
127
|
# @return [String]
|
|
127
128
|
# the path to the created file
|
|
128
|
-
def create_file(path, content='', mode=0644)
|
|
129
|
+
def create_file(path, content = '', mode = 0644)
|
|
129
130
|
raise_if_forbidden_path_for_create_operation(path)
|
|
130
131
|
|
|
131
132
|
file = expand_path(path).first
|
|
132
133
|
directory = ::File.dirname(file)
|
|
133
134
|
|
|
134
135
|
FileUtils.mkdir_p(directory) unless directory == '.'
|
|
135
|
-
::File.open(file,
|
|
136
|
+
::File.open(file, 'wb') do |f|
|
|
136
137
|
f.write content
|
|
137
138
|
end
|
|
138
139
|
|
|
@@ -166,13 +167,13 @@ module FeduxOrgStdlib
|
|
|
166
167
|
# @param [String] path
|
|
167
168
|
# the path to the file
|
|
168
169
|
#
|
|
169
|
-
# @return [String,Binary]
|
|
170
|
+
# @return [String,Binary]
|
|
170
171
|
# the content of the file
|
|
171
172
|
def read_file(path)
|
|
172
173
|
raise_if_forbidden_path_for_create_operation(path)
|
|
173
174
|
|
|
174
175
|
file_path = expand_path(path).first
|
|
175
|
-
|
|
176
|
+
::File.read(file_path)
|
|
176
177
|
end
|
|
177
178
|
|
|
178
179
|
# Expand path based on temporary directory
|
|
@@ -185,18 +186,18 @@ module FeduxOrgStdlib
|
|
|
185
186
|
def expand_path(*paths)
|
|
186
187
|
raise_if_forbidden_path_for_create_operation(paths)
|
|
187
188
|
|
|
188
|
-
paths.flatten.map do |p|
|
|
189
|
-
case p
|
|
189
|
+
paths.flatten.map do |p|
|
|
190
|
+
case p
|
|
190
191
|
when /^~/
|
|
191
|
-
::File.expand_path(p)
|
|
192
|
+
::File.expand_path(p)
|
|
192
193
|
else
|
|
193
|
-
::File.join(working_directory, p
|
|
194
|
+
::File.join(working_directory, p)
|
|
194
195
|
end
|
|
195
196
|
end
|
|
196
197
|
end
|
|
197
198
|
|
|
198
199
|
# Check if path is forbidden for delete operation
|
|
199
|
-
#
|
|
200
|
+
#
|
|
200
201
|
# @param [String, Array] paths
|
|
201
202
|
# paths which should be checked
|
|
202
203
|
#
|
|
@@ -205,9 +206,9 @@ module FeduxOrgStdlib
|
|
|
205
206
|
def raise_if_forbidden_path_for_create_operation(*paths)
|
|
206
207
|
flattend_paths = paths.flatten
|
|
207
208
|
strings = []
|
|
208
|
-
regex =
|
|
209
|
+
regex = /\.\./
|
|
209
210
|
|
|
210
|
-
|
|
211
|
+
fail FileSystem::Exceptions::InvalidPath, "Sorry, but you cannot use paths matching \"#{strings.join(', ')}\" or \"#{regex.inspect}\" here!" if path_matches?(strings, regex, flattend_paths)
|
|
211
212
|
end
|
|
212
213
|
|
|
213
214
|
# Check if path is forbidden for delete operation
|
|
@@ -219,10 +220,10 @@ module FeduxOrgStdlib
|
|
|
219
220
|
# true if path is forbidden, false if path is not forbidden
|
|
220
221
|
def raise_if_forbidden_path_for_delete_operation(*paths)
|
|
221
222
|
flattend_paths = paths.flatten
|
|
222
|
-
strings = %w
|
|
223
|
-
regex =
|
|
223
|
+
strings = %w(/)
|
|
224
|
+
regex = /\.\./
|
|
224
225
|
|
|
225
|
-
|
|
226
|
+
fail FileSystem::Exceptions::InvalidPath, "Sorry, but you cannot use paths matching \"#{strings.join(', ')}\" or \"#{regex}\" here!" if path_matches?(strings, regex, flattend_paths)
|
|
226
227
|
end
|
|
227
228
|
|
|
228
229
|
# Check if path matches
|
|
@@ -236,13 +237,13 @@ module FeduxOrgStdlib
|
|
|
236
237
|
# @param [Array, String] paths
|
|
237
238
|
# the paths to be checked
|
|
238
239
|
#
|
|
239
|
-
# @return [TrueClass, FalseClass]
|
|
240
|
+
# @return [TrueClass, FalseClass]
|
|
240
241
|
# true if path is valid, false if invalid
|
|
241
242
|
def path_matches?(strings, regex, *paths)
|
|
242
243
|
flattend_paths = paths.flatten
|
|
243
244
|
flattend_strings = strings.flatten
|
|
244
245
|
|
|
245
|
-
flattend_paths.any? { |f| f =~ regex
|
|
246
|
+
flattend_paths.any? { |f| f =~ regex || flattend_strings.include?(f) }
|
|
246
247
|
end
|
|
247
248
|
end
|
|
248
249
|
end
|