pgcrypto 0.3.3 → 0.3.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.
data/CHANGES.md CHANGED
@@ -1,4 +1,7 @@
1
1
  # CHANGELOG
2
+ ## 0.3.3
3
+ - Solved a mass-assignment issue thanks to Brett Levine
4
+
2
5
  ## 0.3.2
3
6
  - Upgrade big_spoon dependency to solve annoying generator bug.
4
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.3.4
@@ -93,7 +93,7 @@ module PGCrypto
93
93
  if key = PGCrypto.keys[:private]
94
94
  pgcrypto_column_finder = pgcrypto_column_finder.select([
95
95
  %w(id owner_id owner_type owner_table).map {|column| %("#{PGCrypto::Column.table_name}"."#{column}")},
96
- %[pgp_pub_decrypt("#{PGCrypto::Column.table_name}"."value", pgcrypto_keys.#{key.name}#{", '#{key.password}'" if key.password}) AS "value"]
96
+ %[pgp_pub_decrypt("#{PGCrypto::Column.table_name}"."value", pgcrypto_keys.#{key.name}#{key.password?}) AS "value"]
97
97
  ].flatten).joins(%[CROSS JOIN (SELECT #{key.dearmored} AS "#{key.name}") AS pgcrypto_keys])
98
98
  end
99
99
  pgcrypto_column_finder.where(:name => column_name).first
@@ -54,7 +54,7 @@ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
54
54
  next unless encrypted_columns[child.left.name.to_s]
55
55
  joins.push(child.left.name.to_s) unless joins.include?(child.left.name.to_s)
56
56
  child.left = Arel::Nodes::SqlLiteral.new(%[
57
- pgp_pub_decrypt("#{PGCrypto::Column.table_name}_#{child.left.name}"."value", pgcrypto_keys.#{key.name})
57
+ pgp_pub_decrypt("#{PGCrypto::Column.table_name}_#{child.left.name}"."value", pgcrypto_keys.#{key.name}#{key.password?})
58
58
  ])
59
59
  end if where.respond_to?(:children)
60
60
  end
@@ -22,6 +22,10 @@ module PGCrypto
22
22
  "#{'dearmor(' if armored?}'#{self}'#{')' if armored?}"
23
23
  end
24
24
 
25
+ def encrypt(value)
26
+ %[pgp_pub_encrypt('#{value}', #{dearmored})]
27
+ end
28
+
25
29
  def initialize(options = {})
26
30
  if options.is_a?(String)
27
31
  self.value = options
@@ -32,6 +36,10 @@ module PGCrypto
32
36
  end
33
37
  end
34
38
 
39
+ def password?
40
+ ", '#{password}'" if password
41
+ end
42
+
35
43
  def path=(keyfile)
36
44
  keyfile = File.expand_path(keyfile)
37
45
  raise PGCrypto::Error, "#{keyfile} does not exist!" unless File.file?(keyfile)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pgcrypto"
8
- s.version = "0.3.3"
8
+ s.version = "0.3.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Flip Sasser"]
12
- s.date = "2012-08-21"
12
+ s.date = "2012-08-22"
13
13
  s.description = "\n PGCrypto is an ActiveRecord::Base extension that allows you to asymmetrically\n encrypt PostgreSQL columns with as little trouble as possible. It's totally\n freaking rad.\n "
14
14
  s.email = "flip@x451.com"
15
15
  s.extra_rdoc_files = [
@@ -26,7 +26,6 @@ Gem::Specification.new do |s|
26
26
  "README.markdown",
27
27
  "Rakefile",
28
28
  "VERSION",
29
- "autotest/discover.rb",
30
29
  "lib/generators/pgcrypto/install/USAGE",
31
30
  "lib/generators/pgcrypto/install/install_generator.rb",
32
31
  "lib/generators/pgcrypto/install/templates/initializer.rb",
@@ -41,7 +40,9 @@ Gem::Specification.new do |s|
41
40
  "spec/lib/pgcrypto_spec.rb",
42
41
  "spec/spec_helper.rb",
43
42
  "spec/support/private.key",
44
- "spec/support/public.key"
43
+ "spec/support/private.password.key",
44
+ "spec/support/public.key",
45
+ "spec/support/public.password.key"
45
46
  ]
46
47
  s.homepage = "http://github.com/Plinq/pgcrypto"
47
48
  s.require_paths = ["lib"]
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe PGCrypto do
3
+ # require 'logger'
4
+ # ActiveRecord::Base.logger = Logger.new(STDOUT)
5
+
6
+ specs = proc do
4
7
  it "should extend ActiveRecord::Base" do
5
8
  PGCryptoTestModel.should respond_to(:pgcrypto)
6
9
  end
@@ -37,7 +40,7 @@ describe PGCrypto do
37
40
  model = PGCryptoTestModel.create!(:test_column => 'i should return to you')
38
41
  PGCryptoTestModel.find(model.id).test_column.should == 'i should return to you'
39
42
  end
40
-
43
+
41
44
  it "should be retrievable at update" do
42
45
  model = PGCryptoTestModel.create!(:test_column => 'i will update')
43
46
  model.test_column.should == 'i will update'
@@ -52,9 +55,9 @@ describe PGCrypto do
52
55
  model.test_column.should == 'i updated'
53
56
  end
54
57
 
55
- it "be searchable" do
58
+ it "should be searchable" do
56
59
  model = PGCryptoTestModel.create!(:test_column => 'i am findable!')
57
- PGCryptoTestModel.where(:test_column => model.test_column).count.should == 1
60
+ PGCryptoTestModel.where(:test_column => model.test_column).should == [model]
58
61
  end
59
62
 
60
63
  it "should track changes" do
@@ -92,10 +95,31 @@ describe PGCrypto do
92
95
  model.select_pgcrypto_column(:test_column).should be_nil
93
96
  end
94
97
 
95
- it "plz work" do
98
+ it "should plz work" do
96
99
  model = PGCryptoTestModel.find(PGCryptoTestModel.create!(:test_column => 'one'))
97
100
  model.test_column = 'two'
98
101
  model.save!
99
102
  model.select_pgcrypto_column(:test_column).value.should == 'two'
100
103
  end
101
104
  end
105
+
106
+ keypath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'support'))
107
+ describe PGCrypto do
108
+ describe "without password-protected keys" do
109
+ before :all do
110
+ PGCrypto.keys[:private] = {:path => File.join(keypath, 'private.key')}
111
+ PGCrypto.keys[:public] = {:path => File.join(keypath, 'public.key')}
112
+ end
113
+
114
+ # instance_eval(&specs)
115
+ end
116
+
117
+ describe "with password-protected keys" do
118
+ before :each do
119
+ PGCrypto.keys[:private] = {:path => File.join(keypath, 'private.password.key'), :password => 'password'}
120
+ PGCrypto.keys[:public] = {:path => File.join(keypath, 'public.password.key'), :password => 'password'}
121
+ end
122
+
123
+ instance_eval(&specs)
124
+ end
125
+ end
@@ -11,8 +11,6 @@ require 'simplecov'
11
11
 
12
12
  # Requier and configure PGCrypto
13
13
  require 'pgcrypto'
14
- PGCrypto.keys[:private] = {:path => File.join(File.dirname(__FILE__), 'support', 'private.key')}
15
- PGCrypto.keys[:public] = {:path => File.join(File.dirname(__FILE__), 'support', 'public.key')}
16
14
 
17
15
  RSpec.configure do |config|
18
16
  database_config = {:adapter => 'postgresql', :database => 'pgcrypto_test', :encoding => 'utf8', :host => 'localhost'}
@@ -0,0 +1,42 @@
1
+ -----BEGIN PGP PRIVATE KEY BLOCK-----
2
+ Version: GnuPG v1.4.12 (Darwin)
3
+
4
+ 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
41
+ =+qjx
42
+ -----END PGP PRIVATE KEY BLOCK-----
@@ -0,0 +1,39 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v1.4.12 (Darwin)
3
+
4
+ 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
37
+ LYrUQ/uHaSPVpl6O5g==
38
+ =XIMO
39
+ -----END PGP PUBLIC KEY BLOCK-----
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgcrypto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-21 00:00:00.000000000 Z
12
+ date: 2012-08-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -78,7 +78,6 @@ files:
78
78
  - README.markdown
79
79
  - Rakefile
80
80
  - VERSION
81
- - autotest/discover.rb
82
81
  - lib/generators/pgcrypto/install/USAGE
83
82
  - lib/generators/pgcrypto/install/install_generator.rb
84
83
  - lib/generators/pgcrypto/install/templates/initializer.rb
@@ -93,7 +92,9 @@ files:
93
92
  - spec/lib/pgcrypto_spec.rb
94
93
  - spec/spec_helper.rb
95
94
  - spec/support/private.key
95
+ - spec/support/private.password.key
96
96
  - spec/support/public.key
97
+ - spec/support/public.password.key
97
98
  homepage: http://github.com/Plinq/pgcrypto
98
99
  licenses: []
99
100
  post_install_message:
@@ -106,9 +107,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
107
  - - ! '>='
107
108
  - !ruby/object:Gem::Version
108
109
  version: '0'
109
- segments:
110
- - 0
111
- hash: 1863524219335446530
112
110
  required_rubygems_version: !ruby/object:Gem::Requirement
113
111
  none: false
114
112
  requirements:
@@ -1,14 +0,0 @@
1
- require 'autotest/fsevent'
2
- require 'autotest/growl'
3
-
4
- Autotest.add_discovery { "rspec2" }
5
-
6
- Autotest.add_hook :initialize do |autotest|
7
- autotest.add_mapping %r(^lib/**/*\.rb$) do |file, _|
8
- Dir['spec/**/*.rb']
9
- end
10
-
11
- autotest.add_mapping %r(^spec/support/*\.rb$) do |file, _|
12
- Dir['spec/**/*.rb']
13
- end
14
- end