axiom-types 0.0.3 → 0.0.4
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 +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
|