kind 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -0
  3. data/lib/kind.rb +16 -11
  4. data/lib/kind/version.rb +1 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 381c55689c9c4b8077f859e76370db5f7c5f17efabdb83fb2902a2e33d602c42
4
- data.tar.gz: de00093039551f1b6020a9d3a6cac31890f8fa7edfa1af620d4e9b3af1264749
3
+ metadata.gz: 33889c9e4fc1ad94b529e15711ae7d8a36271710367769d3d675301977e1e83c
4
+ data.tar.gz: 39ed9dfb4b99ca346ebc82561592f4d867479576c6d749aa41f8d86b4e2bf2df
5
5
  SHA512:
6
- metadata.gz: cc6b4078e770ab68a50b7435f6b9a174dbe555b47ba64e0cf1e523e3b3bd1a1e936aa7368251a7b9be7b9203a48d6ab37d415d908c2cfcca49311a9cf0d425a7
7
- data.tar.gz: b3d64254b98c33836bc903132fb4ba7dd75fd501fb6ad9bc14f1d4ab3a92e45d95dc4c81ea7f91559d2e43f110c9c7ad7650394d0bed7a585d04d70b876685df
6
+ metadata.gz: 1b4093ba9909ea58cd319e0cafda608dc78f259da971685c1a9d778a012d17c5f5ab027739aed74c0eb354b7f7572e01749d3ce7822b9be4a15d7cb26be5f254
7
+ data.tar.gz: 881b88913a5172e3cb3bcfd73b466bd26422d0213e9088600c3c611bb20b3c326dfb8f6bdfcac0556b2aa5f2462a197522e59f94f147eaa9beb85102ee4dc0f5
data/README.md CHANGED
@@ -51,6 +51,20 @@ Or install it yourself as:
51
51
 
52
52
  ## Usage
53
53
 
54
+ With this gem you can add some kind of type checking at runtime. e.g:
55
+
56
+ ```ruby
57
+ def sum(a, b)
58
+ Kind.of.Numeric(a) + Kind.of.Numeric(b)
59
+ end
60
+
61
+ sum(1, 1)
62
+ # 2
63
+
64
+ sum('1', 1)
65
+ # Kind::Error ("\"1\" expected to be a kind of Numeric")
66
+ ```
67
+
54
68
  ### Verifying the kind of some object
55
69
 
56
70
  By default, basic verifications are strict. So, when you perform `Kind.of.Hash(value)`, if the given value was a Hash, the value itself will be returned, but if it isn't the right type, an error will be raised.
@@ -47,10 +47,10 @@ module Kind
47
47
  end
48
48
 
49
49
  module Of
50
- def self.call(klass, object)
50
+ def self.call(klass, object, name: nil)
51
51
  return object if object.is_a?(klass)
52
52
 
53
- raise Kind::Error.new(klass, object)
53
+ raise Kind::Error.new((name || klass.name), object)
54
54
  end
55
55
 
56
56
  def self.Class(object = nil)
@@ -91,7 +91,7 @@ module Kind
91
91
 
92
92
  return Kind::Of::%{name} if object.nil? && default.nil?
93
93
 
94
- Kind::Of.call(::%{name}, object || default)
94
+ Kind::Of.call(::%{name}, (object || default), name: "%{name}".freeze)
95
95
  end
96
96
  RUBY
97
97
 
@@ -103,22 +103,25 @@ module Kind
103
103
 
104
104
  private_constant :KIND_OF, :KIND_IS
105
105
 
106
- def add(mod)
107
- name = Kind.of.Module(mod).name
106
+ def add(mod, name: nil)
107
+ mod_name = Kind.of.Module(mod).name
108
+ chk_name = name ? Kind::Of.(String, name) : mod_name
108
109
 
109
- unless Of.respond_to?(name)
110
- Of.instance_eval(KIND_OF % { name: name })
111
- Of.const_set(name, Checker.new(mod).freeze)
110
+ unless Of.respond_to?(chk_name)
111
+ Of.instance_eval(KIND_OF % { name: chk_name })
112
+ Of.const_set(chk_name, Checker.new(mod).freeze)
112
113
  end
113
114
 
114
- Is.instance_eval(KIND_IS % { name: name }) unless Is.respond_to?(name)
115
+ unless Is.respond_to?(chk_name)
116
+ Is.instance_eval(KIND_IS % { name: chk_name })
117
+ end
115
118
  end
116
119
  end
117
120
 
118
121
  def self.is; Is; end
119
122
  def self.of; Of; end
120
123
 
121
- # Classes
124
+ # -- Classes
122
125
  [
123
126
  String, Symbol, Numeric, Integer, Float, Regexp, Time,
124
127
  Array, Range, Hash, Struct, Enumerator,
@@ -126,7 +129,9 @@ module Kind
126
129
  IO, File
127
130
  ].each { |klass| Types.add(klass) }
128
131
 
129
- # Modules
132
+ Types.add(Queue, name: 'Queue'.freeze)
133
+
134
+ # -- Modules
130
135
  [
131
136
  Enumerable, Comparable
132
137
  ].each { |klass| Types.add(klass) }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kind
4
- VERSION = '0.5.0'
4
+ VERSION = '0.6.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kind
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-05 00:00:00.000000000 Z
11
+ date: 2020-01-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Basic type system for Ruby (free of dependencies).
14
14
  email: