evt-collection 1.0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,5 @@
1
+ require 'set'
2
+
3
+ require 'collection/set'
4
+ require 'collection/refinement'
5
+ require 'collection/collection'
@@ -0,0 +1,5 @@
1
+ module Collection
2
+ def self.[](type_parameter)
3
+ Set[type_parameter]
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ require 'collection/controls/member'
2
+ require 'collection/controls/array'
@@ -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,16 @@
1
+ module Collection
2
+ module Controls
3
+ module Member
4
+ def self.example
5
+ example_class.new
6
+ end
7
+
8
+ def self.example_class
9
+ Member
10
+ end
11
+
12
+ class Member
13
+ end
14
+ end
15
+ end
16
+ 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: []