dezi-client 1.0.0 → 1.1.0
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/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
|