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.
Files changed (3) hide show
  1. data/lib/dezi/client.rb +73 -33
  2. data/lib/dezi/response.rb +10 -12
  3. metadata +30 -33
@@ -22,12 +22,34 @@
22
22
 
23
23
  # dependencies
24
24
  require 'rubygems'
25
- require 'rest_client'
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 '1.0.0'
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
- response = RestClient.get @server, :accept => :json, :user_agent => @user_agent
168
+ conn = connection(@server)
169
+ response = conn.get '/'
125
170
 
126
- if response.code != 200
127
- raise "Bad about response from server #{@server}: " . response.to_str
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
- #puts @about_server.inspect
176
+ puts @about_server.inspect
133
177
  end
134
178
 
135
- @search_uri = @about_server['search']
136
- @index_uri = @about_server['index']
137
- @commit_uri = @about_server['commit']
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 = @about_server['fields']
140
- @facets = @about_server['facets']
183
+ @fields = @about_server['fields']
184
+ @facets = @about_server['facets']
141
185
  end
142
186
 
143
- @searcher = RestClient::Resource.new( @search_uri )
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
- resource = RestClient::Resource.new(@index_uri + server_uri, @un, @pw)
188
- resp = resource.post( body_buf,
189
- :accept => :json,
190
- :content_type => content_type,
191
- :user_agent => @user_agent
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
- resource = RestClient::Resource.new(doc_uri, @un, @pw)
220
- resp = resource.delete(:accept => :json, :user_agent => @user_agent)
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
- ua = RestClient::Resource.new( @commit_uri, @un, @pw )
229
- resp = ua.post('/', :accept => :json, :user_agent => @user_agent)
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
- ua = RestClient::Resource.new( @rollback_uri, @un, @pw )
238
- resp = ua.post('/', :accept => :json, :user_agent => @user_agent)
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
@@ -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.code.to_s
38
+ #warn "code=" + http_resp.status.to_s
42
39
 
43
40
  @is_ok = false
44
- if (http_resp.code.to_s =~ /^2\d\d/)
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 = JSON.parse(http_resp.to_s)
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 !body.has_key?('results')
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
- doc = DeziDoc.new(result)
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.code.to_s
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
- hash: 23
5
- prerelease: false
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: 2013-01-08 00:00:00 -06:00
19
- default_executable:
13
+ date: 2014-02-28 00:00:00 Z
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
22
- name: rest-client
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: json
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: mime-types
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: xml-simple
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.3.7
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