activefacts-api 0.9.6 → 0.9.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,3 +7,6 @@ rvm:
7
7
  - jruby-19mode
8
8
  - rbx-18mode
9
9
  - rbx-19mode
10
+ env:
11
+ - ACTIVEFACTS_DEFAULT=yes
12
+ - ACTIVEFACTS_SORT=true
data/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'rake', :group => [:development, :test]
4
+ gem 'rbtree-pure'
4
5
 
5
6
  group :development do
6
7
  gem 'jeweler'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.6
1
+ 0.9.7
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "activefacts-api"
8
- s.version = "0.9.6"
8
+ s.version = "0.9.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Clifford Heath"]
12
- s.date = "2013-01-22"
12
+ s.date = "2013-01-29"
13
13
  s.description = "\nThe ActiveFacts API is a Ruby DSL for managing constellations of elementary facts.\nEach fact is either existential (a value or an entity), characteristic (boolean) or\nbinary relational (A rel B). Relational facts are consistently co-referenced, so you\ncan traverse them efficiently in any direction. Each constellation maintains constraints\nover the fact population.\n"
14
14
  s.email = "clifford.heath@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -75,6 +75,7 @@ Gem::Specification.new do |s|
75
75
  s.specification_version = 3
76
76
 
77
77
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
78
+ s.add_runtime_dependency(%q<rbtree-pure>, [">= 0"])
78
79
  s.add_development_dependency(%q<rake>, [">= 0"])
79
80
  s.add_development_dependency(%q<jeweler>, [">= 0"])
80
81
  s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
@@ -86,6 +87,7 @@ Gem::Specification.new do |s|
86
87
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
87
88
  s.add_development_dependency(%q<rdoc>, [">= 2.4.2"])
88
89
  else
90
+ s.add_dependency(%q<rbtree-pure>, [">= 0"])
89
91
  s.add_dependency(%q<rake>, [">= 0"])
90
92
  s.add_dependency(%q<jeweler>, [">= 0"])
91
93
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
@@ -98,6 +100,7 @@ Gem::Specification.new do |s|
98
100
  s.add_dependency(%q<rdoc>, [">= 2.4.2"])
99
101
  end
100
102
  else
103
+ s.add_dependency(%q<rbtree-pure>, [">= 0"])
101
104
  s.add_dependency(%q<rake>, [">= 0"])
102
105
  s.add_dependency(%q<jeweler>, [">= 0"])
103
106
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
@@ -55,7 +55,7 @@ module ActiveFacts
55
55
  if reason = invalid_object_type(k)
56
56
  raise InvalidObjectType.new(@vocabulary, k, reason)
57
57
  end
58
- h[k] = InstanceIndex.new(self, k)
58
+ h[k] = InstanceIndex.new(self, k, !!(@options[:sort] || ENV['ACTIVEFACTS_SORT']))
59
59
  end
60
60
  end
61
61
 
@@ -111,8 +111,9 @@ module ActiveFacts
111
111
  end
112
112
 
113
113
  # Create a new empty Constellation over the given Vocabulary
114
- def initialize(vocabulary)
114
+ def initialize(vocabulary, options = {})
115
115
  @vocabulary = vocabulary
116
+ @options = options
116
117
  end
117
118
 
118
119
  def assert(klass, *args)
@@ -132,8 +132,8 @@ module ActiveFacts
132
132
  klass.identifying_roles.map do |role|
133
133
  value = send(role.name)
134
134
  counterpart_class = role.counterpart && role.counterpart.object_type
135
- value.identifying_role_values(counterpart_class)
136
- end
135
+ value.identifying_role_values(counterpart_class)
136
+ end
137
137
  end
138
138
 
139
139
  # Identifying role values in a hash form.
@@ -45,4 +45,8 @@ class Guid
45
45
  to_s.eql?(o.to_s)
46
46
  end
47
47
 
48
+ def <=>(o) #:nodoc:
49
+ to_s.<=>(o.to_s)
50
+ end
51
+
48
52
  end
@@ -4,46 +4,123 @@
4
4
  #
5
5
  # Copyright (c) 2009 Clifford Heath. Read the LICENSE file.
6
6
  #
7
- require 'forwardable'
7
+ require 'rbtree'
8
8
 
9
9
  module ActiveFacts
10
10
  module API
11
+ class KeyArray < Array
12
+ def initialize(a)
13
+ super(
14
+ a.map do |e|
15
+ if e.is_a?(Array) && e.class != self.class
16
+ KeyArray.new(e)
17
+ elsif e.eql?(nil)
18
+ []
19
+ else
20
+ e
21
+ end
22
+ end
23
+ )
24
+ end
25
+
26
+ def inspect
27
+ "KeyArray"+super
28
+ end
29
+
30
+ def <=>(other)
31
+ unless other.is_a?(Array) # Any kind of Array, not just KeyArray
32
+ return 1
33
+ end
34
+
35
+ 0.upto(size-1) do |i|
36
+ diff = ((s = self[i]) <=> (o = other[i]) rescue nil)
37
+ case diff
38
+ when 0 # Same value, whether exactly the same class or not
39
+ next
40
+ when nil # Non-comparable values
41
+ return -1 if s == nil # Ensure that nil values come before other values
42
+ return 1 if o == nil
43
+ diff = s.class.name <=> o.class.name # Otherwise just ensure stable sorting
44
+ return diff if diff != 0
45
+ else
46
+ return diff
47
+ end
48
+ end
49
+ 0
50
+ end
51
+ end
52
+
11
53
  #
12
54
  # Each Constellation maintains an InstanceIndex for each ObjectType in its Vocabulary.
13
55
  # The InstanceIndex object is returned when you call @constellation.ObjectType with no
14
56
  # arguments (where ObjectType is the object_type name you're interested in)
15
57
  #
16
58
  class InstanceIndex
17
- extend Forwardable
18
- def_delegators :@hash, :size, :empty?, :each, :map,
19
- :detect, :values, :keys, :detect, :delete
20
59
 
21
- def initialize(constellation, klass)
60
+ # Should be in module ForwardableWithArityChecking
61
+ def self.def_single_delegator(accessor, method, *expected_arities)
62
+ str = %{
63
+ def #{method}(*args, &block)
64
+ if #{expected_arities.size == 0 ? "block" : "!block || !#{expected_arities.inspect}.include?(block.arity)" }
65
+ raise ArgumentError.new("Arity mismatch on #{name}\##{method}, got \#{block ? block.arity : 'none'} want #{expected_arities.inspect} at \#{caller*"\n\t"})")
66
+ end
67
+ #{accessor}.__send__(:#{method}, *args, &block)
68
+ end
69
+ }
70
+ eval(str)
71
+ end
72
+
73
+ def_single_delegator :@hash, :size
74
+ def_single_delegator :@hash, :empty?
75
+ def_single_delegator :@hash, :each, 1, 2, -3
76
+ def_single_delegator :@hash, :map, 1, 2, -3
77
+ def_single_delegator :@hash, :detect, 1
78
+ def_single_delegator :@hash, :values
79
+ def_single_delegator :@hash, :keys
80
+
81
+ def initialize(constellation, klass, sort)
22
82
  @constellation = constellation
23
83
  @klass = klass
24
- @hash = {}
84
+ @sort = sort
85
+ @hash = sort ? RBTree.new : {}
25
86
  end
26
87
 
27
88
  def inspect
28
89
  "<InstanceIndex for #{@klass.name} in #{@constellation.inspect}>"
29
90
  end
30
91
 
92
+ def delete(k)
93
+ @hash.delete(@sort ? form_key(k) : k)
94
+ end
95
+
31
96
  def detect &b
32
97
  r = @hash.detect &b
33
98
  r ? r[1] : nil
34
99
  end
35
100
 
36
101
  def []=(key, value) #:nodoc:
37
- @hash[key] = value
102
+ @hash[@sort ? form_key(key) : key] = value
38
103
  end
39
104
 
40
105
  def [](key)
41
- @hash[key]
106
+ @hash[@sort ? form_key(key) : key]
107
+ end
108
+
109
+ def refresh_key(old_key)
110
+ value = @hash.delete(@sort ? form_key(old_key) : old_key)
111
+ new_key = value.identifying_role_values(@klass)
112
+ @hash[@sort ? form_key(new_key) : new_key] = value if value
42
113
  end
43
114
 
44
- def refresh_key(key)
45
- value = @hash.delete(key)
46
- @hash[value.identifying_role_values(@klass)] = value if value
115
+ def form_key key
116
+ case key
117
+ when Array
118
+ KeyArray.new(key)
119
+ when nil
120
+ []
121
+ else
122
+ key
123
+ end
47
124
  end
48
125
  end
49
126
  end
@@ -191,6 +191,18 @@ class AutoCounter
191
191
  to_s.eql?(o.to_s)
192
192
  end
193
193
 
194
+ def <=>(o) #:nodoc:
195
+ if self.defined? && !o == [] && o.defined?
196
+ if (c = (self.class <=> o.class.name)) != 0
197
+ return c
198
+ else
199
+ return to_i <=> o.to_i
200
+ end
201
+ else
202
+ to_s.<=>(o.to_s)
203
+ end
204
+ end
205
+
194
206
  def identifying_role_values klass = nil
195
207
  self
196
208
  end
@@ -4,16 +4,37 @@
4
4
  #
5
5
  # Copyright (c) 2009 Clifford Heath. Read the LICENSE file.
6
6
  #
7
- require 'forwardable'
8
-
9
7
  module ActiveFacts
10
8
  module API
11
9
 
12
10
  class RoleValues #:nodoc:
13
- include Enumerable
14
- extend Forwardable
11
+ # Paranoia. Because of changes in the implementation, I need to catch old code that calls these delegates incorrectly
12
+ def self.def_single_delegator(accessor, method, *expected_arities)
13
+ str = %{
14
+ def #{method}(*args, &block)
15
+ if #{expected_arities.size == 0 ? "block" : "!block || !#{expected_arities.inspect}.include?(block.arity)" }
16
+ raise ArgumentError.new("Arity mismatch on #{name}\##{method}, got \#{block ? block.arity : 'none'} want #{expected_arities.inspect} at \#{caller*"\n\t"})")
17
+ end
18
+ #{accessor}.__send__(:#{method}, *args, &block)
19
+ end
20
+ }
21
+ eval(str)
22
+ end
15
23
 
16
- def_delegators :@a, :each, :size, :empty?, :-
24
+ def_single_delegator :@a, :all?, 1
25
+ def_single_delegator :@a, :empty?
26
+ def_single_delegator :@a, :include?
27
+ def_single_delegator :@a, :inject, 2
28
+ def_single_delegator :@a, :select, 1
29
+ def_single_delegator :@a, :reject, 1
30
+ def_single_delegator :@a, :size
31
+ def_single_delegator :@a, :sort_by, 1
32
+ def_single_delegator :@a, :to_a
33
+ def_single_delegator :@a, :-
34
+ # These delegators allow a negative arity in RSpec because the tests test it (to make sure the code doesn't pass too many args)
35
+ def_single_delegator :@a, :each, *([1] + Array(defined?(::RSpec) ? -2 : nil))
36
+ def_single_delegator :@a, :detect, 1, *([1] + Array(defined?(::RSpec) ? -2 : nil))
37
+ def_single_delegator :@a, :map, 1, -1
17
38
 
18
39
  def initialize
19
40
  @a = []
@@ -289,7 +289,7 @@ describe "A Constellation instance" do
289
289
  it "should support each" do
290
290
  baz = @constellation.Name("baz")
291
291
  count = 0
292
- @constellation.Name.each { |rv| count += 1 }
292
+ @constellation.Name.each { |k, v| count += 1 }
293
293
  count.should == 1
294
294
  end
295
295
 
@@ -260,7 +260,7 @@ describe "An Entity Type" do
260
260
  end
261
261
 
262
262
  it "should be found in the constellation using the value" do
263
- @c.Room[[@b.identifying_role_values, @rn]].should == @r
263
+ @c.Room[[@b.identifying_role_values, @rn.identifying_role_values]].should == @r
264
264
  @c.Room[[@b.identifying_role_values, 101]].should == @r
265
265
  @c.Room[[['Mackay'], 101]].should == @r
266
266
  end
metadata CHANGED
@@ -1,190 +1,215 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: activefacts-api
3
- version: !ruby/object:Gem::Version
4
- hash: 55
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.7
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 6
10
- version: 0.9.6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Clifford Heath
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-01-22 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: rake
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rbtree-pure
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
22
23
  prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
23
38
  type: :development
24
- requirement: &id001 !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
25
41
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
35
47
  name: jeweler
36
- prerelease: false
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
37
54
  type: :development
38
- requirement: &id002 !ruby/object:Gem::Requirement
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
39
57
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
49
63
  name: rspec
50
- prerelease: false
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.6.0
51
70
  type: :development
52
- requirement: &id003 !ruby/object:Gem::Requirement
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
53
73
  none: false
54
- requirements:
74
+ requirements:
55
75
  - - ~>
56
- - !ruby/object:Gem::Version
57
- hash: 23
58
- segments:
59
- - 2
60
- - 6
61
- - 0
76
+ - !ruby/object:Gem::Version
62
77
  version: 2.6.0
63
- version_requirements: *id003
64
- - !ruby/object:Gem::Dependency
78
+ - !ruby/object:Gem::Dependency
65
79
  name: ruby-debug
66
- prerelease: false
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
67
86
  type: :development
68
- requirement: &id004 !ruby/object:Gem::Requirement
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
69
89
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
77
- version_requirements: *id004
78
- - !ruby/object:Gem::Dependency
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
79
95
  name: debugger
80
- prerelease: false
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
81
102
  type: :development
82
- requirement: &id005 !ruby/object:Gem::Requirement
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
83
105
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
91
- version_requirements: *id005
92
- - !ruby/object:Gem::Dependency
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
93
111
  name: pry
94
- prerelease: false
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
95
118
  type: :development
96
- requirement: &id006 !ruby/object:Gem::Requirement
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
97
121
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
105
- version_requirements: *id006
106
- - !ruby/object:Gem::Dependency
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
107
127
  name: rspec
108
- prerelease: false
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 2.3.0
109
134
  type: :development
110
- requirement: &id007 !ruby/object:Gem::Requirement
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
111
137
  none: false
112
- requirements:
138
+ requirements:
113
139
  - - ~>
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 2
118
- - 3
119
- - 0
140
+ - !ruby/object:Gem::Version
120
141
  version: 2.3.0
121
- version_requirements: *id007
122
- - !ruby/object:Gem::Dependency
142
+ - !ruby/object:Gem::Dependency
123
143
  name: bundler
124
- prerelease: false
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 1.0.0
125
150
  type: :development
126
- requirement: &id008 !ruby/object:Gem::Requirement
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
127
153
  none: false
128
- requirements:
154
+ requirements:
129
155
  - - ~>
130
- - !ruby/object:Gem::Version
131
- hash: 23
132
- segments:
133
- - 1
134
- - 0
135
- - 0
156
+ - !ruby/object:Gem::Version
136
157
  version: 1.0.0
137
- version_requirements: *id008
138
- - !ruby/object:Gem::Dependency
158
+ - !ruby/object:Gem::Dependency
139
159
  name: jeweler
140
- prerelease: false
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 1.5.2
141
166
  type: :development
142
- requirement: &id009 !ruby/object:Gem::Requirement
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
143
169
  none: false
144
- requirements:
170
+ requirements:
145
171
  - - ~>
146
- - !ruby/object:Gem::Version
147
- hash: 7
148
- segments:
149
- - 1
150
- - 5
151
- - 2
172
+ - !ruby/object:Gem::Version
152
173
  version: 1.5.2
153
- version_requirements: *id009
154
- - !ruby/object:Gem::Dependency
174
+ - !ruby/object:Gem::Dependency
155
175
  name: rdoc
156
- prerelease: false
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: 2.4.2
157
182
  type: :development
158
- requirement: &id010 !ruby/object:Gem::Requirement
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
159
185
  none: false
160
- requirements:
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- hash: 27
164
- segments:
165
- - 2
166
- - 4
167
- - 2
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
168
189
  version: 2.4.2
169
- version_requirements: *id010
170
- description: |
171
-
190
+ description: ! '
191
+
172
192
  The ActiveFacts API is a Ruby DSL for managing constellations of elementary facts.
173
- Each fact is either existential (a value or an entity), characteristic (boolean) or
174
- binary relational (A rel B). Relational facts are consistently co-referenced, so you
193
+
194
+ Each fact is either existential (a value or an entity), characteristic (boolean)
195
+ or
196
+
197
+ binary relational (A rel B). Relational facts are consistently co-referenced, so
198
+ you
199
+
175
200
  can traverse them efficiently in any direction. Each constellation maintains constraints
201
+
176
202
  over the fact population.
177
203
 
204
+ '
178
205
  email: clifford.heath@gmail.com
179
206
  executables: []
180
-
181
207
  extensions: []
182
-
183
- extra_rdoc_files:
208
+ extra_rdoc_files:
184
209
  - LICENSE.txt
185
210
  - README.rdoc
186
211
  - TODO
187
- files:
212
+ files:
188
213
  - .document
189
214
  - .rspec
190
215
  - .travis.yml
@@ -233,37 +258,31 @@ files:
233
258
  - spec/support/reduce_exceptions_helper.rb
234
259
  - TODO
235
260
  homepage: http://github.com/cjheath/activefacts-api
236
- licenses:
261
+ licenses:
237
262
  - MIT
238
263
  post_install_message:
239
264
  rdoc_options: []
240
-
241
- require_paths:
265
+ require_paths:
242
266
  - lib
243
- required_ruby_version: !ruby/object:Gem::Requirement
267
+ required_ruby_version: !ruby/object:Gem::Requirement
244
268
  none: false
245
- requirements:
246
- - - ">="
247
- - !ruby/object:Gem::Version
248
- hash: 3
249
- segments:
269
+ requirements:
270
+ - - ! '>='
271
+ - !ruby/object:Gem::Version
272
+ version: '0'
273
+ segments:
250
274
  - 0
251
- version: "0"
252
- required_rubygems_version: !ruby/object:Gem::Requirement
275
+ hash: -1550200325745257681
276
+ required_rubygems_version: !ruby/object:Gem::Requirement
253
277
  none: false
254
- requirements:
255
- - - ">="
256
- - !ruby/object:Gem::Version
257
- hash: 3
258
- segments:
259
- - 0
260
- version: "0"
278
+ requirements:
279
+ - - ! '>='
280
+ - !ruby/object:Gem::Version
281
+ version: '0'
261
282
  requirements: []
262
-
263
283
  rubyforge_project:
264
284
  rubygems_version: 1.8.24
265
285
  signing_key:
266
286
  specification_version: 3
267
287
  summary: A fact-based data model DSL and API
268
288
  test_files: []
269
-