mr_freeze 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ require 'mr_freeze/version'
2
+ require 'mr_freeze/core_extensions'
@@ -0,0 +1,22 @@
1
+ class Object
2
+ alias :freeze! :freeze
3
+ end
4
+
5
+ class Array
6
+ def freeze!
7
+ super()
8
+ self.each do |object|
9
+ object.freeze!
10
+ end
11
+ end
12
+ end
13
+
14
+ class Hash
15
+ def freeze!
16
+ super()
17
+ self.each do |key, value|
18
+ key.freeze!
19
+ value.freeze!
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module MrFreeze
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,76 @@
1
+ require 'test_helper'
2
+ require 'mr_freeze'
3
+
4
+ class MrFreezeTest < ActiveSupport::TestCase
5
+ test "freeze! freezes members of arrays" do
6
+ array = ["I", "am", "an", "array", "of", "strings"]
7
+ array.each do |string|
8
+ assert_not_frozen string
9
+ end
10
+ assert_not_frozen array
11
+
12
+ array.freeze!
13
+
14
+ array.each do |string|
15
+ assert_frozen string
16
+ end
17
+ assert_frozen array
18
+ end
19
+
20
+ test "freeze! freezes arrays of arrays" do
21
+ array = [[[["an array of arrays"]]]]
22
+ assert_not_frozen array
23
+ assert_not_frozen array[0]
24
+ assert_not_frozen array[0][0]
25
+ assert_not_frozen array[0][0][0]
26
+ assert_not_frozen array[0][0][0][0]
27
+
28
+ array.freeze!
29
+
30
+ assert_frozen array
31
+ assert_frozen array[0]
32
+ assert_frozen array[0][0]
33
+ assert_frozen array[0][0][0]
34
+ assert_frozen array[0][0][0][0]
35
+ end
36
+
37
+ test "freeze! freezes hashes keys and values" do
38
+ hash = {"hello" => "world"}
39
+
40
+ assert_not_frozen(hash)
41
+ assert_frozen(hash.keys.first) # hash keys already are frozen
42
+ assert_not_frozen(hash.values.first)
43
+ assert_not_frozen(hash["hello"])
44
+
45
+ hash.freeze!
46
+
47
+ assert_frozen(hash)
48
+ assert_frozen(hash.keys.first)
49
+ assert_frozen(hash.values.first)
50
+ assert_frozen(hash["hello"])
51
+ end
52
+
53
+ test "freeze! big momma" do
54
+ big_momma = {:a => ["hash", {"of" => {"hashes" => ["and arrays"]}}, ["and", "other"], "stuff"],
55
+ "like" => {"numbers" => 123, :and => /aregexp/}}
56
+
57
+ big_momma.freeze!
58
+
59
+ assert_frozen big_momma
60
+ assert_frozen big_momma[:a][1]
61
+ assert_frozen big_momma[:a][2]
62
+ assert_frozen big_momma[:a][2][1]
63
+ assert_frozen big_momma["like"][:and]
64
+ end
65
+
66
+ protected
67
+
68
+ def assert_frozen(object)
69
+ assert object.frozen?, "expected #{object.inspect} to be frozen"
70
+ end
71
+
72
+ def assert_not_frozen(object)
73
+ assert !object.frozen?, "expected #{object.inspect} not to be frozen"
74
+ end
75
+ end
76
+
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'active_support'
4
+
5
+ $:.unshift File.expand_path(File.dirname(__FILE__)+"/../lib")
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mr_freeze
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Matthew Rudy Jacobs
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-19 00:00:00 +08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: active_support
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ description:
36
+ email: MatthewRudyJacobs@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - test/mr_freeze_test.rb
45
+ - test/test_helper.rb
46
+ - lib/mr_freeze/core_extensions.rb
47
+ - lib/mr_freeze/version.rb
48
+ - lib/mr_freeze.rb
49
+ has_rdoc: true
50
+ homepage: https://github.com/matthewrudy/mr_freeze
51
+ licenses: []
52
+
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ hash: 3
64
+ segments:
65
+ - 0
66
+ version: "0"
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ requirements: []
77
+
78
+ rubyforge_project:
79
+ rubygems_version: 1.5.0
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: freeze objects nestedly
83
+ test_files: []
84
+