shuber-attr_encrypted 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ 2009-01-13 - Sean Huber (shuber@huberry.com)
2
+ * :marshal no longer defaults to true in ORM adapters
3
+ * Load gem dependencies
4
+
1
5
  2009-01-12 - Sean Huber (shuber@huberry.com)
2
6
  * Remove read_attribute and write_attribute methods - unnecessary
3
7
  * ActiveRecord and DataMapper extensions are now "adapters"
@@ -6,6 +10,7 @@
6
10
  * Add Sequel adapter
7
11
  * Update DataMapper tests
8
12
  * Update README
13
+ * Set attr_encrypted_options instead of overwriting the attr_encrypted method in adapters
9
14
 
10
15
  2009-01-11 - Sean Huber (shuber@huberry.com)
11
16
  * Update README
data/README.markdown CHANGED
@@ -3,7 +3,7 @@ attr\_encrypted
3
3
 
4
4
  Generates attr\_accessors that encrypt and decrypt attributes transparently
5
5
 
6
- Works with ANY class including ActiveRecord, DataMapper, and Sequel
6
+ It works with ANY class, however, you get a few extra features when you're using it with ActiveRecord, DataMapper, or Sequel
7
7
 
8
8
 
9
9
  Installation
@@ -267,7 +267,7 @@ If you're using this gem with ActiveRecord, you get a few extra features:
267
267
 
268
268
  #### Default options ####
269
269
 
270
- For your convenience, the `:encode` and `:marshal` options are set to true by default since you'll be storing everything in a database.
270
+ For your convenience, the `:encode` option is set to true by default since you'll be storing everything in a database.
271
271
 
272
272
 
273
273
  #### Dynamic find\_by\_ and scoped\_by\_ methods ####
@@ -291,7 +291,7 @@ NOTE: This only works if all records are encrypted with the same encryption key
291
291
 
292
292
  ### DataMapper and Sequel ###
293
293
 
294
- Just like the default options for ActiveRecord, the `:encode` and `:marshal` options are set to true by default since you'll be storing everything in a database.
294
+ Just like the default options for ActiveRecord, the `:encode` option is set to true by default since you'll be storing everything in a database.
295
295
 
296
296
 
297
297
  Contact
@@ -1,3 +1,9 @@
1
+ gem 'shuber-eigenclass', '>= 1.0.1'
2
+ require 'eigenclass'
3
+
4
+ gem 'shuber-encryptor'
5
+ require 'encryptor'
6
+
1
7
  require 'huberry/attr_encrypted/class'
2
8
  Class.send :include, Huberry::AttrEncrypted::Class
3
9
 
@@ -4,21 +4,19 @@ if defined?(ActiveRecord)
4
4
  module Adapters
5
5
  module ActiveRecord
6
6
  def self.extended(base)
7
+ base.attr_encrypted_options[:encode] = true
7
8
  base.eigenclass_eval { alias_method_chain :method_missing, :attr_encrypted }
8
9
  end
9
-
10
+
10
11
  protected
11
-
12
- # Calls attr_encrypted with the options <tt>:encode</tt> and <tt>:marshal</tt> set to true
13
- # unless they've already been specified
14
- #
15
- # Also defines the attribute methods for db fields if they don't exist yet
12
+
13
+ # Ensures the attribute methods for db fields have been defined before calling the original
14
+ # <tt>attr_encrypted</tt> method
16
15
  def attr_encrypted(*attrs)
17
16
  define_attribute_methods
18
- options = { :encode => true, :marshal => true }.merge(attrs.last.is_a?(Hash) ? attrs.pop : {})
19
- super *(attrs << options)
17
+ super
20
18
  end
21
-
19
+
22
20
  # Allows you to use dynamic methods like <tt>find_by_email</tt> or <tt>scoped_by_email</tt> for
23
21
  # encrypted attributes
24
22
  #
@@ -3,23 +3,21 @@ if defined?(DataMapper)
3
3
  module AttrEncrypted
4
4
  module Adapters
5
5
  module DataMapper
6
- def self.included(base)
7
- base.extend ClassMethods
6
+ def self.extended(base)
7
+ base.eigenclass_eval do
8
+ alias_method :included_without_attr_encrypted, :included
9
+ alias_method :included, :included_with_attr_encrypted
10
+ end
8
11
  end
9
-
10
- module ClassMethods
11
- protected
12
- # Calls attr_encrypted with the options <tt>:encode</tt> and <tt>:marshal</tt> set to true
13
- # unless they've already been specified
14
- def attr_encrypted(*attrs)
15
- options = { :encode => true, :marshal => true }.merge(attrs.last.is_a?(Hash) ? attrs.pop : {})
16
- super *(attrs << options)
17
- end
12
+
13
+ def included_with_attr_encrypted(base)
14
+ included_without_attr_encrypted(base)
15
+ base.attr_encrypted_options[:encode] = true
18
16
  end
19
17
  end
20
18
  end
21
19
  end
22
20
  end
23
21
 
24
- DataMapper::Resource.send :include, Huberry::AttrEncrypted::Adapters::DataMapper
22
+ DataMapper::Resource.extend Huberry::AttrEncrypted::Adapters::DataMapper
25
23
  end
@@ -3,13 +3,9 @@ if defined?(Sequel)
3
3
  module AttrEncrypted
4
4
  module Adapters
5
5
  module Sequel
6
- protected
7
- # Calls attr_encrypted with the options <tt>:encode</tt> and <tt>:marshal</tt> set to true
8
- # unless they've already been specified
9
- def attr_encrypted(*attrs)
10
- options = { :encode => true, :marshal => true }.merge(attrs.last.is_a?(Hash) ? attrs.pop : {})
11
- super *(attrs << options)
12
- end
6
+ def self.extended(base)
7
+ base.attr_encrypted_options[:encode] = true
8
+ end
13
9
  end
14
10
  end
15
11
  end
@@ -20,7 +20,7 @@ create_people_table
20
20
 
21
21
  class Person < ActiveRecord::Base
22
22
  attr_encrypted :email, :key => 'a secret key'
23
- attr_encrypted :credentials, :key => Proc.new { |user| Huberry::Encryptor.encrypt(:value => user.salt, :key => 'some private key') }
23
+ attr_encrypted :credentials, :key => Proc.new { |user| Huberry::Encryptor.encrypt(:value => user.salt, :key => 'some private key') }, :marshal => true
24
24
 
25
25
  def after_initialize
26
26
  self.salt ||= Digest::SHA256.hexdigest((Time.now.to_i * rand(5)).to_s)
@@ -71,4 +71,8 @@ class ActiveRecordTest < Test::Unit::TestCase
71
71
  assert_equal @person, Person.scoped_by_email_and_password('test@example.com', 'test').find(:first) rescue NoMethodError
72
72
  end
73
73
 
74
+ def test_should_encode_by_default
75
+ assert Person.attr_encrypted_options[:encode]
76
+ end
77
+
74
78
  end
@@ -11,7 +11,7 @@ class Client
11
11
  property :salt, String
12
12
 
13
13
  attr_encrypted :email, :key => 'a secret key'
14
- attr_encrypted :credentials, :key => Proc.new { |client| Huberry::Encryptor.encrypt(:value => client.salt, :key => 'some private key') }
14
+ attr_encrypted :credentials, :key => Proc.new { |client| Huberry::Encryptor.encrypt(:value => client.salt, :key => 'some private key') }, :marshal => true
15
15
 
16
16
  def initialize(attrs = {})
17
17
  super attrs
@@ -45,4 +45,8 @@ class DataMapperTest < Test::Unit::TestCase
45
45
  assert Client.first.credentials.is_a?(Hash)
46
46
  end
47
47
 
48
+ def test_should_encode_by_default
49
+ assert Client.attr_encrypted_options[:encode]
50
+ end
51
+
48
52
  end
data/test/sequel_test.rb CHANGED
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  class Human < Sequel::Model(:humans)
14
14
  attr_encrypted :email, :key => 'a secret key'
15
- attr_encrypted :credentials, :key => Proc.new { |human| Huberry::Encryptor.encrypt(:value => human.salt, :key => 'some private key') }
15
+ attr_encrypted :credentials, :key => Proc.new { |human| Huberry::Encryptor.encrypt(:value => human.salt, :key => 'some private key') }, :marshal => true
16
16
 
17
17
  def after_initialize(attrs = {})
18
18
  self.salt ||= Digest::SHA1.hexdigest((Time.now.to_i * rand(5)).to_s)
@@ -43,4 +43,8 @@ class SequelTest < Test::Unit::TestCase
43
43
  assert Human.first.credentials.is_a?(Hash)
44
44
  end
45
45
 
46
+ def test_should_encode_by_default
47
+ assert Human.attr_encrypted_options[:encode]
48
+ end
49
+
46
50
  end
data/test/test_helper.rb CHANGED
@@ -2,8 +2,7 @@ require 'test/unit'
2
2
  require 'digest/sha2'
3
3
 
4
4
  require 'rubygems'
5
- gem 'shuber-eigenclass', '>= 1.0.1'
6
- gem 'shuber-encryptor'
5
+
7
6
  gem 'activerecord'
8
7
  gem 'datamapper'
9
8
  gem 'sequel'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shuber-attr_encrypted
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Huber
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-12 00:00:00 -08:00
12
+ date: 2009-01-13 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency