evt-collection 1.2.0.0 → 2.4.2.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: a63d383cd2684aba2976b1fc2599dc87085b54168e2be64dd2b4d04adde690bb
4
- data.tar.gz: 12d1fc56025b87b0d3837234e782867533ff624c362ed0ff74b9c4462e076dd3
3
+ metadata.gz: 0da4d6ada538145f5de05dbe96dcdf01556f60582f58011a4b0139c421a1db51
4
+ data.tar.gz: 8b844dcb8daccc43d829d4a83224818bfd7deff5be41d4ad242544aa7fac14a7
5
5
  SHA512:
6
- metadata.gz: ef99b4d0e58d2cb741b213655556596f61305468269a4d5420c845ed632a75d032a5b6f7f327d222f04f44965e3c67fd28b347a2a3b8f90997583e12620c33f9
7
- data.tar.gz: adf3412d3c003f5f53d5bf53cea9c0aca2ec61dcf5f30dcae428163609f81b5fd3012c8ce250f4f642ca689a879fb9e9166f16f1f062806e00fc222e07ce8fa6
6
+ metadata.gz: d372356ebd516436d3503adabdad726522622afdc0e18ef5afb78d18579aff6315e80debbcf3acc5c85bd6a2ecc49e7c650fe1a1c2e936aaf4e981b7d1406bd3
7
+ data.tar.gz: 555f07ebc9e85db79a26e8eaafb9452e78a9964b3a64681a6ff0f84b358695330180193a2a65d3f66b5af46e4aa48506c471f703c108b8cec81c27a52f5d553b
data/lib/collection.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'set'
2
2
 
3
- require 'collection/set'
3
+ require 'collection/generic'
4
4
  require 'collection/collection'
5
+ require 'collection/array'
6
+ require 'collection/set'
@@ -0,0 +1,18 @@
1
+ module Collection
2
+ class Array
3
+ include Collection
4
+
5
+ def content
6
+ @content ||= ::Array.new
7
+ end
8
+
9
+ def last
10
+ content.last
11
+ end
12
+
13
+ def length
14
+ count
15
+ end
16
+ alias :size :length
17
+ end
18
+ end
@@ -1,6 +1,46 @@
1
1
  module Collection
2
+ def self.included(cls)
3
+ cls.include Enumerable
4
+ cls.extend Generic
5
+ end
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 << 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
+
2
42
  def self.Set(items)
3
- items = Array(items)
43
+ items = Kernel::Array(items)
4
44
 
5
45
  raise ArgumentError, "Collection can't be empty" if items.empty?
6
46
 
@@ -9,9 +49,25 @@ module Collection
9
49
  set = Set[type_parameter].new
10
50
 
11
51
  items.each do |member|
12
- set.add member
52
+ set.add(member)
13
53
  end
14
54
 
15
55
  set
16
56
  end
57
+
58
+ def self.Array(items)
59
+ items = Kernel::Array(items)
60
+
61
+ raise ArgumentError, "Collection can't be empty" if items.empty?
62
+
63
+ type_parameter = items[0].class
64
+
65
+ array = Array[type_parameter].new
66
+
67
+ items.each do |member|
68
+ array.add(member)
69
+ end
70
+
71
+ array
72
+ end
17
73
  end
@@ -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,103 +1,18 @@
1
1
  module Collection
2
2
  class Set
3
- include Enumerable
3
+ include Collection
4
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 self.const_defined?(type_parameter_name, false)
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 self.const_defined?(class_name, false)
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?
5
+ def content
6
+ @content ||= ::Set.new
87
7
  end
88
8
 
89
- def empty?
90
- content.empty?
9
+ def last
10
+ content.to_a.last
91
11
  end
92
12
 
93
13
  def length
94
- content.length
14
+ count
95
15
  end
96
16
  alias :size :length
97
- alias :count :length
98
-
99
- def content
100
- @content ||= ::Set.new
101
- end
102
17
  end
103
18
  end
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.2.0.0
4
+ version: 2.4.2.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-09 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test_bench
@@ -31,16 +31,18 @@ extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
33
  - lib/collection.rb
34
+ - lib/collection/array.rb
34
35
  - lib/collection/collection.rb
35
36
  - lib/collection/controls.rb
36
37
  - lib/collection/controls/array.rb
37
38
  - lib/collection/controls/member.rb
39
+ - lib/collection/generic.rb
38
40
  - lib/collection/set.rb
39
41
  homepage: https://github.com/eventide-project/collection
40
42
  licenses:
41
43
  - MIT
42
44
  metadata: {}
43
- post_install_message:
45
+ post_install_message:
44
46
  rdoc_options: []
45
47
  require_paths:
46
48
  - lib
@@ -55,8 +57,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
57
  - !ruby/object:Gem::Version
56
58
  version: '0'
57
59
  requirements: []
58
- rubygems_version: 3.0.1
59
- signing_key:
60
+ rubygems_version: 3.1.2
61
+ signing_key:
60
62
  specification_version: 4
61
63
  summary: Type-checked set
62
64
  test_files: []