deep_clonable 1.1.0 → 1.2.0
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/.gitignore +3 -0
- data/.rbenv-gemsets +1 -0
- data/.rbenv-version +1 -0
- data/Gemfile +3 -0
- data/Rakefile +2 -36
- data/VERSION +1 -1
- data/deep_clonable.gemspec +17 -40
- data/lib/deep_clonable.rb +7 -7
- data/test/deep_clonable_test.rb +4 -4
- data/test/test_helper.rb +1 -2
- metadata +64 -16
data/.gitignore
ADDED
data/.rbenv-gemsets
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
deep_clonable
|
data/.rbenv-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ree-1.8.7-2012.02
|
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,44 +1,10 @@
|
|
1
|
-
require 'rake'
|
2
1
|
require 'rake/testtask'
|
3
|
-
require '
|
4
|
-
|
5
|
-
begin
|
6
|
-
require 'jeweler'
|
7
|
-
Jeweler::Tasks.new do |s|
|
8
|
-
s.name = "deep_clonable"
|
9
|
-
s.summary = %Q{Add support for deep cloning to objects}
|
10
|
-
s.email = "code@justinbalthrop.com"
|
11
|
-
s.homepage = "http://github.com/ninjudd/deep_clonable"
|
12
|
-
s.description = " Add support for deep cloning to objects"
|
13
|
-
s.authors = ["Justin Balthrop"]
|
14
|
-
end
|
15
|
-
Jeweler::GemcutterTasks.new
|
16
|
-
rescue LoadError
|
17
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
18
|
-
end
|
2
|
+
require 'bundler/gem_tasks'
|
19
3
|
|
20
4
|
Rake::TestTask.new do |t|
|
21
|
-
t.libs
|
5
|
+
t.libs = ['lib']
|
22
6
|
t.pattern = 'test/**/*_test.rb'
|
23
7
|
t.verbose = false
|
24
8
|
end
|
25
9
|
|
26
|
-
Rake::RDocTask.new do |rdoc|
|
27
|
-
rdoc.rdoc_dir = 'rdoc'
|
28
|
-
rdoc.title = 'deep_clonable'
|
29
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
30
|
-
rdoc.rdoc_files.include('README*')
|
31
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
32
|
-
end
|
33
|
-
|
34
|
-
begin
|
35
|
-
require 'rcov/rcovtask'
|
36
|
-
Rcov::RcovTask.new do |t|
|
37
|
-
t.libs << 'test'
|
38
|
-
t.test_files = FileList['test/**/*_test.rb']
|
39
|
-
t.verbose = true
|
40
|
-
end
|
41
|
-
rescue LoadError
|
42
|
-
end
|
43
|
-
|
44
10
|
task :default => :test
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/deep_clonable.gemspec
CHANGED
@@ -1,44 +1,21 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "deep_clonable"
|
6
|
+
gem.version = IO.read('VERSION')
|
7
|
+
gem.authors = ["Justin Balthrop"]
|
8
|
+
gem.email = ["git@justinbalthrop.com"]
|
9
|
+
gem.description = %q{Add support for deep cloning to objects}
|
10
|
+
gem.summary = gem.description
|
11
|
+
gem.homepage = "https://github.com/ninjudd/deep_clonable"
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
s.description = %q{ Add support for deep cloning to objects}
|
14
|
-
s.email = %q{code@justinbalthrop.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
"LICENSE",
|
21
|
-
"README.rdoc",
|
22
|
-
"Rakefile",
|
23
|
-
"VERSION",
|
24
|
-
"deep_clonable.gemspec",
|
25
|
-
"lib/deep_clonable.rb",
|
26
|
-
"test/deep_clonable_test.rb",
|
27
|
-
"test/test_helper.rb"
|
28
|
-
]
|
29
|
-
s.homepage = %q{http://github.com/ninjudd/deep_clonable}
|
30
|
-
s.require_paths = ["lib"]
|
31
|
-
s.rubygems_version = %q{1.3.7}
|
32
|
-
s.summary = %q{Add support for deep cloning to objects}
|
13
|
+
gem.add_development_dependency 'shoulda', '3.0.1'
|
14
|
+
gem.add_development_dependency 'mocha'
|
15
|
+
gem.add_development_dependency 'rake'
|
33
16
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
39
|
-
else
|
40
|
-
end
|
41
|
-
else
|
42
|
-
end
|
17
|
+
gem.files = `git ls-files`.split($/)
|
18
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
19
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
|
+
gem.require_paths = ["lib"]
|
43
21
|
end
|
44
|
-
|
data/lib/deep_clonable.rb
CHANGED
@@ -8,22 +8,22 @@ end
|
|
8
8
|
module DeepClonable
|
9
9
|
module InstanceMethods
|
10
10
|
def clone
|
11
|
-
|
12
|
-
cloned_object
|
13
|
-
|
14
|
-
was_frozen ? cloned_object.freeze : cloned_object
|
11
|
+
cloned_object = dup
|
12
|
+
yield(cloned_object) if block_given?
|
13
|
+
frozen? ? cloned_object.freeze : cloned_object
|
15
14
|
end
|
16
15
|
|
17
|
-
def dup
|
16
|
+
def dup
|
18
17
|
cloned_object = super()
|
19
|
-
cloned_object.update_vars(deep_vars,
|
18
|
+
cloned_object.update_vars(deep_vars, :dup)
|
20
19
|
cloned_object
|
21
20
|
end
|
22
21
|
|
23
22
|
alias old_freeze freeze
|
24
23
|
|
25
24
|
def freeze
|
26
|
-
|
25
|
+
update_vars(deep_vars, :freeze)
|
26
|
+
old_freeze
|
27
27
|
end
|
28
28
|
|
29
29
|
# You can override deep_vars in your class to specify which instance_variables should be deep cloned.
|
data/test/deep_clonable_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
2
|
|
3
3
|
class TestClass
|
4
4
|
deep_clonable
|
@@ -27,7 +27,7 @@ class TestClass
|
|
27
27
|
end
|
28
28
|
|
29
29
|
class DeepClonableTest < Test::Unit::TestCase
|
30
|
-
should
|
30
|
+
should 'clone method' do
|
31
31
|
a = TestClass.new(10, {:a => 1}, [1,2,3])
|
32
32
|
b = a.invert
|
33
33
|
|
@@ -58,7 +58,7 @@ class DeepClonableTest < Test::Unit::TestCase
|
|
58
58
|
assert_equal([1,2,3], c.array)
|
59
59
|
end
|
60
60
|
|
61
|
-
should
|
61
|
+
should 'return a frozen object when cloning a frozen object' do
|
62
62
|
a = TestClass.new(10, {:a => 1}, [1,2,3]).freeze
|
63
63
|
|
64
64
|
assert_raises(TypeError) do
|
@@ -80,7 +80,7 @@ class DeepClonableTest < Test::Unit::TestCase
|
|
80
80
|
assert a.clone.frozen?
|
81
81
|
end
|
82
82
|
|
83
|
-
should
|
83
|
+
should 'unfreeze an object when duping' do
|
84
84
|
a = TestClass.new(10, {:a => 1}, [1,2,3]).freeze
|
85
85
|
b = a.dup
|
86
86
|
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deep_clonable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 31
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Justin Balthrop
|
@@ -15,20 +15,67 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-06-03 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
|
-
dependencies:
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: shoulda
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - "="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 5
|
30
|
+
segments:
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
- 1
|
34
|
+
version: 3.0.1
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: mocha
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
version: "0"
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rake
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
type: :development
|
64
|
+
version_requirements: *id003
|
65
|
+
description: Add support for deep cloning to objects
|
66
|
+
email:
|
67
|
+
- git@justinbalthrop.com
|
24
68
|
executables: []
|
25
69
|
|
26
70
|
extensions: []
|
27
71
|
|
28
|
-
extra_rdoc_files:
|
29
|
-
|
30
|
-
- README.rdoc
|
72
|
+
extra_rdoc_files: []
|
73
|
+
|
31
74
|
files:
|
75
|
+
- .gitignore
|
76
|
+
- .rbenv-gemsets
|
77
|
+
- .rbenv-version
|
78
|
+
- Gemfile
|
32
79
|
- LICENSE
|
33
80
|
- README.rdoc
|
34
81
|
- Rakefile
|
@@ -38,7 +85,7 @@ files:
|
|
38
85
|
- test/deep_clonable_test.rb
|
39
86
|
- test/test_helper.rb
|
40
87
|
has_rdoc: true
|
41
|
-
homepage:
|
88
|
+
homepage: https://github.com/ninjudd/deep_clonable
|
42
89
|
licenses: []
|
43
90
|
|
44
91
|
post_install_message:
|
@@ -67,9 +114,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
114
|
requirements: []
|
68
115
|
|
69
116
|
rubyforge_project:
|
70
|
-
rubygems_version: 1.
|
117
|
+
rubygems_version: 1.5.2
|
71
118
|
signing_key:
|
72
119
|
specification_version: 3
|
73
120
|
summary: Add support for deep cloning to objects
|
74
|
-
test_files:
|
75
|
-
|
121
|
+
test_files:
|
122
|
+
- test/deep_clonable_test.rb
|
123
|
+
- test/test_helper.rb
|