evt-collection 1.1.0.5 → 2.4.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb24d1d09fe966e05f63e3ddaad61096e82a355ba1543723bb58c1d2bc9546fe
4
- data.tar.gz: 2c89ee009ab759e6f7d15a103ea746a6b1761b889d92ecb439e7dbf7749243a2
3
+ metadata.gz: 922a2fa4912c4f8a3778994ed975dfc184bb728343159529dc299c3352888f13
4
+ data.tar.gz: d3c07b56ef57547eaf553ff34e28735b73a2188a6d69ccae64994ee8a5c42cb2
5
5
  SHA512:
6
- metadata.gz: 977ddfde1ec8c9824708551f85febabcb24bca1263378b8201c0bc3e83588d4ba9a590c69b09d5c04b5c272a69b846b54f1e0bcb5bba15eb1a4b3f0153dfcd5e
7
- data.tar.gz: 04cdcc900c86b728896ce84a38d72c58576590e83e80b4d826e9c47707012720a3e346f96a6f271345ab928db98b61bf73619c402c2df6fd537573710f753e73
6
+ metadata.gz: 7a40a6bca7e341f5d29bee4210fe5be181d8c5dac9bdc64e2e3b14936fce0ff86684cfc802e4c7eb5d701b261214085b9daab9f40934140fcf8ee11882a17944
7
+ data.tar.gz: 3c37fcc99ed713c70f7d14051acaebe4c4fa9da7ed63d49554097a0c5e0a5b577b225d32df7dd2ea5eca2c906dbafe60200c4c48b356b5dc4fe6d6d1f8db6a08
data/lib/collection.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'set'
2
2
 
3
- require 'collection/set'
3
+ require 'collection/generic'
4
4
  require 'collection/collection'
5
+ require 'collection/set'
@@ -1,8 +1,44 @@
1
1
  module Collection
2
- def self.[](type_parameter)
3
- Set[type_parameter]
2
+ def self.included(cls)
3
+ cls.include Enumerable
4
+ cls.extend Generic
4
5
  end
5
6
 
7
+ attr_reader :type_parameter
8
+
9
+ def initialize(type_parameter)
10
+ @type_parameter = type_parameter
11
+ end
12
+
13
+ def add(val)
14
+ if not val.is_a?(type_parameter)
15
+ raise ArgumentError, "#{val.inspect} must be a #{type_parameter.name}"
16
+ end
17
+
18
+ content.add(val)
19
+
20
+ self
21
+ end
22
+ alias :<< :add
23
+
24
+ def each(&action)
25
+ content.each(&action)
26
+ end
27
+
28
+ def empty?
29
+ content.empty?
30
+ end
31
+
32
+ def clear
33
+ content.clear
34
+ self
35
+ end
36
+
37
+ def ==(other)
38
+ other.class == self.class && other.type_parameter == self.type_parameter && other.content == self.content
39
+ end
40
+ alias :eql? :==
41
+
6
42
  def self.Set(items)
7
43
  items = Array(items)
8
44
 
@@ -0,0 +1,45 @@
1
+ module Collection
2
+ module Generic
3
+ def [](type_parameter)
4
+ type_parameter_name = constant_name(type_parameter)
5
+
6
+ cls = nil
7
+ unless self.const_defined?(type_parameter_name, false)
8
+ cls = define_class(type_parameter)
9
+ set_collection_constant(type_parameter, cls)
10
+ else
11
+ cls = const_get(type_parameter_name)
12
+ end
13
+
14
+ cls
15
+ end
16
+
17
+ def define_class(type_parameter)
18
+ cls = Class.new(self) do
19
+ def initialize; end
20
+
21
+ define_method :type_parameter do
22
+ type_parameter
23
+ end
24
+ end
25
+
26
+ set_collection_constant(type_parameter, cls)
27
+
28
+ cls
29
+ end
30
+
31
+ def constant_name(constant)
32
+ constant.name.gsub('::', '_')
33
+ end
34
+
35
+ def set_collection_constant(constant, cls)
36
+ class_name = constant_name(constant)
37
+
38
+ unless self.const_defined?(class_name, false)
39
+ self.const_set(class_name, cls)
40
+ end
41
+
42
+ class_name
43
+ end
44
+ end
45
+ end
@@ -1,100 +1,6 @@
1
1
  module Collection
2
2
  class Set
3
- include Enumerable
4
-
5
- attr_reader :type_parameter
6
-
7
- def initialize(type_parameter)
8
- @type_parameter = type_parameter
9
- end
10
-
11
- def self.[](type_parameter)
12
- type_parameter_name = constant_name(type_parameter)
13
-
14
- cls = nil
15
- unless const_defined?(type_parameter_name)
16
- cls = define_class(type_parameter)
17
- set_collection_constant(type_parameter, cls)
18
- else
19
- cls = const_get(type_parameter_name)
20
- end
21
-
22
- cls
23
- end
24
-
25
- def self.define_class(type_parameter)
26
- cls = Class.new(self) do
27
- def initialize; end
28
-
29
- define_method :type_parameter do
30
- type_parameter
31
- end
32
- end
33
-
34
- set_collection_constant(type_parameter, cls)
35
-
36
- cls
37
- end
38
-
39
- def self.constant_name(constant)
40
- constant.name.gsub('::', '_')
41
- end
42
-
43
- def self.set_collection_constant(constant, cls)
44
- class_name = constant_name(constant)
45
-
46
- unless const_defined?(class_name)
47
- self.const_set(class_name, cls)
48
- end
49
-
50
- class_name
51
- end
52
-
53
- def add(val)
54
- vals = Array(val)
55
-
56
- vals.each do |val|
57
- raise ArgumentError, "#{val.inspect} must be a #{type_parameter.name}" unless val.is_a? type_parameter
58
- content.add(val)
59
- end
60
-
61
- self
62
- end
63
- alias :<< :add
64
-
65
- def entry?(val=nil, &predicate)
66
- if !block_given?
67
- predicate = lambda { |m| m == val }
68
- end
69
-
70
- entries(&predicate).length > 0
71
- end
72
-
73
- def entries(&predicate)
74
- content.select(&predicate)
75
- end
76
-
77
- def entry(&predicate)
78
- content.find(&predicate)
79
- end
80
-
81
- def each(&action)
82
- content.each(&action)
83
- end
84
-
85
- def entries?
86
- !content.empty?
87
- end
88
-
89
- def empty?
90
- content.empty?
91
- end
92
-
93
- def length
94
- content.length
95
- end
96
- alias :size :length
97
- alias :count :length
3
+ include Collection
98
4
 
99
5
  def content
100
6
  @content ||= ::Set.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-collection
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.5
4
+ version: 2.4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Eventide Project
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-02 00:00:00.000000000 Z
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test_bench
@@ -35,12 +35,13 @@ files:
35
35
  - lib/collection/controls.rb
36
36
  - lib/collection/controls/array.rb
37
37
  - lib/collection/controls/member.rb
38
+ - lib/collection/generic.rb
38
39
  - lib/collection/set.rb
39
40
  homepage: https://github.com/eventide-project/collection
40
41
  licenses:
41
42
  - MIT
42
43
  metadata: {}
43
- post_install_message:
44
+ post_install_message:
44
45
  rdoc_options: []
45
46
  require_paths:
46
47
  - lib
@@ -55,8 +56,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
56
  - !ruby/object:Gem::Version
56
57
  version: '0'
57
58
  requirements: []
58
- rubygems_version: 3.0.1
59
- signing_key:
59
+ rubygems_version: 3.1.2
60
+ signing_key:
60
61
  specification_version: 4
61
62
  summary: Type-checked set
62
63
  test_files: []