mr_freeze 0.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.
@@ -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
+