tinytyping 0.4.0 → 0.5.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.
- checksums.yaml +5 -5
- data/.rubocop.yml +14 -2
- data/Gemfile +2 -0
- data/Rakefile +2 -0
- data/bin/console +1 -0
- data/lib/tinytyping.rb +32 -14
- data/lib/tinytyping/version.rb +3 -1
- data/tinytyping.gemspec +4 -2
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 36dc3d61798a42ffdca99b014ccf5022017339ac6ff2eab5d5f882b4c8588f54
|
4
|
+
data.tar.gz: 11ec5b0fd4d5f3aebcb46213bdcd2d68b0c9a1a5498208a6b1ae707a91e61f97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d9cd1391863d07cbd78348bd110924ae5c6931a05a06d0aee0720a9530379a94169209a5de28e53c90b39a13ce63ee14b78e92201ff26798bb4b4b4fe086896
|
7
|
+
data.tar.gz: '08589546b13b0cd18605a9668b8fe3bffaf9dd6a33c6adda3e5c542d38bffabfadb4cf5d320d0f699a06eed31f10372407170af302ef7c06db9cdc80fe1e8965'
|
data/.rubocop.yml
CHANGED
@@ -1,14 +1,26 @@
|
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
|
4
|
+
Layout/LineLength:
|
5
|
+
Enabled: false
|
6
|
+
|
1
7
|
Metrics/AbcSize:
|
2
8
|
Enabled: false
|
3
9
|
|
4
|
-
Metrics/
|
10
|
+
Metrics/BlockLength:
|
5
11
|
Enabled: false
|
6
12
|
|
7
|
-
Metrics/
|
13
|
+
Metrics/CyclomaticComplexity:
|
8
14
|
Enabled: false
|
9
15
|
|
10
16
|
Metrics/MethodLength:
|
11
17
|
Enabled: false
|
12
18
|
|
19
|
+
Metrics/PerceivedComplexity:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Naming/MethodParameterName:
|
23
|
+
Enabled: false
|
24
|
+
|
13
25
|
Style/Documentation:
|
14
26
|
Enabled: false
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/lib/tinytyping.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module TinyTyping
|
2
4
|
class Tester
|
3
5
|
class << self
|
@@ -9,10 +11,12 @@ module TinyTyping
|
|
9
11
|
value == type
|
10
12
|
when Array
|
11
13
|
return false unless value.is_a?(Array)
|
14
|
+
|
12
15
|
value.each { |val| expect(type, val) }
|
13
16
|
true
|
14
17
|
when Hash
|
15
18
|
return false unless value.is_a?(Hash)
|
19
|
+
|
16
20
|
class_key_types = []
|
17
21
|
named_key_types = []
|
18
22
|
type.each_key do |key|
|
@@ -42,6 +46,7 @@ module TinyTyping
|
|
42
46
|
|
43
47
|
def expect(types, value)
|
44
48
|
return if expect_any(types, value)
|
49
|
+
|
45
50
|
raise ArgumentError, "#{value.inspect} isn't #{(Array.try_convert(types) || [types]).map(&:inspect).join(' or ')}."
|
46
51
|
end
|
47
52
|
end
|
@@ -81,26 +86,39 @@ module TinyTyping
|
|
81
86
|
class << self
|
82
87
|
private
|
83
88
|
|
84
|
-
def
|
85
|
-
|
86
|
-
|
87
|
-
|
89
|
+
def method_added(method)
|
90
|
+
return unless @next_decorator
|
91
|
+
|
92
|
+
unbound_method = instance_method(method)
|
93
|
+
|
94
|
+
if unbound_method.arity == @next_decorator_airty && (@prev_added_method.nil? || method.to_s == "#{@prev_added_method}=")
|
95
|
+
decorator = @next_decorator
|
96
|
+
@next_decorator = @prev_added_method = nil
|
97
|
+
define_method(method) do |*args, &block|
|
98
|
+
decorator.call(unbound_method.bind(self), *args, &block)
|
88
99
|
end
|
89
|
-
|
100
|
+
elsif unbound_method.arity.zero? && @prev_added_method.nil?
|
101
|
+
@prev_added_method = method
|
102
|
+
else
|
103
|
+
raise ArgumentError, "#{method}.arity(#{unbound_method.arity}) does not match decorator's arity(#{@next_decorator_airty})"
|
90
104
|
end
|
91
105
|
end
|
92
106
|
|
93
|
-
def
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
98
|
-
end
|
107
|
+
def decorate(airty, &block)
|
108
|
+
@next_decorator_airty = airty
|
109
|
+
@next_decorator = block
|
110
|
+
@prev_added_method = nil
|
99
111
|
end
|
100
112
|
|
101
|
-
def
|
102
|
-
|
103
|
-
|
113
|
+
def typed(*types)
|
114
|
+
return if types.empty?
|
115
|
+
|
116
|
+
decorate(types.size) do |method, *args, &block|
|
117
|
+
types.each_with_index do |type, index|
|
118
|
+
TinyTyping.test!(args[index], *(Array.try_convert(type) || [type]))
|
119
|
+
end
|
120
|
+
method.call(*args, &block)
|
121
|
+
end
|
104
122
|
end
|
105
123
|
end
|
106
124
|
end
|
data/lib/tinytyping/version.rb
CHANGED
data/tinytyping.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
5
|
require 'tinytyping/version'
|
4
6
|
|
@@ -22,6 +24,6 @@ Gem::Specification.new do |spec|
|
|
22
24
|
|
23
25
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
24
26
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
25
|
-
spec.add_development_dependency 'rake', '~>
|
27
|
+
spec.add_development_dependency 'rake', '~> 12.3.3'
|
26
28
|
spec.add_development_dependency 'rubocop'
|
27
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinytyping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ofk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 12.3.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 12.3.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubocop
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,8 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
|
-
|
108
|
-
rubygems_version: 2.6.13
|
107
|
+
rubygems_version: 3.0.3
|
109
108
|
signing_key:
|
110
109
|
specification_version: 4
|
111
110
|
summary: tinytyping is simply type check.
|