iudex-filter 1.2.1-java → 1.3.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.
- data/History.rdoc +8 -0
- data/Manifest.txt +1 -1
- data/lib/iudex-filter/base.rb +1 -1
- data/lib/iudex-filter/filter_chain_factory.rb +60 -21
- data/lib/iudex-filter/{iudex-filter-1.2.1.jar → iudex-filter-1.3.0.jar} +0 -0
- data/lib/iudex-filter/key_helper.rb +2 -2
- data/lib/iudex-filter/proc_filter.rb +44 -12
- data/pom.xml +2 -2
- data/test/test_filter_chain_factory.rb +55 -1
- data/test/test_proc_filter.rb +25 -2
- metadata +139 -122
data/History.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.3.0 (2012-11-8)
|
2
|
+
* Upgrade/narrow to slf4j ~> 1.7.0, logback ~> 1.5
|
3
|
+
* Add FilterChain.alwaysPass option
|
4
|
+
* Add alternative create_chain options Hash syntax
|
5
|
+
* Add fltr_method and support,cleanup in ProcFilter
|
6
|
+
* Simplify KeyHelper.keys
|
7
|
+
* Misc java logging simplifications with slf4j 1.7 varargs
|
8
|
+
|
1
9
|
=== 1.2.1 (2012-9-15)
|
2
10
|
* Upgrade/narrow to gravitext-util ~> 1.6.1
|
3
11
|
* Upgrade to slf4j [1.6.5,1.8), logback ~> 1.2
|
data/Manifest.txt
CHANGED
data/lib/iudex-filter/base.rb
CHANGED
@@ -67,7 +67,9 @@ module Iudex
|
|
67
67
|
flts = filters.flatten.compact
|
68
68
|
log_and_register( flts )
|
69
69
|
|
70
|
-
@chain = create_chain( @description,
|
70
|
+
@chain = create_chain( :desc => @description,
|
71
|
+
:filters => flts,
|
72
|
+
:listener => :main )
|
71
73
|
@listener = ListenerChain.new( listeners )
|
72
74
|
|
73
75
|
# Now replace the temp listener with the final listener
|
@@ -120,41 +122,78 @@ module Iudex
|
|
120
122
|
@main_by_filter_period )
|
121
123
|
end
|
122
124
|
|
123
|
-
# Create, yield to optional block, and
|
124
|
-
#
|
125
|
-
#
|
126
|
-
#
|
127
|
-
|
125
|
+
# Create, yield to optional block, and returns FilterChain if
|
126
|
+
# provided filters is not empty. If empty returns a NoOpFilter
|
127
|
+
# but does not yield.
|
128
|
+
#
|
129
|
+
# A trailing Hash argument is interpreted as options, see
|
130
|
+
# below. Alternative positional parameters equivalent to
|
131
|
+
# either the following are deprecated:
|
132
|
+
#
|
133
|
+
# * filters (Symbol), nil, listener = nil
|
134
|
+
# * desc (~to_s), filters = nil, listener = nil
|
135
|
+
#
|
136
|
+
# === Options
|
137
|
+
#
|
138
|
+
# :desc:: ~>to_s Description of this chain.
|
139
|
+
# :filters:: Symbol method name to send for filters (and also
|
140
|
+
# default description), or an Array of filters.
|
141
|
+
# :listener:: The :main symbol for this filter chains
|
142
|
+
# listeners, or an alternative FilterListener
|
143
|
+
# instance.
|
144
|
+
# :pass:: If truthy, the chain always returns true (pass) on
|
145
|
+
# filter.
|
146
|
+
#
|
147
|
+
def create_chain( *args )
|
148
|
+
|
149
|
+
opts = args.last.is_a?( Hash ) ? args.pop.dup : {}
|
150
|
+
|
151
|
+
# Fold in deprecated positional parameters
|
152
|
+
if args[ 0 ].is_a?( Symbol ) && args[ 1 ].nil?
|
153
|
+
opts[ :filters ] ||= args[ 0 ]
|
154
|
+
else
|
155
|
+
opts[ :desc ] ||= args[ 0 ]
|
156
|
+
opts[ :filters ] ||= args[ 1 ]
|
157
|
+
end
|
158
|
+
|
159
|
+
opts[ :listener ] ||= args[ 2 ]
|
128
160
|
|
129
|
-
|
130
|
-
|
131
|
-
desc
|
161
|
+
# Handle special case of symbol for :filters
|
162
|
+
if opts[ :filters ].is_a?( Symbol )
|
163
|
+
opts[ :desc ] ||= opts[ :filters ].to_s.gsub( /_/, '-' )
|
164
|
+
opts[ :filters ] = send( opts[ :filters ] )
|
132
165
|
end
|
133
166
|
|
134
|
-
flts =
|
167
|
+
flts = Array( opts[ :filters ] ).flatten.compact
|
135
168
|
|
136
|
-
if flts.
|
169
|
+
if flts.empty?
|
137
170
|
NoOpFilter.new
|
138
171
|
else
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
172
|
+
chain = FilterChain.new( opts[ :desc ], flts )
|
173
|
+
|
174
|
+
if opts[ :listener ] == :main
|
175
|
+
chain.listener = @listener
|
176
|
+
elsif opts[ :listener ].nil?
|
177
|
+
chain.listener = log_listener( opts[ :desc ] )
|
144
178
|
else
|
145
|
-
|
179
|
+
chain.listener = opts[ :listener ]
|
146
180
|
end
|
147
|
-
|
148
|
-
|
181
|
+
|
182
|
+
chain.always_pass = true if opts[ :pass ]
|
183
|
+
|
184
|
+
yield chain if block_given?
|
185
|
+
chain
|
149
186
|
end
|
150
187
|
end
|
151
188
|
|
152
189
|
# Create a new Switch given selector key and map of values to
|
153
|
-
# filters, or values to [filters,listener]
|
190
|
+
# filters, or values to [ filters, listener ]
|
154
191
|
def create_switch( key, value_filters_map )
|
155
192
|
switch = Switch.new
|
156
193
|
value_filters_map.each do |value, (filters, listener)|
|
157
|
-
create_chain( value.to_s.downcase,
|
194
|
+
create_chain( :desc => value.to_s.downcase,
|
195
|
+
:filters => filters,
|
196
|
+
:listener => listener ) do |chain|
|
158
197
|
switch.add_proposition( Selector.new( key, value ), chain )
|
159
198
|
end
|
160
199
|
end
|
Binary file
|
@@ -47,9 +47,9 @@ module Iudex
|
|
47
47
|
|
48
48
|
# Map Symbols to Keys
|
49
49
|
def keys( *syms )
|
50
|
-
syms
|
51
|
-
syms.map { |s| s.to_k }.uniq
|
50
|
+
syms.flatten.compact.map { |s| s.to_k }.uniq
|
52
51
|
end
|
52
|
+
|
53
53
|
module_function :keys
|
54
54
|
end
|
55
55
|
end
|
@@ -18,30 +18,62 @@ require 'iudex-filter/filter_base'
|
|
18
18
|
|
19
19
|
module Iudex::Filter
|
20
20
|
|
21
|
-
# Short hand for ProcFilter.new
|
22
|
-
def fltr( &block )
|
23
|
-
ProcFilter.new( caller.first, &block )
|
21
|
+
# Short hand for ProcFilter.new( opts, &block )
|
22
|
+
def fltr( opts = {}, &block )
|
23
|
+
ProcFilter.new( { :caller => caller.first }.merge( opts ), &block )
|
24
24
|
end
|
25
25
|
|
26
|
+
# Return a Procfilter using method( map ) identified by method_symbol
|
27
|
+
# in self's scope as filter. The default :desc is [ method_symbol ].
|
28
|
+
def fltr_method( method_symbol, opts = {} )
|
29
|
+
ProcFilter.new( { :desc => [ method_symbol ] }.merge( opts ),
|
30
|
+
&( method method_symbol ) )
|
31
|
+
end
|
32
|
+
|
33
|
+
# A filter wrapping a Ruby Proc.
|
26
34
|
class ProcFilter < FilterBase
|
27
35
|
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
|
36
|
+
# Use block as implementation of filter(map). The filter will
|
37
|
+
# only return false (reject map, stop chain) if the block returns
|
38
|
+
# the :reject symbol. All other return values are ignored,
|
39
|
+
# including "false".
|
40
|
+
#
|
41
|
+
# === Options
|
42
|
+
#
|
43
|
+
# Passing a String for opts is interpreted as :caller (deprecated
|
44
|
+
# as of 1.3.0)
|
45
|
+
#
|
46
|
+
# :caller:: String from which to compose the description. This is
|
47
|
+
# used under Ruby 1.8 only, obtained via
|
48
|
+
# block.source_location in 1.9.
|
49
|
+
#
|
50
|
+
# :desc:: Array<~to_s> description (overrides caller)
|
51
|
+
#
|
52
|
+
def initialize( opts = {}, &block )
|
33
53
|
@block = block
|
34
54
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
55
|
+
opts = { :caller => opts } if opts.is_a?( String )
|
56
|
+
@description = Array( opts[ :desc ] ).compact
|
57
|
+
|
58
|
+
if @description.empty?
|
59
|
+
if @block.respond_to?( :source_location ) # ruby 1.9
|
60
|
+
clr = @block.source_location
|
61
|
+
else # ruby 1.8
|
62
|
+
clr = opts[ :caller ] || caller.first
|
63
|
+
clr = clr.split( /:/ )
|
64
|
+
end
|
65
|
+
|
66
|
+
@description = [ File.basename( clr[0], ".rb" ), clr[1].to_i ]
|
67
|
+
end
|
68
|
+
|
39
69
|
end
|
40
70
|
|
41
71
|
def describe
|
42
72
|
@description
|
43
73
|
end
|
44
74
|
|
75
|
+
# Calls initialized block, returning true if it returns anything
|
76
|
+
# but :reject
|
45
77
|
def filter( map )
|
46
78
|
( @block.call( map ) != :reject )
|
47
79
|
end
|
data/pom.xml
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
<groupId>iudex</groupId>
|
6
6
|
<artifactId>iudex-filter</artifactId>
|
7
7
|
<packaging>jar</packaging>
|
8
|
-
<version>1.
|
8
|
+
<version>1.3.0</version>
|
9
9
|
<name>Iudex Filter</name>
|
10
10
|
|
11
11
|
<parent>
|
12
12
|
<groupId>iudex</groupId>
|
13
13
|
<artifactId>iudex-parent</artifactId>
|
14
|
-
<version>1.
|
14
|
+
<version>1.3.0</version>
|
15
15
|
<relativePath>..</relativePath>
|
16
16
|
</parent>
|
17
17
|
|
@@ -83,12 +83,66 @@ class TestFilterChainFactory < MiniTest::Unit::TestCase
|
|
83
83
|
|
84
84
|
end
|
85
85
|
|
86
|
+
def test_create_chain_noop
|
87
|
+
fcf = FilterChainFactory.new( "test" )
|
88
|
+
fc = fcf.create_chain() { |c| flunk( "NoOpFilter no yield" ) }
|
89
|
+
assert_kind_of( NoOpFilter, fc )
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_create_chain_legacy_params
|
93
|
+
fcf = FilterChainFactory.new( "test" )
|
94
|
+
class << fcf
|
95
|
+
def filters_method
|
96
|
+
[ nil, [ RandomFilter.new ] ]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
yielded = nil
|
101
|
+
fc = fcf.create_chain( :filters_method, nil, :main ) { |c| yielded = c }
|
102
|
+
assert_kind_of( FilterChain, fc )
|
103
|
+
assert_equal( fc, yielded )
|
104
|
+
assert_equal( 1, fc.children.length )
|
105
|
+
assert_equal( [ 'filters-method' ], Array( fc.describe ) )
|
106
|
+
assert_kind_of( RandomFilter, fc.children.first )
|
107
|
+
|
108
|
+
yielded = nil
|
109
|
+
fc = fcf.create_chain( :filters_method ) { |c| yielded = c }
|
110
|
+
assert_kind_of( FilterChain, fc )
|
111
|
+
assert_equal( fc, yielded )
|
112
|
+
assert_equal( [ 'filters-method' ], Array( fc.describe ) )
|
113
|
+
assert_equal( 1, fc.children.length )
|
114
|
+
assert_kind_of( RandomFilter, fc.children.first )
|
115
|
+
assert_kind_of( LogListener, fc.listener )
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_create_chain_opts
|
119
|
+
fcf = FilterChainFactory.new( "test" )
|
120
|
+
class << fcf
|
121
|
+
def filters_method
|
122
|
+
[ nil, [ RandomFilter.new ] ]
|
123
|
+
end
|
124
|
+
end
|
125
|
+
yielded = nil
|
126
|
+
fc = fcf.create_chain( :desc => 'described',
|
127
|
+
:filters => :filters_method,
|
128
|
+
:listener => NoOpListener.new,
|
129
|
+
:pass => true ) do |c|
|
130
|
+
yielded = c
|
131
|
+
end
|
132
|
+
assert_kind_of( FilterChain, fc )
|
133
|
+
assert_equal( fc, yielded )
|
134
|
+
assert_equal( [ 'described' ], Array( fc.describe ) )
|
135
|
+
assert_equal( 1, fc.children.length )
|
136
|
+
assert_kind_of( RandomFilter, fc.children.first )
|
137
|
+
assert_kind_of( NoOpListener, fc.listener )
|
138
|
+
end
|
139
|
+
|
86
140
|
def test_nested_reporting
|
87
141
|
fcf = FilterChainFactory.new( "test" )
|
88
142
|
class << fcf
|
89
143
|
attr_accessor :summary_reporter
|
90
144
|
def filters
|
91
|
-
[ create_chain( :sub_filters,
|
145
|
+
[ create_chain( :filters => :sub_filters, :listener => :main ) ]
|
92
146
|
end
|
93
147
|
def listeners
|
94
148
|
super.tap do |ll|
|
data/test/test_proc_filter.rb
CHANGED
@@ -29,18 +29,41 @@ class TestProcFilter < MiniTest::Unit::TestCase
|
|
29
29
|
UniMap.create_key( 'mkey' )
|
30
30
|
UniMap.define_accessors
|
31
31
|
|
32
|
-
def
|
32
|
+
def test_describe_proc
|
33
33
|
assert_equal( [ 'test_proc_filter', __LINE__ ], fltr {}.describe )
|
34
34
|
assert_equal( [ 'test_proc_filter', __LINE__ ], ProcFilter.new {}.describe )
|
35
35
|
assert_equal( [ 'test_proc_filter', __LINE__ ], ProcFilter.new {}.describe )
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
38
|
+
def test_name_proc
|
39
39
|
index = Core::FilterIndex.new
|
40
40
|
name, line = index.register( fltr {} ), __LINE__
|
41
41
|
assert_equal( "i.f.ProcFilter-test_proc_filter-#{line}", name )
|
42
42
|
end
|
43
43
|
|
44
|
+
def test_describe_method
|
45
|
+
assert_equal( [ :filter_m_reject ],
|
46
|
+
fltr_method( :filter_m_reject ).describe )
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_name_method
|
50
|
+
index = Core::FilterIndex.new
|
51
|
+
name = index.register( fltr_method( :filter_m_reject ) )
|
52
|
+
assert_equal( "i.f.ProcFilter-filter_m_reject", name )
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_return_method
|
56
|
+
assert do_f( fltr_method :filter_m_happy )
|
57
|
+
refute do_f( fltr_method :filter_m_reject )
|
58
|
+
end
|
59
|
+
|
60
|
+
def filter_m_reject( map )
|
61
|
+
:reject
|
62
|
+
end
|
63
|
+
|
64
|
+
def filter_m_happy( map )
|
65
|
+
end
|
66
|
+
|
44
67
|
def test_return
|
45
68
|
assert do_f( fltr { } )
|
46
69
|
assert do_f( fltr { nil } )
|
metadata
CHANGED
@@ -1,137 +1,154 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: iudex-filter
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 1.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.3.0
|
6
6
|
platform: java
|
7
|
-
authors:
|
8
|
-
|
9
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- David Kellum
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
12
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rjack-slf4j
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.7.0
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.7.0
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :runtime
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: gravitext-util
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ~>
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.7.0
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.7.0
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :runtime
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: minitest
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ~>
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '2.3'
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '2.3'
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
61
|
+
type: :development
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rjack-logback
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.5'
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.5'
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :development
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rjack-tarpit
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ~>
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '2.0'
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '2.0'
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :development
|
73
94
|
description: Iudex is a general purpose web crawler and feed processor in ruby/java. The iudex-filter gem contains a fundamental filtering/chain of responsbility sub-system.
|
74
|
-
email:
|
75
|
-
|
95
|
+
email:
|
96
|
+
- dek-oss@gravitext.com
|
76
97
|
executables: []
|
77
|
-
|
78
98
|
extensions: []
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
- lib/iudex-filter/iudex-filter-1.2.1.jar
|
99
|
+
extra_rdoc_files:
|
100
|
+
- History.rdoc
|
101
|
+
- README.rdoc
|
102
|
+
files:
|
103
|
+
- History.rdoc
|
104
|
+
- Manifest.txt
|
105
|
+
- README.rdoc
|
106
|
+
- Rakefile
|
107
|
+
- pom.xml
|
108
|
+
- lib/iudex-filter/base.rb
|
109
|
+
- lib/iudex-filter.rb
|
110
|
+
- lib/iudex-filter/by_filter_logger.rb
|
111
|
+
- lib/iudex-filter/filter_base.rb
|
112
|
+
- lib/iudex-filter/filter_chain_factory.rb
|
113
|
+
- lib/iudex-filter/key_helper.rb
|
114
|
+
- lib/iudex-filter/proc_filter.rb
|
115
|
+
- test/setup.rb
|
116
|
+
- test/test_filter_base.rb
|
117
|
+
- test/test_filter_chain_factory.rb
|
118
|
+
- test/test_proc_filter.rb
|
119
|
+
- test/test_sublist_filter.rb
|
120
|
+
- lib/iudex-filter/iudex-filter-1.3.0.jar
|
102
121
|
homepage: http://iudex.gravitext.com
|
103
122
|
licenses: []
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options:
|
125
|
+
- --main
|
126
|
+
- README.rdoc
|
127
|
+
require_paths:
|
128
|
+
- lib
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
segments:
|
135
|
+
- 0
|
136
|
+
hash: 2
|
112
137
|
none: false
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
hash: 2
|
121
146
|
none: false
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
hash: 2
|
126
|
-
segments:
|
127
|
-
- 0
|
128
|
-
version: "0"
|
129
147
|
requirements: []
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
signing_key:
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 1.8.24
|
150
|
+
signing_key:
|
134
151
|
specification_version: 3
|
135
152
|
summary: Iudex is a general purpose web crawler and feed processor in ruby/java.
|
136
153
|
test_files: []
|
137
|
-
|
154
|
+
...
|