striuct 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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++