striuct 0.4.0 → 0.4.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.
data/README.md CHANGED
@@ -101,7 +101,7 @@ Requirements
101
101
 
102
102
  * Ruby - [1.9.2 or later](http://travis-ci.org/#!/kachick/striuct)
103
103
  * [validation](https://github.com/kachick/validation) - 0.0.3
104
- * [optionalargument](https://github.com/kachick/optionalargument) - 0.0.1
104
+ * [optionalargument](https://github.com/kachick/optionalargument) - 0.0.3
105
105
  * [keyvalidatable](https://github.com/kachick/keyvalidatable) - 0.0.3
106
106
 
107
107
  Install
@@ -2,52 +2,49 @@ class Striuct; module ClassMethods
2
2
 
3
3
  # @group Basic Methods for Ruby's Object
4
4
 
5
- # @return [Module]
6
- def dup
7
- autonyms = @autonyms.dup
8
- aliases = @aliases.dup
9
- attributes = @attributes.deep_dup
10
-
11
- super.tap {|ret|
12
- ret.instance_eval do
13
- @autonyms = autonyms
14
- @aliases = aliases
15
- @attributes = attributes
16
- end
17
- }
18
- end
19
-
20
- # @return [Module]
5
+ # @return [Class]
21
6
  def clone
22
7
  ret = super
23
- ret.__send__ :close if closed?
8
+ ret.__send__ :close_member if closed?
24
9
  ret
25
10
  end
26
11
 
12
+ # @return [Class]
13
+ def dup
14
+ copy_variables! super
15
+ end
16
+
27
17
  private
28
18
 
29
19
  def inherited(subclass)
20
+ ret = super subclass
21
+ copy_variables! subclass
22
+ ret
23
+ end
24
+
25
+ def initialize_copy(original)
26
+ ret = super original
27
+ @autonyms = @autonyms.dup
28
+ @aliases = @aliases.dup
29
+ @attributes = @attributes.deep_dup
30
+ ret
31
+ end
32
+
33
+ # @return [familar_class]
34
+ def copy_variables!(familar_class)
30
35
  autonyms = @autonyms.dup
31
36
  aliases = @aliases.dup
32
37
  attributes = @attributes.deep_dup
33
38
  conflict_management = @conflict_management_level
34
-
35
- subclass.class_eval do
36
- original_inherited subclass
37
-
39
+
40
+ familar_class.class_eval do
38
41
  @autonyms = autonyms
39
42
  @aliases = aliases
40
43
  @attributes = attributes
41
44
  @conflict_management_level = conflict_management
42
45
  end
43
- end
44
-
45
- def initialize_copy(original)
46
- ret = super original
47
- @autonyms = @autonyms.dup
48
- @aliases = @aliases.dup
49
- @attributes = @attributes.deep_dup
50
- ret
46
+
47
+ familar_class
51
48
  end
52
49
 
53
50
  # @endgroup
@@ -1,4 +1,4 @@
1
- class Striuct; class << self
1
+ class Striuct; module ClassMethods
2
2
 
3
3
  module HashDeepDupulicatable
4
4
 
@@ -4,6 +4,13 @@ class Striuct; module ClassMethods
4
4
 
5
5
  private
6
6
 
7
+ def _init
8
+ @autonyms = []
9
+ @attributes = {}.extend HashDeepDupulicatable # autonym => Attributes
10
+ @aliases = {} # aliased => autonym
11
+ @conflict_management_level = DEFAULT_CONFLICT_MANAGEMENT_LEVEL
12
+ end
13
+
7
14
  def _add_autonym(autonym)
8
15
  autonym = autonym.to_sym
9
16
  raise NameError, 'already defined' if member? autonym
@@ -1,5 +1,6 @@
1
1
  require 'optionalargument'
2
2
 
3
+ require_relative 'hashdeepdupulicatable'
3
4
  require_relative 'attributes'
4
5
  require_relative 'inner'
5
6
  require_relative 'names'
@@ -1,3 +1,4 @@
1
+ require 'validation'
1
2
  require_relative 'structs'
2
3
  require_relative 'classmethods/requirements'
3
4
  require_relative 'instancemethods/requirements'
@@ -1,14 +1,14 @@
1
- require_relative 'singleton_class/hashdeepdupulicatable'
1
+ require 'validation'
2
2
 
3
3
  class Striuct
4
4
 
5
5
  class << self
6
-
7
- # @group Constructor
8
6
 
9
7
  alias_method :new_instance, :new
10
8
  private :new_instance
11
9
 
10
+ # @group Constructors for Subclassies
11
+
12
12
  # @param [Symbol, String] autonyms
13
13
  # @yieldreturn [Class]
14
14
  # @return [Class]
@@ -19,25 +19,25 @@ class Striuct
19
19
  warn "no define constant first-arg(#{first}), the Struct behavior is not supported in Striuct"
20
20
  end
21
21
 
22
- Class.new self do
22
+ Class.new(self) {
23
23
  autonyms.each do |autonym|
24
24
  add_member autonym
25
25
  end
26
26
 
27
27
  class_eval(&block) if block_given?
28
- end
28
+ }
29
29
  end
30
30
 
31
31
  # @yieldreturn [Class] (see Striuct.new) - reject floating class
32
32
  # @return [void]
33
33
  def define(&block)
34
- raise ArgumentError, 'must with block' unless block_given?
34
+ raise ArgumentError, 'block not supplied' unless block_given?
35
35
 
36
36
  new(&block).tap {|subclass|
37
- subclass.class_eval do
37
+ subclass.class_eval {
38
38
  raise 'not yet finished' if @autonyms.empty?
39
39
  close
40
- end
40
+ }
41
41
  }
42
42
  end
43
43
 
@@ -45,22 +45,19 @@ class Striuct
45
45
 
46
46
  private
47
47
 
48
- alias_method :original_inherited, :inherited
49
-
50
48
  def inherited(subclass)
51
- subclass.class_eval do
52
- original_inherited subclass
49
+ ret = super subclass
53
50
 
51
+ subclass.class_eval {
54
52
  extend ClassMethods
55
53
  include Enumerable
54
+ include Validation
56
55
  include InstanceMethods
57
56
 
58
- @autonyms = []
59
- @attributes = {}.extend HashDeepDupulicatable # autonym => Attributes
60
- @aliases = {} # aliased => autonym
61
- @conflict_management_level =
62
- ClassMethods::DEFAULT_CONFLICT_MANAGEMENT_LEVEL
63
- end
57
+ _init
58
+ }
59
+
60
+ ret
64
61
  end
65
62
 
66
63
  end
data/lib/striuct.rb CHANGED
@@ -1,13 +1,8 @@
1
- # striuct - Provides a Struct++ class.
2
- # Copyright (c) 2011 Kenichi Kamiya
3
-
4
- require 'validation'
1
+ # striuct - Struct++
2
+ # Copyright (c) 2011-2012 Kenichi Kamiya
5
3
 
6
4
  # @abstract
7
5
  class Striuct
8
-
9
- include Validation
10
-
11
6
  end
12
7
 
13
8
  require_relative 'striuct/requirements'
data/striuct.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
13
  gem.name = 'striuct'
14
14
  gem.require_paths = ['lib']
15
- gem.version = '0.4.0'
15
+ gem.version = '0.4.1'
16
16
 
17
17
  gem.required_ruby_version = '>= 1.9.2'
18
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: striuct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-30 00:00:00.000000000 Z
12
+ date: 2012-10-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: validation
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &9580980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: 0.0.3
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: 0.0.3
24
+ version_requirements: *9580980
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: optionalargument
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &9579740 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ~>
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: 0.0.3
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 0.0.3
35
+ version_requirements: *9579740
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: keyvalidatable
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &9578620 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ~>
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: 0.0.3
54
44
  type: :runtime
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 0.0.3
46
+ version_requirements: *9578620
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: yard
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &9169460 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ~>
@@ -69,15 +54,10 @@ dependencies:
69
54
  version: '0.8'
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: '0.8'
57
+ version_requirements: *9169460
78
58
  - !ruby/object:Gem::Dependency
79
59
  name: rake
80
- requirement: !ruby/object:Gem::Requirement
60
+ requirement: &9169020 !ruby/object:Gem::Requirement
81
61
  none: false
82
62
  requirements:
83
63
  - - ! '>='
@@ -85,15 +65,10 @@ dependencies:
85
65
  version: '0'
86
66
  type: :development
87
67
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
68
+ version_requirements: *9169020
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: bundler
96
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &9168420 !ruby/object:Gem::Requirement
97
72
  none: false
98
73
  requirements:
99
74
  - - ! '>='
@@ -101,12 +76,7 @@ dependencies:
101
76
  version: '0'
102
77
  type: :development
103
78
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
79
+ version_requirements: *9168420
110
80
  description: ! "Validatable, Inheritable, Member Aliasing,\n Conflict Management,
111
81
  Default Value, Divide nil with unassign,\n Lock setter of each member, Hash flendly
112
82
  API, ... And more Struct++ features :)"
@@ -139,6 +109,7 @@ files:
139
109
  - lib/striuct/classmethods/default.rb
140
110
  - lib/striuct/classmethods/enum.rb
141
111
  - lib/striuct/classmethods/fix.rb
112
+ - lib/striuct/classmethods/hashdeepdupulicatable.rb
142
113
  - lib/striuct/classmethods/inner.rb
143
114
  - lib/striuct/classmethods/length.rb
144
115
  - lib/striuct/classmethods/macro.rb
@@ -167,7 +138,6 @@ files:
167
138
  - lib/striuct/instancemethods/values.rb
168
139
  - lib/striuct/requirements.rb
169
140
  - lib/striuct/singleton_class.rb
170
- - lib/striuct/singleton_class/hashdeepdupulicatable.rb
171
141
  - lib/striuct/structs.rb
172
142
  - striuct.gemspec
173
143
  - test/helper.rb
@@ -222,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
192
  version: '0'
223
193
  requirements: []
224
194
  rubyforge_project:
225
- rubygems_version: 1.8.24
195
+ rubygems_version: 1.8.11
226
196
  signing_key:
227
197
  specification_version: 3
228
198
  summary: Struct++