iudex-da 1.4.0-java → 1.5.0-java

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 78b67b192c7ddc6613cab0a4f4946d2d78c5d96c
4
+ data.tar.gz: 9b240415f16b58d8c264caf9a34a1b791208758b
5
+ SHA512:
6
+ metadata.gz: 2f49c63c044a60a37d589737998e743c742db233b02bf14ffa02f7a47ceeafa128000ea72a5759fafc3cff12d9425c5cb67c1669a17a28b34b177a833958c5c9
7
+ data.tar.gz: b4c7fe664325e13b5f5c9d77653aedd4930bedb0c800c095c00a08bcd5d2dec9f48af9b467bfe736a9173e7b67920e0c1e97f2add895e69882891a93800bc9b9
@@ -1,3 +1,19 @@
1
+ === 1.5.0 (2014-3-27)
2
+ Note: this release is at this time considered experimental or an "alpha"
3
+ by comparison to 1.4.0
4
+ * Upgrade to jdbc-postgres ~> 9.3.1100 (also tested 9.3.1101)
5
+ * Upgrade to sequel ~> 4.8.0
6
+ * Expand to >= 1.4.0, < 1.7 iudex-core dependency
7
+ * Add WorkPoller.isolation_level accessor
8
+ * Add WorkPoller.max_retries accessor
9
+ * Auto-compute WorkPoller max_urls from set domain_union
10
+ * Add exponential backoff delay option to ContentReader.handleError
11
+ retries, setter in WorkPoller
12
+ * Add explicit LOCK mode option to URLs table in ContentReader, setter
13
+ in WorkPoller
14
+ * Add null check to WorkPoller select_with_retry call (may occur when
15
+ retries exhausted).
16
+
1
17
  === 1.4.0 (2013-10-29)
2
18
  * Add experimental WorkPoller.do_reserve support, which utilizes
3
19
  PostgreSQL 9.1+ writable Common Table Expressions (CTEs) to
@@ -32,4 +32,4 @@ test/test_migrate.rb
32
32
  test/test_pool_factory.rb
33
33
  test/test_url_model.rb
34
34
  test/test_work_poller.rb
35
- lib/iudex-da/iudex-da-1.4.0.jar
35
+ lib/iudex-da/iudex-da-1.5.0.jar
@@ -16,7 +16,7 @@ meta-data store and work priority queue.
16
16
 
17
17
  == License
18
18
 
19
- Copyright (c) 2008-2013 David Kellum
19
+ Copyright (c) 2008-2014 David Kellum
20
20
 
21
21
  Licensed under the Apache License, Version 2.0 (the "License"); you
22
22
  may not use this file except in compliance with the License. You may
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env jruby
2
2
  # -*- ruby -*-
3
3
  #--
4
- # Copyright (c) 2008-2013 David Kellum
4
+ # Copyright (c) 2008-2014 David Kellum
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you
7
7
  # may not use this file except in compliance with the License. You
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env jruby
2
2
  # -*- ruby -*-
3
3
  #--
4
- # Copyright (c) 2008-2013 David Kellum
4
+ # Copyright (c) 2008-2014 David Kellum
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you
7
7
  # may not use this file except in compliance with the License. You
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env jruby
2
2
  # -*- ruby -*-
3
3
  #--
4
- # Copyright (c) 2008-2013 David Kellum
4
+ # Copyright (c) 2008-2014 David Kellum
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you
7
7
  # may not use this file except in compliance with the License. You
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env jruby
2
2
  # -*- ruby -*-
3
3
  #--
4
- # Copyright (c) 2008-2013 David Kellum
4
+ # Copyright (c) 2008-2014 David Kellum
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you
7
7
  # may not use this file except in compliance with the License. You
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env jruby
2
2
  # -*- ruby -*-
3
3
  #--
4
- # Copyright (c) 2008-2013 David Kellum
4
+ # Copyright (c) 2008-2014 David Kellum
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License"); you
7
7
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -16,7 +16,7 @@
16
16
 
17
17
  module Iudex
18
18
  module DA
19
- VERSION = '1.4.0'
19
+ VERSION = '1.5.0'
20
20
 
21
21
  LIB_DIR = File.dirname( __FILE__ ) # :nodoc:
22
22
  end
@@ -1,6 +1,6 @@
1
1
 
2
2
  #--
3
- # Copyright (c) 2008-2013 David Kellum
3
+ # Copyright (c) 2008-2014 David Kellum
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License"); you
6
6
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You may
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You may
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You may
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You may
@@ -58,7 +58,8 @@ module Iudex::DA
58
58
  alias :max_host_urls= :max_domain_urls=
59
59
 
60
60
  # The limit of urls to obtain in a single poll (across all
61
- # domains) (default: 50_000)
61
+ # domains). May be overridden by #domain_union=
62
+ # (default: 50_000)
62
63
  attr_accessor :max_urls
63
64
 
64
65
  # A secondary limit on the number of urls to consider, taking the
@@ -148,13 +149,13 @@ module Iudex::DA
148
149
  # unconfigured domains.
149
150
  #
150
151
  # :max:: The maximum number of visit urls to obtain in one poll
151
- # (instead of the top level #max_urls.) A zero max_urls
152
- # value excludes this domain/type (efficiently).
152
+ # (instead of the top level #max_urls.) A zero value
153
+ # efficiently excludes this domain/type.
153
154
  #
154
155
  # Also a [ domain, max ] alternative syntax is currently supported
155
156
  # but deprecated.
156
157
  #
157
- attr_accessor :domain_union
158
+ attr_reader :domain_union
158
159
 
159
160
  # An array containing a zero-based position and a total number of
160
161
  # evenly divided segments within the range of possible uhash
@@ -163,6 +164,25 @@ module Iudex::DA
163
164
  # being a hash on the entire URL. (default: nil, off)
164
165
  attr_accessor :uhash_slice
165
166
 
167
+ # Max-retries not including the initial try (Default: 10)
168
+ attr_accessor :max_retries
169
+
170
+ # The transaction isolation level to use for work polling
171
+ # See {java.sql.Connection constants}[http://docs.oracle.com/javase/7/docs/api/constant-values.html#java.sql.Connection.TRANSACTION_READ_COMMITTED]
172
+ # (Default: TRANSACTION_REPEATABLE_READ (4))
173
+ attr_accessor :isolation_level
174
+
175
+ # URLS table explicit lock mode (String) for work polling,
176
+ # i.e. 'EXCLUSIVE'. Try this if deadlocks/contention are otherwise causing work
177
+ # poll starvation or excessive retries.
178
+ # (Default: nil -> implicit locking via isolation level only)
179
+ attr_accessor :lock_mode
180
+
181
+ # Maximum first-retry back-off delay in seconds (Float). Actual
182
+ # delay is a random value from 0..(value * 2^tries) for each
183
+ # retry. Default: 0.0 : no delay
184
+ attr_accessor :backoff
185
+
166
186
  def initialize( data_source, mapper )
167
187
  super()
168
188
 
@@ -178,6 +198,9 @@ module Iudex::DA
178
198
  @max_discard_ratio = 2.0/3.0
179
199
  @max_reserved_time_s = nil
180
200
  @last_none_reserved = Time.now
201
+ @max_retries = 10
202
+ @isolation_level = 4
203
+ @backoff = 0.0
181
204
 
182
205
  @age_coef_1 = 0.2
183
206
  @age_coef_2 = 0.1
@@ -205,7 +228,8 @@ module Iudex::DA
205
228
 
206
229
  # Override GenericWorkPollStrategy
207
230
  def pollWorkImpl( visit_queue )
208
- visit_queue.add_all( poll( visit_queue.order_count ) )
231
+ res = poll( visit_queue.order_count )
232
+ visit_queue.add_all( res ) if res
209
233
  rescue SQLException => x
210
234
  @log.error( "On poll: ", x )
211
235
  end
@@ -266,7 +290,10 @@ module Iudex::DA
266
290
  def reader
267
291
  @reader ||= ContentReader.new( @data_source, @mapper ).tap do |r|
268
292
  r.priority_adjusted = aged_priority?
269
- r.max_retries = 10
293
+ r.max_retries = max_retries
294
+ r.isolation_level = isolation_level
295
+ r.lock_mode = lock_mode if lock_mode
296
+ r.backoff = ( backoff * 1_000 ).round if backoff > 0.0
270
297
  end
271
298
  end
272
299
 
@@ -275,9 +302,12 @@ module Iudex::DA
275
302
  args = args.flatten.dup
276
303
  opts = args.last.is_a?( Hash ) ? args.pop.dup : {}
277
304
  opts[ :domain ] ||= args.shift
278
- opts[ :max ] ||= args.shift
305
+ opts[ :max ] ||= args.shift || @max_urls
279
306
  opts
280
307
  end
308
+ @max_urls = @domain_union.inject( 0 ) do |m,r|
309
+ m + r[:max]
310
+ end
281
311
  end
282
312
 
283
313
  def domain_union?
@@ -301,13 +331,8 @@ module Iudex::DA
301
331
  subqueries = []
302
332
  @domain_union.each do | opts |
303
333
  opts = opts.dup
304
- if opts[ :max ]
305
- opts[ :max ] = ( opts[ :max ] * ( max_urls - current_urls ) /
306
- max_urls.to_f ).floor
307
- else
308
- opts[ :max ] = ( max_urls - current_urls )
309
- end
310
-
334
+ opts[ :max ] = ( opts[ :max ] * ( max_urls - current_urls ) /
335
+ max_urls.to_f ).floor
311
336
  next if opts[ :max ] == 0
312
337
 
313
338
  c = criteria.dup
data/pom.xml CHANGED
@@ -5,7 +5,7 @@
5
5
  <groupId>iudex</groupId>
6
6
  <artifactId>iudex-da</artifactId>
7
7
  <packaging>jar</packaging>
8
- <version>1.4.0</version>
8
+ <version>1.5.0</version>
9
9
  <name>Iudex Data Access</name>
10
10
 
11
11
  <parent>
@@ -20,7 +20,7 @@
20
20
  <dependency>
21
21
  <groupId>iudex</groupId>
22
22
  <artifactId>iudex-core</artifactId>
23
- <version>[1.4.0,1.4.999)</version>
23
+ <version>[1.4.0,1.7)</version>
24
24
  </dependency>
25
25
 
26
26
  <dependency>
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2008-2013 David Kellum
2
+ # Copyright (c) 2008-2014 David Kellum
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you
5
5
  # may not use this file except in compliance with the License. You
@@ -2,7 +2,7 @@
2
2
  #.hashdot.profile += jruby-shortlived
3
3
 
4
4
  #--
5
- # Copyright (c) 2008-2013 David Kellum
5
+ # Copyright (c) 2008-2014 David Kellum
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License"); you
8
8
  # may not use this file except in compliance with the License. You may
@@ -2,7 +2,7 @@
2
2
  #.hashdot.profile += jruby-shortlived
3
3
 
4
4
  #--
5
- # Copyright (c) 2008-2013 David Kellum
5
+ # Copyright (c) 2008-2014 David Kellum
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License"); you
8
8
  # may not use this file except in compliance with the License. You
@@ -2,7 +2,7 @@
2
2
  #.hashdot.profile += jruby-shortlived
3
3
 
4
4
  #--
5
- # Copyright (c) 2008-2013 David Kellum
5
+ # Copyright (c) 2008-2014 David Kellum
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License"); you
8
8
  # may not use this file except in compliance with the License. You may
@@ -2,7 +2,7 @@
2
2
  #.hashdot.profile += jruby-shortlived
3
3
 
4
4
  #--
5
- # Copyright (c) 2008-2013 David Kellum
5
+ # Copyright (c) 2008-2014 David Kellum
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License"); you
8
8
  # may not use this file except in compliance with the License. You may
metadata CHANGED
@@ -1,30 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iudex-da
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.4.0
4
+ version: 1.5.0
6
5
  platform: java
7
6
  authors:
8
7
  - David Kellum
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-30 00:00:00.000000000 Z
11
+ date: 2014-03-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: iudex-core
16
15
  version_requirements: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ~>
17
+ - - '>='
19
18
  - !ruby/object:Gem::Version
20
19
  version: 1.4.0
21
- none: false
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '1.7'
22
23
  requirement: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ~>
25
+ - - '>='
25
26
  - !ruby/object:Gem::Version
26
27
  version: 1.4.0
27
- none: false
28
+ - - <
29
+ - !ruby/object:Gem::Version
30
+ version: '1.7'
28
31
  prerelease: false
29
32
  type: :runtime
30
33
  - !ruby/object:Gem::Dependency
@@ -33,14 +36,12 @@ dependencies:
33
36
  requirements:
34
37
  - - ~>
35
38
  - !ruby/object:Gem::Version
36
- version: '3.46'
37
- none: false
39
+ version: 4.8.0
38
40
  requirement: !ruby/object:Gem::Requirement
39
41
  requirements:
40
42
  - - ~>
41
43
  - !ruby/object:Gem::Version
42
- version: '3.46'
43
- none: false
44
+ version: 4.8.0
44
45
  prerelease: false
45
46
  type: :runtime
46
47
  - !ruby/object:Gem::Dependency
@@ -49,14 +50,12 @@ dependencies:
49
50
  requirements:
50
51
  - - ~>
51
52
  - !ruby/object:Gem::Version
52
- version: 9.2.1002
53
- none: false
53
+ version: 9.3.1100
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - ~>
57
57
  - !ruby/object:Gem::Version
58
- version: 9.2.1002
59
- none: false
58
+ version: 9.3.1100
60
59
  prerelease: false
61
60
  type: :runtime
62
61
  - !ruby/object:Gem::Dependency
@@ -66,13 +65,11 @@ dependencies:
66
65
  - - ~>
67
66
  - !ruby/object:Gem::Version
68
67
  version: 1.4.0
69
- none: false
70
68
  requirement: !ruby/object:Gem::Requirement
71
69
  requirements:
72
70
  - - ~>
73
71
  - !ruby/object:Gem::Version
74
72
  version: 1.4.0
75
- none: false
76
73
  prerelease: false
77
74
  type: :runtime
78
75
  - !ruby/object:Gem::Dependency
@@ -82,13 +79,11 @@ dependencies:
82
79
  - - ~>
83
80
  - !ruby/object:Gem::Version
84
81
  version: 1.5.0
85
- none: false
86
82
  requirement: !ruby/object:Gem::Requirement
87
83
  requirements:
88
84
  - - ~>
89
85
  - !ruby/object:Gem::Version
90
86
  version: 1.5.0
91
- none: false
92
87
  prerelease: false
93
88
  type: :runtime
94
89
  - !ruby/object:Gem::Dependency
@@ -98,13 +93,11 @@ dependencies:
98
93
  - - ~>
99
94
  - !ruby/object:Gem::Version
100
95
  version: 4.7.4
101
- none: false
102
96
  requirement: !ruby/object:Gem::Requirement
103
97
  requirements:
104
98
  - - ~>
105
99
  - !ruby/object:Gem::Version
106
100
  version: 4.7.4
107
- none: false
108
101
  prerelease: false
109
102
  type: :development
110
103
  - !ruby/object:Gem::Dependency
@@ -114,13 +107,11 @@ dependencies:
114
107
  - - ~>
115
108
  - !ruby/object:Gem::Version
116
109
  version: '1.5'
117
- none: false
118
110
  requirement: !ruby/object:Gem::Requirement
119
111
  requirements:
120
112
  - - ~>
121
113
  - !ruby/object:Gem::Version
122
114
  version: '1.5'
123
- none: false
124
115
  prerelease: false
125
116
  type: :development
126
117
  - !ruby/object:Gem::Dependency
@@ -129,14 +120,12 @@ dependencies:
129
120
  requirements:
130
121
  - - ~>
131
122
  - !ruby/object:Gem::Version
132
- version: '2.0'
133
- none: false
123
+ version: '2.1'
134
124
  requirement: !ruby/object:Gem::Requirement
135
125
  requirements:
136
126
  - - ~>
137
127
  - !ruby/object:Gem::Version
138
- version: '2.0'
139
- none: false
128
+ version: '2.1'
140
129
  prerelease: false
141
130
  type: :development
142
131
  description: Iudex is a general purpose web crawler and feed processor in ruby/java. The iudex-da gem provides a PostgreSQL-based content meta-data store and work priority queue.
@@ -187,9 +176,11 @@ files:
187
176
  - test/test_pool_factory.rb
188
177
  - test/test_url_model.rb
189
178
  - test/test_work_poller.rb
190
- - lib/iudex-da/iudex-da-1.4.0.jar
179
+ - lib/iudex-da/iudex-da-1.5.0.jar
191
180
  homepage: http://iudex.gravitext.com
192
- licenses: []
181
+ licenses:
182
+ - Apache-2.0
183
+ metadata: {}
193
184
  post_install_message:
194
185
  rdoc_options:
195
186
  - --main
@@ -198,27 +189,18 @@ require_paths:
198
189
  - lib
199
190
  required_ruby_version: !ruby/object:Gem::Requirement
200
191
  requirements:
201
- - - ! '>='
192
+ - - '>='
202
193
  - !ruby/object:Gem::Version
203
- version: '0'
204
- segments:
205
- - 0
206
- hash: 2
207
- none: false
194
+ version: 1.8.7
208
195
  required_rubygems_version: !ruby/object:Gem::Requirement
209
196
  requirements:
210
- - - ! '>='
197
+ - - '>='
211
198
  - !ruby/object:Gem::Version
212
199
  version: '0'
213
- segments:
214
- - 0
215
- hash: 2
216
- none: false
217
200
  requirements: []
218
201
  rubyforge_project:
219
- rubygems_version: 1.8.24
202
+ rubygems_version: 2.1.9
220
203
  signing_key:
221
- specification_version: 3
204
+ specification_version: 4
222
205
  summary: Iudex is a general purpose web crawler and feed processor in ruby/java.
223
206
  test_files: []
224
- ...