gitc-ruby_gpg 0.2.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.
data/.autotest ADDED
@@ -0,0 +1,3 @@
1
+ Autotest.add_hook :initialize do |at|
2
+ at.add_exception /test_keys\/.*/
3
+ end
data/.gitignore ADDED
@@ -0,0 +1,26 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ tmp
21
+ doc
22
+ .yardoc
23
+ *.gemspec
24
+
25
+ ## PROJECT::SPECIFIC
26
+ test_keys/random_seed
@@ -0,0 +1,11 @@
1
+ # v0.2.0 (2010-03-17)
2
+
3
+ * Add `RubyGpg.decrypt_string` method.
4
+
5
+ # v0.1.1 (2010-03-16)
6
+
7
+ * Improve error handling.
8
+
9
+ # v0.1.0 (2010-03-16)
10
+
11
+ * First version with `RubyGpg.encrypt` and `RubyGpg.decrypt` methods.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Justin Blake
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,32 @@
1
+ # Ruby GPG
2
+
3
+ Ruby wrapper for the `gpg` binary. You probably want to be using the
4
+ `ruby-gpgme` gem instead, but if you can't install the gpgme libraries
5
+ for some reason, I guess you have to settle for this.
6
+
7
+ ## Installation
8
+
9
+ gem install ruby_gpg
10
+
11
+ ## Configuration
12
+
13
+ # Defaults to "gpg"
14
+ RubyGpg.config.executable = "/custom/path/to/gpg"
15
+
16
+ # Defaults to "~/.gnupg"
17
+ RubyGpg.config.homedir = "/custom/path/to/home"
18
+
19
+ ## Usage
20
+
21
+ # creates /path/to/file.gpg:
22
+ RubyGpg.encrypt("/path/to/file", "Mr. Recipient")
23
+
24
+ # creates /path/to/file:
25
+ RubyGpg.decrypt("/path/to/file.gpg", "passphrase")
26
+
27
+ For more details, see the
28
+ [RDocs](http://rdoc.info/projects/blaix/ruby_gpg).
29
+
30
+ ## Copyright
31
+
32
+ Copyright (c) 2010 Justin Blake. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,69 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "gitc-ruby_gpg"
8
+ gem.summary = %Q{Ruby wrapper for the gpg binary}
9
+ gem.description = %Q{Ruby wrapper for the gpg binary}
10
+ gem.email = "itdevelopers@globalitcreations.com"
11
+ gem.homepage = "http://github.com/gitcapps/ruby_gpg"
12
+ gem.authors = ["Justin Blake", "Scott Barr", "Divya Bhargov"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_development_dependency "yard", ">= 0"
15
+ gem.add_development_dependency "cucumber", ">= 0"
16
+ gem.add_development_dependency "mocha", ">= 0.9.8"
17
+ gem.rubyforge_project = "nowarning"
18
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
+ end
20
+ Jeweler::GemcutterTasks.new
21
+ rescue LoadError
22
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
23
+ end
24
+
25
+ require 'spec/rake/spectask'
26
+ Spec::Rake::SpecTask.new(:spec) do |spec|
27
+ spec.libs << 'lib' << 'spec'
28
+ spec.spec_files = FileList['spec/**/*_spec.rb']
29
+ end
30
+
31
+ namespace :spec do
32
+ Spec::Rake::SpecTask.new(:doc) do |spec|
33
+ spec.libs << 'lib' << 'spec'
34
+ spec.spec_files = FileList['spec/**/*_spec.rb']
35
+ spec.spec_opts << '--format specdoc'
36
+ end
37
+ end
38
+
39
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
40
+ spec.libs << 'lib' << 'spec'
41
+ spec.pattern = 'spec/**/*_spec.rb'
42
+ spec.rcov = true
43
+ end
44
+
45
+ task :spec => :check_dependencies
46
+
47
+ begin
48
+ require 'cucumber/rake/task'
49
+ Cucumber::Rake::Task.new(:features)
50
+
51
+ task :features => :check_dependencies
52
+ rescue LoadError
53
+ task :features do
54
+ abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
55
+ end
56
+ end
57
+
58
+ task :default => :spec
59
+
60
+ begin
61
+ require 'yard'
62
+ YARD::Rake::YardocTask.new do |y|
63
+ y.files << '-' << 'CHANGELOG.*' << 'TODO.*'
64
+ end
65
+ rescue LoadError
66
+ task :yardoc do
67
+ abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
68
+ end
69
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.0
data/cucumber.yml ADDED
@@ -0,0 +1 @@
1
+ default: features
@@ -0,0 +1,13 @@
1
+ Feature: Decrypt String
2
+ In order to read an encrypted string
3
+ As a user
4
+ I want to decrypt it
5
+
6
+ Scenario: Decrypt with proper recipient/recipient
7
+ Given a key pair for Slow Joe Crow with passphrase test
8
+ And a file named "secrets" containing "some content"
9
+ And I encrypt the file "secrets" for "Slow Joe Crow"
10
+ And I read the file "secrets.gpg" to a string
11
+ And the string should not be "secrets"
12
+ When I decrypt the string with passphrase "test"
13
+ Then the string should be "secrets"
@@ -0,0 +1,17 @@
1
+ Feature: Decryption
2
+ In order to read an encrypted file
3
+ As a user
4
+ I want to decrypt it
5
+
6
+ Background:
7
+ Given a file named "secrets" containing "some content"
8
+ And a key pair for Slow Joe Crow with passphrase test
9
+
10
+ Scenario: Decrypt with proper recipient/recipient
11
+ Given I encrypt the file "secrets" for "Slow Joe Crow"
12
+ And the file "secrets" does not exist
13
+ When I decrypt the file "secrets.gpg" with passphrase "test"
14
+ Then the file "secrets" should exist
15
+ And the file "secrets" should contain "some content"
16
+
17
+ # TODO: Scenario for failed decrypt (bad recipient and bad passprhase)
@@ -0,0 +1,19 @@
1
+ Feature: Encryption
2
+ In order to keep a file private
3
+ As a user
4
+ I want to encrypt the file
5
+
6
+ Background:
7
+ Given a key pair for Slow Joe Crow with passphrase test
8
+ And a file named "secrets" containing "some content"
9
+ And the file "secrets.gpg" does not exist
10
+
11
+ Scenario: Encrypt
12
+ When I encrypt the file "secrets" for "Slow Joe Crow"
13
+ Then the file "secrets.gpg" should exist
14
+ And the file "secrets.gpg" should not contain "some content"
15
+
16
+ Scenario: Unknown recipient
17
+ When I try to encrypt the file "secrets" for "Sue"
18
+ Then the command should raise an error matching "key not found"
19
+ And the file "secrets.gpg" should not exist
@@ -0,0 +1,66 @@
1
+ Given /^a key pair for Slow Joe Crow with passphrase test$/ do
2
+ # Already built keys in spec/gpg_home. Tell RubyGpg to use this...
3
+ RubyGpg.config.homedir = File.dirname(__FILE__) + '/../../test_keys'
4
+ end
5
+
6
+ Given /^a file named "([^\"]*)" containing "([^\"]*)"$/ do |filename, content|
7
+ File.open("#{TMP_PATH}/#{filename}", 'w') do |f|
8
+ f.write(content)
9
+ end
10
+ end
11
+
12
+ Given /^the file "([^\"]*)" does not exist$/ do |filename|
13
+ if File.exist?("#{TMP_PATH}/#{filename}")
14
+ File.delete("#{TMP_PATH}/#{filename}")
15
+ end
16
+ end
17
+
18
+ Given /^I read the file "([^\"]*)" to a string$/ do |filename|
19
+ @string = File.read("#{TMP_PATH}/#{filename}")
20
+ end
21
+
22
+ Given /^the string should not be "([^\"]*)"$/ do |string|
23
+ @string.strip.should_not == string.strip
24
+ end
25
+
26
+ When /^I encrypt the file "([^\"]*)" for "([^\"]*)"$/ do |filename, recipient|
27
+ RubyGpg.encrypt("#{TMP_PATH}/#{filename}", recipient)
28
+ end
29
+
30
+ When /^I try to encrypt the file "([^\"]*)" for "([^\"]*)"$/ do |filename, recipient|
31
+ @command = lambda {
32
+ RubyGpg.encrypt("#{TMP_PATH}/#{filename}", recipient)
33
+ }
34
+ end
35
+
36
+ When /^I decrypt the file "([^\"]*)" with passphrase "([^\"]*)"$/ do |filename, passphrase|
37
+ RubyGpg.decrypt("#{TMP_PATH}/#{filename}", passphrase)
38
+ end
39
+
40
+ When /^I decrypt the string with passphrase "([^\"]*)"$/ do |passphrase|
41
+ @string = RubyGpg.decrypt_string(@string, passphrase)
42
+ end
43
+
44
+ Then /^the command should raise an error matching "([^\"]*)"$/ do |error|
45
+ @command.should raise_error(/#{Regexp.escape(error)}/)
46
+ end
47
+
48
+ Then /^the file "([^\"]*)" should exist$/ do |filename|
49
+ File.exist?("#{TMP_PATH}/#{filename}").should be_true
50
+ end
51
+
52
+ Then /^the file "([^\"]*)" should not exist$/ do |filename|
53
+ File.exist?("#{TMP_PATH}/#{filename}").should_not be_true
54
+ end
55
+
56
+ Then /^the file "([^\"]*)" should not contain "([^\"]*)"$/ do |filename, content|
57
+ File.read("#{TMP_PATH}/#{filename}").should_not include(content)
58
+ end
59
+
60
+ Then /^the file "([^\"]*)" should contain "([^\"]*)"$/ do |filename, content|
61
+ File.read("#{TMP_PATH}/#{filename}").should include(content)
62
+ end
63
+
64
+ Then /^the string should be "([^\"]*)"$/ do |string|
65
+ string.strip.should == string.strip
66
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'ruby_gpg'
3
+
4
+ require 'spec/expectations'
5
+
6
+ TMP_PATH = File.dirname(__FILE__) + '/../../tmp'
7
+
8
+ class Object
9
+ def true?
10
+ !!self
11
+ end
12
+ end
data/lib/ruby_gpg.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'open3'
2
+
3
+ module RubyGpg
4
+ extend self
5
+
6
+ Config = Struct.new(:executable, :homedir)
7
+ def config
8
+ @config ||= Config.new("gpg", "~/.gnupg")
9
+ end
10
+
11
+ def gpg_command
12
+ "#{config.executable} --homedir #{config.homedir} --quiet" +
13
+ " --no-secmem-warning --no-permission-warning --no-tty --yes"
14
+ end
15
+
16
+ def encrypt(file, recipient, opts = {})
17
+ options = {
18
+ :armor => false
19
+ }.merge(opts)
20
+
21
+ output = output_filename(file, options)
22
+
23
+ ascii = options[:armor] == true ? "-a " : ""
24
+
25
+ command = "#{gpg_command} #{ascii}--output #{output}" +
26
+ " --recipient \"#{recipient}\" --encrypt #{file}"
27
+
28
+ run_command(command)
29
+ end
30
+
31
+ # Encrypt a string from stdin
32
+ def encrypt_string(string, recipient, opts = {})
33
+ command = gpg_command.dup
34
+ command << " -a" if opts[:armor]
35
+ command << " --encrypt"
36
+ command << " --recipient \"#{recipient}\""
37
+ run_command(command, string)
38
+ end
39
+
40
+ def decrypt(file, passphrase = nil, opts = {})
41
+ outfile = opts[:output].nil? ? file.gsub(/\.gpg$|\.asc$/, '') : opts[:output]
42
+ command = "#{gpg_command} --output #{outfile}"
43
+ command << " --passphrase #{passphrase}" if passphrase
44
+ command << " --decrypt #{file}"
45
+ run_command(command)
46
+ end
47
+
48
+ def decrypt_string(string, passphrase = nil)
49
+ command = gpg_command.dup
50
+ command << " --passphrase #{passphrase}" if passphrase
51
+ command << " --decrypt"
52
+ run_command(command, string)
53
+ end
54
+
55
+ private
56
+
57
+ def run_command(command, input = nil)
58
+ output = ""
59
+ Open3.popen3(command) do |stdin, stdout, stderr|
60
+ stdin.write(input) if input
61
+ stdin.close_write
62
+ output << stdout.read
63
+ error = stderr.read
64
+ if error && !error.empty?
65
+ raise "GPG command (#{command}) failed with: #{error}"
66
+ end
67
+ end
68
+ output
69
+ end
70
+
71
+ # Return the output filename to use
72
+ def output_filename(file, opts)
73
+ extension = opts[:armor] ? "asc" : "gpg"
74
+ opts[:output].nil? ? "#{file}.#{extension}" : opts[:output]
75
+ end
76
+
77
+ end
@@ -0,0 +1,241 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "RubyGpg" do
4
+ def expect_command_to_match(part_of_command)
5
+ Open3.expects(:popen3).with do |command|
6
+ case part_of_command
7
+ when Regexp: command =~ part_of_command
8
+ when String: command.include?(part_of_command)
9
+ else raise "Can't match that"
10
+ end
11
+ end
12
+ end
13
+
14
+ def stub_error(error_message)
15
+ @stderr.write(error_message)
16
+ @stderr.rewind
17
+ end
18
+
19
+ before do
20
+ @stdin = StringIO.new
21
+ @stdout = StringIO.new
22
+ @stderr = StringIO.new
23
+ Open3.stubs(:popen3).yields(@stdin, @stdout, @stderr)
24
+ end
25
+
26
+ it "allows the use of a custom path to the gpg executable" do
27
+ RubyGpg.config.executable = "/custom/path/to/gpg"
28
+ RubyGpg.gpg_command.should =~ /^\/custom\/path\/to\/gpg/
29
+ end
30
+
31
+ it "allows the use of a custom gpg home directory" do
32
+ RubyGpg.config.homedir = "/custom/path/to/home"
33
+ RubyGpg.gpg_command.should include("--homedir /custom/path/to/home")
34
+ end
35
+
36
+ it "should run with sane, headless defaults" do
37
+ command = RubyGpg.gpg_command
38
+ command.should include("--no-secmem-warning")
39
+ command.should include("--no-permission-warning")
40
+ command.should include("--no-tty")
41
+ command.should include("--quiet")
42
+ command.should include("--yes")
43
+ end
44
+
45
+ describe '.encrypt(filename, recipient)' do
46
+ def run_encrypt
47
+ RubyGpg.encrypt('filename', 'recipient')
48
+ end
49
+
50
+ it "uses the configured gpg command" do
51
+ expect_command_to_match(/^#{Regexp.escape(RubyGpg.gpg_command)}/)
52
+ run_encrypt
53
+ end
54
+
55
+ it "issues an encrypt command to gpg" do
56
+ expect_command_to_match("--encrypt")
57
+ run_encrypt
58
+ end
59
+
60
+ it "issues the encrypt command for the passed filename" do
61
+ expect_command_to_match(/filename$/)
62
+ run_encrypt
63
+ end
64
+
65
+ it "issues the encrypts command for the passed recipient" do
66
+ expect_command_to_match("--recipient \"recipient\"")
67
+ run_encrypt
68
+ end
69
+
70
+ it "saves encrypted version to filename.gpg" do
71
+ expect_command_to_match("--output filename.gpg")
72
+ run_encrypt
73
+ end
74
+
75
+ it "raises any errors from gpg" do
76
+ stub_error("error message")
77
+ lambda { run_encrypt }.should raise_error(/GPG command \(.*gpg.*--encrypt.*filename\) failed with: error message/)
78
+ end
79
+
80
+ it "does not raise if there is no output from gpg" do
81
+ lambda { run_encrypt }.should_not raise_error
82
+ end
83
+ end
84
+
85
+ describe '.encrypt(filename, recipient, opts) with armor specified' do
86
+ def run_encrypt
87
+ RubyGpg.encrypt('filename', 'recipient', {:armor => true})
88
+ end
89
+
90
+ it "saves armored version to filename.asc" do
91
+ expect_command_to_match("-a --output filename.asc")
92
+ run_encrypt
93
+ end
94
+ end
95
+
96
+ describe '.encrypt(filename, recipient, opts) with ascii output file specified' do
97
+ def run_encrypt
98
+ RubyGpg.encrypt('filename', 'recipient', {:armor => true, :output => "foo.asc"})
99
+ end
100
+
101
+ it "saves armored version to foo.asc" do
102
+ expect_command_to_match("-a --output foo.asc")
103
+ run_encrypt
104
+ end
105
+ end
106
+
107
+ describe '.encrypt_string(string, recipient, opts)' do
108
+ def run_encrypt_string
109
+ RubyGpg.encrypt_string("string to encrypt", "recipient")
110
+ end
111
+
112
+ it "uses the configured gpg command" do
113
+ expect_command_to_match(/^#{Regexp.escape(RubyGpg.gpg_command)}/)
114
+ run_encrypt_string
115
+ end
116
+
117
+ it "issues an encrypt command to gpg" do
118
+ expect_command_to_match("--encrypt")
119
+ run_encrypt_string
120
+ end
121
+
122
+ it "issues the encrypts command for the passed recipient" do
123
+ expect_command_to_match("--recipient \"recipient\"")
124
+ run_encrypt_string
125
+ end
126
+
127
+ it "sends the passed string as stdin" do
128
+ @stdin.expects(:write).with('string to encrypt')
129
+ run_encrypt_string
130
+ end
131
+
132
+ it "returns the encrypted string" do
133
+ @stdout.write("encrypted string")
134
+ @stdout.rewind
135
+ run_encrypt_string.should == "encrypted string"
136
+ end
137
+
138
+ end
139
+
140
+ describe '.decrypt(filename)' do
141
+ def run_decrypt(passphrase = nil)
142
+ RubyGpg.decrypt('filename.gpg', passphrase)
143
+ end
144
+
145
+ it "uses the configured gpg command" do
146
+ expect_command_to_match(/^#{Regexp.escape(RubyGpg.gpg_command)}/)
147
+ run_decrypt
148
+ end
149
+
150
+ it "issues a decrypt command to gpg" do
151
+ expect_command_to_match("--decrypt")
152
+ run_decrypt
153
+ end
154
+
155
+ it "accepts an optional passphrase" do
156
+ expect_command_to_match("--passphrase secret")
157
+ run_decrypt("secret")
158
+ end
159
+
160
+ it "issues the decrypt command for the passed filename" do
161
+ expect_command_to_match(/filename\.gpg$/)
162
+ run_decrypt
163
+ end
164
+
165
+ it "saves decrypted version to filename without .gpg extension" do
166
+ # Note the space after "filename". Without the space it is possible that
167
+ # the file extention still exists
168
+ expect_command_to_match("--output filename ")
169
+ run_decrypt
170
+ end
171
+
172
+ it "raises any errors from gpg" do
173
+ stub_error("error message")
174
+ lambda { run_decrypt }.should raise_error(/GPG command \(.*gpg.*--decrypt.*filename\.gpg\) failed with: error message/)
175
+ end
176
+
177
+ it "does not raise if there is no output from gpg" do
178
+ lambda { run_decrypt }.should_not raise_error
179
+ end
180
+ end
181
+
182
+ describe '.decrypt(filename) for asc file' do
183
+ def run_decrypt(passphrase = nil, opts = {})
184
+ RubyGpg.decrypt('filename.asc', passphrase, opts)
185
+ end
186
+
187
+ it "issues the decrypt command for the ascii filename" do
188
+ # Note the space after "filename". Without the space it is possible that
189
+ # the file extention still exists
190
+ expect_command_to_match("--output filename ")
191
+ run_decrypt
192
+ end
193
+
194
+ it "issues the decrypt command for the filename passed in options" do
195
+ expect_command_to_match("--output foo.txt ")
196
+ run_decrypt(nil, {:output => "foo.txt"})
197
+ end
198
+
199
+ end
200
+
201
+ describe '.decrypt_string(string)' do
202
+ def run_decrypt_string(passphrase = nil)
203
+ RubyGpg.decrypt_string('encrypted string', passphrase)
204
+ end
205
+
206
+ it "uses the configured gpg command" do
207
+ expect_command_to_match(/^#{Regexp.escape(RubyGpg.gpg_command)}/)
208
+ run_decrypt_string
209
+ end
210
+
211
+ it "issues a decrypt command to gpg" do
212
+ expect_command_to_match("--decrypt")
213
+ run_decrypt_string
214
+ end
215
+
216
+ it "accepts an optional passphrase" do
217
+ expect_command_to_match("--passphrase secret")
218
+ run_decrypt_string("secret")
219
+ end
220
+
221
+ it "sends the passed string as stdin" do
222
+ @stdin.expects(:write).with("encrypted string")
223
+ run_decrypt_string
224
+ end
225
+
226
+ it "returns the decrypted string" do
227
+ @stdout.write("decrypted string")
228
+ @stdout.rewind
229
+ run_decrypt_string.should == "decrypted string"
230
+ end
231
+
232
+ it "raises any errors from gpg" do
233
+ stub_error("error message")
234
+ lambda { run_decrypt_string }.should raise_error(/GPG command \(.*gpg.*--decrypt.*\) failed with: error message/)
235
+ end
236
+
237
+ it "does not raise if there is no output from gpg" do
238
+ lambda { run_decrypt_string }.should_not raise_error
239
+ end
240
+ end
241
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'ruby_gpg'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+ config.mock_with :mocha
9
+ end
Binary file
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitc-ruby_gpg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Justin Blake
8
+ - Scott Barr
9
+ - Divya Bhargov
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2010-07-16 00:00:00 +08:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rspec
19
+ type: :development
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.2.9
26
+ version:
27
+ - !ruby/object:Gem::Dependency
28
+ name: yard
29
+ type: :development
30
+ version_requirement:
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ version:
37
+ - !ruby/object:Gem::Dependency
38
+ name: cucumber
39
+ type: :development
40
+ version_requirement:
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ - !ruby/object:Gem::Dependency
48
+ name: mocha
49
+ type: :development
50
+ version_requirement:
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.9.8
56
+ version:
57
+ description: Ruby wrapper for the gpg binary
58
+ email: itdevelopers@globalitcreations.com
59
+ executables: []
60
+
61
+ extensions: []
62
+
63
+ extra_rdoc_files:
64
+ - LICENSE
65
+ - README.markdown
66
+ files:
67
+ - .autotest
68
+ - .gitignore
69
+ - CHANGELOG.markdown
70
+ - LICENSE
71
+ - README.markdown
72
+ - Rakefile
73
+ - VERSION
74
+ - cucumber.yml
75
+ - features/decrypt_string.feature
76
+ - features/decryption.feature
77
+ - features/encryption.feature
78
+ - features/step_definitions/ruby_gpg_steps.rb
79
+ - features/support/env.rb
80
+ - lib/ruby_gpg.rb
81
+ - spec/ruby_gpg_spec.rb
82
+ - spec/spec.opts
83
+ - spec/spec_helper.rb
84
+ - test_keys/pubring.gpg
85
+ - test_keys/secring.gpg
86
+ - test_keys/trustdb.gpg
87
+ has_rdoc: true
88
+ homepage: http://github.com/gitcapps/ruby_gpg
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options:
93
+ - --charset=UTF-8
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ version:
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: "0"
107
+ version:
108
+ requirements: []
109
+
110
+ rubyforge_project: nowarning
111
+ rubygems_version: 1.3.5
112
+ signing_key:
113
+ specification_version: 3
114
+ summary: Ruby wrapper for the gpg binary
115
+ test_files:
116
+ - spec/ruby_gpg_spec.rb
117
+ - spec/spec_helper.rb