aruba 1.0.0.pre.alpha.5 → 1.0.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.
@@ -1,30 +1,21 @@
1
1
  require 'pathname'
2
- require 'delegate'
3
-
4
- require 'aruba/file_size'
5
2
 
6
3
  # Aruba
7
4
  module Aruba
8
5
  # Pathname for aruba files and directories
9
6
  #
10
7
  # @private
11
- class ArubaPath < Delegator
8
+ class ArubaPath
12
9
  def initialize(path)
13
- obj = [path.to_s].flatten
14
-
15
- super obj
16
-
17
- @delegate_sd_obj = obj
10
+ @obj = [path.to_s].flatten
18
11
  end
19
12
 
20
- # Get path
21
- def __getobj__
22
- ::Pathname.new(::File.join(*@delegate_sd_obj))
13
+ def to_str
14
+ to_pathname.to_s
23
15
  end
24
16
 
25
- # Set path
26
- def __setobj__(obj)
27
- @delegate_sd_obj = [obj.to_s].flatten
17
+ def to_s
18
+ to_str
28
19
  end
29
20
 
30
21
  # Add directory/file to path
@@ -39,47 +30,19 @@ module Aruba
39
30
  # puts path
40
31
  # # => path/to/dir.d/subdir.d
41
32
  def push(p)
42
- @delegate_sd_obj << p
33
+ @obj << p
43
34
  end
44
35
  alias << push
45
36
 
46
- # Remove last component of path
37
+ # Remove last pushed component of path
47
38
  #
48
39
  # @example
49
- # path = ArubaPath.new 'path/to/dir.d'
40
+ # path = ArubaPath.new 'path/to'
41
+ # path.push 'dir'
50
42
  # path.pop
51
43
  # puts path # => path/to
52
44
  def pop
53
- @delegate_sd_obj.pop
54
- end
55
-
56
- # How many parts has the file name
57
- #
58
- # @return [Integer]
59
- # The count of file name parts
60
- #
61
- # @example
62
- # path = ArubaPath.new('path/to/file.txt')
63
- # path.depth # => 3
64
- #
65
- def depth
66
- __getobj__.each_filename.to_a.size
67
- end
68
-
69
- # Path ends with string
70
- #
71
- # @param [String] string
72
- # The string to check
73
- def end_with?(string)
74
- to_s.end_with? string
75
- end
76
-
77
- # Path starts with string
78
- #
79
- # @param [String] string
80
- # The string to check
81
- def start_with?(string)
82
- to_s.start_with? string
45
+ @obj.pop
83
46
  end
84
47
 
85
48
  # Return string at index
@@ -89,54 +52,20 @@ module Aruba
89
52
  to_s[index]
90
53
  end
91
54
 
92
- # TODO: Aruba.config.physical_block_size could be allowed to be nil
93
- # (So the unit size can be autodetected)
94
-
95
- # Report minimum disk space used
96
- #
97
- # This estimates the minimum bytes allocated by the path.
98
- #
99
- # E.g. a 1-byte text file on a typical EXT-3 filesystem takes up 4096 bytes
100
- # (could be more if it was truncated or less for sparse files).
101
- #
102
- # Both `File::Stat` and the `stat()` system call will report 8 `blocks`
103
- # (each "usually" represents 512 bytes). So 8 * 512 is exactly 4096 bytes.
104
- #
105
- # (The "magic" 512 bye implied makes the value of "blocks" so confusing).
106
- #
107
- # Currently Aruba allows you to set what's called the `physical_block_size`,
108
- # which is a bit misleading - it's the "512" value. So if you somehow have a
109
- # "filesystem unit size" of 8192 (instead of a typical 4KB), set the
110
- # `physical_block_size` to 1024 (yes, divide by 8: 8192/8 = 1024).
111
- #
112
- # Ideally, Aruba should provide e.g. `Aruba.config.fs_allocation_unit`
113
- # (with 4096 as the default), so you wouldn't have to "divide by 8".
114
- #
115
- # (typical_fs_unit / typical_dev_bsize = 4096 / 512 = 8)
116
- #
117
- #
118
- # @return [Integer]
119
- # Total bytes allocate
120
- #
121
- # TODO: this is recommended over the above "blocks"
122
- def minimum_disk_space_used
123
- # TODO: replace Aruba.config.physical_block_size
124
- # with something like Aruba.config.fs_allocation_unit
125
- dev_bsize = Aruba.config.physical_block_size
126
-
127
- stat = File::Stat.new(to_s)
128
-
129
- blocks = stat.blocks
130
- return (blocks * dev_bsize) if blocks
55
+ private
131
56
 
132
- typical_fs_unit = 4096
133
- typical_dev_bsize = 512 # google dev_bsize for more info
134
-
135
- block_multiplier = typical_fs_unit / typical_dev_bsize
136
- fs_unit_size = dev_bsize * block_multiplier
137
- fs_units = (stat.size + fs_unit_size - 1) / fs_unit_size
138
- fs_units = 1 if fs_units.zero?
139
- fs_units * fs_unit_size
57
+ # Get path
58
+ def to_pathname
59
+ current_path = @obj.inject do |path, element|
60
+ if element.start_with? '~'
61
+ element
62
+ elsif Aruba.platform.absolute_path? element
63
+ element
64
+ else
65
+ File.join(path, element)
66
+ end
67
+ end
68
+ ::Pathname.new(current_path)
140
69
  end
141
70
  end
142
71
  end
@@ -17,7 +17,7 @@ Aruba.configure do |config|
17
17
 
18
18
  env['JRUBY_OPTS'] = jruby_opts
19
19
 
20
- if RbConfig::CONFIG['host_os'] =~ /solaris|sunos/i
20
+ if /solaris|sunos/i.match?(RbConfig::CONFIG['host_os'])
21
21
  java_opts = env['JAVA_OPTS'] || ''
22
22
 
23
23
  # force jRuby to use client JVM for faster startup times
@@ -30,9 +30,7 @@ module Aruba
30
30
  # If one method ends with "=", e.g. ":option1=", then notify the event
31
31
  # queue, that the user changes the value of "option1"
32
32
  def method_missing(name, *args, &block)
33
- if name.to_s.end_with? '='
34
- event_bus.notify Events::ChangedConfiguration.new(changed: { name: name.to_s.gsub(/=$/, ''), value: args.first })
35
- end
33
+ event_bus.notify Events::ChangedConfiguration.new(changed: { name: name.to_s.gsub(/=$/, ''), value: args.first }) if name.to_s.end_with? '='
36
34
 
37
35
  config.send(name, *args, &block)
38
36
  end
@@ -45,12 +45,14 @@ module Aruba
45
45
  option_accessor :main_class, contract: { Class => Maybe[Class] }, default: nil
46
46
 
47
47
  option_accessor :home_directory,
48
- contract: { Or[Aruba::Contracts::AbsolutePath, Aruba::Contracts::RelativePath] => Or[Aruba::Contracts::AbsolutePath, Aruba::Contracts::RelativePath] } do |config|
49
- File.join(config.root_directory.value, config.working_directory.value)
50
- end
48
+ contract: { Or[Aruba::Contracts::AbsolutePath, Aruba::Contracts::RelativePath] =>
49
+ Or[Aruba::Contracts::AbsolutePath, Aruba::Contracts::RelativePath] } do |config|
50
+ File.join(config.root_directory.value, config.working_directory.value)
51
+ end
51
52
 
52
53
  option_accessor :log_level,
53
- contract: { Aruba::Contracts::Enum[:fatal, :warn, :debug, :info, :error, :unknown, :silent] => Aruba::Contracts::Enum[:fatal, :warn, :debug, :info, :error, :unknown, :silent] },
54
+ contract: { Aruba::Contracts::Enum[:fatal, :warn, :debug, :info, :error, :unknown, :silent] =>
55
+ Aruba::Contracts::Enum[:fatal, :warn, :debug, :info, :error, :unknown, :silent] },
54
56
  default: :info
55
57
 
56
58
  # TODO: deprecate this value and replace with "filesystem allocation unit"
@@ -1,4 +1,4 @@
1
- require 'aruba/aruba_path'
1
+ require 'aruba/platform'
2
2
 
3
3
  # Aruba
4
4
  module Aruba
@@ -11,7 +11,7 @@ module Aruba
11
11
  # @param [Object] value
12
12
  # The value to be checked
13
13
  def self.valid?(value)
14
- ArubaPath.new(value).absolute?
14
+ Aruba.platform.absolute_path? value
15
15
  rescue
16
16
  false
17
17
  end
@@ -1,4 +1,4 @@
1
- require 'aruba/aruba_path'
1
+ require 'aruba/platform'
2
2
 
3
3
  # Aruba
4
4
  module Aruba
@@ -11,7 +11,7 @@ module Aruba
11
11
  # @param [String] value
12
12
  # The path to be checked
13
13
  def self.valid?(value)
14
- ArubaPath.new(value).relative?
14
+ Aruba.platform.relative_path? value
15
15
  rescue
16
16
  false
17
17
  end
@@ -148,9 +148,9 @@ module Aruba
148
148
  def transform(event_id)
149
149
  resolvers.find { |r| r.match? event_id }.new.transform(default_namespace, event_id)
150
150
  rescue => e
151
- # rubocop:disable Metrics/LineLength
151
+ # rubocop:disable Layout/LineLength
152
152
  raise EventNameResolveError, %(Transforming "#{event_id}" into an event class failed. Supported types are: #{@resolvers.map(&:supports).flatten.join(', ')}. #{e.message}.\n\n#{e.backtrace.join("\n")})
153
- # rubocop:enable Metrics/LineLength
153
+ # rubocop:enable Layout/LineLength
154
154
  end
155
155
  end
156
156
  end
@@ -23,7 +23,11 @@ module Aruba
23
23
  end
24
24
 
25
25
  content = if File.exist? file
26
- %(gem 'aruba', '~> #{Aruba::VERSION}')
26
+ file_ends_with_carriage_return = File.open(file, 'r').readlines.last.match(/.*\n$/)
27
+
28
+ prefix = file_ends_with_carriage_return ? '' : "\n"
29
+
30
+ %(#{prefix}gem 'aruba', '~> #{Aruba::VERSION}')
27
31
  else
28
32
  %(source 'https://rubygems.org'\ngem 'aruba', '~> #{Aruba::VERSION}'\n)
29
33
  end
@@ -10,7 +10,7 @@ module Aruba
10
10
  def indent_multiline_message(message)
11
11
  message = message.sub(/\n+\z/, '')
12
12
  message.lines.map do |line|
13
- line =~ /\S/ ? ' ' + line : line
13
+ /\S/.match?(line) ? ' ' + line : line
14
14
  end.join
15
15
  end
16
16
  end
@@ -12,7 +12,6 @@ module Aruba
12
12
  prepare_for_inspection(object).inspect
13
13
  end
14
14
 
15
- # rubocop:disable MethodLength
16
15
  # rubocop:disable Metrics/CyclomaticComplexity
17
16
 
18
17
  # @private
@@ -48,7 +47,6 @@ module Aruba
48
47
  InspectableItem.new(inspection)
49
48
  end
50
49
  # rubocop:enable Metrics/CyclomaticComplexity
51
- # rubocop:enable MethodLength
52
50
 
53
51
  # @private
54
52
  def self.prepare_hash(input)
@@ -92,9 +92,11 @@ module Aruba
92
92
  output_format :stop_signal, proc { |p, s| format('Command will be stopped with `kill -%s %s`', s, p) }
93
93
  output_format :timeout, '# %s-timeout: %s seconds'
94
94
  output_format :wait_time, '# %s: %s seconds'
95
- output_format :command_filesystem_status, proc { |status|
96
- format("<<-COMMAND FILESYSTEM STATUS\n%s\nCOMMAND FILESYSTEM STATUS",
97
- Aruba.platform.simple_table(status.to_h, sort: false)) }
95
+ output_format :command_filesystem_status,
96
+ proc { |status|
97
+ format("<<-COMMAND FILESYSTEM STATUS\n%s\nCOMMAND FILESYSTEM STATUS",
98
+ Aruba.platform.simple_table(status.to_h, sort: false))
99
+ }
98
100
  end
99
101
 
100
102
  def output_format(channel, string = '%s', &block)
@@ -1,33 +1,70 @@
1
- require 'aruba/platforms/disk_usage_calculator'
1
+ require 'aruba/file_size'
2
2
 
3
- # Aruba
4
3
  module Aruba
5
- # Platforms
6
4
  module Platforms
7
5
  # Determinate disk usage
8
6
  #
9
7
  # @private
10
8
  class DetermineDiskUsage
11
- def call(*args)
12
- args = args.flatten
13
-
14
- deprecated_block_size = args.pop
15
- paths = args
16
-
17
- size = paths.flatten.map do |p|
18
- # TODO: replace the `call` methods signature so that you can use just
19
- # p.minimum_disk_space_used
20
- #
21
- # (Same result, since the values are multiplied, so
22
- # deprecated_block_size is canceled out
23
- DiskUsageCalculator.new.call(
24
- (p.minimum_disk_space_used / deprecated_block_size),
25
- deprecated_block_size
26
- )
9
+ def call(paths)
10
+ size = paths.flatten.map do |path|
11
+ minimum_disk_space_used path
27
12
  end.inject(0, &:+)
28
13
 
29
14
  FileSize.new(size)
30
15
  end
16
+
17
+ private
18
+
19
+ # TODO: Aruba.config.physical_block_size could be allowed to be nil
20
+ # (So the unit size can be autodetected)
21
+
22
+ # Report minimum disk space used
23
+ #
24
+ # This estimates the minimum bytes allocated by the path.
25
+ #
26
+ # E.g. a 1-byte text file on a typical EXT-3 filesystem takes up 4096 bytes
27
+ # (could be more if it was truncated or less for sparse files).
28
+ #
29
+ # Both `File::Stat` and the `stat()` system call will report 8 `blocks`
30
+ # (each "usually" represents 512 bytes). So 8 * 512 is exactly 4096 bytes.
31
+ #
32
+ # (The "magic" 512 bye implied makes the value of "blocks" so confusing).
33
+ #
34
+ # Currently Aruba allows you to set what's called the `physical_block_size`,
35
+ # which is a bit misleading - it's the "512" value. So if you somehow have a
36
+ # "filesystem unit size" of 8192 (instead of a typical 4KB), set the
37
+ # `physical_block_size` to 1024 (yes, divide by 8: 8192/8 = 1024).
38
+ #
39
+ # Ideally, Aruba should provide e.g. `Aruba.config.fs_allocation_unit`
40
+ # (with 4096 as the default), so you wouldn't have to "divide by 8".
41
+ #
42
+ # (typical_fs_unit / typical_dev_bsize = 4096 / 512 = 8)
43
+ #
44
+ #
45
+ # @return [Integer]
46
+ # Total bytes allocate
47
+ #
48
+ # TODO: this is recommended over the above "blocks"
49
+ def minimum_disk_space_used(path)
50
+ # TODO: replace Aruba.config.physical_block_size
51
+ # with something like Aruba.config.fs_allocation_unit
52
+ dev_bsize = Aruba.config.physical_block_size
53
+
54
+ stat = File::Stat.new(path.to_s)
55
+
56
+ blocks = stat.blocks
57
+ return (blocks * dev_bsize) if blocks
58
+
59
+ typical_fs_unit = 4096
60
+ typical_dev_bsize = 512 # google dev_bsize for more info
61
+
62
+ block_multiplier = typical_fs_unit / typical_dev_bsize
63
+ fs_unit_size = dev_bsize * block_multiplier
64
+ fs_units = (stat.size + fs_unit_size - 1) / fs_unit_size
65
+ fs_units = 1 if fs_units.zero?
66
+ fs_units * fs_unit_size
67
+ end
31
68
  end
32
69
  end
33
70
  end
@@ -188,6 +188,13 @@ module Aruba
188
188
  value
189
189
  end
190
190
 
191
+ def nest
192
+ old_actions = @actions.dup
193
+ yield(self)
194
+ ensure
195
+ @actions = old_actions
196
+ end
197
+
191
198
  def self.hash_from_env
192
199
  ENV.to_hash
193
200
  end
@@ -62,8 +62,8 @@ module Aruba
62
62
  DetermineFileSize.new.call(*args)
63
63
  end
64
64
 
65
- def determine_disk_usage(*args)
66
- DetermineDiskUsage.new.call(*args)
65
+ def determine_disk_usage(paths)
66
+ DetermineDiskUsage.new.call(paths)
67
67
  end
68
68
 
69
69
  def create_file(*args)
@@ -83,7 +83,7 @@ module Aruba
83
83
  end
84
84
 
85
85
  def detect_ruby(cmd)
86
- if cmd =~ /^ruby\s/
86
+ if /^ruby\s/.match?(cmd)
87
87
  cmd.gsub(/^ruby\s/, "#{current_ruby} ")
88
88
  else
89
89
  cmd
@@ -136,13 +136,13 @@ module Aruba
136
136
  end
137
137
 
138
138
  # Copy file/directory
139
- def cp(args, options)
140
- FileUtils.cp_r(args, options)
139
+ def cp(src, dest)
140
+ FileUtils.cp_r(src, dest)
141
141
  end
142
142
 
143
143
  # Move file/directory
144
- def mv(args, options)
145
- FileUtils.mv(args, options)
144
+ def mv(src, dest)
145
+ FileUtils.mv(src, dest)
146
146
  end
147
147
 
148
148
  # Change mode of file/directory
@@ -195,8 +195,8 @@ module Aruba
195
195
  # * /bin/command.sh
196
196
  # * command.sh
197
197
  def relative_command?(path)
198
- p = ArubaPath.new(path)
199
- p.relative? && p.depth > 1
198
+ p = Pathname.new(path)
199
+ p.relative? && p.basename != p
200
200
  end
201
201
 
202
202
  # Check if command is relative