boxafe 0.1.3 → 0.1.4

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjIwY2E2NjkwYTEwNTBjZWU1MTE5NjEwODNiYTc2NTg0YzMyNTQ3YQ==
4
+ ODMyZGQyNWI3ZDQyMTI2MzNkMjlhNGM4MTc3YzliMzhkZTlhNTM0Mg==
5
5
  data.tar.gz: !binary |-
6
- OWM4NzA1MTgxYzIyY2I1MDU4YzVjYjg2YTY4NmNhYmU4NTRiMWU2MQ==
6
+ ZTkyMWRmY2M4NjU1MTAyNDQwMWU4YjEyNWZhYzAzNzgwYmUzNTZkOA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YTUyOGJjNWY3NTRjNDJmOTAyMjQ0ZGM1NTY4YTk4YThjYTQ5NDgwOWZiNDE4
10
- ZTUyNzA2YjcxMzZlN2YzZTYwMjA1MzRmZTllNWFiOWJkODgxOTY4N2I1Mzdl
11
- YWRmZDg0ZDNkYjFjNjBkZDlhZDkxNTU5MjljMzc1OWI0ZjA5OGQ=
9
+ Y2UzNjNmMTg3NzY4MGNlN2I1MjZiNmU2MzNmNTZlMDNiNjdhYzVjNzNhMjdi
10
+ ZmI2YWFhZjQ3MjY3MGI1Nzg1Y2ZiYzRmOGI0ZjBmYTBmOTY5NjNmZThmZTRj
11
+ YjhkOGVjMjg4ZDIzZWIxODU0NTAwOWFiNGVhMmRlNzgwY2IxZGM=
12
12
  data.tar.gz: !binary |-
13
- NzA1NjE5NTNiZDczZTg5Y2Q5ZmNmODg2Mjg4ODdjYzQ3YzEzMDVmYzkzYjA5
14
- MzEyOTFkOTk4NGFhNjc0Y2EwNWI2YWEyZmMzZTczNWVlNWQ4MTFmMzc5YWM4
15
- NTE4ZmY5MzNmYzQ5N2ZmMDM0NjViZWQzZjEyODc1ZTczOTM5YWQ=
13
+ ZjI2NWNhNmYzMjNjOGVkYWQ2ZWY5OTJkYjQ1ZjEwMWE3ZTNmMDAzNzgxNDVm
14
+ MTE3NzlmMzIxMWE2ODA3OGZkNjNlMWNmMWE4YjFiNjdkOTRlMTQ1NjcyNzZh
15
+ MDBjZDBmYzI3NDRhZTRhMTY0MzNhYmUzNWRjZjQ1ODk5YzZjOWU=
data/Gemfile CHANGED
@@ -9,6 +9,8 @@ gem 'which_works', '~> 1.0.0'
9
9
  gem 'dotenv', '~> 0.8.0'
10
10
  gem 'mutaconf', '~> 0.2.0'
11
11
  gem 'launchdr', '3'
12
+ gem 'growl', '~> 1.0.3'
13
+ gem 'terminal-notifier-guard', '~> 1.5.3'
12
14
  #gem 'whenever', '~> 0.8.2'
13
15
  #gem 'whenever', :git => 'git@github.com:AlphaHydrae/whenever.git', :branch => 'block-config'
14
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
data/lib/boxafe/cli.rb CHANGED
@@ -34,16 +34,20 @@ class Boxafe::CLI
34
34
  # FIXME: crashes with unknown box names
35
35
  boxes = args.empty? ? config.boxes : args.collect{ |arg| config.boxes.find{ |box| box.name == arg } }
36
36
 
37
+ notifier = Boxafe::Notifier.notifier config.options
38
+
37
39
  puts
38
40
  boxes.each do |box|
39
41
 
40
42
  print "Mounting #{box.name}... "
41
43
  case box.mount_status
42
44
  when :mounted
45
+ notifier.notify "#{box.name} is already mounted" if notifier
43
46
  puts Paint['already mounted', :green]
44
47
  next
45
48
  when :invalid
46
- puts Paint['invalid mount point', :red]
49
+ notifier.notify "#{box.name} has an invalid mount point (not a directory)", type: :failure if notifier
50
+ puts Paint['invalid mount point (not a directory)', :red]
47
51
  next
48
52
  end
49
53
 
@@ -52,8 +56,10 @@ class Boxafe::CLI
52
56
 
53
57
  puts case box.mount_status
54
58
  when :mounted
59
+ notifier.notify "#{box.name} is mounted", type: :success if notifier
55
60
  Paint['mounted', :green]
56
61
  else
62
+ notifier.notify "#{box.name} could not be mounted", type: :failure if notifier
57
63
  Paint['could not be mounted', :red]
58
64
  end
59
65
  end
data/lib/boxafe/config.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  class Boxafe::Config
3
3
 
4
4
  # TODO: document unmount_delay
5
- OPTION_KEYS = [ :encfs, :umount, :umount_delay ]
5
+ OPTION_KEYS = [ :encfs, :umount, :umount_delay, :notify ]
6
6
 
7
7
  attr_reader :boxes, :options
8
8
 
data/lib/boxafe/encfs.rb CHANGED
@@ -8,13 +8,14 @@ class Boxafe::Encfs
8
8
  end
9
9
 
10
10
  def command
11
- [ encfs_config, @options[:encfs], %/"#{@options[:root]}"/, %/"#{@options[:mount]}"/, extpass, '--', volname ].compact.join ' '
11
+ # TODO: use shellwords for binary, test escaping
12
+ [ encfs_config, @options[:encfs], Shellwords.escape(@options[:root]), Shellwords.escape(@options[:mount]), extpass, '--', volname ].compact.join ' '
12
13
  end
13
14
 
14
15
  private
15
16
 
16
17
  def volname
17
- %/-ovolname="#{@options[:volume]}"/
18
+ %/-ovolname=#{Shellwords.escape @options[:volume]}/
18
19
  end
19
20
 
20
21
  def extpass
@@ -26,6 +27,6 @@ class Boxafe::Encfs
26
27
  end
27
28
 
28
29
  def encfs_config
29
- @options[:encfs_config] ? %/ENCFS6_CONFIG="#{File.expand_path @options[:encfs_config]}"/ : nil
30
+ @options[:encfs_config] ? %/ENCFS6_CONFIG=#{Shellwords.escape File.expand_path(@options[:encfs_config])}/ : nil
30
31
  end
31
32
  end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ require 'growl'
3
+
4
+ class Boxafe::Notifier::Growl < Boxafe::Notifier
5
+ METHODS = {
6
+ info: :notify_info,
7
+ success: :notify_ok,
8
+ failure: :notify_error
9
+ }
10
+
11
+ def self.available?
12
+ ::Growl.installed?
13
+ end
14
+
15
+ def notify msg, options = {}
16
+ method = METHODS[options.delete(:type)] || :notify_info
17
+ ::Growl.send method, msg, growl_options(options)
18
+ end
19
+
20
+ private
21
+
22
+ def growl_options options = {}
23
+ @options.dup.tap do |h|
24
+ h[:title] = options[:title] if options[:title]
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ require 'terminal-notifier-guard'
3
+
4
+ class Boxafe::Notifier::NotificationCenter < Boxafe::Notifier
5
+ METHODS = {
6
+ info: :notify,
7
+ success: :success,
8
+ failure: :failed
9
+ }
10
+
11
+ def self.available?
12
+ TerminalNotifier::Guard.available?
13
+ end
14
+
15
+ def notify msg, options = {}
16
+ method = METHODS[options.delete(:type)] || :notify
17
+ TerminalNotifier::Guard.send method, msg, terminal_notifier_options(options)
18
+ end
19
+
20
+ private
21
+
22
+ def terminal_notifier_options options = {}
23
+ @options.dup.tap do |h|
24
+ h[:title] = options[:title] if options[:title]
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+
3
+ class Boxafe::Notifier
4
+ IMPLEMENTATIONS = %w(growl notification_center)
5
+
6
+ def self.notifier options = {}
7
+ if options[:notify] == true
8
+ platform_notifier options
9
+ elsif IMPLEMENTATIONS.include?(name = options[:notify].to_s)
10
+ notifier_instance name, options
11
+ elsif options.key?(:notify) and options[:notify] != false
12
+ raise Boxafe::Error, "Unknown notification type #{options[:notify].inspect}"
13
+ end
14
+ end
15
+
16
+ def self.notifier_instance name, options = {}
17
+ impl = Boxafe::Notifier.const_get(name.gsub(/(?:\A|_)(.)/){ $1.upcase })
18
+ impl.available? ? impl.new(options) : nil
19
+ end
20
+
21
+ def self.platform_notifier options = {}
22
+
23
+ candidates = case RbConfig::CONFIG['host_os']
24
+ when /darwin/i
25
+ %w(notification_center growl)
26
+ else
27
+ []
28
+ end
29
+
30
+ candidates.each do |name|
31
+ notifier = notifier_instance name, options
32
+ return notifier if notifier
33
+ end
34
+
35
+ nil
36
+ end
37
+
38
+ def initialize options = {}
39
+ @options = { title: 'Boxafe' }.merge options
40
+ end
41
+ end
42
+
43
+ Dir[File.join File.dirname(__FILE__), File.basename(__FILE__, '.*'), '*.rb'].each{ |lib| require lib }
data/lib/boxafe.rb CHANGED
@@ -4,7 +4,7 @@ require 'dotenv'
4
4
  require 'mutaconf'
5
5
 
6
6
  module Boxafe
7
- VERSION = '0.1.3'
7
+ VERSION = '0.1.4'
8
8
 
9
9
  # TODO: add detailed error description for non-trace mode
10
10
  class Error < StandardError
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boxafe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - AlphaHydrae
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: growl
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 1.0.3
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.0.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: terminal-notifier-guard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 1.5.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 1.5.3
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: bundler
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -225,6 +253,9 @@ files:
225
253
  - lib/boxafe/cli.rb
226
254
  - lib/boxafe/config.rb
227
255
  - lib/boxafe/encfs.rb
256
+ - lib/boxafe/notifier.rb
257
+ - lib/boxafe/notifier/growl.rb
258
+ - lib/boxafe/notifier/notification_center.rb
228
259
  - lib/boxafe/program.rb
229
260
  - lib/boxafe/scheduler.rb
230
261
  - lib/boxafe/scheduler/cron.rb