utilitybelt 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +72 -0
  3. data/utilitybelt.rb +79 -0
  4. metadata +81 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4b5cc04781a7d68b4e38fb5f60a4cb0c64844e5c
4
+ data.tar.gz: caa8b8fe2210d27d18371dd3737fc9fa22f52451
5
+ SHA512:
6
+ metadata.gz: 968129f7a050d9e8e955a7c47fe26b7c8f49f80283a17b1f7e0aeabf2b5140d6504ca9c42a38d6419d76bbe65c3ae16cf8d7c4a52e97c433b4bdc3fe3c014904
7
+ data.tar.gz: c1a5d6eec742b2ce834930a0340a40d4836c009bfa34a4d1fb8e56ec251ce3187fe06f2c8078b3c3e188686c78544d035f749ba1214e051425538d9113b5c473
data/README.md ADDED
@@ -0,0 +1,72 @@
1
+ Utility Belt
2
+ ============
3
+
4
+ My Ruby Utilities
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ gem install utilitybelt
10
+ ```
11
+
12
+ ## Usage
13
+
14
+ ### `UtilityBelt.mkdir(*path)`
15
+
16
+ > Wrapper for `FileUtils.mkdir`, which accepts path as argements to be joined and
17
+ > `noop`s if directory exists.
18
+
19
+ ### `UtilityBelt.touch(*path)`
20
+
21
+ > Wrapper for `FileUtils.touch`, which accepts path as argements to be joined and
22
+ > set's file perms to `0644`.
23
+
24
+ ### `UtilityBelt.save(path, body, bin=false)`
25
+
26
+ > Save `body` in `path`, optionally as binary data via `bin=true`.
27
+
28
+ ### `UtilityBelt.exec(*command)`
29
+
30
+ > Run command as joined argements. Returns a `Struct`;
31
+ >
32
+ > ```
33
+ > #<struct stdout="STDOUT", stderr="STDERR", status=0>
34
+ > ```
35
+
36
+ ### `UtilityBelt.encrypt!(source, destination, recipient)`
37
+
38
+ > GPG encrypts a `source` to a `destination`. Returns `destination`
39
+
40
+ ### `UtilityBelt.decrypt(source, recipient)`
41
+
42
+ > GPG decrypts a `source`. Returns decrypted string.
43
+
44
+ ### `UtilityBelt.decrypt!(source, destination, recipient)`
45
+
46
+ > GPG decrypts a `source` to a `destination`. Returns `destination`.
47
+
48
+ ### `UtilityBelt::NullLogger`
49
+
50
+ > A noop logger.
51
+ >
52
+ > E.g.:
53
+ >
54
+ > ```ruby
55
+ > Something.new(:logger => UtilityBelt::NullLogger.new)
56
+ > ```
57
+
58
+ ### Stay tuned, more to come.
59
+
60
+ ## Development
61
+
62
+ Fork, clone and...
63
+
64
+ ```bash
65
+ cd ruby-utilitybelt
66
+ bundle install --path .bundle
67
+ bundle exec rake test
68
+
69
+ # Or to test GPG stuff
70
+ # GPG_ID=<gpg email> bundle exec rake test
71
+ ```
72
+
data/utilitybelt.rb ADDED
@@ -0,0 +1,79 @@
1
+ require 'logger'
2
+ require 'fileutils'
3
+ require 'omnistruct'
4
+ require 'open3'
5
+
6
+ module UtilityBelt
7
+ def self.mkdir *path
8
+ path = File.join(path)
9
+ FileUtils.mkdir(path, :mode => 0755) unless File.directory?(path)
10
+ end
11
+
12
+ def self.touch *path
13
+ path = File.join(path)
14
+ FileUtils.touch(path)
15
+ File.chmod(0644, path)
16
+ end
17
+
18
+ def self.save name, body, bin=false
19
+ flags = 'w'
20
+ flags += '+b' if bin
21
+
22
+ File.open(name, flags) { |f| f << body }
23
+ end
24
+
25
+ def self.exec *cmd
26
+ cmd = cmd.join(" ")
27
+
28
+ stdout, stderr, status = Open3.capture3(cmd)
29
+
30
+ return {
31
+ :stdout => stdout,
32
+ :stderr => stderr,
33
+ :status => status
34
+ }.to_struct(:struct)
35
+
36
+ rescue Exception => e
37
+ return { :stdout => "", :stderr => e.message, :status => 1 }.to_struct
38
+ end
39
+
40
+ def self.encrypt! src, dest, rec
41
+ cmd = [ "gpg --recipient", rec, "--batch --no-tty --yes",
42
+ "--output", dest, "--encrypt", src ]
43
+
44
+ res = exec(*cmd)
45
+
46
+ unless res.status == 0
47
+ raise res.stderr unless res.stderr.empty?
48
+ raise "GPG Encryption failed and I don't know why."
49
+ end
50
+
51
+ dest
52
+ end
53
+
54
+ def self.decrypt src, rec
55
+ cmd = [ "gpg --decrypt --no-tty --recipient", rec, src ]
56
+ res = exec(*cmd)
57
+
58
+ unless res.status == 0
59
+ raise res.stderr unless res.stderr.empty?
60
+ raise "GPG Encryption failed and I don't know why."
61
+ end
62
+
63
+ res.stdout
64
+ end
65
+
66
+ def self.decrypt_to src, dest, rec
67
+ res = self.decrypt(src, rec)
68
+ save(dest, res)
69
+ dest
70
+ end
71
+
72
+ class NullLogger < ::Logger
73
+ def initialize(*args)
74
+ end
75
+
76
+ def add(*args, &block)
77
+ end
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: utilitybelt
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre.1
5
+ platform: ruby
6
+ authors:
7
+ - Joshua Mervine
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: omnistruct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.4'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 5.4.3
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '5.4'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 5.4.3
47
+ description: My Ruby Utility Belt -- Not really intended for general use, but you're
48
+ welcome to it.
49
+ email:
50
+ - joshua@mervine.net
51
+ executables: []
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - README.md
56
+ - utilitybelt.rb
57
+ homepage: https://github.com/jmervine/ruby-utilitybelt
58
+ licenses:
59
+ - n/a
60
+ metadata: {}
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - "."
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">"
73
+ - !ruby/object:Gem::Version
74
+ version: 1.3.1
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 2.2.2
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: My Ruby Utility Belt
81
+ test_files: []