gitc-ruby_gpg 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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