couchdb_basic 0.0.3 → 0.2.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/couchdb_basic.rb +45 -39
  2. metadata +5 -69
data/lib/couchdb_basic.rb CHANGED
@@ -1,6 +1,30 @@
1
- require 'multi_json'
2
- require 'rest-client'
3
- require 'uri-handler'
1
+
2
+ require 'json'
3
+ require 'uri'
4
+ require 'net/http'
5
+
6
+ def http_get(uri)
7
+ JSON.parse(Net::HTTP.get(URI(uri)), :symbolize_names=>true)
8
+ end
9
+
10
+ def http_delete(uri)
11
+ uri = URI.parse(uri)
12
+ header = {'Content-Type'=> 'application/json'}
13
+ http = Net::HTTP.new(uri.host, uri.port)
14
+ request = Net::HTTP::Delete.new(uri.request_uri, header)
15
+ response = http.request(request)
16
+ JSON.parse(response.body, :symbolize_names=>true)
17
+ end
18
+
19
+ def http_post(uri,doc)
20
+ uri = URI.parse(uri)
21
+ header = {'Content-Type'=> 'application/json'}
22
+ http = Net::HTTP.new(uri.host, uri.port)
23
+ request = Net::HTTP::Post.new(uri.request_uri, header)
24
+ request.body = doc.to_json
25
+ response = http.request(request)
26
+ JSON.parse(response.body,:symbolize_names=>true)
27
+ end
4
28
 
5
29
  class Couchdb
6
30
 
@@ -9,8 +33,7 @@ class Couchdb
9
33
  end
10
34
 
11
35
  def _get(url="")
12
- r = RestClient.get "#{@url}#{url}"
13
- MultiJson.load(r.to_str, :symbolize_keys => true)
36
+ http_get "#{@url}#{url}"
14
37
  end
15
38
 
16
39
  def _post(data,bulk=false)
@@ -19,12 +42,12 @@ class Couchdb
19
42
  if bulk
20
43
  url = "#{url}/_bulk_docs"
21
44
  end
22
- r = RestClient.post "#{url}", MultiJson.dump(data), :content_type => :json, :accept => :json
23
- rescue RestClient::Forbidden => e
45
+ r = http_post(url,data)
46
+ rescue Net::HTTPBadRequest => e
24
47
  puts e.response.to_str
25
- r = e.response
48
+ r = nil
26
49
  end
27
- MultiJson.load(r.to_str, :symbolize_keys => true)
50
+ r
28
51
  end
29
52
 
30
53
  def db()
@@ -50,51 +73,34 @@ class Couchdb
50
73
  end
51
74
 
52
75
  def get(id)
53
- begin
54
- _get "/#{id.to_uri}"
55
- rescue RestClient::ResourceNotFound
56
- nil
57
- rescue RestClient::BadRequest => e
58
- puts e.response.to_str
76
+ doc = _get "/#{URI.escape(id)}"
77
+ if doc[:error]
59
78
  nil
79
+ else
80
+ doc
60
81
  end
61
82
  end
62
83
 
63
84
  def delete(doc)
64
- r = RestClient.delete "#{@url}/#{doc[:_id]}?rev=#{doc[:_rev]}", :content_type => :json
85
+ r = http_delete "#{@url}/#{URI.escape( doc[:_id] )}?rev=#{doc[:_rev]}"
65
86
  nil
66
87
  end
67
88
 
68
89
  def view(design,view,args={})
69
90
  url = "/_design/#{design}/_view/#{view}?"
70
- if args.has_key?(:key)
71
- key = MultiJson.dump(args[:key]).to_uri
72
- url << "&key=#{key}"
73
- end
74
- if args.has_key?(:group)
75
- key = MultiJson.dump(args[:group]).to_uri
76
- url << "&group=#{key}"
77
- end
78
- if args.has_key?(:reduce)
79
- key = MultiJson.dump(args[:reduce]).to_uri
80
- url << "&reduce=#{key}"
81
- end
91
+ args.keys.each { |k|
92
+ url << "&#{k}=#{URI.escape(args[k].to_json)}"
93
+ }
82
94
  _get(url)[:rows]
83
95
  end
84
96
 
85
97
  def get_all(args={})
86
98
  url = "/_all_docs?include_docs=true"
87
- if args.has_key?( :skip )
88
- skip = MultiJson.dump( args[:skip] )
89
- url << "&skip=#{skip}"
90
- end
91
- if args.has_key?( :limit )
92
- limit = MultiJson.dump( args[:limit] )
93
- url << "&limit=#{limit}"
94
- end
95
- docs = []
96
- _get(url)[:rows].each{ | row | docs << row[:doc ] }
97
- docs
99
+ args.keys.each { |k|
100
+ url << "&#{k}=#{URI.escape(args[k].to_json)}"
101
+ }
102
+ _get(url)[:rows].map {|row| row[:doc]}
98
103
  end
99
104
 
100
105
  end
106
+
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchdb_basic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.2.0.beta
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Diogo Silva
@@ -11,71 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
  date: 2014-04-02 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: multi_json
17
- requirement: !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '0'
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ! '>='
29
- - !ruby/object:Gem::Version
30
- version: '0'
31
- - !ruby/object:Gem::Dependency
32
- name: rest_client
33
- requirement: !ruby/object:Gem::Requirement
34
- none: false
35
- requirements:
36
- - - ! '>='
37
- - !ruby/object:Gem::Version
38
- version: '0'
39
- type: :runtime
40
- prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: '0'
47
- - !ruby/object:Gem::Dependency
48
- name: uri-handler
49
- requirement: !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :runtime
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- - !ruby/object:Gem::Dependency
64
- name: rspec
65
- requirement: !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ! '>='
69
- - !ruby/object:Gem::Version
70
- version: '0'
71
- type: :development
72
- prerelease: false
73
- version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: '0'
14
+ dependencies: []
79
15
  description: A lib for documents database operations.
80
16
  email: diogo@cncflora.jbrj.gov.br
81
17
  executables: []
@@ -99,9 +35,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
35
  required_rubygems_version: !ruby/object:Gem::Requirement
100
36
  none: false
101
37
  requirements:
102
- - - ! '>='
38
+ - - ! '>'
103
39
  - !ruby/object:Gem::Version
104
- version: '0'
40
+ version: 1.3.1
105
41
  requirements: []
106
42
  rubyforge_project:
107
43
  rubygems_version: 1.8.23