voog_api 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,33 +1,49 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Media Sets API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/media_sets
3
7
  module MediaSets
4
8
 
5
9
  # List media_sets
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/media_sets#get_media_sets
6
12
  def media_sets(params = {})
7
13
  paginate 'media_sets', {query: params}
8
14
  end
9
15
 
10
16
  # Get a single media_set
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/media_sets#get_media_set
11
19
  def media_set(id, params = {})
12
20
  get "media_sets/#{id}", {query: params}
13
21
  end
14
22
 
15
23
  # Create a media_set
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/media_sets#create_media_set
16
26
  def create_media_set(data)
17
27
  post 'media_sets', data
18
28
  end
19
29
 
20
30
  # Update a media_set
31
+ #
32
+ # @see http://www.voog.com/developers/api/resources/media_sets#update_media_set
21
33
  def update_media_set(id, data)
22
34
  put "media_sets/#{id}", data
23
35
  end
24
36
 
25
37
  # Delete a media_set
38
+ #
39
+ # @see http://www.voog.com/developers/api/resources/media_sets#remove_media_set
26
40
  def delete_media_set(id)
27
41
  delete "media_sets/#{id}"
28
42
  end
29
43
 
30
44
  # Add assets to media_set
45
+ #
46
+ # @see http://www.voog.com/developers/api/resources/media_sets#add_asset_to_media_set
31
47
  def media_set_add_assets(media_set_id, data)
32
48
  post "media_sets/#{media_set_id}/add_assets", data
33
49
  end
@@ -1,23 +1,35 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Nodes API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/nodes
3
7
  module Nodes
4
8
 
5
9
  # List nodes
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/nodes#get_nodes
6
12
  def nodes(params = {})
7
13
  paginate 'nodes', {query: params}
8
14
  end
9
15
 
10
16
  # Get a single node
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/nodes#get_node
11
19
  def node(id, params = {})
12
20
  get "nodes/#{id}", {query: params}
13
21
  end
14
22
 
15
23
  # Update a node
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/nodes#update_node
16
26
  def update_node(id, data)
17
27
  put "nodes/#{id}", data
18
28
  end
19
29
 
20
30
  # Reorder a node
31
+ #
32
+ # @see http://www.voog.com/developers/api/resources/nodes#relocate_node
21
33
  def move_node(node_id, params)
22
34
  put "nodes/#{node_id}/move", nil, {query: params}
23
35
  end
@@ -1,33 +1,49 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Pages API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/pages
3
7
  module Pages
4
8
 
5
9
  # List pages
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/pages#get_pages
6
12
  def pages(params = {})
7
13
  paginate 'pages', {query: params}
8
14
  end
9
15
 
10
16
  # Get a single page
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/pages#get_page
11
19
  def page(id, params = {})
12
20
  get "pages/#{id}", {query: params}
13
21
  end
14
22
 
15
23
  # Create a page
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/pages#create_pages
16
26
  def create_page(data)
17
27
  post 'pages', data
18
28
  end
19
29
 
20
30
  # Update a page
31
+ #
32
+ # @see http://www.voog.com/developers/api/resources/pages#update_page
21
33
  def update_page(id, data)
22
34
  put "pages/#{id}", data
23
35
  end
24
36
 
25
37
  # Patch a page
38
+ #
39
+ # @see http://www.voog.com/developers/api/resources/pages#patch_page
26
40
  def patch_page(id, data)
27
41
  patch "pages/#{id}", data
28
42
  end
29
43
 
30
44
  # Delete a page
45
+ #
46
+ # @see http://www.voog.com/developers/api/resources/pages#delete_page
31
47
  def delete_page(id)
32
48
  delete "pages/#{id}"
33
49
  end
@@ -35,6 +51,8 @@ module Voog
35
51
  # Update/create a key in page data field
36
52
  #
37
53
  # @param id [String] key in data field
54
+ #
55
+ # @see http://www.voog.com/developers/api/resources/pages#update_page_data_field
38
56
  def update_page_data(page_id, id, data)
39
57
  put "pages/#{page_id}/data/#{id}", {value: data}
40
58
  end
@@ -42,6 +60,8 @@ module Voog
42
60
  # Delete a key from page data field
43
61
  #
44
62
  # @param id [String] key in data field
63
+ #
64
+ # @see http://www.voog.com/developers/api/resources/pages#delete_page_data_field
45
65
  def delete_page_data(page_id, id)
46
66
  delete "pages/#{page_id}/data/#{id}"
47
67
  end
@@ -49,26 +69,36 @@ module Voog
49
69
  # Page contents
50
70
 
51
71
  # List contents for page
72
+ #
73
+ # @see http://www.voog.com/developers/api/resources/contents#get_contents
52
74
  def page_contents(id, params = {})
53
75
  contents(Voog::API::Contents::ParentKind::Page, id, params)
54
76
  end
55
77
 
56
78
  # Get a single content for page
79
+ #
80
+ # @see http://www.voog.com/developers/api/resources/contents#get_content
57
81
  def page_content(page_id, id, params = {})
58
82
  content(Voog::API::Contents::ParentKind::Page, page_id, id, params)
59
83
  end
60
84
 
61
85
  # Create a page content for page
86
+ #
87
+ # @see http://www.voog.com/developers/api/resources/contents#create_content
62
88
  def create_page_content(page_id, data)
63
89
  create_content(Voog::API::Contents::ParentKind::Page, page_id, data)
64
90
  end
65
91
 
66
92
  # Delete a content from page
93
+ #
94
+ # @see http://www.voog.com/developers/api/resources/contents#delete_content
67
95
  def delete_page_content(page_id, id)
68
96
  delete_content(Voog::API::Contents::ParentKind::Page, page_id, id)
69
97
  end
70
98
 
71
99
  # Reorder/move page content inside/between content areas and parent objects
100
+ #
101
+ # @see http://www.voog.com/developers/api/resources/contents#relocate_content
72
102
  def move_page_content(page_id, id, params = {})
73
103
  move_content(Voog::API::Contents::ParentKind::Page, page_id, id, params)
74
104
  end
@@ -1,13 +1,21 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog People API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/people
3
7
  module People
4
8
 
5
9
  # List people
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/people#get_people
6
12
  def people(params = {})
7
13
  paginate 'people', {query: params}
8
14
  end
9
15
 
10
16
  # Get a single person
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/people#get_person
11
19
  def person(id, params = {})
12
20
  get "people/#{id}", {query: params}
13
21
  end
@@ -0,0 +1,17 @@
1
+ module Voog
2
+ class API
3
+
4
+ # Voog site Search API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/search
7
+ module Search
8
+
9
+ # Perform full text search over current public (and indexed) content.
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/search#get_search
12
+ def search(params = {})
13
+ paginate 'search', {query: params}
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,18 +1,28 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Site API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/site
3
7
  module Site
4
8
 
5
9
  # Get site attributes
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/site#get_site
6
12
  def site(params = {})
7
13
  get 'site', {query: params}
8
14
  end
9
15
 
10
16
  # Update a site
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/site#update_sites
11
19
  def update_site(data)
12
20
  put "site", data
13
21
  end
14
22
 
15
23
  # Patch a site
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/site#patch_sites
16
26
  def patch_site(data)
17
27
  patch "site", data
18
28
  end
@@ -20,6 +30,8 @@ module Voog
20
30
  # Update/create a key in site data field
21
31
  #
22
32
  # @param id [String] key in data field
33
+ #
34
+ # @see http://www.voog.com/developers/api/resources/site#update_site_data
23
35
  def update_site_data(id, data)
24
36
  put "site/data/#{id}", {value: data}
25
37
  end
@@ -27,6 +39,8 @@ module Voog
27
39
  # Delete a key from site data field
28
40
  #
29
41
  # @param id [String] key in data field
42
+ #
43
+ # @see http://www.voog.com/developers/api/resources/site#delete_site_data_field
30
44
  def delete_site_data(id)
31
45
  delete "site/data/#{id}"
32
46
  end
@@ -0,0 +1,39 @@
1
+ module Voog
2
+ class API
3
+
4
+ # Voog Site Users API methods. Manage users who have access to password protected pages.
5
+ #
6
+ # @see http://www.voog.com/support/guides/managing-your-website-pages/password-protected-pages
7
+ # @see http://www.voog.com/developers/api/resources/site_users
8
+ module SiteUsers
9
+
10
+ # List site users with access to password protected pages
11
+ #
12
+ # @see http://www.voog.com/developers/api/resources/site_users#get_site_users
13
+ def site_users(params = {})
14
+ paginate 'site_users', {query: params}
15
+ end
16
+
17
+ # Invite a new user to see password protected pages
18
+ #
19
+ # @see http://www.voog.com/developers/api/resources/site_users#create_site_user
20
+ def create_site_user(data)
21
+ post 'site_users', data
22
+ end
23
+
24
+ # Get a single site user
25
+ #
26
+ # @see http://www.voog.com/developers/api/resources/site_users#get_site_user
27
+ def site_user(id, params = {})
28
+ get "site_users/#{id}", {query: params}
29
+ end
30
+
31
+ # Delete a site user
32
+ #
33
+ # @see http://www.voog.com/developers/api/resources/site_users#remove_site_user
34
+ def delete_site_user(id)
35
+ delete "site_users/#{id}"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,23 +1,35 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Tags API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/tags
3
7
  module Tags
4
8
 
5
9
  # List tags
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/tags#get_tags
6
12
  def tags(params = {})
7
13
  paginate 'tags', {query: params}
8
14
  end
9
15
 
10
16
  # Get a single tag
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/tags#get_tag
11
19
  def tag(id, params = {})
12
20
  get "tags/#{id}", {query: params}
13
21
  end
14
22
 
15
23
  # Update a tag
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/tags#update_tag
16
26
  def update_tag(id, data)
17
27
  put "tags/#{id}", data
18
28
  end
19
29
 
20
30
  # Delete a tag
31
+ #
32
+ # @see http://www.voog.com/developers/api/resources/tags#remove_tag
21
33
  def delete_tag(id)
22
34
  delete "tags/#{id}"
23
35
  end
@@ -1,18 +1,28 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Text Contents API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/texts
3
7
  module Texts
4
8
 
5
9
  # List text contents
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/texts#get_texts
6
12
  def texts(params = {})
7
13
  paginate 'texts', {query: params}
8
14
  end
9
15
 
10
16
  # Get a single text content
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/texts#get_text
11
19
  def text(id, params = {})
12
20
  get "texts/#{id}", {query: params}
13
21
  end
14
22
 
15
23
  # Update a text content
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/texts#update_text
16
26
  def update_text(id, data)
17
27
  put "texts/#{id}", data
18
28
  end
@@ -1,26 +1,46 @@
1
1
  module Voog
2
2
  class API
3
+
4
+ # Voog Tickets API methods.
5
+ #
6
+ # @see http://www.voog.com/developers/api/resources/tickets
3
7
  module Tickets
4
8
 
5
9
  # List form tickets
10
+ #
11
+ # @see http://www.voog.com/developers/api/resources/tickets#get_tickets
6
12
  def tickets(form_id, params = {})
7
13
  paginate "forms/#{form_id}/tickets", {query: params}
8
14
  end
9
15
 
10
16
  # Get a single ticket for form
17
+ #
18
+ # @see http://www.voog.com/developers/api/resources/tickets#get_ticket
11
19
  def ticket(form_id, id, params = {})
12
20
  get "forms/#{form_id}/tickets/#{id}", {query: params}
13
21
  end
14
22
 
15
23
  # Delete a form ticket
24
+ #
25
+ # @see http://www.voog.com/developers/api/resources/tickets#remove_ticket
16
26
  def delete_ticket(form_id, id)
17
27
  delete "forms/#{form_id}/tickets/#{id}"
18
28
  end
19
29
 
20
30
  # Delete all spam ticket for form
31
+ #
32
+ # @see http://www.voog.com/developers/api/resources/tickets#delete_spam_tickets
21
33
  def delete_spam_tickets(form_id)
22
34
  delete "forms/#{form_id}/tickets/delete_spam"
23
35
  end
36
+
37
+ # Delete all or set of ticket for form
38
+ #
39
+ # @option params [Array] :ticket_ids array of ticket id that should be removed. All tickets are deleted when this parameter is not provided.
40
+ # @see http://www.voog.com/developers/api/resources/tickets#delete_tickets
41
+ def delete_tickets(form_id, params = {})
42
+ delete "forms/#{form_id}/tickets/delete_tickets", {query: params}
43
+ end
24
44
  end
25
45
  end
26
46
  end
@@ -19,12 +19,17 @@ require 'voog_api/api/nodes'
19
19
  require 'voog_api/api/site'
20
20
  require 'voog_api/api/pages'
21
21
  require 'voog_api/api/people'
22
+ require 'voog_api/api/search'
23
+ require 'voog_api/api/site_users'
22
24
  require 'voog_api/api/tags'
23
25
  require 'voog_api/api/texts'
24
26
  require 'voog_api/api/tickets'
25
27
 
26
28
  module Voog
27
-
29
+
30
+ # Voog API client.
31
+ #
32
+ # @see http://www.voog.com/developers/api
28
33
  class Client
29
34
 
30
35
  MAX_PER_PAGE = 250
@@ -44,12 +49,14 @@ module Voog
44
49
  include Voog::API::Nodes
45
50
  include Voog::API::Pages
46
51
  include Voog::API::People
52
+ include Voog::API::Search
47
53
  include Voog::API::Site
54
+ include Voog::API::SiteUsers
48
55
  include Voog::API::Tags
49
56
  include Voog::API::Texts
50
57
  include Voog::API::Tickets
51
58
 
52
- attr_reader :api_token, :host, :auto_paginate, :per_page
59
+ attr_reader :api_token, :host, :protocol, :auto_paginate, :per_page
53
60
 
54
61
  # Initialize Voog API client.
55
62
  #
@@ -96,7 +103,11 @@ module Voog
96
103
  end
97
104
 
98
105
  def api_endpoint
99
- "#{@protocol}://#{host}/admin/api"
106
+ "#{host_with_protocol}/admin/api".freeze
107
+ end
108
+
109
+ def host_with_protocol
110
+ "#{protocol}://#{host}".freeze
100
111
  end
101
112
 
102
113
  def agent
@@ -128,6 +139,8 @@ module Voog
128
139
  end
129
140
 
130
141
  # Fetch all elements for requested API resource when {#auto_paginate} is turned on.
142
+ #
143
+ # @see http://www.voog.com/developers/api/basics/pagination
131
144
  def paginate(url, options = {}, &block)
132
145
  opts = options.dup
133
146
  if @auto_paginate || @per_page
@@ -137,9 +150,7 @@ module Voog
137
150
  data = request(:get, url, nil, opts)
138
151
 
139
152
  if @auto_paginate
140
- i = 0
141
153
  while @last_response.rels[:next]
142
- puts "Request: #{i += 1}"
143
154
  @last_response = @last_response.rels[:next].get(headers: opts[:headers])
144
155
  if block_given?
145
156
  yield(data, @last_response)
@@ -161,7 +172,7 @@ module Voog
161
172
  multipart_agent.post("#{api_endpoint}/#{path}", data) : \
162
173
  agent.call(method, URI.encode(path.to_s), data, options.dup)
163
174
 
164
- raise Voog::MovedPermanently.new(response.headers['location']) if response.status == 301
175
+ raise Voog::MovedPermanently.new(response, host_with_protocol) if response.status == 301
165
176
 
166
177
  if multipart
167
178
  parse_response(response.body)
@@ -1,6 +1,13 @@
1
1
  module Voog
2
2
 
3
3
  # Raised when Voog API returns a 301 HTTP status code
4
- class MovedPermanently < StandardError; end
4
+ class MovedPermanently < StandardError
5
+ attr_reader :response
6
+
7
+ def initialize(response, hostname)
8
+ @response = response
9
+ super("#{hostname} is permanently redirected to #{response.headers['location'] if response}")
10
+ end
11
+ end
5
12
 
6
13
  end
@@ -1,3 +1,3 @@
1
1
  module Voog
2
- VERSION = '0.0.10'
2
+ VERSION = '0.0.11'
3
3
  end
@@ -0,0 +1,30 @@
1
+ {
2
+ "result": [{
3
+ "title": "Having sample news pieces? — Formtest",
4
+ "description": "from the Blogs section below. By the way, you can add <em>any</em> <em>kind</em> <em>of</em> <em>content</em> to your blog post — text, pictures, tables, forms, and galleries.\n\nThe above is excerpt",
5
+ "type": "page",
6
+ "lang": "en",
7
+ "path": "/blog/having-sample-news-pieces",
8
+ "tags": [
9
+ "sample", "news"
10
+ ],
11
+ "updated_at": "2013-12-13T09:19:04Z"
12
+ }, {
13
+ "title": "Formtest — Blog",
14
+ "description": ", you can add <em>any</em> <em>kind</em> <em>of</em> <em>content</em> to your blog post — text, pictures, tables, forms, and galleries.\n\nRead more →",
15
+ "type": "page",
16
+ "lang": "en",
17
+ "path": "/blog",
18
+ "tags": [],
19
+ "updated_at": "2016-01-01T15:59:18Z"
20
+ }, {
21
+ "title": "Formtest — Home page",
22
+ "description": ", delete, modify <em>any</em> text or pictures as you desire.© My Company 2012. Visit us at 1192 Cambridge Street, Cambridge, MA 02139Call us +1 617-576-1950 Email us at email@yourname.com",
23
+ "type": "page",
24
+ "lang": "en",
25
+ "path": "/en",
26
+ "tags": [],
27
+ "updated_at": "2016-01-01T15:59:18Z"
28
+ }],
29
+ "time_ms": 28
30
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 2,
3
+ "email": "test2@test.ee",
4
+ "status": "created",
5
+ "created_at": "2015-11-05T07:52:55.000Z",
6
+ "updated_at": "2015-11-05T07:52:55.000Z",
7
+ "last_login_at": null,
8
+ "url": "http://voog.test/admin/api/site_users/2"
9
+ }
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "id": 1,
4
+ "email": "test@test.ee",
5
+ "status": "active",
6
+ "created_at": "2015-11-05T07:45:02.000Z",
7
+ "updated_at": "2015-11-05T07:49:16.000Z",
8
+ "last_login_at": "2015-11-05T07:49:16.000Z",
9
+ "url": "http://voog.test/admin/api/site_users/1"
10
+ },
11
+ {
12
+ "id": 2,
13
+ "email": "test2@test.ee",
14
+ "status": "created",
15
+ "created_at": "2015-11-05T07:52:55.000Z",
16
+ "updated_at": "2015-11-05T07:52:55.000Z",
17
+ "last_login_at": null,
18
+ "url": "http://voog.test/admin/api/site_users/2"
19
+ }
20
+ ]
@@ -23,7 +23,7 @@ describe Voog::API::Articles do
23
23
  expect(client.article(2).title).to eq('How I wrote my first article')
24
24
  end
25
25
 
26
- it 'returns a article with the same id as in the request' do
26
+ it 'returns an article with the same id as in the request' do
27
27
  expect(client.article(2).id).to eq(2)
28
28
  end
29
29
  end
@@ -23,7 +23,7 @@ describe Voog::API::Assets do
23
23
  expect(client.asset(1).filename).to eq('Screen Shot 2014-01-28 at 10.53.26.png')
24
24
  end
25
25
 
26
- it 'returns a asset with the same id as in the request' do
26
+ it 'returns an asset with the same id as in the request' do
27
27
  expect(client.asset(1).id).to eq(1)
28
28
  end
29
29
  end
@@ -38,4 +38,16 @@ describe Voog::API::Forms do
38
38
  expect(client.update_form(2, title: 'Updated title', submit_label: 'Send!').title).to eq('Updated title')
39
39
  end
40
40
  end
41
+
42
+ describe '#delete_form' do
43
+
44
+ before do
45
+ request_fixture(:delete, 'forms/2')
46
+ end
47
+
48
+ it 'calls delete method on form' do
49
+ client.delete_form(2)
50
+ assert_requested :delete, 'http://voog.test/admin/api/forms/2'
51
+ end
52
+ end
41
53
  end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Voog::API::Search do
4
+
5
+ let(:client) { voog_client }
6
+
7
+ describe '#people' do
8
+ before do
9
+ request_fixture(:get, 'search', request: {q: 'any kind of content'}, fixture: 'search/search')
10
+ end
11
+
12
+ it 'returns a list of search results' do
13
+ expect(client.search.result.length).to eql(3)
14
+ end
15
+ end
16
+ end