thirtythirty 0.0.4 → 0.0.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/lib/thirtythirty.rb CHANGED
@@ -25,16 +25,22 @@ module Thirtythirty
25
25
  attr_accessor *marshal(attributes)
26
26
  end
27
27
 
28
+ def marshal_with_compression(level = Zlib::BEST_COMPRESSION)
29
+ marshal
30
+ @marshalling_compression_level = level
31
+ end
32
+
28
33
  private
29
34
 
30
35
  module ClassMethods
31
36
 
32
- attr_reader :marshalled_attributes
37
+ attr_reader :marshalled_attributes, :marshalling_compression_level
33
38
 
34
39
  protected
35
40
 
36
41
  def _load(dumped)
37
- data = Marshal.load(dumped)
42
+ uncompressed = Zlib::Inflate.inflate(dumped) rescue dumped
43
+ data = Marshal.load(uncompressed)
38
44
  obj = new
39
45
  marshalled_attributes.each do |attr|
40
46
  obj.send(:"#{attr}=", Marshal.load(data[attr]))
@@ -47,7 +53,9 @@ private
47
53
  module InstanceMethods
48
54
 
49
55
  def _dump(*args)
50
- Marshal.dump(build_marshalled_attributes_hash {|v| Marshal.dump(v)})
56
+ dumped = Marshal.dump(build_marshalled_attributes_hash {|v| Marshal.dump(v)})
57
+ dumped = Zlib::Deflate.deflate(dumped, self.class.marshalling_compression_level) if self.class.marshalling_compression_level
58
+ dumped
51
59
  end
52
60
 
53
61
  def marshalled_attributes
data/spec/spec_helper.rb CHANGED
@@ -2,4 +2,5 @@ require 'rubygems'
2
2
  require 'bundler'
3
3
  Bundler.require(:default, :development)
4
4
 
5
+ require File.expand_path '../support/thirtythirty_base.rb', __FILE__
5
6
  Dir[File.expand_path '../support/*.rb', __FILE__].each {|f| require f}
@@ -0,0 +1,4 @@
1
+ class Compressed < ThirtythirtyBase
2
+ marshal_with_compression
3
+ marshalled_accessor :persistent
4
+ end
@@ -0,0 +1,3 @@
1
+ class Uncompressed < ThirtythirtyBase
2
+ marshalled_accessor :persistent
3
+ end
@@ -131,6 +131,27 @@ describe Thirtythirty do
131
131
 
132
132
  end
133
133
 
134
+ describe ".marshal_with_compression/#marshalling_compression_level" do
135
+
136
+ subject { Class.new(ThirtythirtyBase) }
137
+
138
+ it "should default to nil" do
139
+ subject.marshal # needs to be done to activate custom marshalling at all
140
+ subject.marshalling_compression_level.should be_nil
141
+ end
142
+
143
+ it "should be settable" do
144
+ subject.marshal_with_compression Zlib::BEST_SPEED
145
+ subject.marshalling_compression_level.should == Zlib::BEST_SPEED
146
+ end
147
+
148
+ it "should default to Zlib::BEST_COMPRESSION" do
149
+ subject.marshal_with_compression
150
+ subject.marshalling_compression_level.should == Zlib::BEST_COMPRESSION
151
+ end
152
+
153
+ end
154
+
134
155
  describe "marshalling (#_dump/._load)" do
135
156
 
136
157
  before do
@@ -208,6 +229,24 @@ describe Thirtythirty do
208
229
 
209
230
  end
210
231
 
232
+ context "with compression" do
233
+
234
+ it "compressed version should be smaller than the uncompressed version and generally work" do
235
+ obj = Uncompressed.new
236
+ obj.persistent = "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo text"
237
+ uncompressed = Marshal.dump(obj)
238
+ obj = Compressed.new
239
+ obj.persistent = "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo text"
240
+ compressed = Marshal.dump(obj)
241
+ compressed.size.should < uncompressed.size
242
+
243
+ restored = Marshal.load(compressed)
244
+ restored.should be_a(Compressed)
245
+ restored.persistent.should == "loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo text"
246
+ end
247
+
248
+ end
249
+
211
250
  end
212
251
 
213
252
  end
data/thirtythirty.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "thirtythirty"
4
- s.version = "0.0.4"
4
+ s.version = "0.0.5"
5
5
  s.date = Time.now
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["Benjamin Behr", "Thomas Jachmann"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thirtythirty
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Benjamin Behr
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-02-16 00:00:00 +01:00
19
+ date: 2011-02-23 00:00:00 +01:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -69,8 +69,10 @@ files:
69
69
  - Rakefile
70
70
  - lib/thirtythirty.rb
71
71
  - spec/spec_helper.rb
72
+ - spec/support/compressed.rb
72
73
  - spec/support/thirtythirty_base.rb
73
74
  - spec/support/tree.rb
75
+ - spec/support/uncompressed.rb
74
76
  - spec/thirtythirty_spec.rb
75
77
  - thirtythirty.gemspec
76
78
  has_rdoc: true
@@ -103,12 +105,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
105
  requirements: []
104
106
 
105
107
  rubyforge_project: thirtythirty
106
- rubygems_version: 1.4.2
108
+ rubygems_version: 1.5.2
107
109
  signing_key:
108
110
  specification_version: 3
109
111
  summary: Marshalling customization
110
112
  test_files:
111
113
  - spec/spec_helper.rb
114
+ - spec/support/compressed.rb
112
115
  - spec/support/thirtythirty_base.rb
113
116
  - spec/support/tree.rb
117
+ - spec/support/uncompressed.rb
114
118
  - spec/thirtythirty_spec.rb