popit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  A Ruby wrapper for the [PopIt](http://popit.mysociety.org/) API, which allows you to create, read, update and delete items from PopIt.
4
4
 
5
- [![Build Status](https://secure.travis-ci.org/opennorth/popit-ruby.png)](http://travis-ci.org/opennorth/popit-ruby)
6
5
  [![Dependency Status](https://gemnasium.com/opennorth/popit-ruby.png)](https://gemnasium.com/opennorth/popit-ruby)
7
6
  [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/opennorth/popit-ruby)
8
7
 
@@ -12,19 +11,19 @@ A Ruby wrapper for the [PopIt](http://popit.mysociety.org/) API, which allows yo
12
11
 
13
12
  ## API Examples
14
13
 
15
- Require the PopIt gem:
14
+ First, require the PopIt gem:
16
15
 
17
16
  ```ruby
18
17
  require 'popit'
19
18
  ```
20
19
 
21
- Create an API client:
20
+ Then, create an API client for PopIt:
22
21
 
23
22
  ```ruby
24
23
  api = PopIt.new :instance_name => 'demo'
25
24
  ```
26
25
 
27
- You can pass the options:
26
+ You can pass these options to `PopIt.new`:
28
27
 
29
28
  * `:instance_name` the PopIt instance, usually the first part of the domain name
30
29
  * `:host_name` the PopIt API's host name – defaults to "popit.mysociety.org"
@@ -33,7 +32,7 @@ You can pass the options:
33
32
  * `:user` a user name – if blank, the API will be read-only
34
33
  * `:password` the user's password
35
34
 
36
- For brevity, we only show examples for `person` items, but you use the same code to operate on organisations and positions by substituting `organisation` or `position` for `person`.
35
+ For brevity, we only show examples below for `person` items, but you can use the same code to operate on organisations and positions by substituting `organisation` or `position` for `person`.
37
36
 
38
37
  More documentation at [RubyDoc.info](http://rdoc.info/gems/popit/PopIt).
39
38
 
@@ -53,12 +52,14 @@ response = api.person('47cc67093475061e3d95369d').get
53
52
  p response['result']
54
53
  ```
55
54
 
56
- You can search...
55
+ You can also search for...
57
56
 
58
57
  * people by slug, name or summary
59
58
  * organisations by slug or name
60
59
  * positions by title, person or organisation
61
60
 
61
+ For example:
62
+
62
63
  ```ruby
63
64
  response = api.person.get :name => 'John Doe'
64
65
  p response['results']
@@ -74,30 +75,30 @@ id = response['result']['_id']
74
75
  ### Update
75
76
 
76
77
  ```ruby
77
- response = api.person('47cc67093475061e3d95369d').put :name => 'Jane Doe'
78
+ response = api.person(id).put :name => 'Jane Doe'
78
79
  p response['result']
79
80
  ```
80
81
 
81
82
  ### Delete
82
83
 
83
84
  ```ruby
84
- success = api.person('47cc67093475061e3d95369d').delete
85
+ success = api.person(id).delete
85
86
  ```
86
87
 
87
88
  ## Error Handling
88
89
 
89
- If you:
90
+ If you attempt to:
90
91
 
91
- * attempt to read an item that doesn't exist
92
- * attempt to create, update or delete an item without authenticating
93
- * attempt to operate on something other than people, organisations and positions
92
+ * read an item that doesn't exist
93
+ * create, update or delete an item without authenticating
94
+ * operate on something other than people, organisations and positions
94
95
 
95
- you will raise a `PopIt::Error` exception. The exception's message will be the error message from the PopIt API.
96
+ you will raise a `PopIt::Error` exception. The exception's message will be the same as from the PopIt API.
96
97
 
97
98
  ```ruby
98
99
  require 'popit'
99
100
  api = PopIt.new :instance_name => 'demo'
100
- api.person.get 'foo' # raises PopIt::Error
101
+ api.person.get 'foo' # raises PopIt::Error with {"error":"page not found"}
101
102
  ```
102
103
 
103
104
  ## Running Tests
data/lib/popit/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class PopIt
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/popit.rb CHANGED
@@ -3,6 +3,20 @@ require 'yajl'
3
3
 
4
4
  # A Ruby wrapper for the PopIt API.
5
5
  #
6
+ # Instead of writing the path to an API endpoint, you can use method chaining.
7
+ # For example:
8
+ #
9
+ # require 'popit'
10
+ # api = PopIt.new :instance_name => 'demo'
11
+ # api.get 'person/john-doe'
12
+ #
13
+ # can be written as:
14
+ #
15
+ # api.person('john-doe').get
16
+ #
17
+ # All methods and arguments between `api` and the HTTP method - in this case,
18
+ # `get` - become parts of the path.
19
+ #
6
20
  # @see https://github.com/mysociety/popit/blob/master/lib/apps/api/api_v1.js
7
21
  class PopIt
8
22
  class Error < StandardError; end
@@ -33,22 +47,38 @@ class PopIt
33
47
  @password = opts[:password]
34
48
  end
35
49
 
36
- def base_uri
37
- "http://#{instance_name}.#{host_name}:#{port}/api/#{version}"
38
- end
39
-
50
+ # Send a GET request.
51
+ #
52
+ # @param [String] path a path with no leading slash
53
+ # @param [Hash] opts key-value pairs for the query string
54
+ # @return the JSON response from the server
40
55
  def get(path, opts = {})
41
56
  request :get, path, opts
42
57
  end
43
58
 
59
+ # Send a POST request.
60
+ #
61
+ # @param [String] path a path with no leading slash
62
+ # @param [Hash] opts key-value pairs for the message body
63
+ # @return the JSON response from the server
44
64
  def post(path, opts = {})
45
65
  request :post, path, opts
46
66
  end
47
67
 
68
+ # Send a PUT request.
69
+ #
70
+ # @param [String] path a path with no leading slash
71
+ # @param [Hash] opts key-value pairs for the message body
72
+ # @return [nil] nothing
48
73
  def put(path, opts = {})
49
74
  request :put, path, opts
50
75
  end
51
76
 
77
+ # Send a DELETE request.
78
+ #
79
+ # @param [String] path a path with no leading slash
80
+ # @param [Hash] opts key-value pairs for the query string
81
+ # @return [Hash] an empty hash
52
82
  def delete(path, opts = {})
53
83
  request :delete, path, opts
54
84
  end
@@ -56,7 +86,7 @@ class PopIt
56
86
  private
57
87
 
58
88
  def request(http_method, path, opts = {})
59
- path = "#{base_uri}/#{path}"
89
+ path = "http://#{instance_name}.#{host_name}:#{port}/api/#{version}/#{path}"
60
90
 
61
91
  response = case http_method
62
92
  when :get
data/spec/popit_spec.rb CHANGED
@@ -4,7 +4,7 @@ require 'yaml'
4
4
 
5
5
  # We don't want to test the PopIt API. We want to check that the wrapper works.
6
6
  #
7
- # @see https://github.com/mysociety/popit-python/blob/master/test.py
7
+ # @see https://github.com/mysociety/popit/blob/master/lib/apps/api/api_v1.js
8
8
  describe PopIt do
9
9
  let :unauthenticated do
10
10
  PopIt.new :instance_name => 'tttest'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: popit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: