pat-maddox-encode_field 1.0.1
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/VERSION.yml +4 -0
- data/lib/encode_field.rb +24 -0
- data/spec/db/schema.rb +8 -0
- data/spec/encode_field_spec.rb +42 -0
- data/spec/spec_helper.rb +11 -0
- metadata +58 -0
data/VERSION.yml
ADDED
data/lib/encode_field.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module EncodeField
|
2
|
+
def encode_field(field_name)
|
3
|
+
column = columns.detect {|c| c.name == "encoded_#{field_name}" }
|
4
|
+
if column.nil?
|
5
|
+
raise "The field 'encoded_#{field_name}' does not exist"
|
6
|
+
elsif ![:string, :text].include?(column.type)
|
7
|
+
raise "'encoded_#{field_name}' must be of type :string or :text but is :#{column.type}"
|
8
|
+
end
|
9
|
+
|
10
|
+
define_method("#{field_name}=") do |val|
|
11
|
+
send("encoded_#{field_name}=", YAML.dump(val))
|
12
|
+
end
|
13
|
+
|
14
|
+
define_method(field_name) do
|
15
|
+
(encoded = send("encoded_#{field_name}")) ? YAML.load(encoded) : nil
|
16
|
+
end
|
17
|
+
|
18
|
+
define_method("#{field_name}?") do
|
19
|
+
send("encoded_#{field_name}?")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
ActiveRecord::Base.extend EncodeField
|
data/spec/db/schema.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "encode_field" do
|
4
|
+
class Account < ActiveRecord::Base
|
5
|
+
encode_field :preferences
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should encode and retrieve" do
|
9
|
+
prefs = {:type => 'platinum', "email" => "joe@example.com", :age => 23}
|
10
|
+
Account.create! :preferences => prefs
|
11
|
+
Account.find(:first).preferences.should == prefs
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should define query methods" do
|
15
|
+
Account.new.preferences?.should be_false
|
16
|
+
Account.new(:preferences => "foobar").preferences?.should be_true
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should handle nil preferences okay" do
|
20
|
+
Account.new.preferences.should be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should print a message if the database field doesn't exist" do
|
24
|
+
lambda {
|
25
|
+
Account.class_eval { encode_field :whereswaldo }
|
26
|
+
}.should raise_error(/The field 'encoded_whereswaldo' does not exist/)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should print a message if the database field is not a string or text" do
|
30
|
+
lambda {
|
31
|
+
Account.class_eval { encode_field :text_field }
|
32
|
+
}.should_not raise_error
|
33
|
+
|
34
|
+
lambda {
|
35
|
+
Account.class_eval { encode_field :string_field }
|
36
|
+
}.should_not raise_error
|
37
|
+
|
38
|
+
lambda {
|
39
|
+
Account.class_eval { encode_field :integer_field }
|
40
|
+
}.should raise_error(/'encoded_integer_field' must be of type :string or :text but is :int/)
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
require 'active_record'
|
4
|
+
this_dir = File.expand_path(File.dirname(__FILE__))
|
5
|
+
require this_dir + '/../lib/encode_field.rb'
|
6
|
+
|
7
|
+
FileUtils.mkdir(this_dir + '/log') unless File.directory?(this_dir + '/log')
|
8
|
+
ActiveRecord::Base.logger = Logger.new(this_dir + "/log/test.log")
|
9
|
+
|
10
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => "#{this_dir}/db/test.sqlite3")
|
11
|
+
load(this_dir + '/db/schema.rb')
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pat-maddox-encode_field
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pat Maddox
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-12-14 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: TODO
|
17
|
+
email: pat.maddox@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- VERSION.yml
|
26
|
+
- lib/encode_field.rb
|
27
|
+
- spec/db
|
28
|
+
- spec/db/schema.rb
|
29
|
+
- spec/spec_helper.rb
|
30
|
+
- spec/encode_field_spec.rb
|
31
|
+
has_rdoc: false
|
32
|
+
homepage: http://github.com/pat-maddox/encode_field
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: "0"
|
43
|
+
version:
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: "0"
|
49
|
+
version:
|
50
|
+
requirements: []
|
51
|
+
|
52
|
+
rubyforge_project:
|
53
|
+
rubygems_version: 1.2.0
|
54
|
+
signing_key:
|
55
|
+
specification_version: 2
|
56
|
+
summary: TODO
|
57
|
+
test_files: []
|
58
|
+
|