dezi-client 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dezi/client.rb +73 -33
- data/lib/dezi/response.rb +10 -12
- metadata +30 -33
data/lib/dezi/client.rb
CHANGED
@@ -22,12 +22,34 @@
|
|
22
22
|
|
23
23
|
# dependencies
|
24
24
|
require 'rubygems'
|
25
|
-
require '
|
25
|
+
require 'faraday_middleware'
|
26
26
|
require 'uri'
|
27
|
-
require 'json'
|
28
27
|
require 'pathname'
|
29
28
|
require 'mime/types'
|
30
29
|
|
30
|
+
# monkey patch evil. Faraday 0.10 where are you?
|
31
|
+
module Faraday
|
32
|
+
module Utils
|
33
|
+
def build_nested_query(value, prefix = nil)
|
34
|
+
case value
|
35
|
+
when Array
|
36
|
+
value.map { |v| build_nested_query(v, "#{prefix}") }.join("&")
|
37
|
+
#value.map { |v| build_nested_query(v, "#{prefix}%5B%5D") }.join("&")
|
38
|
+
when Hash
|
39
|
+
value.map { |k, v|
|
40
|
+
build_nested_query(v, prefix ? "#{prefix}#{escape(k)}" : escape(k))
|
41
|
+
#build_nested_query(v, prefix ? "#{prefix}%5B#{escape(k)}%5D" : escape(k))
|
42
|
+
}.join("&")
|
43
|
+
when NilClass
|
44
|
+
prefix
|
45
|
+
else
|
46
|
+
raise ArgumentError, "value must be a Hash" if prefix.nil?
|
47
|
+
"#{prefix}=#{escape(value)}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
31
53
|
# related classes
|
32
54
|
require File.dirname(__FILE__) + '/response'
|
33
55
|
require File.dirname(__FILE__) + '/doc'
|
@@ -84,9 +106,31 @@ class DeziClient
|
|
84
106
|
attr_accessor :user_agent
|
85
107
|
|
86
108
|
def version
|
87
|
-
return
|
109
|
+
return "1.1.0"
|
88
110
|
end
|
89
|
-
|
111
|
+
|
112
|
+
def connection(uri)
|
113
|
+
opts = {
|
114
|
+
:url => uri,
|
115
|
+
:headers => {
|
116
|
+
'User-Agent' => @user_agent,
|
117
|
+
'Accept' => 'application/json'
|
118
|
+
}
|
119
|
+
}
|
120
|
+
conn = Faraday.new(opts) do |faraday|
|
121
|
+
faraday.request :url_encoded
|
122
|
+
[:mashify, :json, :raise_error].each{|mw| faraday.response(mw) }
|
123
|
+
faraday.response :logger if @debug
|
124
|
+
faraday.adapter :excon # IMPORTANT this is last
|
125
|
+
end
|
126
|
+
|
127
|
+
if (@un && @pw)
|
128
|
+
conn.request :basic_auth, @un, @pw
|
129
|
+
end
|
130
|
+
|
131
|
+
return conn
|
132
|
+
end
|
133
|
+
|
90
134
|
def initialize(args)
|
91
135
|
@debug = ENV['DEZI_DEBUG']
|
92
136
|
|
@@ -121,26 +165,26 @@ class DeziClient
|
|
121
165
|
@search_uri = @server + args[:search]
|
122
166
|
@index_uri = @server + args[:index]
|
123
167
|
else
|
124
|
-
|
168
|
+
conn = connection(@server)
|
169
|
+
response = conn.get '/'
|
125
170
|
|
126
|
-
if response.
|
127
|
-
raise "Bad about response from server #{@server}: " . response.
|
171
|
+
if response.status != 200
|
172
|
+
raise "Bad about response from server #{@server}: " . response.body
|
128
173
|
end
|
129
|
-
|
130
|
-
@about_server = JSON.parse(response.to_str)
|
174
|
+
@about_server = response.body
|
131
175
|
if @debug
|
132
|
-
|
176
|
+
puts @about_server.inspect
|
133
177
|
end
|
134
178
|
|
135
|
-
@search_uri
|
136
|
-
@index_uri
|
137
|
-
@commit_uri
|
179
|
+
@search_uri = @about_server['search']
|
180
|
+
@index_uri = @about_server['index']
|
181
|
+
@commit_uri = @about_server['commit']
|
138
182
|
@rollback_uri = @about_server['rollback']
|
139
|
-
@fields
|
140
|
-
@facets
|
183
|
+
@fields = @about_server['fields']
|
184
|
+
@facets = @about_server['facets']
|
141
185
|
end
|
142
186
|
|
143
|
-
@searcher
|
187
|
+
@searcher = connection( @search_uri )
|
144
188
|
|
145
189
|
end
|
146
190
|
|
@@ -184,12 +228,12 @@ class DeziClient
|
|
184
228
|
puts "content_type="#{content_type}"
|
185
229
|
end
|
186
230
|
|
187
|
-
|
188
|
-
resp =
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
231
|
+
conn = connection(@index_uri)
|
232
|
+
resp = conn.post do |req|
|
233
|
+
req.url @index_uri + server_uri
|
234
|
+
req.body = body_buf
|
235
|
+
req.headers['Content-Type'] = content_type
|
236
|
+
end
|
193
237
|
|
194
238
|
return DeziResponse.new(resp)
|
195
239
|
end
|
@@ -216,8 +260,8 @@ class DeziClient
|
|
216
260
|
|
217
261
|
def delete(uri)
|
218
262
|
doc_uri = @index_uri + '/' + uri
|
219
|
-
|
220
|
-
resp =
|
263
|
+
conn = connection(doc_uri)
|
264
|
+
resp = conn.delete
|
221
265
|
return DeziResponse.new(resp)
|
222
266
|
end
|
223
267
|
|
@@ -225,8 +269,8 @@ class DeziClient
|
|
225
269
|
# has "auto_commit" turned off.
|
226
270
|
|
227
271
|
def commit()
|
228
|
-
|
229
|
-
resp =
|
272
|
+
conn = connection(@commit_uri)
|
273
|
+
resp = conn.post
|
230
274
|
return DeziResponse.new(resp)
|
231
275
|
end
|
232
276
|
|
@@ -234,8 +278,8 @@ class DeziClient
|
|
234
278
|
# has "auto_commit" turned off.
|
235
279
|
|
236
280
|
def rollback()
|
237
|
-
|
238
|
-
resp =
|
281
|
+
conn = connection(@rollback_uri)
|
282
|
+
resp = conn.post
|
239
283
|
return DeziResponse.new(resp)
|
240
284
|
end
|
241
285
|
|
@@ -244,11 +288,7 @@ class DeziClient
|
|
244
288
|
raise "'q' param required"
|
245
289
|
end
|
246
290
|
|
247
|
-
resp = @searcher.get
|
248
|
-
:params => params,
|
249
|
-
:accept => :json,
|
250
|
-
:user_agent => @user_agent
|
251
|
-
)
|
291
|
+
resp = @searcher.get @search_uri, params
|
252
292
|
dr = DeziResponse.new(resp)
|
253
293
|
if (!dr.is_success())
|
254
294
|
@last_response = dr
|
data/lib/dezi/response.rb
CHANGED
@@ -20,9 +20,6 @@
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
21
|
# THE SOFTWARE.
|
22
22
|
|
23
|
-
require 'rubygems'
|
24
|
-
require 'json'
|
25
|
-
|
26
23
|
class DeziResponse
|
27
24
|
|
28
25
|
# most attributes are assigned dynamically in initialize().
|
@@ -38,10 +35,10 @@ class DeziResponse
|
|
38
35
|
@http_resp = http_resp
|
39
36
|
|
40
37
|
#warn http_resp.headers.inspect
|
41
|
-
#warn "code=" + http_resp.
|
38
|
+
#warn "code=" + http_resp.status.to_s
|
42
39
|
|
43
40
|
@is_ok = false
|
44
|
-
if (http_resp.
|
41
|
+
if (http_resp.status.to_s =~ /^2\d\d/)
|
45
42
|
@is_ok = true
|
46
43
|
end
|
47
44
|
|
@@ -51,7 +48,7 @@ class DeziResponse
|
|
51
48
|
|
52
49
|
#warn "is_ok=#{@is_ok}"
|
53
50
|
|
54
|
-
body =
|
51
|
+
body = http_resp.body
|
55
52
|
|
56
53
|
#warn body.inspect
|
57
54
|
|
@@ -70,27 +67,28 @@ class DeziResponse
|
|
70
67
|
send("#{k}=",v)
|
71
68
|
}
|
72
69
|
|
73
|
-
if
|
70
|
+
if body['results'].nil?
|
71
|
+
@results = []
|
74
72
|
return
|
75
73
|
end
|
74
|
+
|
75
|
+
#warn 'body[results] is not nil'
|
76
76
|
|
77
77
|
# make each result Hash into a DeziDoc object
|
78
|
-
@results = []
|
79
|
-
body['results'].each {|r|
|
78
|
+
@results = body['results'].map {|r|
|
80
79
|
result = r
|
81
80
|
result['fields'] = {}
|
82
81
|
@fields.each {|f|
|
83
82
|
result['fields'][f] = r.delete(f)
|
84
83
|
}
|
85
84
|
|
86
|
-
|
87
|
-
@results.push(doc)
|
85
|
+
DeziDoc.new(result)
|
88
86
|
}
|
89
87
|
|
90
88
|
end
|
91
89
|
|
92
90
|
def status()
|
93
|
-
return @http_resp.
|
91
|
+
return @http_resp.status
|
94
92
|
end
|
95
93
|
|
96
94
|
def is_success()
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dezi-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 0
|
10
|
-
version: 1.0.0
|
4
|
+
prerelease:
|
5
|
+
version: 1.1.0
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Peter Karman
|
@@ -15,65 +10,74 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
13
|
+
date: 2014-02-28 00:00:00 Z
|
20
14
|
dependencies:
|
21
15
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
16
|
+
name: faraday
|
23
17
|
prerelease: false
|
24
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
20
|
requirements:
|
27
21
|
- - ">="
|
28
22
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
23
|
version: "0"
|
33
24
|
type: :runtime
|
34
25
|
version_requirements: *id001
|
35
26
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
27
|
+
name: faraday_middleware
|
37
28
|
prerelease: false
|
38
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
30
|
none: false
|
40
31
|
requirements:
|
41
32
|
- - ">="
|
42
33
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
|
-
segments:
|
45
|
-
- 0
|
46
34
|
version: "0"
|
47
35
|
type: :runtime
|
48
36
|
version_requirements: *id002
|
49
37
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
38
|
+
name: excon
|
51
39
|
prerelease: false
|
52
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
41
|
none: false
|
54
42
|
requirements:
|
55
43
|
- - ">="
|
56
44
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
|
-
segments:
|
59
|
-
- 0
|
60
45
|
version: "0"
|
61
46
|
type: :runtime
|
62
47
|
version_requirements: *id003
|
63
48
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
49
|
+
name: hashie
|
65
50
|
prerelease: false
|
66
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
67
52
|
none: false
|
68
53
|
requirements:
|
69
54
|
- - ">="
|
70
55
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 3
|
72
|
-
segments:
|
73
|
-
- 0
|
74
56
|
version: "0"
|
75
57
|
type: :runtime
|
76
58
|
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: mime-types
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: xml-simple
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
type: :runtime
|
80
|
+
version_requirements: *id006
|
77
81
|
description: Ruby client for the Dezi search engine. See http://dezi.org/
|
78
82
|
email: karpet@dezi.org
|
79
83
|
executables: []
|
@@ -86,7 +90,6 @@ files:
|
|
86
90
|
- lib/dezi/client.rb
|
87
91
|
- lib/dezi/doc.rb
|
88
92
|
- lib/dezi/response.rb
|
89
|
-
has_rdoc: true
|
90
93
|
homepage: https://github.com/karpet/dezi-client-ruby
|
91
94
|
licenses: []
|
92
95
|
|
@@ -100,23 +103,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
103
|
requirements:
|
101
104
|
- - ">="
|
102
105
|
- !ruby/object:Gem::Version
|
103
|
-
hash: 3
|
104
|
-
segments:
|
105
|
-
- 0
|
106
106
|
version: "0"
|
107
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
108
|
none: false
|
109
109
|
requirements:
|
110
110
|
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
hash: 3
|
113
|
-
segments:
|
114
|
-
- 0
|
115
112
|
version: "0"
|
116
113
|
requirements: []
|
117
114
|
|
118
115
|
rubyforge_project: nowarning
|
119
|
-
rubygems_version: 1.
|
116
|
+
rubygems_version: 1.8.17
|
120
117
|
signing_key:
|
121
118
|
specification_version: 3
|
122
119
|
summary: Ruby client for the Dezi search engine
|