kind 0.5.0 → 0.6.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.
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: