evt-collection 1.2.0.0 → 2.4.2.0

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.
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: []