voog_api 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +3 -0
  5. data/Guardfile +5 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.markdown +55 -0
  8. data/Rakefile +1 -0
  9. data/lib/voog_api/api/articles.rb +77 -0
  10. data/lib/voog_api/api/assets.rb +31 -0
  11. data/lib/voog_api/api/comments.rb +36 -0
  12. data/lib/voog_api/api/content_partials.rb +21 -0
  13. data/lib/voog_api/api/contents.rb +38 -0
  14. data/lib/voog_api/api/element_definitions.rb +31 -0
  15. data/lib/voog_api/api/elements.rb +63 -0
  16. data/lib/voog_api/api/forms.rb +21 -0
  17. data/lib/voog_api/api/languages.rb +68 -0
  18. data/lib/voog_api/api/layout_assets.rb +39 -0
  19. data/lib/voog_api/api/layouts.rb +31 -0
  20. data/lib/voog_api/api/media_sets.rb +36 -0
  21. data/lib/voog_api/api/nodes.rb +26 -0
  22. data/lib/voog_api/api/pages.rb +77 -0
  23. data/lib/voog_api/api/people.rb +16 -0
  24. data/lib/voog_api/api/site.rb +35 -0
  25. data/lib/voog_api/api/tags.rb +26 -0
  26. data/lib/voog_api/api/texts.rb +21 -0
  27. data/lib/voog_api/api/tickets.rb +26 -0
  28. data/lib/voog_api/client.rb +140 -0
  29. data/lib/voog_api/version.rb +3 -0
  30. data/lib/voog_api.rb +46 -0
  31. data/spec/fixtures/articles/article.json +37 -0
  32. data/spec/fixtures/articles/articles.json +75 -0
  33. data/spec/fixtures/assets/asset.json +24 -0
  34. data/spec/fixtures/assets/assets.json +29 -0
  35. data/spec/fixtures/comments/comment.json +21 -0
  36. data/spec/fixtures/comments/comments.json +35 -0
  37. data/spec/fixtures/content_partials/content_partial.json +27 -0
  38. data/spec/fixtures/content_partials/content_partials.json +47 -0
  39. data/spec/fixtures/contents/content.json +31 -0
  40. data/spec/fixtures/contents/contents.json +63 -0
  41. data/spec/fixtures/element_definitions/element_definition.json +31 -0
  42. data/spec/fixtures/element_definitions/element_definitions.json +15 -0
  43. data/spec/fixtures/elements/element.json +35 -0
  44. data/spec/fixtures/elements/elements.json +57 -0
  45. data/spec/fixtures/forms/form.json +104 -0
  46. data/spec/fixtures/forms/forms.json +43 -0
  47. data/spec/fixtures/languages/language.json +13 -0
  48. data/spec/fixtures/languages/languages.json +27 -0
  49. data/spec/fixtures/layout_assets/layout_asset.json +14 -0
  50. data/spec/fixtures/layout_assets/layout_assets.json +29 -0
  51. data/spec/fixtures/layouts/layout.json +11 -0
  52. data/spec/fixtures/layouts/layouts.json +23 -0
  53. data/spec/fixtures/media_sets/media_set.json +23 -0
  54. data/spec/fixtures/media_sets/media_sets.json +32 -0
  55. data/spec/fixtures/nodes/node.json +11 -0
  56. data/spec/fixtures/nodes/nodes.json +23 -0
  57. data/spec/fixtures/pages/page.json +73 -0
  58. data/spec/fixtures/pages/pages.json +104 -0
  59. data/spec/fixtures/people/people.json +29 -0
  60. data/spec/fixtures/people/person.json +14 -0
  61. data/spec/fixtures/site/site.json +30 -0
  62. data/spec/fixtures/tags/tag.json +20 -0
  63. data/spec/fixtures/tags/tags.json +31 -0
  64. data/spec/fixtures/texts/text.json +23 -0
  65. data/spec/fixtures/texts/texts.json +45 -0
  66. data/spec/fixtures/tickets/ticket.json +26 -0
  67. data/spec/fixtures/tickets/tickets.json +29 -0
  68. data/spec/spec_helper.rb +46 -0
  69. data/spec/voog_api/api/articles_spec.rb +89 -0
  70. data/spec/voog_api/api/assets_spec.rb +53 -0
  71. data/spec/voog_api/api/comments_spec.rb +66 -0
  72. data/spec/voog_api/api/content_partials_spec.rb +41 -0
  73. data/spec/voog_api/api/contents_spec.rb +53 -0
  74. data/spec/voog_api/api/element_definitions_spec.rb +53 -0
  75. data/spec/voog_api/api/elements_spec.rb +78 -0
  76. data/spec/voog_api/api/forms_spec.rb +41 -0
  77. data/spec/voog_api/api/languages_spec.rb +89 -0
  78. data/spec/voog_api/api/layout_assets_spec.rb +54 -0
  79. data/spec/voog_api/api/layouts_spec.rb +53 -0
  80. data/spec/voog_api/api/media_sets_spec.rb +64 -0
  81. data/spec/voog_api/api/nodes_spec.rb +52 -0
  82. data/spec/voog_api/api/pages_spec.rb +89 -0
  83. data/spec/voog_api/api/people_spec.rb +30 -0
  84. data/spec/voog_api/api/site_spec.rb +53 -0
  85. data/spec/voog_api/api/tags_spec.rb +53 -0
  86. data/spec/voog_api/api/texts_spec.rb +41 -0
  87. data/spec/voog_api/api/tickets_spec.rb +54 -0
  88. data/spec/voog_spec.rb +38 -0
  89. data/voog_api.gemspec +27 -0
  90. metadata +278 -0
@@ -0,0 +1,77 @@
1
+ module Voog
2
+ class API
3
+ module Pages
4
+
5
+ # List pages
6
+ def pages(params = {})
7
+ get 'pages', {query: params}
8
+ end
9
+
10
+ # Get a single page
11
+ def page(id, params = {})
12
+ get "pages/#{id}", {query: params}
13
+ end
14
+
15
+ # Create a page
16
+ def create_page(data)
17
+ post 'pages', data
18
+ end
19
+
20
+ # Update a page
21
+ def update_page(id, data)
22
+ put "pages/#{id}", data
23
+ end
24
+
25
+ # Patch a page
26
+ def patch_page(id, data)
27
+ patch "pages/#{id}", data
28
+ end
29
+
30
+ # Delete a page
31
+ def delete_page(id)
32
+ delete "pages/#{id}"
33
+ end
34
+
35
+ # Update/create a key in page data field
36
+ #
37
+ # @params id [String] key in data field
38
+ def update_page_data(page_id, id, data)
39
+ put "pages/#{page_id}/data/#{id}", {value: data}
40
+ end
41
+
42
+ # Delete a key from page data field
43
+ #
44
+ # @params id [String] key in data field
45
+ def delete_page_data(page_id, id)
46
+ delete "pages/#{page_id}/data/#{id}"
47
+ end
48
+
49
+ # Page contents
50
+
51
+ # List contents for page
52
+ def page_contents(id, params = {})
53
+ contents(Voog::API::Contents::ParentKind::Page, id, params)
54
+ end
55
+
56
+ # Get a single content for page
57
+ def page_content(page_id, id, params = {})
58
+ content(Voog::API::Contents::ParentKind::Page, page_id, id, params)
59
+ end
60
+
61
+ # Create a page content for page
62
+ def create_page_content(page_id, data)
63
+ create_content(Voog::API::Contents::ParentKind::Page, page_id, data)
64
+ end
65
+
66
+ # Delete a content from page
67
+ def delete_page_content(page_id, id)
68
+ delete_content(Voog::API::Contents::ParentKind::Page, page_id, id)
69
+ end
70
+
71
+ # Reorder/move page content inside/between content areas and parent objects
72
+ def move_page_content(page_id, id, params = {})
73
+ move_content(Voog::API::Contents::ParentKind::Page, page_id, id, params)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,16 @@
1
+ module Voog
2
+ class API
3
+ module People
4
+
5
+ # List people
6
+ def people(params = {})
7
+ get 'people', {query: params}
8
+ end
9
+
10
+ # Get a single person
11
+ def person(id, params = {})
12
+ get "people/#{id}", {query: params}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,35 @@
1
+ module Voog
2
+ class API
3
+ module Site
4
+
5
+ # Get site attributes
6
+ def site(params = {})
7
+ get 'site', {query: params}
8
+ end
9
+
10
+ # Update a site
11
+ def update_site(data)
12
+ put "site", data
13
+ end
14
+
15
+ # Patch a site
16
+ def patch_site(data)
17
+ patch "site", data
18
+ end
19
+
20
+ # Update/create a key in site data field
21
+ #
22
+ # @params id [String] key in data field
23
+ def update_site_data(id, data)
24
+ put "site/data/#{id}", {value: data}
25
+ end
26
+
27
+ # Delete a key from site data field
28
+ #
29
+ # @params id [String] key in data field
30
+ def delete_site_data(id)
31
+ delete "site/data/#{id}"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ module Voog
2
+ class API
3
+ module Tags
4
+
5
+ # List tags
6
+ def tags(params = {})
7
+ get 'tags', {query: params}
8
+ end
9
+
10
+ # Get a single tag
11
+ def tag(id, params = {})
12
+ get "tags/#{id}", {query: params}
13
+ end
14
+
15
+ # Update a tag
16
+ def update_tag(id, data)
17
+ put "tags/#{id}", data
18
+ end
19
+
20
+ # Delete a tag
21
+ def delete_tag(id)
22
+ delete "tags/#{id}"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ module Voog
2
+ class API
3
+ module Texts
4
+
5
+ # List text contents
6
+ def texts(params = {})
7
+ get 'texts', {query: params}
8
+ end
9
+
10
+ # Get a single text content
11
+ def text(id, params = {})
12
+ get "texts/#{id}", {query: params}
13
+ end
14
+
15
+ # Update a text content
16
+ def update_text(id, data)
17
+ put "texts/#{id}", data
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module Voog
2
+ class API
3
+ module Tickets
4
+
5
+ # List form tickets
6
+ def tickets(form_id, params = {})
7
+ get "forms/#{form_id}/tickets", {query: params}
8
+ end
9
+
10
+ # Get a single ticket for form
11
+ def ticket(form_id, id, params = {})
12
+ get "forms/#{form_id}/tickets/#{id}", {query: params}
13
+ end
14
+
15
+ # Delete a form ticket
16
+ def delete_ticket(form_id, id)
17
+ delete "forms/#{form_id}/tickets/#{id}"
18
+ end
19
+
20
+ # Delete all spam ticket for form
21
+ def delete_spam_tickets(form_id)
22
+ delete "forms/#{form_id}/tickets/delete_spam"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,140 @@
1
+ require 'json'
2
+ require 'sawyer'
3
+
4
+ require 'voog_api/api/articles'
5
+ require 'voog_api/api/assets'
6
+ require 'voog_api/api/comments'
7
+ require 'voog_api/api/content_partials'
8
+ require 'voog_api/api/contents'
9
+ require 'voog_api/api/element_definitions'
10
+ require 'voog_api/api/elements'
11
+ require 'voog_api/api/forms'
12
+ require 'voog_api/api/languages'
13
+ require 'voog_api/api/layouts'
14
+ require 'voog_api/api/layout_assets'
15
+ require 'voog_api/api/media_sets'
16
+ require 'voog_api/api/nodes'
17
+ require 'voog_api/api/site'
18
+ require 'voog_api/api/pages'
19
+ require 'voog_api/api/people'
20
+ require 'voog_api/api/tags'
21
+ require 'voog_api/api/texts'
22
+ require 'voog_api/api/tickets'
23
+
24
+ module Voog
25
+
26
+ class Client
27
+
28
+ include Voog::API::Articles
29
+ include Voog::API::Assets
30
+ include Voog::API::Comments
31
+ include Voog::API::ContentPartials
32
+ include Voog::API::Contents
33
+ include Voog::API::ElementDefinitions
34
+ include Voog::API::Elements
35
+ include Voog::API::Forms
36
+ include Voog::API::Languages
37
+ include Voog::API::Layouts
38
+ include Voog::API::LayoutAssets
39
+ include Voog::API::MediaSets
40
+ include Voog::API::Nodes
41
+ include Voog::API::Pages
42
+ include Voog::API::People
43
+ include Voog::API::Site
44
+ include Voog::API::Tags
45
+ include Voog::API::Texts
46
+ include Voog::API::Tickets
47
+
48
+ attr_reader :api_token, :host
49
+
50
+ def initialize(host = Voog.host, api_token = Voog.api_token, options = {})
51
+ @host = host
52
+ @api_token = api_token
53
+ @options = options
54
+ @raise_on_error = options.fetch(:raise_on_error, true)
55
+ end
56
+
57
+ def get(url, options = {})
58
+ request :get, url, nil, options
59
+ end
60
+
61
+ def post(url, data, options = {})
62
+ request :post, url, data, options
63
+ end
64
+
65
+ def put(url, data, options = {})
66
+ request :put, url, data, options
67
+ end
68
+
69
+ def patch(url, data, options = {})
70
+ request :patch, url, data, options
71
+ end
72
+
73
+ def delete(url, options = {})
74
+ request :delete, url, nil, options
75
+ end
76
+
77
+ def head(url, options = {})
78
+ request :head, url, nil, options
79
+ end
80
+
81
+ def api_endpoint
82
+ "http://#{host}/admin/api"
83
+ end
84
+
85
+ def agent
86
+ @agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
87
+ http.headers[:content_type] = 'application/json'
88
+ http.headers[:accept] = 'application/json'
89
+ http.headers[:user_agent] = 'Voog.rb Ruby wrapper'
90
+ http.headers[:x_api_token] = @api_token
91
+ end
92
+ end
93
+
94
+ def multipart_agent
95
+ Faraday.new do |faraday|
96
+ faraday.request :multipart
97
+ faraday.response :raise_error if @raise_on_error
98
+ faraday.adapter :net_http
99
+
100
+ faraday.headers['X_API_TOKEN'] = @api_token
101
+ faraday.headers['User-Agent'] = 'Voog.rb Ruby wrapper'
102
+ end
103
+ end
104
+
105
+ def last_response
106
+ @last_response
107
+ end
108
+
109
+ def parse_response(response)
110
+ JSON.parse(response).inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
111
+ end
112
+
113
+ private
114
+
115
+ def request(method, path, data, options = {})
116
+ multipart = options.fetch(:multipart, false) && (method == :post)
117
+
118
+ @last_response = response = multipart ? \
119
+ multipart_agent.post("#{api_endpoint}/#{path}", data) : \
120
+ agent.call(method, URI.encode(path.to_s), data, options)
121
+ if multipart
122
+ parse_response(response.body)
123
+ else
124
+ response.data
125
+ end
126
+ end
127
+
128
+ def sawyer_options(multipart = false)
129
+ faraday = Faraday.new do |faraday|
130
+ faraday.response :raise_error if @raise_on_error
131
+ faraday.adapter :net_http
132
+ end
133
+ opts = {
134
+ links_parser: Sawyer::LinkParsers::Simple.new,
135
+ faraday: faraday
136
+ }
137
+ opts
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,3 @@
1
+ module Voog
2
+ VERSION = '0.0.7'
3
+ end
data/lib/voog_api.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'voog_api/version'
2
+ require 'voog_api/client'
3
+
4
+ module Voog
5
+
6
+ class << self
7
+
8
+ attr_accessor :host, :api_token
9
+
10
+ def client(options = {})
11
+ unless host.nil? && api_token.nil?
12
+ Voog::Client.new(host, api_token, options)
13
+ else
14
+ nil
15
+ end
16
+ end
17
+
18
+ def configure
19
+ yield self
20
+ true
21
+ end
22
+
23
+ if RUBY_VERSION >= '1.9'
24
+
25
+ def respond_to_missing?(method_name, include_private = false)
26
+ client.respond_to?(method_name, include_private)
27
+ end
28
+
29
+ end
30
+
31
+ if RUBY_VERSION < '1.9'
32
+
33
+ def respond_to?(method_name, include_private = false)
34
+ client.respond_to?(method_name, include_private) || super
35
+ end
36
+
37
+ end
38
+
39
+ private
40
+
41
+ def method_missing(method_name, *args, &block)
42
+ return super unless client.respond_to?(method_name)
43
+ client.send(method_name, *args, &block)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,37 @@
1
+ {
2
+ "id": 2,
3
+ "title": "How I wrote my first article",
4
+ "path": "how-i-wrote-my-first-article",
5
+ "comments_count": 0,
6
+ "publishing": true,
7
+ "published": true,
8
+ "data": {},
9
+ "created_at": "2014-01-23T09:22:04.000Z",
10
+ "updated_at": "2014-01-23T09:22:04.000Z",
11
+ "published_at": "2014-01-23T09:22:04.000Z",
12
+ "url": "http://voog.test/admin/api/articles/2",
13
+ "public_url": "http://voog.test/blog/how-i-wrote-my-first-article",
14
+ "contents_url": "http://voog.test/admin/api/articles/2/contents",
15
+ "comments_url": "http://voog.test/admin/api/site/articles/2/comments",
16
+ "page": {
17
+ "id": 3,
18
+ "content_type": "blog",
19
+ "created_at": "2014-01-23T09:19:04.000Z",
20
+ "updated_at": "2014-01-23T09:19:04.000Z",
21
+ "published_at": "2014-01-23T09:19:04.000Z",
22
+ "url": "http://voog.test/admin/api/pages/3"
23
+ },
24
+ "language": {
25
+ "id": 1,
26
+ "code": "en",
27
+ "title": "ENG",
28
+ "created_at": "2014-01-23T09:19:04.000Z",
29
+ "updated_at": "2014-01-23T09:19:04.000Z",
30
+ "url": "http://voog.test/admin/api/languages/1"
31
+ },
32
+ "author": {
33
+ "id": 1,
34
+ "name": "John Smith",
35
+ "url": "http://voog.test/admin/api/people/1"
36
+ }
37
+ }
@@ -0,0 +1,75 @@
1
+ [
2
+ {
3
+ "id": 2,
4
+ "title": "How I wrote my first article",
5
+ "path": "how-i-wrote-my-first-article",
6
+ "comments_count": 0,
7
+ "publishing": true,
8
+ "published": true,
9
+ "data": {},
10
+ "created_at": "2014-01-23T09:22:04.000Z",
11
+ "updated_at": "2014-01-23T09:22:04.000Z",
12
+ "published_at": "2014-01-23T09:22:04.000Z",
13
+ "url": "http://voog.test/admin/api/articles/2",
14
+ "public_url": "http://voog.test/blog/how-i-wrote-my-first-article",
15
+ "contents_url": "http://voog.test/admin/api/articles/2/contents",
16
+ "comments_url": "http://voog.test/admin/api/site/articles/2/comments",
17
+ "page": {
18
+ "id": 3,
19
+ "content_type": "blog",
20
+ "created_at": "2014-01-23T09:19:04.000Z",
21
+ "updated_at": "2014-01-23T09:19:04.000Z",
22
+ "published_at": "2014-01-23T09:19:04.000Z",
23
+ "url": "http://voog.test/admin/api/pages/3"
24
+ },
25
+ "language": {
26
+ "id": 1,
27
+ "code": "en",
28
+ "title": "ENG",
29
+ "created_at": "2014-01-23T09:19:04.000Z",
30
+ "updated_at": "2014-01-23T09:19:04.000Z",
31
+ "url": "http://voog.test/admin/api/languages/1"
32
+ },
33
+ "author": {
34
+ "id": 1,
35
+ "name": "John Smith",
36
+ "url": "http://voog.test/admin/api/people/1"
37
+ }
38
+ }, {
39
+ "id": 1,
40
+ "title": "Having sample news pieces?",
41
+ "path": "having-sample-news-pieces",
42
+ "comments_count": 0,
43
+ "publishing": true,
44
+ "published": true,
45
+ "data": {},
46
+ "created_at": "2014-01-23T09:19:04.000Z",
47
+ "updated_at": "2014-01-23T09:19:04.000Z",
48
+ "published_at": "2014-01-23T09:19:04.000Z",
49
+ "url": "http://voog.test/admin/api/articles/1",
50
+ "public_url": "http://voog.test/blog/having-sample-news-pieces",
51
+ "contents_url": "http://voog.test/admin/api/articles/1/contents",
52
+ "comments_url": "http://voog.test/admin/api/site/articles/1/comments",
53
+ "page": {
54
+ "id": 3,
55
+ "content_type": "blog",
56
+ "created_at": "2014-01-23T09:19:04.000Z",
57
+ "updated_at": "2014-01-23T09:19:04.000Z",
58
+ "published_at": "2014-01-23T09:19:04.000Z",
59
+ "url": "http://voog.test/admin/api/pages/3"
60
+ },
61
+ "language": {
62
+ "id": 1,
63
+ "code": "en",
64
+ "title": "ENG",
65
+ "created_at": "2014-01-23T09:19:04.000Z",
66
+ "updated_at": "2014-01-23T09:19:04.000Z",
67
+ "url": "http://voog.test/admin/api/languages/1"
68
+ },
69
+ "author": {
70
+ "id": 1,
71
+ "name": "John Smith",
72
+ "url": "http://voog.test/admin/api/people/1"
73
+ }
74
+ }
75
+ ]
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": 1,
3
+ "filename": "Screen Shot 2014-01-28 at 10.53.26.png",
4
+ "content_type": "image/png",
5
+ "size": 95708,
6
+ "extension": "png",
7
+ "type": "image",
8
+ "created_at": "2014-02-04T10:55:28.000Z",
9
+ "updated_at": "2014-02-04T10:55:30.000Z",
10
+ "url": "http://voog.test/admin/api/assets/1",
11
+ "original_url": "http://media.voog.com/0000/0000/0001/photos/Screen%20Shot%202014-01-28%20at%2010.53.26.png",
12
+ "thumbnail_url": "http://media.voog.com/0000/0000/0001/photos/Screen%20Shot%202014-01-28%20at%2010.53.26_large.jpg",
13
+ "medium_thumbnail_url": "http://media.voog.com/0000/0000/0001/photos/Screen%20Shot%202014-01-28%20at%2010.53.26_medium.jpg",
14
+ "width": 999,
15
+ "height": 569,
16
+ "media_sets": [{
17
+ "id": 1,
18
+ "title": "",
19
+ "created_at": "2014-01-16T08:04:27.000Z",
20
+ "updated_at": "2014-01-16T08:04:27.000Z",
21
+ "url": "http://media.voog.com/admin/api/media_sets/1",
22
+ "add_assets_url": "http://media.voog.com/admin/api/media_sets/1/add_assets"
23
+ }]
24
+ }
@@ -0,0 +1,29 @@
1
+ [
2
+ {
3
+ "id": 2,
4
+ "filename": "report.pdf",
5
+ "content_type": "application/pdf",
6
+ "size": 36657,
7
+ "extension": "pdf",
8
+ "type": "document",
9
+ "created_at": "2014-02-04T14:37:41.000Z",
10
+ "updated_at": "2014-02-04T14:37:41.000Z",
11
+ "url": "http://voog.test/admin/api/assets/2",
12
+ "original_url": "http://media.voog.com/0000/0000/0001/files/report.pdf"
13
+ }, {
14
+ "id": 1,
15
+ "filename": "Screen Shot 2014-01-28 at 10.53.26.png",
16
+ "content_type": "image/png",
17
+ "size": 95708,
18
+ "extension": "png",
19
+ "type": "image",
20
+ "created_at": "2014-02-04T10:55:28.000Z",
21
+ "updated_at": "2014-02-04T10:55:30.000Z",
22
+ "url": "http://voog.test/admin/api/assets/1",
23
+ "original_url": "http://media.voog.com/0000/0000/0001/photos/Screen%20Shot%202014-01-28%20at%2010.53.26.png",
24
+ "thumbnail_url": "http://media.voog.com/0000/0000/0001/photos/Screen%20Shot%202014-01-28%20at%2010.53.26_large.jpg",
25
+ "medium_thumbnail_url": "http://media.voog.com/0000/0000/0001/photos/Screen%20Shot%202014-01-28%20at%2010.53.26_medium.jpg",
26
+ "width": 999,
27
+ "height": 569
28
+ }
29
+ ]
@@ -0,0 +1,21 @@
1
+ {
2
+ "id": 2,
3
+ "author": "I'm a Spammer!",
4
+ "body": "Buy something!",
5
+ "spam": false,
6
+ "created_at": "2014-02-07T10:54:08.000Z",
7
+ "updated_at": "2014-02-07T10:54:08.000Z",
8
+ "url": "http://voog.test/admin/api/articles/1/comments/2",
9
+ "article": {
10
+ "id": 1,
11
+ "title": "How I wrote my first article",
12
+ "created_at": "2014-02-07T10:56:07.000Z",
13
+ "updated_at": "2014-02-07T10:56:07.000Z",
14
+ "url": "http://voog.test/admin/api/articles/1",
15
+ "public_url": "http://voog.test/blog/how-i-wrote-my-first-article"
16
+ },
17
+ "author_email": "spam@spam.com",
18
+ "user_ip": "23.81.71.154",
19
+ "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:27.0) Gecko/20100101 Firefox/27.0",
20
+ "referrer": "http://voog.test/blog/how-i-wrote-my-first-article"
21
+ }
@@ -0,0 +1,35 @@
1
+ [
2
+ {
3
+ "id": 2,
4
+ "author": "I'm a Spammer!",
5
+ "body": "Buy something!",
6
+ "spam": false,
7
+ "created_at": "2014-02-07T10:54:08.000Z",
8
+ "updated_at": "2014-02-07T10:56:07.000Z",
9
+ "url": "http://voog.test/admin/api/articles/1/comments/2",
10
+ "article": {
11
+ "id": 1,
12
+ "title": "How I wrote my first article",
13
+ "created_at": "2014-02-07T10:56:07.000Z",
14
+ "updated_at": "2014-02-07T10:56:07.000Z",
15
+ "url": "http://voog.test/admin/api/articles/1",
16
+ "public_url": "http://voog.test/blog/how-i-wrote-my-first-article"
17
+ }
18
+ }, {
19
+ "id": 1,
20
+ "author": "Me",
21
+ "body": "Hi!\r\n\r\nThis is a comment!!",
22
+ "spam": false,
23
+ "created_at": "2014-02-06T15:53:01.000Z",
24
+ "updated_at": "2014-02-06T15:53:01.000Z",
25
+ "url": "http://voog.test/admin/api/articles/1/comments/1",
26
+ "article": {
27
+ "id": 1,
28
+ "title": "How I wrote my first article",
29
+ "created_at": "2014-02-07T10:56:07.000Z",
30
+ "updated_at": "2014-02-07T10:56:07.000Z",
31
+ "url": "http://voog.test/admin/api/articles/1",
32
+ "public_url": "http://voog.test/blog/how-i-wrote-my-first-article"
33
+ }
34
+ }
35
+ ]
@@ -0,0 +1,27 @@
1
+ {
2
+ "id": 2,
3
+ "content_type": "video",
4
+ "created_at": "2014-05-30T10:22:04.000Z",
5
+ "updated_at": "2014-05-30T10:22:04.000Z",
6
+ "url": "http://voog.test/admin/api/content_partials/2",
7
+ "content": {
8
+ "id": 3,
9
+ "name": "body",
10
+ "position": 1,
11
+ "created_at": "2014-05-30T10:22:04.000Z",
12
+ "updated_at": "2014-05-30T10:22:04.000Z",
13
+ "url": "http://voog.test/admin/api/pages/1/contents/3"
14
+ },
15
+ "parent": {
16
+ "id": 1,
17
+ "title": "Home page",
18
+ "type": "page",
19
+ "created_at": "2014-01-13T09:19:04.000Z",
20
+ "updated_at": "2014-01-13T09:19:04.000Z",
21
+ "url": "http://voog.test/admin/api/pages/1"
22
+ },
23
+ "body": "<iframe></iframe>",
24
+ "metainfo": {
25
+ "type": "video"
26
+ }
27
+ }