domain 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- # 0.0.1 / FIX ME
1
+ # 1.0.0 / FIX ME
2
2
 
3
3
  * Enhancements
4
4
 
@@ -7,7 +7,7 @@ variables:
7
7
  upper:
8
8
  Domain
9
9
  version:
10
- 1.0.0.rc2
10
+ 1.0.0.rc3
11
11
  summary: |-
12
12
  Provide tools for implementing domains (aka data types)
13
13
  description: |-
@@ -1,39 +1,6 @@
1
1
  module Domain
2
2
  module API
3
3
 
4
- # Returns the super domain of `self`.
5
- #
6
- # @return [Class]
7
- # the super domain of `self` as a ruby class
8
- #
9
- # @api public
10
- def super_domain
11
- superclass
12
- end
13
-
14
- # Returns the sub domains of `self`.
15
- #
16
- # @return [Array]
17
- # an array of sub domains (possibly empty)
18
- #
19
- # @api public
20
- def sub_domains
21
- []
22
- end
23
-
24
- # Returns true if this domain is a super domain of `dom`.
25
- #
26
- # @param [Class] dom
27
- # a domain
28
- #
29
- # @return [Boolean]
30
- # true if self is a super domain of `dom`, false otherwise
31
- #
32
- # @api public
33
- def super_domain_of?(dom)
34
- sub_domains.include?(dom)
35
- end
36
-
37
4
  # Raises a type error for `args`.
38
5
  #
39
6
  # @param [Array] args
@@ -2,7 +2,7 @@ module Domain
2
2
  module Union
3
3
 
4
4
  def self.new(*sub_domains)
5
- DomainFactory.factor [ Methods, class_module(sub_domains) ]
5
+ DomainFactory.factor [ Methods, Comparisons, class_module(sub_domains) ]
6
6
  end
7
7
 
8
8
  def self.class_module(sub_domains)
@@ -29,6 +29,22 @@ module Domain
29
29
  predicate.call(value)
30
30
  end
31
31
 
32
+ # Compares with another domain
33
+ def <=>(other)
34
+ mine, yours = sub_domains_of(self), sub_domains_of(other)
35
+ return 0 if self==other || mine==yours
36
+ return -1 if mine.subset?(yours)
37
+ return 1 if mine.superset?(yours)
38
+ super
39
+ end
40
+
41
+ private
42
+
43
+ def sub_domains_of(x)
44
+ return x.sub_domains.to_set if x.respond_to?(:sub_domains)
45
+ [ x ].to_set
46
+ end
47
+
32
48
  end # module Methods
33
49
 
34
50
  end # class Union
@@ -1,2 +1,3 @@
1
1
  require_relative 'support/equalizer'
2
+ require_relative 'support/comparisons'
2
3
  require_relative 'support/domain_factory'
@@ -0,0 +1,21 @@
1
+ module Domain
2
+ module Comparisons
3
+
4
+ def >(other)
5
+ (x = (self <=> other)) && (x > 0)
6
+ end
7
+
8
+ def >=(other)
9
+ (x = (self <=> other)) && (x >= 0)
10
+ end
11
+
12
+ def <(other)
13
+ (x = (self <=> other)) && (x < 0)
14
+ end
15
+
16
+ def <=(other)
17
+ (x = (self <=> other)) && (x <= 0)
18
+ end
19
+
20
+ end # module Comparisons
21
+ end # module Domain
@@ -31,21 +31,6 @@ module Domain
31
31
  equality_components.map{|c| c.hash }.reduce(self.class.hash, :^)
32
32
  end
33
33
 
34
- # Compare the object with other object for equality
35
- #
36
- # @example
37
- # object.eql?(other) # => true or false
38
- #
39
- # @param [Object] other
40
- # the other object to compare with
41
- #
42
- # @return [Boolean]
43
- #
44
- # @api public
45
- def eql?(other)
46
- instance_of?(other.class) and cmp?(__method__, other)
47
- end
48
-
49
34
  # Compare the object with other object for equivalency
50
35
  #
51
36
  # @example
@@ -61,6 +46,7 @@ module Domain
61
46
  return false unless self.class <=> other.class
62
47
  cmp?(__method__, other)
63
48
  end
49
+ alias :eql? :==
64
50
 
65
51
  private
66
52
 
@@ -3,7 +3,7 @@ module Domain
3
3
 
4
4
  MAJOR = 1
5
5
  MINOR = 0
6
- TINY = "0.rc2"
6
+ TINY = "0.rc3"
7
7
 
8
8
  def self.to_s
9
9
  [ MAJOR, MINOR, TINY ].join('.')
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ module Domain
3
+ describe SByC, "<=>" do
4
+
5
+ it 'detects a super-domain' do
6
+ (NegInt <=> Integer).should eq(-1)
7
+ (NegInt <=> Numeric).should eq(-1)
8
+ end
9
+
10
+ it 'detects a non ancestor' do
11
+ (NegInt <=> String).should be_nil
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ module Domain
3
+ describe Union, "<=>" do
4
+
5
+ it 'returns 1 when a super domain' do
6
+ (Boolean <=> TrueClass).should eq(1)
7
+ end
8
+
9
+ it 'returns 0 on itself' do
10
+ (Boolean <=> Boolean).should eq(0)
11
+ end
12
+
13
+ it 'returns 0 on equivalent' do
14
+ (Boolean <=> Domain.union(TrueClass, FalseClass)).should eq(0)
15
+ end
16
+
17
+ it 'returns 1 on superset of domains ' do
18
+ (Boolean <=> Domain.union(TrueClass)).should eq(1)
19
+ end
20
+
21
+ it 'returns -1 on subset of domains ' do
22
+ (Domain.union(TrueClass) <=> Boolean).should eq(-1)
23
+ end
24
+
25
+ it 'returns -1 when compared with Object' do
26
+ (Boolean <=> Object).should eq(-1)
27
+ end
28
+
29
+ it 'returns nil when not a super domain' do
30
+ (Boolean <=> Integer).should be_nil
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ module Domain
3
+ describe Union, ">=" do
4
+
5
+ it 'returns true when a super domain' do
6
+ (Boolean >= TrueClass).should be_true
7
+ end
8
+
9
+ it 'returns true on itself' do
10
+ (Boolean >= Boolean).should be_true
11
+ end
12
+
13
+ it 'returns false when not a super domain' do
14
+ (Boolean >= Integer).should be_false
15
+ end
16
+
17
+ end
18
+ end
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
  module Domain
3
- describe SByC, "super_domain_of?" do
3
+ describe Union, ">" do
4
4
 
5
5
  it 'returns true when a super domain' do
6
- Boolean.should be_super_domain_of(TrueClass)
6
+ (Boolean > TrueClass).should be_true
7
7
  end
8
8
 
9
9
  it 'returns false on itself' do
10
- Boolean.should_not be_super_domain_of(Boolean)
10
+ (Boolean > Boolean).should be_false
11
11
  end
12
12
 
13
13
  it 'returns false when not a super domain' do
14
- Boolean.should_not be_super_domain_of(Integer)
14
+ (Boolean > Integer).should be_false
15
15
  end
16
16
 
17
17
  end
@@ -2,9 +2,29 @@ shared_examples_for 'a domain class' do
2
2
 
3
3
  it{ should be_a(Class) }
4
4
 
5
- it{ should respond_to(:sub_domains) }
6
- it{ should respond_to(:super_domain) }
7
-
8
5
  it{ should respond_to(:third_party_extension) }
9
6
 
7
+ context 'comparisons' do
8
+
9
+ it 'should compare with itself' do
10
+ (subject <=> subject).should eq(0)
11
+ end
12
+
13
+ it 'should <= with itself' do
14
+ (subject <= subject).should be_true
15
+ end
16
+
17
+ it 'should < with itself' do
18
+ (subject < subject).should be_false
19
+ end
20
+
21
+ it 'should >= with itself' do
22
+ (subject >= subject).should be_true
23
+ end
24
+
25
+ it 'should > with itself' do
26
+ (subject > subject).should be_false
27
+ end
28
+ end
29
+
10
30
  end
@@ -68,7 +68,7 @@ module Domain
68
68
 
69
69
  context 'with equivalent of a subclass' do
70
70
  let(:other){ Class.new(domain).new(1, 2) }
71
- it{ should be_false }
71
+ it{ should be_true }
72
72
  end
73
73
 
74
74
  context 'with non equivalent' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: domain
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc2
4
+ version: 1.0.0.rc3
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-28 00:00:00.000000000 Z
12
+ date: 2012-10-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -66,6 +66,7 @@ files:
66
66
  - lib/domain/factory/union.rb
67
67
  - lib/domain/factory.rb
68
68
  - lib/domain/loader.rb
69
+ - lib/domain/support/comparisons.rb
69
70
  - lib/domain/support/domain_factory.rb
70
71
  - lib/domain/support/equalizer.rb
71
72
  - lib/domain/support.rb
@@ -81,11 +82,10 @@ files:
81
82
  - spec/factory/reuse_domain/test_recoat.rb
82
83
  - spec/factory/reuse_domain/test_reuse.rb
83
84
  - spec/factory/reuse_domain/test_values.rb
85
+ - spec/factory/sbyc_domain/test_comparison.rb
84
86
  - spec/factory/sbyc_domain/test_new.rb
85
87
  - spec/factory/sbyc_domain/test_predicate.rb
86
- - spec/factory/sbyc_domain/test_sub_domains.rb
87
88
  - spec/factory/sbyc_domain/test_super_domain.rb
88
- - spec/factory/sbyc_domain/test_super_domain_of.rb
89
89
  - spec/factory/sbyc_domain/test_triple_equal.rb
90
90
  - spec/factory/scalar_domain/test_component_reader.rb
91
91
  - spec/factory/scalar_domain/test_hash.rb
@@ -94,11 +94,12 @@ files:
94
94
  - spec/factory/test_sbyc.rb
95
95
  - spec/factory/test_scalar.rb
96
96
  - spec/factory/test_union.rb
97
+ - spec/factory/union_domain/test_comparison.rb
98
+ - spec/factory/union_domain/test_greater_or_equal_to.rb
99
+ - spec/factory/union_domain/test_greater_than.rb
97
100
  - spec/factory/union_domain/test_new.rb
98
101
  - spec/factory/union_domain/test_predicate.rb
99
102
  - spec/factory/union_domain/test_sub_domains.rb
100
- - spec/factory/union_domain/test_super_domain.rb
101
- - spec/factory/union_domain/test_super_domain_of.rb
102
103
  - spec/factory/union_domain/test_triple_equal.rb
103
104
  - spec/fixtures/attr_list.rb
104
105
  - spec/fixtures/boolean.rb
@@ -146,11 +147,10 @@ test_files:
146
147
  - spec/factory/reuse_domain/test_recoat.rb
147
148
  - spec/factory/reuse_domain/test_reuse.rb
148
149
  - spec/factory/reuse_domain/test_values.rb
150
+ - spec/factory/sbyc_domain/test_comparison.rb
149
151
  - spec/factory/sbyc_domain/test_new.rb
150
152
  - spec/factory/sbyc_domain/test_predicate.rb
151
- - spec/factory/sbyc_domain/test_sub_domains.rb
152
153
  - spec/factory/sbyc_domain/test_super_domain.rb
153
- - spec/factory/sbyc_domain/test_super_domain_of.rb
154
154
  - spec/factory/sbyc_domain/test_triple_equal.rb
155
155
  - spec/factory/scalar_domain/test_component_reader.rb
156
156
  - spec/factory/scalar_domain/test_hash.rb
@@ -159,11 +159,12 @@ test_files:
159
159
  - spec/factory/test_sbyc.rb
160
160
  - spec/factory/test_scalar.rb
161
161
  - spec/factory/test_union.rb
162
+ - spec/factory/union_domain/test_comparison.rb
163
+ - spec/factory/union_domain/test_greater_or_equal_to.rb
164
+ - spec/factory/union_domain/test_greater_than.rb
162
165
  - spec/factory/union_domain/test_new.rb
163
166
  - spec/factory/union_domain/test_predicate.rb
164
167
  - spec/factory/union_domain/test_sub_domains.rb
165
- - spec/factory/union_domain/test_super_domain.rb
166
- - spec/factory/union_domain/test_super_domain_of.rb
167
168
  - spec/factory/union_domain/test_triple_equal.rb
168
169
  - spec/fixtures/attr_list.rb
169
170
  - spec/fixtures/boolean.rb
@@ -1,14 +0,0 @@
1
- require 'spec_helper'
2
- module Domain
3
- describe SByC, "sub_domains" do
4
-
5
- it 'returns the sub domains passed at construction' do
6
- Boolean.sub_domains.should eq([TrueClass, FalseClass])
7
- end
8
-
9
- it 'defaults an empty array' do
10
- NegInt.sub_domains.should eq([])
11
- end
12
-
13
- end
14
- end
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
- module Domain
3
- describe Union, "super_domain" do
4
-
5
- it 'returns the super domain passed at construction' do
6
- Boolean.super_domain.should be(Object)
7
- end
8
-
9
- end
10
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
- module Domain
3
- describe Union, "super_domain_of?" do
4
-
5
- it 'returns true when a super domain' do
6
- Boolean.should be_super_domain_of(TrueClass)
7
- end
8
-
9
- it 'returns false on itself' do
10
- Boolean.should_not be_super_domain_of(Boolean)
11
- end
12
-
13
- it 'returns false when not a super domain' do
14
- Boolean.should_not be_super_domain_of(Integer)
15
- end
16
-
17
- end
18
- end