evt-collection 1.0.0.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.
- checksums.yaml +7 -0
- data/lib/collection.rb +5 -0
- data/lib/collection/collection.rb +5 -0
- data/lib/collection/controls.rb +2 -0
- data/lib/collection/controls/array.rb +21 -0
- data/lib/collection/controls/member.rb +16 -0
- data/lib/collection/refinement.rb +19 -0
- data/lib/collection/set.rb +97 -0
- metadata +64 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bf7cf1ffea012f90866505cffcab4b01b209fba5ae36cc3de37adbc1654b59bd
|
4
|
+
data.tar.gz: cda4e9c233671dd718ab8c2f8e1c54e2517ade74f1dc7232dddeacd4d8e46a1a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dd6424fd2c49f7f332b393927e4ea8a856ed0b509abbd1098e3309b45fad99a0696ca4269a8748d6313c0fdfdb9733e0f589f7b7529850186498a0272d48b5ec
|
7
|
+
data.tar.gz: a74a0d5c6b443595cd23050218908cf3048c4e858793d48c323a03160e8ba6c8a91e7d4ac28fce15f17e1e6c9c9b6af598f443e294345675428246d92491c1d5
|
data/lib/collection.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Collection
|
2
|
+
module Controls
|
3
|
+
module Array
|
4
|
+
def self.example
|
5
|
+
[Member.new, Member.new]
|
6
|
+
end
|
7
|
+
|
8
|
+
class Member
|
9
|
+
end
|
10
|
+
|
11
|
+
module Anomaly
|
12
|
+
def self.example
|
13
|
+
[Array::Member.new, Member.new]
|
14
|
+
end
|
15
|
+
|
16
|
+
class Member
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Collection
|
2
|
+
refine Object do
|
3
|
+
def Collection(items)
|
4
|
+
items = Array(items)
|
5
|
+
|
6
|
+
raise ArgumentError, "Collection can't be empty" if items.empty?
|
7
|
+
|
8
|
+
type_parameter = items[0].class
|
9
|
+
|
10
|
+
set = Set[type_parameter].new
|
11
|
+
|
12
|
+
items.each do |member|
|
13
|
+
set.add member
|
14
|
+
end
|
15
|
+
|
16
|
+
set
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Collection
|
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
|
+
raise ArgumentError, "#{val.inspect} must be a #{type_parameter.name}" unless val.is_a? type_parameter
|
55
|
+
set.add(val)
|
56
|
+
end
|
57
|
+
alias :<< :add
|
58
|
+
|
59
|
+
def entry?(val=nil, &predicate)
|
60
|
+
if !block_given?
|
61
|
+
predicate = lambda { |m| m == val }
|
62
|
+
end
|
63
|
+
|
64
|
+
entries(&predicate).length > 0
|
65
|
+
end
|
66
|
+
|
67
|
+
def entries(&predicate)
|
68
|
+
set.select(&predicate)
|
69
|
+
end
|
70
|
+
|
71
|
+
def entry(&predicate)
|
72
|
+
set.find(&predicate)
|
73
|
+
end
|
74
|
+
|
75
|
+
def each(&action)
|
76
|
+
set.each(&action)
|
77
|
+
end
|
78
|
+
|
79
|
+
def entries?
|
80
|
+
!set.empty?
|
81
|
+
end
|
82
|
+
|
83
|
+
def empty?
|
84
|
+
set.empty?
|
85
|
+
end
|
86
|
+
|
87
|
+
def length
|
88
|
+
set.length
|
89
|
+
end
|
90
|
+
alias :size :length
|
91
|
+
alias :count :length
|
92
|
+
|
93
|
+
private def set
|
94
|
+
@set ||= ::Set.new
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: evt-collection
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- The Eventide Project
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-12-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: test_bench
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: " "
|
28
|
+
email: opensource@eventide-project.org
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/collection.rb
|
34
|
+
- lib/collection/collection.rb
|
35
|
+
- lib/collection/controls.rb
|
36
|
+
- lib/collection/controls/array.rb
|
37
|
+
- lib/collection/controls/member.rb
|
38
|
+
- lib/collection/refinement.rb
|
39
|
+
- lib/collection/set.rb
|
40
|
+
homepage: https://github.com/eventide-project/collection
|
41
|
+
licenses:
|
42
|
+
- MIT
|
43
|
+
metadata: {}
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.3.3
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
requirements: []
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 2.7.3
|
61
|
+
signing_key:
|
62
|
+
specification_version: 4
|
63
|
+
summary: Type-checked set
|
64
|
+
test_files: []
|