couchdb_basic 0.0.3 → 0.2.0.beta

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