voog_api 0.0.10 → 0.0.11

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