activefacts-api 0.9.6 → 0.9.7

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.
@@ -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
-