serialize-rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ Copyright 2011 Jan Berdajs
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.
@@ -0,0 +1,24 @@
1
+ = Serialize for Rails
2
+
3
+ Rails already supports serialization of attributes, but it can only do Yaml.
4
+ This gem upgrades the default Rails serialize method so you can serialize into
5
+ yaml, json, xml and with marshal (Ruby binary format). It also supports gzipping
6
+ the output if you want it to take up less space.
7
+
8
+ Format can be one of the following:
9
+
10
+ :yaml, :json, :xml, :marshal
11
+
12
+ Yaml is the default, and serialize will behave just like normal if you don't use
13
+ any of the new options.
14
+
15
+ Example usage:
16
+
17
+ class Mouse < ActiveRecord::Base
18
+ serialize :info, Hash, :format => :json
19
+ serialize :data, :format => :xml, :gzip => true
20
+ end
21
+
22
+ When you use gzip you __must__ use a binary-compatible column type such
23
+ as `BLOB` (MySQL) or `bytea` (PostgreSQL). If you don't use gzip, `text` is
24
+ recommended to allow strings of arbitrary length.
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'SerializeRails'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ require 'serialize-rails/serialization'
2
+ require 'serialize-rails/coders/json_column'
3
+ require 'serialize-rails/coders/xml_column'
4
+ require 'serialize-rails/coders/marshal_column'
5
+ require 'serialize-rails/coders/gzip_column'
@@ -0,0 +1,42 @@
1
+ require 'zlib'
2
+
3
+ module ActiveRecord
4
+ module Coders # :nodoc:
5
+ class GzipColumn # :nodoc:
6
+ RESCUE_ERRORS = [ ArgumentError ]
7
+
8
+ attr_accessor :wrapped_coder
9
+
10
+ def initialize(wrap_coder)
11
+ @wrapped_coder = wrap_coder
12
+ end
13
+
14
+ def object_class
15
+ wrapped_coder.object_class
16
+ end
17
+
18
+ def object_class=(value)
19
+ wrapped_coder.object_class = value
20
+ end
21
+
22
+ def dump(obj)
23
+ obj = wrapped_coder.dump(obj)
24
+ return if obj.nil?
25
+ return obj unless obj.is_a?(String)
26
+
27
+ Zlib::Deflate.deflate obj
28
+ end
29
+
30
+ def load(data)
31
+ return object_class.new if object_class != Object && data.nil?
32
+ return data unless data.is_a?(String)
33
+ begin
34
+ ungzipped_data = Zlib::Inflate.inflate(data)
35
+ wrapped_coder.load(ungzipped_data)
36
+ rescue *RESCUE_ERRORS
37
+ data
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ require 'json'
2
+
3
+ module ActiveRecord
4
+ module Coders # :nodoc:
5
+ class JSONColumn # :nodoc:
6
+ RESCUE_ERRORS = [ ArgumentError, JSON::JSONError ]
7
+
8
+ attr_accessor :object_class
9
+
10
+ def initialize(object_class = Object)
11
+ @object_class = object_class
12
+ end
13
+
14
+ def dump(obj)
15
+ return if obj.nil?
16
+
17
+ unless obj.is_a?(object_class)
18
+ raise SerializationTypeMismatch,
19
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}. -- #{obj.inspect}"
20
+ end
21
+ JSON.dump obj
22
+ end
23
+
24
+ def load(json)
25
+ return object_class.new if object_class != Object && json.nil?
26
+ return json unless json.is_a?(String)
27
+ begin
28
+ obj = JSON.load(json)
29
+
30
+ unless obj.is_a?(object_class) || obj.nil?
31
+ raise SerializationTypeMismatch,
32
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}"
33
+ end
34
+ obj ||= object_class.new if object_class != Object
35
+
36
+ obj
37
+ rescue *RESCUE_ERRORS
38
+ json
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ module ActiveRecord
2
+ module Coders # :nodoc:
3
+ class MarshalColumn # :nodoc:
4
+ RESCUE_ERRORS = [ ArgumentError, TypeError ]
5
+
6
+ attr_accessor :object_class
7
+
8
+ def initialize(object_class = Object)
9
+ @object_class = object_class
10
+ end
11
+
12
+ def dump(obj)
13
+ return if obj.nil?
14
+
15
+ unless obj.is_a?(object_class)
16
+ raise SerializationTypeMismatch,
17
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}. -- #{obj.inspect}"
18
+ end
19
+ Marshal.dump obj
20
+ end
21
+
22
+ def load(data)
23
+ return object_class.new if object_class != Object && data.nil?
24
+ return data unless data.is_a?(String)
25
+ begin
26
+ obj = Marshal.load(data)
27
+
28
+ unless obj.is_a?(object_class) || obj.nil?
29
+ raise SerializationTypeMismatch,
30
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}"
31
+ end
32
+ obj ||= object_class.new if object_class != Object
33
+
34
+ obj
35
+ rescue *RESCUE_ERRORS
36
+ data
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,47 @@
1
+ require 'ox'
2
+
3
+ module ActiveRecord
4
+ module Coders # :nodoc:
5
+ class XMLColumn # :nodoc:
6
+ RESCUE_ERRORS = [ ArgumentError, SyntaxError ]
7
+
8
+ attr_accessor :object_class, :options
9
+
10
+ def initialize(object_class = Object, options = nil)
11
+ @object_class = object_class
12
+ @options = options || Hash.new
13
+ default_options = { :load => Hash.new, :dump => Hash.new }
14
+ @options = default_options.merge(@options)
15
+ end
16
+
17
+ def dump(obj)
18
+ return if obj.nil?
19
+
20
+ unless obj.is_a?(object_class)
21
+ raise SerializationTypeMismatch,
22
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}. -- #{obj.inspect}"
23
+ end
24
+ Ox.dump(obj, options[:dump])
25
+ end
26
+
27
+ def load(xml)
28
+ return object_class.new if object_class != Object && xml.nil?
29
+ return xml unless xml.is_a?(String)
30
+ begin
31
+ default_load_opts = { :mode => :object }
32
+ obj = Ox.load(xml, default_load_opts.merge(options[:load]))
33
+
34
+ unless obj.is_a?(object_class) || obj.nil?
35
+ raise SerializationTypeMismatch,
36
+ "Attribute was supposed to be a #{object_class}, but was a #{obj.class}"
37
+ end
38
+ obj ||= object_class.new if object_class != Object
39
+
40
+ obj
41
+ rescue *RESCUE_ERRORS
42
+ xml
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,69 @@
1
+ # Must trigger autoloading of the class
2
+ if ActiveRecord::AttributeMethods::Serialization.nil?
3
+ raise "ActiveRecord not loaded"
4
+ end
5
+
6
+ module ActiveRecord
7
+ module AttributeMethods
8
+ module Serialization
9
+ module ClassMethods
10
+ # If you have an attribute that needs to be saved to the database as an
11
+ # object, and retrieved as the same object, then specify the name of that
12
+ # attribute using this method and it will be handled automatically. The
13
+ # serialization is done through YAML. If +class_name+ is specified, the
14
+ # serialized object must be of that class on retrieval or
15
+ # <tt>SerializationTypeMismatch</tt> will be raised.
16
+ #
17
+ # ==== Parameters
18
+ #
19
+ # * +attr_name+ - The field name that should be serialized.
20
+ # * +class_name+ - Optional, class name that the object type should be equal to.
21
+ #
22
+ # ==== Example
23
+ #
24
+ # # Serialize a preferences attribute.
25
+ # class User < ActiveRecord::Base
26
+ # serialize :preferences
27
+ # end
28
+ def serialize(attr_name, *args)
29
+ include Behavior if defined? Behavior # Rails 4
30
+
31
+ options = args.shift
32
+ if options.is_a? Hash
33
+ class_name = Object
34
+ else
35
+ class_name = options || Object
36
+ options = args.shift || Hash.new
37
+ end
38
+
39
+ default_options = {
40
+ :format => :yaml,
41
+ :gzip => false
42
+ }
43
+ options = default_options.merge(options)
44
+
45
+ coder = if [:load, :dump].all? { |x| class_name.respond_to?(x) }
46
+ class_name
47
+ else
48
+ case options[:format]
49
+ when :json
50
+ Coders::JSONColumn.new(class_name)
51
+ when :marshal
52
+ Coders::MarshalColumn.new(class_name)
53
+ when :xml
54
+ Coders::XMLColumn.new(class_name, options[:ox_options])
55
+ else
56
+ Coders::YAMLColumn.new(class_name)
57
+ end
58
+ end
59
+
60
+ coder = Coders::GzipColumn.new(coder) if options[:gzip]
61
+
62
+ # merge new serialized attribute and create new hash to ensure that each class in inheritance hierarchy
63
+ # has its own hash of own serialized attributes
64
+ self.serialized_attributes = serialized_attributes.merge(attr_name.to_s => coder)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module SerializeRails
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,12 @@
1
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
2
+ ActiveRecord::Migration.verbose = false
3
+ load "schema.rb"
4
+
5
+ def get_raw_info
6
+ raw_data = ActiveRecord::Base.connection.select_all("SELECT info FROM mice")
7
+ raw_data.first["info"]
8
+ end
9
+
10
+ def clean_db
11
+ ActiveRecord::Base.connection.select_all("DELETE FROM mice")
12
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+ require 'serialize-rails/coders/gzip_column'
3
+ require 'serialize-rails/coders/json_column'
4
+
5
+ module ActiveRecord
6
+ module Coders
7
+ class JSONColumnTest < ActiveSupport::TestCase
8
+ def test_initialize_takes_class
9
+ coder = GzipColumn.new(JSONColumn.new(Object))
10
+ assert_equal Object, coder.object_class
11
+ end
12
+
13
+ def test_gzip_works
14
+ json_coder = JSONColumn.new(Object)
15
+ coder = GzipColumn.new(json_coder)
16
+
17
+ test_array = ["hello"] * 5
18
+ json_output = json_coder.dump(test_array)
19
+ gzipped_output = coder.dump(test_array)
20
+ assert_operator json_output.length, :>, gzipped_output.length
21
+ end
22
+
23
+ def test_dump_and_load
24
+ coder = GzipColumn.new(JSONColumn.new(Object))
25
+ assert_equal([1, "x"], coder.load(coder.dump([1, "x"])))
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+ require 'serialize-rails/coders/json_column'
3
+
4
+ module ActiveRecord
5
+ module Coders
6
+ class JSONColumnTest < ActiveSupport::TestCase
7
+ def test_initialize_takes_class
8
+ coder = JSONColumn.new(Object)
9
+ assert_equal Object, coder.object_class
10
+ end
11
+
12
+ def test_type_mismatch_on_different_classes_on_dump
13
+ coder = JSONColumn.new(Array)
14
+ assert_raises(SerializationTypeMismatch) do
15
+ coder.dump("a")
16
+ end
17
+ end
18
+
19
+ def test_type_mismatch_on_different_classes
20
+ coder = JSONColumn.new(Array)
21
+ assert_raises(SerializationTypeMismatch) do
22
+ coder.load "{}"
23
+ end
24
+ end
25
+
26
+ def test_nil_is_ok
27
+ coder = JSONColumn.new
28
+ assert_nil coder.load "null"
29
+ end
30
+
31
+ def test_returns_new_with_different_class
32
+ coder = JSONColumn.new SerializationTypeMismatch
33
+ assert_equal SerializationTypeMismatch, coder.load("null").class
34
+ end
35
+
36
+ def test_load_handles_other_classes
37
+ coder = JSONColumn.new
38
+ assert_equal [], coder.load([])
39
+ end
40
+
41
+ def test_load_swallows_json_exceptions
42
+ coder = JSONColumn.new
43
+ bad_json = 'x'
44
+ assert_equal bad_json, coder.load(bad_json)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+ require 'serialize-rails/coders/marshal_column'
3
+
4
+ module ActiveRecord
5
+ module Coders
6
+ class MarshalColumnTest < ActiveSupport::TestCase
7
+ def test_initialize_takes_class
8
+ coder = MarshalColumn.new(Object)
9
+ assert_equal Object, coder.object_class
10
+ end
11
+
12
+ def test_type_mismatch_on_different_classes_on_dump
13
+ coder = MarshalColumn.new(Array)
14
+ assert_raises(SerializationTypeMismatch) do
15
+ coder.dump("a")
16
+ end
17
+ end
18
+
19
+ def test_type_mismatch_on_different_classes
20
+ coder = MarshalColumn.new(Array)
21
+ assert_raises(SerializationTypeMismatch) do
22
+ coder.load Marshal.dump(Hash.new)
23
+ end
24
+ end
25
+
26
+ def test_nil_is_ok
27
+ coder = MarshalColumn.new
28
+ assert_nil coder.load Marshal.dump(nil)
29
+ end
30
+
31
+ def test_returns_new_with_different_class
32
+ coder = MarshalColumn.new SerializationTypeMismatch
33
+ assert_equal SerializationTypeMismatch, coder.load(Marshal.dump(nil)).class
34
+ end
35
+
36
+ def test_load_handles_other_classes
37
+ coder = MarshalColumn.new
38
+ assert_equal [], coder.load([])
39
+ end
40
+
41
+ def test_load_swallows_marshal_exceptions
42
+ coder = MarshalColumn.new
43
+ bad_marshal = '{}'
44
+ assert_equal bad_marshal, coder.load(bad_marshal)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :mice, :force => true do |t|
3
+ t.text :info
4
+ end
5
+ end
6
+
7
+ class MouseDefaults < ActiveRecord::Base
8
+ self.table_name = "mice"
9
+ serialize :info
10
+ end
11
+
12
+ class MouseDefaultsArray < ActiveRecord::Base
13
+ self.table_name = "mice"
14
+ serialize :info, Array
15
+ end
16
+
17
+ class MouseJsonArray < ActiveRecord::Base
18
+ self.table_name = "mice"
19
+ serialize :info, Array, :format => :json
20
+ end
21
+
22
+ class MouseJsonArrayGzip < ActiveRecord::Base
23
+ self.table_name = "mice"
24
+ serialize :info, Array, :format => :json, :gzip => true
25
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+ require 'active_record_helper'
3
+ require 'serialize-rails/coders/gzip_column'
4
+ require 'serialize-rails/coders/json_column'
5
+ require 'serialize-rails/serialization'
6
+
7
+ # mostly already tested in AR tests, and did not change much
8
+ class SerializationTest < ActiveSupport::TestCase
9
+ def teardown
10
+ clean_db
11
+ end
12
+
13
+ def test_defaults_to_yaml
14
+ MouseDefaults.create! :info => { 1 => "x" }
15
+ assert_equal("---\n1: x\n", get_raw_info)
16
+ end
17
+
18
+ def test_yaml_array
19
+ assert_raises(ActiveRecord::SerializationTypeMismatch) do
20
+ MouseDefaultsArray.create! :info => { 1 => "x" }
21
+ end
22
+ end
23
+
24
+ def test_json_array
25
+ MouseJsonArray.create! :info => Array.new
26
+ assert_equal("[]", get_raw_info.gsub(/\s+/, ""))
27
+ end
28
+
29
+ def test_json_array_gzip
30
+ test_array = ["hello"] * 5
31
+ MouseJsonArrayGzip.create! :info => test_array
32
+ json_for_array = ActiveRecord::Coders::JSONColumn.new(Array).dump(test_array)
33
+ assert_operator get_raw_info.length, :<, json_for_array.length
34
+ end
35
+ end
@@ -0,0 +1,12 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require 'test/unit'
5
+ require 'active_support/all'
6
+ require 'active_record'
7
+ require 'serialize-rails'
8
+ require 'active_record/errors'
9
+ # require 'mocha'
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+ require 'serialize-rails/coders/xml_column'
3
+
4
+ module ActiveRecord
5
+ module Coders
6
+ class XMLColumnTest < ActiveSupport::TestCase
7
+ XML_NIL = Ox.dump(nil)
8
+ XML_EMPTY_HASH = Ox.dump({})
9
+
10
+ def test_initialize_takes_class
11
+ coder = XMLColumn.new(Object)
12
+ assert_equal Object, coder.object_class
13
+ end
14
+
15
+ def test_type_mismatch_on_different_classes_on_dump
16
+ coder = XMLColumn.new(Array)
17
+ assert_raises(SerializationTypeMismatch) do
18
+ coder.dump("a")
19
+ end
20
+ end
21
+
22
+ def test_type_mismatch_on_different_classes
23
+ coder = XMLColumn.new(Array)
24
+ assert_raises(SerializationTypeMismatch) do
25
+ coder.load XML_EMPTY_HASH
26
+ end
27
+ end
28
+
29
+ def test_nil_is_ok
30
+ coder = XMLColumn.new
31
+ assert_nil coder.load XML_NIL
32
+ end
33
+
34
+ def test_returns_new_with_different_class
35
+ coder = XMLColumn.new SerializationTypeMismatch
36
+ assert_equal SerializationTypeMismatch, coder.load(XML_NIL).class
37
+ end
38
+
39
+ def test_load_handles_other_classes
40
+ coder = XMLColumn.new
41
+ assert_equal [], coder.load([])
42
+ end
43
+
44
+ def test_load_swallows_xml_exceptions
45
+ coder = XMLColumn.new
46
+ bad_xml = 'x'
47
+ assert_equal bad_xml, coder.load(bad_xml)
48
+ end
49
+ end
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: serialize-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jan Berdajs
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: ox
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description:
79
+ email:
80
+ - mrbrdo@gmail.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - lib/serialize-rails/coders/gzip_column.rb
86
+ - lib/serialize-rails/coders/json_column.rb
87
+ - lib/serialize-rails/coders/marshal_column.rb
88
+ - lib/serialize-rails/coders/xml_column.rb
89
+ - lib/serialize-rails/serialization.rb
90
+ - lib/serialize-rails/version.rb
91
+ - lib/serialize-rails.rb
92
+ - MIT-LICENSE
93
+ - Rakefile
94
+ - README.rdoc
95
+ - test/active_record_helper.rb
96
+ - test/gzip_column_test.rb
97
+ - test/json_column_test.rb
98
+ - test/marshal_column_test.rb
99
+ - test/schema.rb
100
+ - test/serialization_test.rb
101
+ - test/test_helper.rb
102
+ - test/xml_column_test.rb
103
+ homepage: https://github.com/mrbrdo/serialize-rails
104
+ licenses: []
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 1.8.24
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: Rails attribute serialization into yaml, json, xml and with ruby marshal.
127
+ test_files:
128
+ - test/active_record_helper.rb
129
+ - test/gzip_column_test.rb
130
+ - test/json_column_test.rb
131
+ - test/marshal_column_test.rb
132
+ - test/schema.rb
133
+ - test/serialization_test.rb
134
+ - test/test_helper.rb
135
+ - test/xml_column_test.rb
136
+ has_rdoc: