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.
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