yattr_encrypted 0.1.4 → 0.1.5
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/README.mdown +18 -1
- data/lib/yattr_encrypted.rb +5 -3
- data/lib/yattr_encrypted/version.rb +1 -1
- data/test/yattr_encrypted_test.rb +1 -1
- metadata +4 -4
data/README.mdown
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# YattrEncrypted #
|
2
2
|
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.5 (but you should check lib/yattr_encrypted/version.rb to be sure)
|
4
4
|
|
5
5
|
## Applicability ##
|
6
6
|
|
@@ -139,9 +139,26 @@ Special processing for attribute values can be implemented by using the `:read_f
|
|
139
139
|
A `:read_filter` is a proc (or lambda) which accepts a single argument. It is called on the
|
140
140
|
value of the *attribute* immediately before being returned by the clear text attribute accessor.
|
141
141
|
|
142
|
+
**NOTE:** The read filter is called every time the *attribute* is read via the attribute
|
143
|
+
reader. It should be idempotent in the sense that read_filter(attribute) == read_filter(read_filter(attribute)).
|
144
|
+
|
145
|
+
**NOTE:** The read filter result is reflected in the instance variable which supports the
|
146
|
+
plain text version of the *attribute*, so it can be used to set the *attribute* to a default
|
147
|
+
value - such as an empty Hash.
|
148
|
+
|
149
|
+
yattr_encrypted :bag, :read_filter => lambda { |val| val.is_a?(Hash) ? val : {} }
|
150
|
+
|
142
151
|
A `:write_filter` is a proc (or lambda) which accepts a single argument. It is called
|
143
152
|
on the value passed to the *attribute* writer prior to any other action in the writer.
|
144
153
|
|
154
|
+
**NOTE:** the write filter is called on every value which is assigned to the *attribute*.
|
155
|
+
|
156
|
+
You can use a `:write_filter` to do some standard preprocessing on values. For example,
|
157
|
+
if you want to normalize some string of text to lower case, with uniform whitespace, you might
|
158
|
+
do something like:
|
159
|
+
|
160
|
+
yattr_encrypted :str_value, :write_filter => lambda { |val| val.to_s.sub(/\s+/, ' ').downcase.strip }
|
161
|
+
|
145
162
|
### Encription Initial Values ###
|
146
163
|
|
147
164
|
As stated everywhere - random initial values are automatically generated for all fields.
|
data/lib/yattr_encrypted.rb
CHANGED
@@ -76,7 +76,6 @@ module YattrEncrypted
|
|
76
76
|
|
77
77
|
# iterate through attributes and create accessors, verify encryped accessors exist
|
78
78
|
attributes.map { |x| x.to_sym }.each do |attribute|
|
79
|
-
puts "yate_encrypted: #{attribute}"
|
80
79
|
encrypted_attribute_name = [options[:prefix], attribute, options[:suffix]].join.to_sym
|
81
80
|
|
82
81
|
# barf if reader and write doesn't exist for encrypted attribute
|
@@ -88,14 +87,17 @@ puts "yate_encrypted: #{attribute}"
|
|
88
87
|
tmp =<<-XXX
|
89
88
|
def #{attribute}
|
90
89
|
options = yate_encrypted_attributes[:#{attribute}]
|
91
|
-
|
90
|
+
if @#{attribute}.nil? || @#{attribute}.empty?
|
92
91
|
@#{attribute} = #{encrypted_attribute_name} ? \
|
93
92
|
yate_decrypt(#{encrypted_attribute_name}, options[:key]) : \
|
94
93
|
''
|
94
|
+
@#{attribute} = options[:read_filter].call(@#{attribute}) if options[:read_filter]
|
95
95
|
self.yate_checksums[:#{attribute}] = yate_attribute_hash_value(:#{attribute})
|
96
96
|
self.yate_dirty[:#{attribute}] = true
|
97
|
+
elsif options[:read_filter]
|
98
|
+
@#{attribute} = options[:read_filter].call(@#{attribute})
|
97
99
|
end
|
98
|
-
|
100
|
+
@#{attribute}
|
99
101
|
end
|
100
102
|
XXX
|
101
103
|
class_eval(tmp)
|
@@ -40,7 +40,7 @@ class SomeClass < ActiveRecord::Base
|
|
40
40
|
yattr_encrypted :special_reader, :key => 'a honkin big key: honk honk honk honk honk',
|
41
41
|
:read_filter => lambda { |val| val.strip }
|
42
42
|
yattr_encrypted :special_writer, :key => 'a honkin big key: honk honk honk honk honk',
|
43
|
-
:write_filter => lambda { |val|
|
43
|
+
:write_filter => lambda { |val| val.upcase }
|
44
44
|
end
|
45
45
|
|
46
46
|
class TestYattrEncrypted < MiniTest::Unit::TestCase
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yattr_encrypted
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-19 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry
|
16
|
-
requirement: &
|
16
|
+
requirement: &2151769620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2151769620
|
25
25
|
description: Generates yattr_accessors that encrypt and decrypt attributes transparently.
|
26
26
|
Based on attr_encrypted by Sean Huber [https://github.com/shuber]
|
27
27
|
email: mike@clove.com
|
@@ -56,7 +56,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
56
|
version: '0'
|
57
57
|
segments:
|
58
58
|
- 0
|
59
|
-
hash:
|
59
|
+
hash: 677455391031981630
|
60
60
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|