striuct 0.3.3 → 0.3.4

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.
Files changed (88) hide show
  1. data/.gitignore +35 -34
  2. data/.travis.yml +6 -6
  3. data/Gemfile +12 -12
  4. data/History.rdoc +279 -273
  5. data/LICENSE +21 -21
  6. data/Manifest.txt +91 -90
  7. data/README.ja.old.rdoc +297 -297
  8. data/README.md +128 -128
  9. data/Rakefile +11 -11
  10. data/benchmark/basics.rb +56 -56
  11. data/example/README.rb +44 -44
  12. data/example/example.old.rdoc +187 -187
  13. data/example/example1.rb +233 -233
  14. data/example/example2.rb +22 -22
  15. data/example/see_trace.rb +32 -32
  16. data/lib/striuct/classmethods/README.md +5 -5
  17. data/lib/striuct/classmethods/adjustment.rb +32 -32
  18. data/lib/striuct/classmethods/constructor.rb +63 -63
  19. data/lib/striuct/classmethods/default.rb +27 -27
  20. data/lib/striuct/classmethods/enum.rb +48 -48
  21. data/lib/striuct/classmethods/inner.rb +91 -91
  22. data/lib/striuct/classmethods/length.rb +14 -14
  23. data/lib/striuct/classmethods/macro.rb +144 -144
  24. data/lib/striuct/classmethods/named.rb +113 -113
  25. data/lib/striuct/classmethods/object.rb +54 -54
  26. data/lib/striuct/classmethods/prevent_conflicts.rb +89 -89
  27. data/lib/striuct/classmethods/requiremnets.rb +11 -11
  28. data/lib/striuct/classmethods/to_struct.rb +23 -25
  29. data/lib/striuct/classmethods/validation.rb +55 -55
  30. data/lib/striuct/classmethods.rb +1 -1
  31. data/lib/striuct/instancemethods/README.md +5 -5
  32. data/lib/striuct/instancemethods/assign.rb +30 -30
  33. data/lib/striuct/instancemethods/cast.rb +34 -34
  34. data/lib/striuct/instancemethods/compare.rb +30 -30
  35. data/lib/striuct/instancemethods/default.rb +13 -13
  36. data/lib/striuct/instancemethods/delegate_class_methods.rb +28 -28
  37. data/lib/striuct/instancemethods/enum.rb +103 -103
  38. data/lib/striuct/instancemethods/hashy.rb +121 -121
  39. data/lib/striuct/instancemethods/inner.rb +60 -60
  40. data/lib/striuct/instancemethods/keyvalidatable.rb +14 -14
  41. data/lib/striuct/instancemethods/lock.rb +61 -61
  42. data/lib/striuct/instancemethods/object.rb +52 -52
  43. data/lib/striuct/instancemethods/requirements.rb +14 -14
  44. data/lib/striuct/instancemethods/safety.rb +11 -11
  45. data/lib/striuct/instancemethods/subscript.rb +55 -55
  46. data/lib/striuct/instancemethods/validation.rb +29 -25
  47. data/lib/striuct/instancemethods/values.rb +57 -57
  48. data/lib/striuct/instancemethods.rb +1 -1
  49. data/lib/striuct/requirements.rb +5 -5
  50. data/lib/striuct/singleton_class.rb +66 -66
  51. data/lib/striuct/specificcontainer.rb +19 -19
  52. data/lib/striuct/structs.rb +7 -7
  53. data/lib/striuct/version.rb +5 -5
  54. data/lib/striuct.rb +13 -13
  55. data/striuct.gemspec +24 -24
  56. data/test/helper.rb +5 -5
  57. data/test/test_striuct-singleton_class-define.rb +19 -19
  58. data/test/test_striuct-subclass-class-cloning.rb +20 -20
  59. data/test/test_striuct-subclass-class-close.rb +36 -36
  60. data/test/test_striuct-subclass-class-constructor.rb +82 -82
  61. data/test/test_striuct-subclass-class-freeze.rb +36 -36
  62. data/test/test_striuct-subclass-class-inheritable.rb +57 -57
  63. data/test/test_striuct-subclass-class-macro.rb +13 -13
  64. data/test/test_striuct-subclass-class-safety_naming.rb +72 -72
  65. data/test/test_striuct-subclass-class-validation.rb +26 -26
  66. data/test/test_striuct-subclass-feature-alias_member.rb +53 -53
  67. data/test/test_striuct-subclass-feature-to_struct.rb +61 -25
  68. data/test/test_striuct-subclass-feature-validation_util.rb +57 -0
  69. data/test/test_striuct-subclass-instance-accessor.rb +137 -137
  70. data/test/test_striuct-subclass-instance-adjuster.rb +94 -94
  71. data/test/test_striuct-subclass-instance-assign.rb +30 -30
  72. data/test/test_striuct-subclass-instance-basic.rb +32 -32
  73. data/test/test_striuct-subclass-instance-cloning.rb +22 -22
  74. data/test/test_striuct-subclass-instance-compare.rb +51 -51
  75. data/test/test_striuct-subclass-instance-default_value.rb +128 -128
  76. data/test/test_striuct-subclass-instance-enum.rb +92 -92
  77. data/test/test_striuct-subclass-instance-freeze.rb +19 -19
  78. data/test/test_striuct-subclass-instance-hashlike.rb +153 -153
  79. data/test/test_striuct-subclass-instance-keyvalidatable.rb +24 -24
  80. data/test/test_striuct-subclass-instance-lock.rb +39 -39
  81. data/test/test_striuct-subclass-instance-to_s_family.rb +25 -25
  82. data/test/test_striuct-subclass-instance-validation_functional_condition.rb +50 -50
  83. data/test/test_striuct-subclass-instance-validation_inference.rb +50 -50
  84. data/test/test_striuct-subclass-instance-validation_specific_conditions.rb +247 -247
  85. data/test/test_striuct-subclass-instance-validation_with_getter.rb +33 -33
  86. data/test/test_striuct-subclass-instance_names.rb +18 -18
  87. data/test/test_striuct-version.rb +10 -10
  88. metadata +4 -2
@@ -1,66 +1,66 @@
1
- require_relative 'instancemethods'
2
-
3
- class Striuct
4
-
5
- class << self
6
-
7
- # @group Constructor
8
-
9
- alias_method :new_instance, :new
10
- private :new_instance
11
-
12
- # @param [Symbol, String] autonyms
13
- # @return [Class]
14
- def new(*autonyms, &block)
15
- # warning for Ruby's Struct.new user
16
- first = autonyms.first
17
- if first.instance_of?(String) and /\A[A-Z]/ =~ first
18
- warn "no define constant #{first}"
19
- end
20
-
21
- Class.new self do
22
- autonyms.each do |autonym|
23
- add_member autonym
24
- end
25
-
26
- class_eval(&block) if block_given?
27
- end
28
- end
29
-
30
- # @yieldreturn [Class] (see Striuct.new) - reject floating class
31
- # @return [void]
32
- def define(&block)
33
- raise ArgumentError, 'must with block' unless block_given?
34
-
35
- new(&block).tap do |subclass|
36
- subclass.instance_eval do
37
- raise 'not yet finished' if autonyms.empty?
38
- close
39
- end
40
- end
41
- end
42
-
43
- # @groupend
44
-
45
- private
46
-
47
- alias_method :original_inherited, :inherited
48
-
49
- def inherited(subclass)
50
- subclass.class_eval do
51
- original_inherited subclass
52
-
53
- extend ClassMethods
54
- include Enumerable
55
- include InstanceMethods
56
-
57
- @autonyms = []
58
- @conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations = \
59
- {}, {}, {}, {}, {}, {}, {}
60
- @protect_level = :prevent
61
- end
62
- end
63
-
64
- end
65
-
66
- end
1
+ require_relative 'instancemethods'
2
+
3
+ class Striuct
4
+
5
+ class << self
6
+
7
+ # @group Constructor
8
+
9
+ alias_method :new_instance, :new
10
+ private :new_instance
11
+
12
+ # @param [Symbol, String] autonyms
13
+ # @return [Class]
14
+ def new(*autonyms, &block)
15
+ # warning for Ruby's Struct.new user
16
+ first = autonyms.first
17
+ if first.instance_of?(String) and /\A[A-Z]/ =~ first
18
+ warn "no define constant first-arg(#{first}), the Struct behavior is not supported in Striuct"
19
+ end
20
+
21
+ Class.new self do
22
+ autonyms.each do |autonym|
23
+ add_member autonym
24
+ end
25
+
26
+ class_eval(&block) if block_given?
27
+ end
28
+ end
29
+
30
+ # @yieldreturn [Class] (see Striuct.new) - reject floating class
31
+ # @return [void]
32
+ def define(&block)
33
+ raise ArgumentError, 'must with block' unless block_given?
34
+
35
+ new(&block).tap do |subclass|
36
+ subclass.instance_eval do
37
+ raise 'not yet finished' if autonyms.empty?
38
+ close
39
+ end
40
+ end
41
+ end
42
+
43
+ # @groupend
44
+
45
+ private
46
+
47
+ alias_method :original_inherited, :inherited
48
+
49
+ def inherited(subclass)
50
+ subclass.class_eval do
51
+ original_inherited subclass
52
+
53
+ extend ClassMethods
54
+ include Enumerable
55
+ include InstanceMethods
56
+
57
+ @autonyms = []
58
+ @conditions, @adjusters, @defaults, @inferences, @aliases, @setter_validations, @getter_validations = \
59
+ {}, {}, {}, {}, {}, {}, {}
60
+ @protect_level = :prevent
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -1,19 +1,19 @@
1
- class Striuct
2
-
3
- class SpecificContainer
4
-
5
- attr_reader :value
6
-
7
- def initialize(value)
8
- @value = value
9
- end
10
-
11
- end
12
-
13
- class DefaultProcHolder < SpecificContainer; end
14
-
15
- if respond_to? :private_constant
16
- private_constant :SpecificContainer, :DefaultProcHolder
17
- end
18
-
19
- end
1
+ class Striuct
2
+
3
+ class SpecificContainer
4
+
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ end
12
+
13
+ class DefaultProcHolder < SpecificContainer; end
14
+
15
+ if respond_to? :private_constant
16
+ private_constant :SpecificContainer, :DefaultProcHolder
17
+ end
18
+
19
+ end
@@ -1,7 +1,7 @@
1
- class Striuct
2
-
3
- # namespace for .to_struct_class, #to_struct
4
- module Structs
5
- end
6
-
7
- end
1
+ class Striuct
2
+
3
+ # namespace for .to_struct_class, #to_struct
4
+ module Structs
5
+ end
6
+
7
+ end
@@ -1,5 +1,5 @@
1
- class Striuct
2
-
3
- VERSION = '0.3.3'.freeze
4
-
5
- end
1
+ class Striuct
2
+
3
+ VERSION = '0.3.4'.freeze
4
+
5
+ end
data/lib/striuct.rb CHANGED
@@ -1,13 +1,13 @@
1
- # striuct - Provides a Struct++ class.
2
- # Copyright (c) 2011 Kenichi Kamiya
3
-
4
- require 'validation'
5
-
6
- # @abstract
7
- class Striuct
8
-
9
- include Validation
10
-
11
- end
12
-
13
- require_relative 'striuct/requirements'
1
+ # striuct - Provides a Struct++ class.
2
+ # Copyright (c) 2011 Kenichi Kamiya
3
+
4
+ require 'validation'
5
+
6
+ # @abstract
7
+ class Striuct
8
+
9
+ include Validation
10
+
11
+ end
12
+
13
+ require_relative 'striuct/requirements'
data/striuct.gemspec CHANGED
@@ -1,24 +1,24 @@
1
- # I don't know why dose occur errors below.
2
- # require_relative 'lib/striuct/version'
3
- require File.expand_path('../lib/striuct/version', __FILE__)
4
-
5
- Gem::Specification.new do |gem|
6
- gem.authors = ['Kenichi Kamiya']
7
- gem.email = ['kachick1+ruby@gmail.com']
8
- gem.summary = %q{Struct++}
9
- gem.description = %q{validatable, inheritable, And more Struct++ features :)}
10
- gem.homepage = 'https://github.com/kachick/striuct'
11
-
12
- gem.files = `git ls-files`.split($\)
13
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
- gem.name = 'striuct'
16
- gem.require_paths = ['lib']
17
- gem.version = Striuct::VERSION.dup # dup for https://github.com/rubygems/rubygems/commit/48f1d869510dcd325d6566df7d0147a086905380#-P0
18
-
19
- gem.required_ruby_version = '>= 1.9.2'
20
- gem.add_runtime_dependency 'validation', '~> 0.0.3'
21
- gem.add_runtime_dependency 'keyvalidatable', '~> 0.0.3'
22
- gem.add_development_dependency 'yard', '>= 0.8.2.1'
23
- end
24
-
1
+ # I don't know why dose occur errors below.
2
+ # require_relative 'lib/striuct/version'
3
+ require File.expand_path('../lib/striuct/version', __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = ['Kenichi Kamiya']
7
+ gem.email = ['kachick1+ruby@gmail.com']
8
+ gem.summary = %q{Struct++}
9
+ gem.description = %q{validatable, inheritable, And more Struct++ features :)}
10
+ gem.homepage = 'https://github.com/kachick/striuct'
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
15
+ gem.name = 'striuct'
16
+ gem.require_paths = ['lib']
17
+ gem.version = Striuct::VERSION.dup # dup for https://github.com/rubygems/rubygems/commit/48f1d869510dcd325d6566df7d0147a086905380#-P0
18
+
19
+ gem.required_ruby_version = '>= 1.9.2'
20
+ gem.add_runtime_dependency 'validation', '~> 0.0.3'
21
+ gem.add_runtime_dependency 'keyvalidatable', '~> 0.0.3'
22
+ gem.add_development_dependency 'yard', '>= 0.8.2.1'
23
+ end
24
+
data/test/helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'test/unit'
2
-
3
- $VERBOSE = true
4
-
5
- require_relative '../lib/striuct'
1
+ require 'test/unit'
2
+
3
+ $VERBOSE = true
4
+
5
+ require_relative '../lib/striuct'
@@ -1,19 +1,19 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Define < Test::Unit::TestCase
4
-
5
- def test_define
6
- assert_raises RuntimeError do
7
- Striuct.define do
8
- end
9
- end
10
-
11
- klass = Striuct.define do
12
- member :foo
13
- end
14
-
15
- assert_equal true, klass.closed?
16
- end
17
-
18
- end
19
-
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Define < Test::Unit::TestCase
4
+
5
+ def test_define
6
+ assert_raises RuntimeError do
7
+ Striuct.define do
8
+ end
9
+ end
10
+
11
+ klass = Striuct.define do
12
+ member :foo
13
+ end
14
+
15
+ assert_equal true, klass.closed?
16
+ end
17
+
18
+ end
19
+
@@ -1,21 +1,21 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Cloning < Test::Unit::TestCase
4
-
5
- class Sth < Striuct.new
6
- member :sth
7
- end
8
-
9
- def test_dup
10
- klass = Sth.dup
11
- Sth.__send__ :member, :dummy1
12
- assert_equal false, klass.member?(:dummy1)
13
- end
14
-
15
- def test_clone
16
- klass = Sth.clone
17
- Sth.__send__ :member, :dummy2
18
- assert_equal false, klass.member?(:dummy2)
19
- end
20
-
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Cloning < Test::Unit::TestCase
4
+
5
+ class Sth < Striuct.new
6
+ member :sth
7
+ end
8
+
9
+ def test_dup
10
+ klass = Sth.dup
11
+ Sth.__send__ :member, :dummy1
12
+ assert_equal false, klass.member?(:dummy1)
13
+ end
14
+
15
+ def test_clone
16
+ klass = Sth.clone
17
+ Sth.__send__ :member, :dummy2
18
+ assert_equal false, klass.member?(:dummy2)
19
+ end
20
+
21
21
  end
@@ -1,36 +1,36 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Close < Test::Unit::TestCase
4
-
5
- Sth = Striuct.new do
6
- member :foo
7
- end
8
-
9
- def test_class_close
10
- sth = Sth.new
11
-
12
- assert_equal true, sth.member?(:foo)
13
-
14
- Sth.class_eval do
15
- member :bar
16
- end
17
-
18
- assert_equal true, sth.member?(:bar)
19
- assert_equal [:foo, :bar], sth.members
20
-
21
- assert_equal false, Sth.closed?
22
-
23
- Sth.__send__ :close
24
-
25
- assert_equal true, Sth.closed?
26
-
27
- assert_raises RuntimeError do
28
- Sth.class_eval do
29
- member :var2
30
- end
31
- end
32
-
33
- assert_equal false, sth.member?(:var2)
34
- end
35
-
36
- end
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Close < Test::Unit::TestCase
4
+
5
+ Sth = Striuct.new do
6
+ member :foo
7
+ end
8
+
9
+ def test_class_close
10
+ sth = Sth.new
11
+
12
+ assert_equal true, sth.member?(:foo)
13
+
14
+ Sth.class_eval do
15
+ member :bar
16
+ end
17
+
18
+ assert_equal true, sth.member?(:bar)
19
+ assert_equal [:foo, :bar], sth.members
20
+
21
+ assert_equal false, Sth.closed?
22
+
23
+ Sth.__send__ :close
24
+
25
+ assert_equal true, Sth.closed?
26
+
27
+ assert_raises RuntimeError do
28
+ Sth.class_eval do
29
+ member :var2
30
+ end
31
+ end
32
+
33
+ assert_equal false, sth.member?(:var2)
34
+ end
35
+
36
+ end
@@ -1,82 +1,82 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Constructor < Test::Unit::TestCase
4
-
5
- class User < Striuct.new
6
- member :id, Integer
7
- member :last_name, /\A\w+\z/
8
- member :family_name, /\A\w+\z/
9
- member :address, /\A((\w+) ?)+\z/
10
- member :age, ->age{(20..140).include? age}
11
- end
12
-
13
- User2 = Striuct.define do
14
- member :name, AND(String, NOT(''))
15
- member :age, Fixnum
16
- end
17
-
18
- def test_new
19
- klass = Striuct.new
20
- assert_kind_of Striuct, klass.new
21
-
22
- klass = Striuct.new :name, :age
23
-
24
- assert_equal klass.members, [:name, :age]
25
-
26
- klass = Striuct.new :foo do
27
- member :var
28
- end
29
-
30
- assert_equal klass.members, [:foo, :var]
31
- assert_equal User.members, [:id, :last_name, :family_name, :address, :age]
32
- end
33
-
34
- def test_define
35
- user = User2.define{|r|r.age = 1; r.name = 'a'}
36
- assert_same 1, user.age
37
-
38
- assert_raises RuntimeError do
39
- user.age = 1
40
- end
41
-
42
- user = User2.define{|r|r.age = 1; r.name = 'a'}
43
- assert_same 1, user.age
44
- assert_same true, user.lock?
45
- assert_same false, user.frozen?
46
-
47
- assert_raises RuntimeError do
48
- User2.define{|r|r.age = 1}
49
- end
50
-
51
- user = User2.define(lock: true){|r|r.age = 1; r.name = 'a'}
52
- assert_same 1, user.age
53
- assert_same true, user.lock?
54
- user = User2.define(lock: false){|r|r.age = 1; r.name = 'a'}
55
- assert_same false, user.lock?
56
- assert_equal true, user.strict?
57
-
58
- assert_raises Validation::InvalidWritingError do
59
- User2.define{|r|r.age = 1; r.name = 'a'; r.name.clear}
60
- end
61
-
62
- user = User2.define(strict: false){|r|r.age = 1; r.name = 'a'; r.name.clear}
63
- assert_equal '', user.name
64
- assert_equal false, user.strict?
65
- end
66
-
67
- Sth = Striuct.new :foo, :bar, :hoge
68
- SampleStruct = Struct.new :foo, :bar, :hoge
69
-
70
- def test_for_pairs_from_hash
71
- sth = Sth[hoge: 7, foo: 8]
72
-
73
- assert_equal [8, nil, 7], sth.values
74
- end
75
-
76
- def test_for_pairs_from_struct
77
- sth = Sth[SampleStruct.new 8, nil, 7]
78
-
79
- assert_equal [8, nil, 7], sth.values
80
- end
81
-
82
- end
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Constructor < Test::Unit::TestCase
4
+
5
+ class User < Striuct.new
6
+ member :id, Integer
7
+ member :last_name, /\A\w+\z/
8
+ member :family_name, /\A\w+\z/
9
+ member :address, /\A((\w+) ?)+\z/
10
+ member :age, ->age{(20..140).include? age}
11
+ end
12
+
13
+ User2 = Striuct.define do
14
+ member :name, AND(String, NOT(''))
15
+ member :age, Fixnum
16
+ end
17
+
18
+ def test_new
19
+ klass = Striuct.new
20
+ assert_kind_of Striuct, klass.new
21
+
22
+ klass = Striuct.new :name, :age
23
+
24
+ assert_equal klass.members, [:name, :age]
25
+
26
+ klass = Striuct.new :foo do
27
+ member :var
28
+ end
29
+
30
+ assert_equal klass.members, [:foo, :var]
31
+ assert_equal User.members, [:id, :last_name, :family_name, :address, :age]
32
+ end
33
+
34
+ def test_define
35
+ user = User2.define{|r|r.age = 1; r.name = 'a'}
36
+ assert_same 1, user.age
37
+
38
+ assert_raises RuntimeError do
39
+ user.age = 1
40
+ end
41
+
42
+ user = User2.define{|r|r.age = 1; r.name = 'a'}
43
+ assert_same 1, user.age
44
+ assert_same true, user.lock?
45
+ assert_same false, user.frozen?
46
+
47
+ assert_raises RuntimeError do
48
+ User2.define{|r|r.age = 1}
49
+ end
50
+
51
+ user = User2.define(lock: true){|r|r.age = 1; r.name = 'a'}
52
+ assert_same 1, user.age
53
+ assert_same true, user.lock?
54
+ user = User2.define(lock: false){|r|r.age = 1; r.name = 'a'}
55
+ assert_same false, user.lock?
56
+ assert_equal true, user.strict?
57
+
58
+ assert_raises Validation::InvalidWritingError do
59
+ User2.define{|r|r.age = 1; r.name = 'a'; r.name.clear}
60
+ end
61
+
62
+ user = User2.define(strict: false){|r|r.age = 1; r.name = 'a'; r.name.clear}
63
+ assert_equal '', user.name
64
+ assert_equal false, user.strict?
65
+ end
66
+
67
+ Sth = Striuct.new :foo, :bar, :hoge
68
+ SampleStruct = Struct.new :foo, :bar, :hoge
69
+
70
+ def test_for_pairs_from_hash
71
+ sth = Sth[hoge: 7, foo: 8]
72
+
73
+ assert_equal [8, nil, 7], sth.values
74
+ end
75
+
76
+ def test_for_pairs_from_struct
77
+ sth = Sth[SampleStruct.new 8, nil, 7]
78
+
79
+ assert_equal [8, nil, 7], sth.values
80
+ end
81
+
82
+ end
@@ -1,36 +1,36 @@
1
- require_relative 'helper'
2
-
3
- class Test_Striuct_Subclass_Class_Freeze < Test::Unit::TestCase
4
-
5
- Sth = Striuct.new do
6
- member :foo
7
- end
8
-
9
- def test_class_freeze
10
- sth = Sth.new
11
-
12
- assert_same true, sth.member?(:foo)
13
-
14
- Sth.class_eval do
15
- member :bar
16
- end
17
-
18
- assert_same true, sth.member?(:bar)
19
- assert_equal [:foo, :bar], sth.members
20
-
21
- assert_same false, Sth.frozen?
22
-
23
- Sth.freeze
24
-
25
- assert_same true, Sth.frozen?
26
-
27
- assert_raises RuntimeError do
28
- Sth.class_eval do
29
- member :var2
30
- end
31
- end
32
-
33
- assert_same false, sth.member?(:var2)
34
- end
35
-
36
- end
1
+ require_relative 'helper'
2
+
3
+ class Test_Striuct_Subclass_Class_Freeze < Test::Unit::TestCase
4
+
5
+ Sth = Striuct.new do
6
+ member :foo
7
+ end
8
+
9
+ def test_class_freeze
10
+ sth = Sth.new
11
+
12
+ assert_same true, sth.member?(:foo)
13
+
14
+ Sth.class_eval do
15
+ member :bar
16
+ end
17
+
18
+ assert_same true, sth.member?(:bar)
19
+ assert_equal [:foo, :bar], sth.members
20
+
21
+ assert_same false, Sth.frozen?
22
+
23
+ Sth.freeze
24
+
25
+ assert_same true, Sth.frozen?
26
+
27
+ assert_raises RuntimeError do
28
+ Sth.class_eval do
29
+ member :var2
30
+ end
31
+ end
32
+
33
+ assert_same false, sth.member?(:var2)
34
+ end
35
+
36
+ end