value 0.1.0 → 0.2.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.
data/Rakefile CHANGED
@@ -1,9 +1,20 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
+ require 'inventory/rake/tasks'
3
4
  require 'lookout/rake/tasks'
4
- require 'yard'
5
5
 
6
- Lookout::Rake::Tasks::Test.new
7
- Lookout::Rake::Tasks::Gem.new
8
- Lookout::Rake::Tasks::Tags.new
9
- YARD::Rake::YardocTask.new
6
+ $:.unshift File.expand_path('../lib', __FILE__)
7
+ require 'value/version'
8
+
9
+ Inventory::Rake::Tasks.define Value::Version, :gem => proc{ |_, s|
10
+ s.author = 'Nikolai Weibull'
11
+ s.email = 'now@bitwi.se'
12
+ s.homepage = 'https://github.com/now/value'
13
+
14
+ s.add_development_dependency 'yard', '~> 0.7.0'
15
+
16
+ s.add_runtime_dependency 'inventory', '~> 0.2.0'
17
+ }
18
+
19
+ # TODO: Silence warnings generated from YARD (remove this once we plug them)
20
+ Lookout::Rake::Tasks::Test.new :options => []
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module Value::Comparable
4
+ include Comparable
5
+
6
+ def <=>(other)
7
+ return nil unless self.class == other.class
8
+ v = nil
9
+ (values.comparable.any?{ |e| v = (send(e) <=> other.send(e)).nonzero? } and v) or 0
10
+ end
11
+
12
+ alias eql? ==
13
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class Value::Values
4
+ include Enumerable
5
+
6
+ def initialize(*values)
7
+ options = Hash === values.last ? values.pop : {}
8
+ values.pop if @block = values.last.to_s.start_with?('&') ? values.last.to_s[1..-1].to_sym : nil
9
+ values.pop if @splat = (values.last and values.last.to_s.start_with?('*')) ?
10
+ values.last.to_s[1..-1].to_sym : nil
11
+ required, optional = values.partition{ |e| not(Array === e) }
12
+ @required = required.map(&:to_sym)
13
+ @optional = optional.map{ |e| [e.first.to_sym, e.last] }
14
+ all = to_a
15
+ @comparable = Array === options[:comparable] ?
16
+ options[:comparable].each{ |e|
17
+ raise ArgumentError, '%p is not among comparable members %s' % [e, all.map(&:inspect).join(', ')] unless all.include?(e)
18
+ } :
19
+ all
20
+ end
21
+
22
+ def each
23
+ return enum_for(__method__) unless block_given?
24
+ required.each do |value|
25
+ yield value
26
+ end
27
+ optional.each do |value, _|
28
+ yield value
29
+ end
30
+ yield splat if splat
31
+ yield block if block
32
+ self
33
+ end
34
+
35
+ def ==(other)
36
+ self.class == other.class and
37
+ required == other.required and
38
+ optional == other.optional and
39
+ splat == other.splat and
40
+ block == other.block
41
+ end
42
+
43
+ attr_reader :required, :optional, :splat, :block, :comparable
44
+ end
data/lib/value/version.rb CHANGED
@@ -1,5 +1,21 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- class Value
4
- Version = '0.1.0'
3
+ require 'inventory'
4
+
5
+ module Value
6
+ Version = Inventory.new(0, 2, 0){
7
+ def libs
8
+ %w'
9
+ value/comparable.rb
10
+ value/values.rb
11
+ '
12
+ end
13
+
14
+ def additional_libs
15
+ super +
16
+ %w'
17
+ value/yard.rb
18
+ '
19
+ end
20
+ }
5
21
  end
data/lib/value/yard.rb ADDED
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'yard'
4
+
5
+ class YARD::Handlers::Ruby::ValuesHandler < YARD::Handlers::Ruby::Base
6
+ handles method_call('Value')
7
+ namespace_only
8
+
9
+ process do
10
+ parameters = statement.parameters(false)
11
+ if YARD::Parser::Ruby::AstNode === parameters[-1][0] and
12
+ parameters[-1][0].type == :assoc and
13
+ parameters[-1].jump(:ident).source == 'comparable'
14
+ parameters.pop
15
+ ancestor 'Comparable'
16
+ ancestor 'Value::Comparable'
17
+ end
18
+ ancestor 'Value'
19
+ define('initialize', parameters.map{ |e| [e.jump(:ident).source, e.type == :array ? e[0][1].source : nil] }).
20
+ docstring.tags(:param).select{ |e| e.text and not e.text.empty? }.each do |e|
21
+ define e.name.sub(/\A[&*]/, ''), [],
22
+ '@return [%s] %s' % [e.types.join(', '), e.text], :protected
23
+ e.text = ''
24
+ end
25
+ end
26
+
27
+ def ancestor(name)
28
+ modul = Proxy.new(:root, name).tap{ |m| m.type = :module }
29
+ namespace.mixins(scope).unshift(modul) unless namespace.mixins(scope).include? modul
30
+ end
31
+
32
+ def define(name, parameters, docstring = nil, visibility = :public)
33
+ YARD::CodeObjects::MethodObject.new(namespace, name).tap{ |m|
34
+ register(m)
35
+ m.signature = 'def %s%s' %
36
+ [name,
37
+ parameters.empty? ?
38
+ '' :
39
+ '(%s)' % parameters.map{ |n, d| d ? '%s = %s' % [n, d] : n }.join(', ')]
40
+ m.parameters = parameters
41
+ m.docstring = docstring if docstring
42
+ m.visibility = visibility
43
+ }
44
+ end
45
+ end
46
+
47
+ YARD::Handlers::Ruby::MacroHandler::IGNORE_METHODS['Value'] = true
data/lib/value.rb CHANGED
@@ -1,49 +1,64 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- class Value
4
- autoload :Version, 'value/version'
5
-
6
- class << self
7
- def values(*values)
8
- if values.empty?
9
- raise RuntimeError,
10
- 'no values have been set for class: %p' % self if not defined? @values
11
- @values
12
- else
13
- @values ||= []
14
- @values.concat values.map{ |value| value.to_sym }.tap{ |symbols|
15
- attr_reader(*symbols)
16
- protected(*symbols)
17
- }
18
- end
19
- end
20
- end
21
-
3
+ module Value
22
4
  def initialize(*arguments)
23
5
  raise ArgumentError,
24
6
  'wrong number of arguments (%d for %d)' %
25
- [arguments.length, self.class.values.length] if
26
- arguments.length != self.class.values.length
27
- self.class.values.each_with_index do |value, index|
7
+ [arguments.length, values.required.length] if
8
+ arguments.length < values.required.length
9
+ raise ArgumentError,
10
+ 'wrong number of arguments (%d for %d)' %
11
+ [arguments.length,
12
+ values.required.length + values.optional.length] if
13
+ arguments.length > values.required.length +
14
+ values.optional.length and not values.splat
15
+ instance_variable_set :"@#{values.block}",
16
+ block_given? ? Proc.new : nil if values.block
17
+ instance_variable_set :"@#{values.splat}",
18
+ arguments[values.required.length +
19
+ values.optional.length..-1] if values.splat
20
+ values.required.each_with_index do |value, index|
28
21
  instance_variable_set :"@#{value}", arguments[index]
29
22
  end
30
- freeze
23
+ values.optional.each_with_index do |(value, default), index|
24
+ offset = values.required.length + index
25
+ instance_variable_set :"@#{value}",
26
+ offset >= arguments.length ? default : arguments[offset]
27
+ end
31
28
  end
32
29
 
33
30
  def ==(other)
34
31
  self.class == other.class and
35
- self.class.values.all?{ |value| send(value) == other.send(value) }
32
+ values.all?{ |value| send(value) == other.send(value) }
36
33
  end
37
34
 
38
35
  alias eql? ==
39
36
 
40
37
  def hash
41
- self.class.hash ^ self.class.values.map{ |value| send(value) }.hash
38
+ self.class.hash ^ values.map{ |value| send(value) }.hash
42
39
  end
43
40
 
44
41
  def inspect
45
42
  '%s.new(%s)' %
46
43
  [self.class,
47
- self.class.values.map{ |value| send(value).inspect }.join(', ')]
44
+ values.map{ |value| send(value).inspect }.join(', ')]
45
+ end
46
+
47
+ load File.expand_path('../value/version.rb', __FILE__)
48
+ Version.load
49
+ end
50
+
51
+ class Module
52
+ def Value(first, *rest)
53
+ options = Hash === rest.last ? rest.pop : {}
54
+ values = Value::Values.new(*([first] + rest).push({:comparable => options[:comparable]}))
55
+ attr_reader(*values)
56
+ protected(*values)
57
+ define_method :values do
58
+ values
59
+ end
60
+ private :values
61
+ include Value::Comparable if options[:comparable]
62
+ include Value
48
63
  end
49
64
  end
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ Expectations do
4
+ expect 0 do
5
+ c = Class.new{ Value(:a, :comparable => true) }
6
+ c.new(1) <=> c.new(1)
7
+ end
8
+
9
+ expect 0 do
10
+ c = Class.new{ Value(:a, :b, :comparable => [:a]) }
11
+ c.new(1, 2) <=> c.new(1, 3)
12
+ end
13
+
14
+ expect ArgumentError.new(':c is not among comparable members :a, :b') do
15
+ Class.new{ Value(:a, :b, :comparable => [:c]) }
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ Expectations do
4
+ end
@@ -0,0 +1,4 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ Expectations do
4
+ end
@@ -0,0 +1,126 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require 'value/yard'
4
+
5
+ Expectations do
6
+ expect [YARD::CodeObjects::Proxy.new(:root, 'Value')] do
7
+ YARD::Registry.clear
8
+ YARD::Parser::SourceParser.parse_string(<<EOS)
9
+ class A
10
+ # @param [String] a
11
+ # @param [Integer] b The b
12
+ Value(:a, :b)
13
+ end
14
+ EOS
15
+ YARD::Registry.at('A').mixins(:instance)
16
+ end
17
+
18
+ expect 'Represents As.' do
19
+ YARD::Registry.clear
20
+ YARD::Parser::SourceParser.parse_string(<<EOS)
21
+ class A
22
+ # Represents As.
23
+ Value(:a, :b)
24
+ end
25
+ EOS
26
+ YARD::Registry.at('A#initialize').docstring
27
+ end
28
+
29
+ expect [['a', nil], ['b', '3']] do
30
+ YARD::Registry.clear
31
+ YARD::Parser::SourceParser.parse_string(<<EOS)
32
+ class A
33
+ Value(:a, [:b, 3])
34
+ end
35
+ EOS
36
+ YARD::Registry.at('A#initialize').parameters
37
+ end
38
+
39
+ expect [:b, :initialize] do
40
+ YARD::Registry.clear
41
+ YARD::Parser::SourceParser.parse_string(<<EOS)
42
+ class A
43
+ # @param [String] a
44
+ # @param [Integer] b The b
45
+ Value(:a, :b)
46
+ end
47
+ EOS
48
+ YARD::Registry.all(:method).map(&:name).sort
49
+ end
50
+
51
+ expect [:b, :initialize] do
52
+ YARD::Registry.clear
53
+ YARD::Parser::SourceParser.parse_string(<<EOS)
54
+ class A
55
+ # @param [String] a
56
+ # @param [Integer] *b The b
57
+ Value(:a, :'*b')
58
+ end
59
+ EOS
60
+ YARD::Registry.all(:method).map(&:name).sort
61
+ end
62
+
63
+ expect [:b, :initialize] do
64
+ YARD::Registry.clear
65
+ YARD::Parser::SourceParser.parse_string(<<EOS)
66
+ class A
67
+ # @param [String] a
68
+ # @param [Integer] &b The b
69
+ Value(:a, :'&b')
70
+ end
71
+ EOS
72
+ YARD::Registry.all(:method).map(&:name).sort
73
+ end
74
+
75
+ expect nil do
76
+ YARD::Registry.clear
77
+ YARD::Parser::SourceParser.parse_string(<<EOS)
78
+ class A
79
+ # @param [String] a
80
+ # @param [Integer] b The b
81
+ Value(:a, :b)
82
+ end
83
+ EOS
84
+ YARD::Registry.at('A#a')
85
+ end
86
+
87
+ expect '@return [Integer] The b' do
88
+ YARD::Registry.clear
89
+ YARD::Parser::SourceParser.parse_string(<<EOS)
90
+ class A
91
+ # @param [String] a
92
+ # @param [Integer] b The b
93
+ Value(:a, :b)
94
+ end
95
+ EOS
96
+ YARD::Registry.at('A#b').docstring.to_raw
97
+ end
98
+
99
+ expect %w'Value Value::Comparable Comparable' do
100
+ YARD::Registry.clear
101
+ YARD::Parser::SourceParser.parse_string(<<EOS)
102
+ class A
103
+ # @param [String] a
104
+ Value(:a, :comparable => true)
105
+ end
106
+ EOS
107
+ YARD::Registry.at('A').inheritance_tree(true)[1..3].map(&:path)
108
+ end
109
+
110
+ expect %w'Value Value::Comparable Comparable' do
111
+ YARD::Registry.clear
112
+ YARD::Parser::SourceParser.parse_string(<<EOS)
113
+ module A
114
+ # @param [String] a
115
+ Value(:a, :comparable => true)
116
+ end
117
+ class B
118
+ include A
119
+ # @param [String] a
120
+ # @param [String] b
121
+ Value(:a, :b, :comparable => true)
122
+ end
123
+ EOS
124
+ YARD::Registry.at('B').inheritance_tree(true)[1..3].map(&:path)
125
+ end
126
+ end
data/test/unit/value.rb CHANGED
@@ -1,82 +1,178 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  Expectations do
4
- expect RuntimeError.new(/\Ano values have been set for class: /) do
5
- Class.new(Value).values
4
+ expect ArgumentError.new('wrong number of arguments (0 for 1)') do
5
+ Class.new{ Value(:a) }.new
6
6
  end
7
7
 
8
- expect [:a, :b, :c] do
9
- Class.new(Value).values(:a, :b, :c)
8
+ expect ArgumentError.new('wrong number of arguments (2 for 1)') do
9
+ Class.new{ Value(:a) }.new(1, 2)
10
10
  end
11
11
 
12
- expect [:a, :b, :c] do
13
- Class.new(Value).tap{ |c| c.values :a, :b }.values(:c)
12
+ expect Value do
13
+ Class.new{ Value(:a) }.new(1)
14
+ end
15
+
16
+ expect NoMethodError do
17
+ Class.new{ Value(:a) }.new(1).a
18
+ end
19
+
20
+ expect 1 do
21
+ Class.new{ Value(:a) }.new(1).instance_eval{ a }
22
+ end
23
+
24
+ expect 1 do
25
+ Class.new{ Value(:a) }.new(1).instance_variable_get(:@a)
26
+ end
27
+
28
+ expect [] do
29
+ Class.new{ Value(:'*a') }.new.instance_eval{ a }
30
+ end
31
+
32
+ expect [1, 2, 3] do
33
+ Class.new{ Value(:'*a') }.new(1, 2, 3).instance_eval{ a }
14
34
  end
15
35
 
16
36
  expect ArgumentError.new('wrong number of arguments (0 for 1)') do
17
- Class.new(Value).tap{ |c| c.values :a }.new
37
+ Class.new{ Value(:a, :'*b') }.new
18
38
  end
19
39
 
20
- expect ArgumentError.new('wrong number of arguments (2 for 1)') do
21
- Class.new(Value).tap{ |c| c.values :a }.new(1, 2)
40
+ expect 1 do
41
+ Class.new{ Value(:a, :'*b') }.new(1).instance_eval{ a }
22
42
  end
23
43
 
24
- expect Class.new(Value) do |c|
25
- c.tap{ |c| c.values :a }.new(1)
44
+ expect [] do
45
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1).instance_eval{ b }
26
46
  end
27
47
 
28
- expect true do
29
- Class.new(Value).tap{ |c| c.values :a }.new(1).frozen?
48
+ expect 1 do
49
+ Class.new{ Value(:a, :'*b') }.new(1, 2, 3).instance_eval{ a }
30
50
  end
31
51
 
32
- expect NoMethodError do
33
- Class.new(Value).tap{ |c| c.values :a }.new(1).a
52
+ expect [2, 3] do
53
+ Class.new{ Value(:a, :'*b') }.new(1, 2, 3).instance_eval{ b }
54
+ end
55
+
56
+ expect nil do
57
+ Class.new{ Value(:'&a') }.new.instance_eval{ a }
58
+ end
59
+
60
+ expect 1 do
61
+ Class.new{ Value(:'&a') }.new{ 1 }.instance_eval{ a.call }
34
62
  end
35
63
 
36
64
  expect 1 do
37
- Class.new(Value).tap{ |c| c.values :a }.new(1).instance_eval{ a }
65
+ Class.new{ Value(:a, :'&b') }.new(1).instance_eval{ a }
66
+ end
67
+
68
+ expect nil do
69
+ Class.new{ Value(:a, :'&b') }.new(1).instance_eval{ b }
70
+ end
71
+
72
+ expect 1 do
73
+ Class.new{ Value(:a, :'&b') }.new(1){ 2 }.instance_eval{ a }
74
+ end
75
+
76
+ expect 2 do
77
+ Class.new{ Value(:a, :'&b') }.new(1){ 2 }.instance_eval{ b.call }
38
78
  end
39
79
 
40
80
  expect 1 do
41
- Class.new(Value).tap{ |c| c.values :a }.new(1).instance_variable_get(:@a)
81
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1).instance_eval{ a }
82
+ end
83
+
84
+ expect [] do
85
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1).instance_eval{ b }
86
+ end
87
+
88
+ expect nil do
89
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1).instance_eval{ c }
90
+ end
91
+
92
+ expect 1 do
93
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1, 2, 3){ 4 }.instance_eval{ a }
94
+ end
95
+
96
+ expect [2, 3] do
97
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1, 2, 3){ 4 }.instance_eval{ b }
98
+ end
99
+
100
+ expect 4 do
101
+ Class.new{ Value(:a, :'*b', :'&c') }.new(1, 2, 3){ 4 }.instance_eval{ c.call }
102
+ end
103
+
104
+ expect ArgumentError.new('wrong number of arguments (0 for 1)') do
105
+ Class.new{ Value(:a, [:b, 2]) }.new
106
+ end
107
+
108
+ expect 1 do
109
+ Class.new{ Value(:a, [:b, 2]) }.new(1).instance_eval{ a }
110
+ end
111
+
112
+ expect 2 do
113
+ Class.new{ Value(:a, [:b, 2]) }.new(1).instance_eval{ b }
114
+ end
115
+
116
+ expect ArgumentError.new('wrong number of arguments (3 for 2)') do
117
+ Class.new{ Value(:a, [:b, 2]) }.new(1, 2, 3)
118
+ end
119
+
120
+ expect 1 do
121
+ Class.new{ Value(:a, [:b, 2], :'*c') }.new(1, 4, 2).instance_eval{ a }
122
+ end
123
+
124
+ expect 4 do
125
+ Class.new{ Value(:a, [:b, 2], :'*c') }.new(1, 4, 2).instance_eval{ b }
126
+ end
127
+
128
+ expect [2] do
129
+ Class.new{ Value(:a, [:b, 2], :'*c') }.new(1, 4, 2).instance_eval{ c }
42
130
  end
43
131
 
44
132
  expect true do
45
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
133
+ c = Class.new{ Value(:a, :b, :c) }
46
134
  c.new(1, 2, 3) == c.new(1, 2, 3)
47
135
  end
48
136
 
49
137
  expect false do
50
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
138
+ c = Class.new{ Value(:a, :b, :c) }
51
139
  c.new(1, 2, 3) == c.new(2, 3, 1)
52
140
  end
53
141
 
54
142
  expect true do
55
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
143
+ c = Class.new{ Value(:a, :b, :c) }
56
144
  c.new(1, 2, 3).eql? c.new(1, 2, 3)
57
145
  end
58
146
 
59
147
  expect false do
60
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
148
+ c = Class.new{ Value(:a, :b, :c) }
61
149
  c.new(1, 2, 3).eql? c.new(2, 3, 1)
62
150
  end
63
151
 
64
152
  expect true do
65
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
153
+ c = Class.new{ Value(:a, :b, :c) }
66
154
  c.new(1, 2, 3).hash == c.new(1, 2, 3).hash
67
155
  end
68
156
 
69
157
  expect false do
70
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
158
+ c = Class.new{ Value(:a, :b, :c) }
71
159
  c.new(1, 2, 3).hash == c.new(2, 3, 1).hash
72
160
  end
73
161
 
74
162
  expect false do
75
- c = Class.new(Value).tap{ |c| c.values :a, :b, :c }
163
+ c = Class.new{ Value(:a, :b, :c) }
76
164
  c.new(1, 2, 3).hash == [1, 2, 3].hash
77
165
  end
78
166
 
79
167
  expect(/\A#<Class:0x[[:xdigit:]]+>\.new\(1, 2, 3\)\z/) do
80
- Class.new(Value).tap{ |c| c.values :a, :b, :c }.new(1, 2, 3).inspect
168
+ Class.new{ Value(:a, :b, :c) }.new(1, 2, 3).inspect
169
+ end
170
+
171
+ expect 1 do
172
+ Class.new{ include Module.new{ Value(:a) } }.new(1).instance_eval{ a }
173
+ end
174
+
175
+ expect [Value, Value::Comparable, Comparable] do
176
+ Class.new{ Value(:a, :comparable => true) }.ancestors[1..3]
81
177
  end
82
178
  end
metadata CHANGED
@@ -1,117 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: value
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Nikolai Weibull
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-05 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: lookout
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-04-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: yard
16
+ requirement: &2152363560 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 2
32
- - 0
33
- version: "2.0"
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.0
34
22
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rbtags
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2152363560
25
+ - !ruby/object:Gem::Dependency
26
+ name: inventory
27
+ requirement: &2152363060 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
29
+ requirements:
42
30
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 27
45
- segments:
46
- - 0
47
- - 1
48
- - 0
49
- version: 0.1.0
50
- type: :development
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: yard
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.0
33
+ type: :runtime
54
34
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
- requirements:
58
- - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- - 7
64
- - 0
65
- version: 0.7.0
66
- type: :development
67
- version_requirements: *id003
68
- description: " Value\n\n Value is a library for defining value objects in Ruby.\n"
35
+ version_requirements: *2152363060
36
+ description: ! " Value\n\n Value is a library
37
+ for defining value objects in Ruby.\n"
69
38
  email: now@bitwi.se
70
39
  executables: []
71
-
72
40
  extensions: []
73
-
74
41
  extra_rdoc_files: []
75
-
76
- files:
77
- - lib/value/version.rb
42
+ files:
43
+ - lib/value/comparable.rb
44
+ - lib/value/values.rb
78
45
  - lib/value.rb
46
+ - lib/value/version.rb
47
+ - lib/value/yard.rb
48
+ - test/unit/value/comparable.rb
49
+ - test/unit/value/values.rb
79
50
  - test/unit/value.rb
51
+ - test/unit/value/version.rb
52
+ - test/unit/value/yard.rb
80
53
  - README
81
54
  - Rakefile
82
- has_rdoc: true
83
- homepage: http://github.com/now/value
55
+ homepage: https://github.com/now/value
84
56
  licenses: []
85
-
86
57
  post_install_message:
87
58
  rdoc_options: []
88
-
89
- require_paths:
59
+ require_paths:
90
60
  - lib
91
- required_ruby_version: !ruby/object:Gem::Requirement
61
+ required_ruby_version: !ruby/object:Gem::Requirement
92
62
  none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 3
97
- segments:
98
- - 0
99
- version: "0"
100
- required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
68
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: 3
106
- segments:
107
- - 0
108
- version: "0"
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
109
73
  requirements: []
110
-
111
74
  rubyforge_project:
112
- rubygems_version: 1.3.7
75
+ rubygems_version: 1.8.11
113
76
  signing_key:
114
77
  specification_version: 3
115
78
  summary: Value is a library for defining value objects in Ruby.
116
79
  test_files: []
117
-