rubyt 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9a2ecb70611af5d3e5bcb3d5ac63a0fd27cc39c33d453cf6a2d352fd957869f7
4
+ data.tar.gz: b6fdfd529f5bec54ea93190d5853e83c195e02b74241656309c29a8efd9683de
5
+ SHA512:
6
+ metadata.gz: 060d617265a9c61cdcaebb60dff372439d97946fb5ab31fd149cadcb4b843fcef9f60dad172554af1057025a530f54bc785526334ccf70806bd0230de7650944
7
+ data.tar.gz: af722516b47c3fb5ed5f5e76821f6ec975b48d876f81af757acc2744d4934853518baad1562c61bbb9ebf5b7c708535219a8611809ddaaddab11ddbe710c63e6
data/lib/rubyt.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Rubyt v0.0.1
4
+
5
+ require_relative 'types/monkey_patching/object'
6
+ require_relative 'types/any'
7
+ require_relative 'types/array_t'
8
+ require_relative 'types/boolean'
9
+ require_relative 'types/float_t'
10
+ require_relative 'types/hash_t'
11
+ require_relative 'types/integer_t'
12
+ require_relative 'types/nilable_string'
13
+ require_relative 'types/string_t'
data/lib/types/any.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'errors/rubyt_type_error'
4
+
5
+ class Any
6
+ class << self
7
+ def t(value)
8
+ raise RubytTypeError.new(Any, value.class) unless value.is_a? Any
9
+
10
+ value
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def valid_value?(value); end
17
+
18
+ def validate_value(value); end
19
+
20
+ def setup_value(value)
21
+ if value.is_a? Any
22
+ validate_value(value.t)
23
+
24
+ return value.t
25
+ end
26
+
27
+ validate_value(value)
28
+
29
+ value
30
+ end
31
+
32
+ public
33
+
34
+ def initialize(value = nil) = @value = setup_value(value)
35
+
36
+ def t = @value
37
+
38
+ def t=(value)
39
+ @value = setup_value(value)
40
+ end
41
+
42
+ def to_s = @value.to_s
43
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class ArrayT < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(ArrayT, value.class) unless value.is_a? ArrayT
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? Array
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(Array, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? ArrayT
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value) = super(setup_value(value))
38
+
39
+ def ==(other)
40
+ other.is_a?(ArrayT) && other.t == @value
41
+ end
42
+
43
+ def !=(other)
44
+ !(other.is_a?(ArrayT) && other.t == @value)
45
+ end
46
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class Boolean < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(Boolean, value.class) unless value.is_a? Boolean
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value)
18
+ valid_classes = [TrueClass, FalseClass]
19
+ valid_classes.include? value.class
20
+ end
21
+
22
+ def validate_value(value)
23
+ raise RubytTypeError.new('TrueClass or FalseClass', value.class) unless valid_value? value
24
+ end
25
+
26
+ def setup_value(value)
27
+ if value.is_a? Boolean
28
+ validate_value(value.t)
29
+
30
+ return value.t
31
+ end
32
+
33
+ validate_value(value)
34
+
35
+ value
36
+ end
37
+
38
+ public
39
+
40
+ def initialize(value) = super(setup_value(value))
41
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RubytError < StandardError; end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'rubyt_error'
4
+
5
+ class RubytMustNotBeNilError < RubytError
6
+ def initialize(message = 'must not be nil') = super(message.nil? ? 'must not be nil' : message)
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'rubyt_error'
4
+
5
+ class RubytTypeError < RubytError
6
+ def initialize(expected_class, actual_class) = super("Expected #{expected_class} but got #{actual_class} instead")
7
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class False < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(False, value.class) unless value.is_a? False
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? FalseClass
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(FalseClass, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? False
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value) = super(setup_value(value))
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class FloatT < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(FloatT, value.class) unless value.is_a? FloatT
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? Float
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(Float, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? FloatT
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value) = super(setup_value(value))
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class HashT < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(HashT, value.class) unless value.is_a? HashT
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? Hash
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(Hash, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? HashT
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value) = super(setup_value(value))
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class IntegerT < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(IntegerT, value.class) unless value.is_a? IntegerT
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? Integer
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(Integer, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? IntegerT
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value) = super(setup_value(value))
38
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Object
4
+ def must(message = nil)
5
+ raise RubytMustNotBeNilError, message if nil?
6
+
7
+ self
8
+ end
9
+ end
data/lib/types/nil.rb ADDED
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class Nil < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(Nil, value.class) unless value.is_a? Nil
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? NilClass
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(NilClass, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? Nil
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value = nil) = super(setup_value(value))
38
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class NilableString < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(NilableString, value.class) unless value.is_a? NilableString
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value)
18
+ valid_classes = [NilClass, String]
19
+ valid_classes.include? value.class
20
+ end
21
+
22
+ def validate_value(value)
23
+ raise RubytTypeError.new('NilClass or String', value.class) unless valid_value? value
24
+ end
25
+
26
+ def setup_value(value)
27
+ if value.is_a? NilableString
28
+ validate_value(value.t)
29
+
30
+ return value.t
31
+ end
32
+
33
+ validate_value(value)
34
+
35
+ value
36
+ end
37
+
38
+ public
39
+
40
+ def initialize(value = nil) = super(setup_value(value))
41
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'array_t'
5
+ require_relative 'errors/rubyt_type_error'
6
+
7
+ class StringT < Any
8
+ class << self
9
+ def t(*values)
10
+ validated_values = ArrayT.new(
11
+ values.map do |value|
12
+ raise RubytTypeError.new(StringT, value.class) unless value.is_a? StringT
13
+
14
+ value
15
+ end
16
+ )
17
+
18
+ return validated_values.t.first if validated_values.t.length == 1
19
+
20
+ validated_values
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def valid_value?(value) = value.is_a? String
27
+
28
+ def validate_value(value)
29
+ raise RubytTypeError.new(String, value.class) unless valid_value? value
30
+ end
31
+
32
+ def setup_value(value)
33
+ if value.is_a? StringT
34
+ validate_value(value.t)
35
+
36
+ return value.t
37
+ end
38
+
39
+ validate_value(value)
40
+
41
+ value
42
+ end
43
+
44
+ public
45
+
46
+ def initialize(value) = super(setup_value(value))
47
+
48
+ def ==(other)
49
+ other.is_a?(StringT) && other.t == @value
50
+ end
51
+
52
+ def !=(other)
53
+ !(other.is_a?(StringT) && other.t == @value)
54
+ end
55
+ end
data/lib/types/true.rb ADDED
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'any'
4
+ require_relative 'errors/rubyt_type_error'
5
+
6
+ class True < Any
7
+ class << self
8
+ def t(value)
9
+ raise RubytTypeError.new(True, value.class) unless value.is_a? True
10
+
11
+ value
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def valid_value?(value) = value.is_a? TrueClass
18
+
19
+ def validate_value(value)
20
+ raise RubytTypeError.new(TrueClass, value.class) unless valid_value? value
21
+ end
22
+
23
+ def setup_value(value)
24
+ if value.is_a? True
25
+ validate_value(value.t)
26
+
27
+ return value.t
28
+ end
29
+
30
+ validate_value(value)
31
+
32
+ value
33
+ end
34
+
35
+ public
36
+
37
+ def initialize(value) = super(setup_value(value))
38
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - ZaikoXander
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Rubyt is a ruby gem that provides type checking functionality. It includes
14
+ support for various types such as Boolean, Integer, String, Array, Hash and more.
15
+ This gem is designed to enforce type safety, facilitating the creation of readable
16
+ and maintainable code. It includes custom error handling for type mismatches. With
17
+ its ease of use and integration, it can seamlessly fit into existing projects.
18
+ email:
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - lib/rubyt.rb
24
+ - lib/types/any.rb
25
+ - lib/types/array_t.rb
26
+ - lib/types/boolean.rb
27
+ - lib/types/errors/rubyt_error.rb
28
+ - lib/types/errors/rubyt_must_not_be_nil_error.rb
29
+ - lib/types/errors/rubyt_type_error.rb
30
+ - lib/types/false.rb
31
+ - lib/types/float_t.rb
32
+ - lib/types/hash_t.rb
33
+ - lib/types/integer_t.rb
34
+ - lib/types/monkey_patching/object.rb
35
+ - lib/types/nil.rb
36
+ - lib/types/nilable_string.rb
37
+ - lib/types/string_t.rb
38
+ - lib/types/true.rb
39
+ homepage: https://github.com/ZaikoXander/rubyt
40
+ licenses:
41
+ - MIT
42
+ metadata:
43
+ rubygems_mfa_required: 'true'
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: 3.2.2
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubygems_version: 3.4.10
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: A ruby type checking gem
63
+ test_files: []