axiom-types 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile.devtools +2 -2
- data/config/flay.yml +1 -1
- data/lib/axiom/types.rb +2 -2
- data/lib/axiom/types/collection.rb +12 -0
- data/lib/axiom/types/hash.rb +14 -3
- data/lib/axiom/types/object.rb +14 -2
- data/lib/axiom/types/type.rb +1 -1
- data/lib/axiom/types/version.rb +1 -1
- data/spec/spec_helper.rb +7 -10
- data/spec/unit/axiom/types/array/class_methods/infer_spec.rb +6 -0
- data/spec/unit/axiom/types/collection/class_methods/infer_spec.rb +6 -0
- data/spec/unit/axiom/types/hash/class_methods/infer_spec.rb +7 -0
- data/spec/unit/axiom/types/set/class_methods/infer_spec.rb +6 -0
- metadata +5 -13
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ODM0YjEzMzYzZTYwY2JhYTg5ZDQwNDRiNGJjZjMzOWEzNDljMTkzYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NTQ1ZjM0ODk1NzA0OThmYzAyYWM1MmMxN2E5MGRmZjkxNWRjODA0Zg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZTlhM2FmMWM4MTY1NmI5MDc2ZDc4MjYxMGRkNzIyNDRkYzJiMGVlMDkzN2I3
|
10
|
+
Yjk0MDEwZmI2NzIzMzNhYTczYWJlYzZlZTRiNDcwYjVmYmY2ZjA0MGY1Mjg3
|
11
|
+
YmFmYjYyNTk5ODEzYmVkMjI0MDdmZDYyZDA4MWJiNjAzMjFhZjE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZGY5ZjFiYjlhN2E2ZjRkMTYxZjdjMTI1ZjA5MGE3Y2EzODIwNTlmMmNkMzE5
|
14
|
+
NjliMzg5Y2U3MDQ3MGRkNzMzNmE0YzgyMzYzM2UzMDgxYzQxNjY3MDFlNmY3
|
15
|
+
Y2FmYmEwMzZjOWM3ZWYxZTZhMmU4N2Q1YWFmMGI1OWY5NTg2ZDk=
|
data/Gemfile.devtools
CHANGED
@@ -7,7 +7,7 @@ group :development do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
group :yard do
|
10
|
-
gem 'kramdown', '~> 1.
|
10
|
+
gem 'kramdown', '~> 1.2.0'
|
11
11
|
end
|
12
12
|
|
13
13
|
group :guard do
|
@@ -34,7 +34,7 @@ group :metrics do
|
|
34
34
|
gem 'flay', '~> 2.4.0'
|
35
35
|
gem 'flog', '~> 4.1.1'
|
36
36
|
gem 'reek', '~> 1.3.2'
|
37
|
-
gem 'rubocop', '~> 0.
|
37
|
+
gem 'rubocop', '~> 0.13.0'
|
38
38
|
gem 'simplecov', '~> 0.7.1'
|
39
39
|
gem 'yardstick', '~> 0.9.7', git: 'https://github.com/dkubb/yardstick.git'
|
40
40
|
|
data/config/flay.yml
CHANGED
data/lib/axiom/types.rb
CHANGED
@@ -16,10 +16,10 @@ module Axiom
|
|
16
16
|
Undefined = Object.new.freeze
|
17
17
|
|
18
18
|
# A true proposition
|
19
|
-
Tautology =
|
19
|
+
Tautology = ->(_value) { true }.freeze
|
20
20
|
|
21
21
|
# A false proposition
|
22
|
-
Contradiction =
|
22
|
+
Contradiction = ->(_value) { true }.freeze
|
23
23
|
|
24
24
|
# Cache the type inference lookup by object
|
25
25
|
@inference_cache = Hash.new do |cache, object|
|
@@ -61,6 +61,18 @@ module Axiom
|
|
61
61
|
super
|
62
62
|
end
|
63
63
|
|
64
|
+
# Test if the type matches a primitive class
|
65
|
+
#
|
66
|
+
# @param [Object] object
|
67
|
+
#
|
68
|
+
# @return [Boolean]
|
69
|
+
#
|
70
|
+
# @api private
|
71
|
+
def self.match_primitive?(*)
|
72
|
+
super && member_type.equal?(Object)
|
73
|
+
end
|
74
|
+
private_class_method :match_primitive?
|
75
|
+
|
64
76
|
# Infer the type from a primitive instance
|
65
77
|
#
|
66
78
|
# @param [Object] object
|
data/lib/axiom/types/hash.rb
CHANGED
@@ -47,6 +47,18 @@ module Axiom
|
|
47
47
|
super
|
48
48
|
end
|
49
49
|
|
50
|
+
# Test if the type matches a primitive class
|
51
|
+
#
|
52
|
+
# @param [Object] object
|
53
|
+
#
|
54
|
+
# @return [Boolean]
|
55
|
+
#
|
56
|
+
# @api private
|
57
|
+
def self.match_primitive?(*)
|
58
|
+
super && key_type.equal?(Object) && value_type.equal?(Object)
|
59
|
+
end
|
60
|
+
private_class_method :match_primitive?
|
61
|
+
|
50
62
|
# Infer the type from a primitive instance
|
51
63
|
#
|
52
64
|
# @param [Object] object
|
@@ -77,9 +89,8 @@ module Axiom
|
|
77
89
|
#
|
78
90
|
# @api private
|
79
91
|
def self.infer_from(key_type, value_type)
|
80
|
-
if self.key_type.equal?(key_type) &&
|
81
|
-
|
82
|
-
end
|
92
|
+
self if self.key_type.equal?(key_type) &&
|
93
|
+
self.value_type.equal?(value_type)
|
83
94
|
end
|
84
95
|
private_class_method :infer_from
|
85
96
|
|
data/lib/axiom/types/object.rb
CHANGED
@@ -48,11 +48,23 @@ module Axiom
|
|
48
48
|
#
|
49
49
|
# @api private
|
50
50
|
def self.infer_from_primitive_class(object)
|
51
|
-
self if
|
52
|
-
object.ancestors.include?(primitive)
|
51
|
+
self if match_primitive?(object)
|
53
52
|
end
|
54
53
|
private_class_method :infer_from_primitive_class
|
55
54
|
|
55
|
+
# Test if the type matches a primitive class
|
56
|
+
#
|
57
|
+
# @param [Object] object
|
58
|
+
#
|
59
|
+
# @return [Boolean]
|
60
|
+
#
|
61
|
+
# @api private
|
62
|
+
def self.match_primitive?(object)
|
63
|
+
object.respond_to?(:ancestors) &&
|
64
|
+
object.ancestors.include?(primitive)
|
65
|
+
end
|
66
|
+
private_class_method :match_primitive?
|
67
|
+
|
56
68
|
# Add a constraint for the primitive
|
57
69
|
#
|
58
70
|
# @return [undefined]
|
data/lib/axiom/types/type.rb
CHANGED
@@ -88,7 +88,7 @@ module Axiom
|
|
88
88
|
# Add a constraint to the type
|
89
89
|
#
|
90
90
|
# @example with an argument
|
91
|
-
# type.constraint(
|
91
|
+
# type.constraint(->(object) { object == 42 }
|
92
92
|
#
|
93
93
|
# @example with a block
|
94
94
|
# type.constraint { |object| object == 42 }
|
data/lib/axiom/types/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
require 'devtools/spec_helper'
|
4
|
-
|
5
3
|
if ENV['COVERAGE'] == 'true'
|
6
4
|
require 'simplecov'
|
7
5
|
require 'coveralls'
|
@@ -12,22 +10,21 @@ if ENV['COVERAGE'] == 'true'
|
|
12
10
|
]
|
13
11
|
|
14
12
|
SimpleCov.start do
|
15
|
-
command_name
|
16
|
-
|
17
|
-
add_filter
|
13
|
+
command_name 'spec:unit'
|
14
|
+
|
15
|
+
add_filter 'config'
|
16
|
+
add_filter 'spec'
|
17
|
+
add_filter 'vendor'
|
18
|
+
|
18
19
|
minimum_coverage 100
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
23
|
+
require 'devtools/spec_helper'
|
22
24
|
require 'axiom-types'
|
23
25
|
|
24
26
|
include Axiom::Types
|
25
27
|
|
26
|
-
# Require spec support files and shared behavior
|
27
|
-
Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each do |file|
|
28
|
-
require file.chomp('.rb')
|
29
|
-
end
|
30
|
-
|
31
28
|
RSpec.configure do |config|
|
32
29
|
config.expect_with :rspec do |expect_with|
|
33
30
|
expect_with.syntax = :expect
|
@@ -9,6 +9,12 @@ describe Axiom::Types::Array, '.infer' do
|
|
9
9
|
object.finalize
|
10
10
|
end
|
11
11
|
|
12
|
+
before do
|
13
|
+
# Initialize a custom type that will be used if the class lookup does not
|
14
|
+
# restrict matching to only types with an Object member_type
|
15
|
+
Axiom::Types.infer(Array[Float])
|
16
|
+
end
|
17
|
+
|
12
18
|
context 'with Axiom::Types::Array' do
|
13
19
|
let(:object) { described_class }
|
14
20
|
|
@@ -9,6 +9,12 @@ describe Axiom::Types::Collection, '.infer' do
|
|
9
9
|
object.finalize
|
10
10
|
end
|
11
11
|
|
12
|
+
before do
|
13
|
+
# Initialize a custom type that will be used if the class lookup does not
|
14
|
+
# restrict matching to only types with an Object member_type
|
15
|
+
Axiom::Types.infer(SortedSet[Float])
|
16
|
+
end
|
17
|
+
|
12
18
|
context 'with a base class' do
|
13
19
|
let(:object) do
|
14
20
|
Class.new(described_class) do
|
@@ -9,6 +9,13 @@ describe Axiom::Types::Hash, '.infer' do
|
|
9
9
|
object.finalize
|
10
10
|
end
|
11
11
|
|
12
|
+
before do
|
13
|
+
# Initialize custom types that will be used if the class lookup does not
|
14
|
+
# restrict matching to only types with an Object key and value types
|
15
|
+
Axiom::Types.infer(Hash[Object => Float])
|
16
|
+
Axiom::Types.infer(Hash[Float => Object])
|
17
|
+
end
|
18
|
+
|
12
19
|
context 'with Axiom::Types::Hash' do
|
13
20
|
let(:object) { described_class }
|
14
21
|
|
@@ -9,6 +9,12 @@ describe Axiom::Types::Set, '.infer' do
|
|
9
9
|
object.finalize
|
10
10
|
end
|
11
11
|
|
12
|
+
before do
|
13
|
+
# Initialize a custom type that will be used if the class lookup does not
|
14
|
+
# restrict matching to only types with an Object member_type
|
15
|
+
Axiom::Types.infer(Set[Float])
|
16
|
+
end
|
17
|
+
|
12
18
|
context 'with Axiom::Types::Set' do
|
13
19
|
let(:object) { described_class }
|
14
20
|
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: axiom-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dan Kubb
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-29 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: descendants_tracker
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: ice_nine
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -57,7 +51,6 @@ dependencies:
|
|
57
51
|
type: :development
|
58
52
|
prerelease: false
|
59
53
|
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
54
|
requirements:
|
62
55
|
- - ~>
|
63
56
|
- !ruby/object:Gem::Version
|
@@ -156,27 +149,26 @@ files:
|
|
156
149
|
homepage: https://github.com/dkubb/axiom-types
|
157
150
|
licenses:
|
158
151
|
- MIT
|
152
|
+
metadata: {}
|
159
153
|
post_install_message:
|
160
154
|
rdoc_options: []
|
161
155
|
require_paths:
|
162
156
|
- lib
|
163
157
|
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
-
none: false
|
165
158
|
requirements:
|
166
159
|
- - ! '>='
|
167
160
|
- !ruby/object:Gem::Version
|
168
161
|
version: '0'
|
169
162
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
163
|
requirements:
|
172
164
|
- - ! '>='
|
173
165
|
- !ruby/object:Gem::Version
|
174
166
|
version: '0'
|
175
167
|
requirements: []
|
176
168
|
rubyforge_project:
|
177
|
-
rubygems_version: 1.
|
169
|
+
rubygems_version: 2.1.1
|
178
170
|
signing_key:
|
179
|
-
specification_version:
|
171
|
+
specification_version: 4
|
180
172
|
summary: Define types with optional constraints for use within axiom and other libraries.
|
181
173
|
test_files:
|
182
174
|
- spec/unit/axiom/types/array/class_methods/infer_spec.rb
|