gather_content-api 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.travis.yml +4 -0
  4. data/Gemfile +13 -0
  5. data/README.md +395 -0
  6. data/Rakefile +14 -0
  7. data/gather_content-api.gemspec +25 -0
  8. data/lib/gather_content/api/account.rb +25 -0
  9. data/lib/gather_content/api/accounts.rb +23 -0
  10. data/lib/gather_content/api/base.rb +67 -0
  11. data/lib/gather_content/api/config.rb +35 -0
  12. data/lib/gather_content/api/file.rb +19 -0
  13. data/lib/gather_content/api/files.rb +27 -0
  14. data/lib/gather_content/api/item.rb +53 -0
  15. data/lib/gather_content/api/items.rb +50 -0
  16. data/lib/gather_content/api/me.rb +19 -0
  17. data/lib/gather_content/api/project.rb +25 -0
  18. data/lib/gather_content/api/projects.rb +51 -0
  19. data/lib/gather_content/api/status.rb +26 -0
  20. data/lib/gather_content/api/statuses.rb +27 -0
  21. data/lib/gather_content/api/template.rb +25 -0
  22. data/lib/gather_content/api/templates.rb +35 -0
  23. data/lib/gather_content/api.rb +19 -0
  24. data/lib/gather_content/error/request_error.rb +33 -0
  25. data/lib/gather_content/error.rb +5 -0
  26. data/lib/gather_content/version.rb +3 -0
  27. data/lib/gather_content.rb +5 -0
  28. data/spec/gather_content/api/account_spec.rb +28 -0
  29. data/spec/gather_content/api/accounts_spec.rb +24 -0
  30. data/spec/gather_content/api/base_spec.rb +5 -0
  31. data/spec/gather_content/api/config_spec.rb +98 -0
  32. data/spec/gather_content/api/files_spec.rb +39 -0
  33. data/spec/gather_content/api/item_spec.rb +158 -0
  34. data/spec/gather_content/api/items_spec.rb +127 -0
  35. data/spec/gather_content/api/me_spec.rb +26 -0
  36. data/spec/gather_content/api/project_spec.rb +32 -0
  37. data/spec/gather_content/api/projects_spec.rb +96 -0
  38. data/spec/gather_content/api/status_spec.rb +44 -0
  39. data/spec/gather_content/api/statuses_spec.rb +39 -0
  40. data/spec/gather_content/api/template_spec.rb +36 -0
  41. data/spec/gather_content/api/templates_spec.rb +23 -0
  42. data/spec/spec_helper.rb +26 -0
  43. data/spec/vcr_cassettes/GatherContent_Api_Account/_/returns_the_data_related_to_the_supplied_key.yml +39 -0
  44. data/spec/vcr_cassettes/GatherContent_Api_Account/_fetch/1_2_1.yml +39 -0
  45. data/spec/vcr_cassettes/GatherContent_Api_Account/_fetch/1_3_1.yml +39 -0
  46. data/spec/vcr_cassettes/GatherContent_Api_Account/_get_account/1_3_1.yml +39 -0
  47. data/spec/vcr_cassettes/GatherContent_Api_Accounts/_each/should_contain_Account_objects.yml +40 -0
  48. data/spec/vcr_cassettes/GatherContent_Api_Accounts/_each/should_have_memoized_data.yml +40 -0
  49. data/spec/vcr_cassettes/GatherContent_Api_Files/_each/should_contain_File_objects.yml +40 -0
  50. data/spec/vcr_cassettes/GatherContent_Api_Files/_each/should_have_memoized_data.yml +40 -0
  51. data/spec/vcr_cassettes/GatherContent_Api_Item/_/returns_the_data_related_to_the_supplied_key.yml +40 -0
  52. data/spec/vcr_cassettes/GatherContent_Api_Item/_fetch/1_2_1.yml +40 -0
  53. data/spec/vcr_cassettes/GatherContent_Api_Item/_get_item/1_3_1.yml +40 -0
  54. data/spec/vcr_cassettes/GatherContent_Api_Item/apply_template/successful/returns_true.yml +42 -0
  55. data/spec/vcr_cassettes/GatherContent_Api_Item/apply_template/unsuccessful/parses_the_message.yml +42 -0
  56. data/spec/vcr_cassettes/GatherContent_Api_Item/apply_template/unsuccessful/raises_an_RequestError.yml +42 -0
  57. data/spec/vcr_cassettes/GatherContent_Api_Item/apply_template/unsuccessful/sets_the_RequestError_status.yml +42 -0
  58. data/spec/vcr_cassettes/GatherContent_Api_Item/choose_status/successful/returns_true.yml +42 -0
  59. data/spec/vcr_cassettes/GatherContent_Api_Item/choose_status/unsuccessful/parses_the_message.yml +42 -0
  60. data/spec/vcr_cassettes/GatherContent_Api_Item/choose_status/unsuccessful/raises_an_RequestError.yml +42 -0
  61. data/spec/vcr_cassettes/GatherContent_Api_Item/choose_status/unsuccessful/sets_the_RequestError_status.yml +42 -0
  62. data/spec/vcr_cassettes/GatherContent_Api_Item/save/successful/returns_true.yml +42 -0
  63. data/spec/vcr_cassettes/GatherContent_Api_Item/save/unsuccessful/parses_the_message.yml +42 -0
  64. data/spec/vcr_cassettes/GatherContent_Api_Item/save/unsuccessful/raises_an_RequestError.yml +42 -0
  65. data/spec/vcr_cassettes/GatherContent_Api_Item/save/unsuccessful/sets_the_RequestError_status.yml +42 -0
  66. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/on_non-202_response/raises_an_RequestError.yml +42 -0
  67. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/on_non-202_response/sets_the_RequestError_message.yml +42 -0
  68. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/on_non-202_response/sets_the_RequestError_status.yml +42 -0
  69. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/with_config/created_an_item.yml +44 -0
  70. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/with_config/set_the_item_id.yml +44 -0
  71. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/with_config/sets_the_content.yml +88 -0
  72. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/with_name/created_an_item.yml +44 -0
  73. data/spec/vcr_cassettes/GatherContent_Api_Items/_create/with_name/set_the_item_id.yml +44 -0
  74. data/spec/vcr_cassettes/GatherContent_Api_Items/_each/should_contain_Item_objects.yml +43 -0
  75. data/spec/vcr_cassettes/GatherContent_Api_Items/_each/should_have_memoized_data.yml +43 -0
  76. data/spec/vcr_cassettes/GatherContent_Api_Me/_/returns_the_data_related_to_the_supplied_key.yml +40 -0
  77. data/spec/vcr_cassettes/GatherContent_Api_Me/_fetch/1_2_1.yml +40 -0
  78. data/spec/vcr_cassettes/GatherContent_Api_Me/_get_me/1_2_1.yml +40 -0
  79. data/spec/vcr_cassettes/GatherContent_Api_Project/_/returns_the_data_related_to_the_supplied_key.yml +41 -0
  80. data/spec/vcr_cassettes/GatherContent_Api_Project/_fetch/1_3_1.yml +41 -0
  81. data/spec/vcr_cassettes/GatherContent_Api_Project/_get_project/1_3_1.yml +41 -0
  82. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/on_non-202_response/raises_an_RequestError.yml +42 -0
  83. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/on_non-202_response/sets_the_RequestError_message.yml +42 -0
  84. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/on_non-202_response/sets_the_RequestError_status.yml +42 -0
  85. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/with_empty_type/created_a_project.yml +44 -0
  86. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/with_name_and_valid_type/created_a_project.yml +44 -0
  87. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/with_name_and_valid_type/set_the_project_id.yml +44 -0
  88. data/spec/vcr_cassettes/GatherContent_Api_Projects/_create/with_no_type/created_a_project.yml +44 -0
  89. data/spec/vcr_cassettes/GatherContent_Api_Projects/_each/should_contain_Project_objects.yml +41 -0
  90. data/spec/vcr_cassettes/GatherContent_Api_Status/_/returns_the_data_related_to_the_supplied_key.yml +39 -0
  91. data/spec/vcr_cassettes/GatherContent_Api_Status/_fetch/1_2_1.yml +39 -0
  92. data/spec/vcr_cassettes/GatherContent_Api_Statuses/_each/should_contain_Status_objects.yml +40 -0
  93. data/spec/vcr_cassettes/GatherContent_Api_Statuses/_each/should_have_memoized_data.yml +41 -0
  94. data/spec/vcr_cassettes/GatherContent_Api_Template/_/returns_the_data_related_to_the_supplied_key.yml +40 -0
  95. data/spec/vcr_cassettes/GatherContent_Api_Template/_fetch/1_2_1.yml +40 -0
  96. data/spec/vcr_cassettes/GatherContent_Api_Templates/_each/should_contain_Template_objects.yml +40 -0
  97. data/spec/vcr_cassettes/GatherContent_Api_Templates/_each/should_have_memoized_data.yml +40 -0
  98. metadata +254 -0
@@ -0,0 +1,53 @@
1
+ require "base64"
2
+
3
+ module GatherContent
4
+ module Api
5
+ class Item < Base
6
+ attr_accessor :item_id
7
+
8
+ def initialize(item_id, data = nil)
9
+ raise ArgumentError, "Item_id is required!" if item_id.nil?
10
+ @item_id = item_id
11
+ @data = data
12
+ end
13
+
14
+ def [](key)
15
+ fetch[key]
16
+ end
17
+
18
+ def save(config)
19
+ encoded = Base64.strict_encode64(config.to_json)
20
+ result = post_json({config: encoded}, "#{path}/save")
21
+ if result.status == 202
22
+ true
23
+ else
24
+ raise GatherContent::Error::RequestError.new(result)
25
+ end
26
+ end
27
+
28
+ def apply_template(template_id)
29
+ post_save({ "template_id" => template_id }, "#{path}/apply_template")
30
+ end
31
+
32
+ def choose_status(status_id)
33
+ post_save({ "status_id" => status_id }, "#{path}/choose_status")
34
+ end
35
+
36
+ private
37
+ def post_save(params, path)
38
+ result = post_json(params, path)
39
+ if result.status == 202
40
+ true
41
+ else
42
+ raise GatherContent::Error::RequestError.new(result)
43
+ end
44
+ end
45
+
46
+ def path
47
+ @path ||= "/items/#{item_id}"
48
+ end
49
+
50
+ def params; end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,50 @@
1
+ require "base64"
2
+
3
+ module GatherContent
4
+ module Api
5
+ class Items < Base
6
+ include Enumerable
7
+ attr_accessor :project_id
8
+
9
+ def initialize(project_id)
10
+ raise ArgumentError, "Project_id is required!" if project_id.nil?
11
+ @project_id = project_id
12
+ end
13
+
14
+ def each(&block)
15
+ fetch.each do |item|
16
+ yield GatherContent::Api::Item.new(item['id'], item)
17
+ end
18
+ end
19
+
20
+ def create(data)
21
+ data.delete("parent_id") if data["parent_id"].nil? || data["parent_id"].empty?
22
+ data.delete("template_id") if data["template_id"].nil? || data["template_id"].empty?
23
+
24
+ config = data.delete("config")
25
+ data["config"] = Base64.strict_encode64(config.to_json) unless config.nil? || config.empty?
26
+
27
+ raise ArgumentError, "name is required!" if data["name"].nil? || data["name"].empty?
28
+
29
+ result = post_json(data.merge({ 'project_id' => @project_id }))
30
+
31
+ if result.status == 202
32
+ item_id = result.headers['location'].split('/').last
33
+ GatherContent::Api::Item.new(item_id)
34
+ else
35
+ raise GatherContent::Error::RequestError.new(result)
36
+ end
37
+ end
38
+
39
+ private
40
+ def params
41
+ { project_id: project_id }
42
+ end
43
+
44
+ def path
45
+ @path ||= '/items'
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,19 @@
1
+ module GatherContent
2
+ module Api
3
+ class Me < Base
4
+ def initialize; end
5
+
6
+ def [](key)
7
+ fetch[key]
8
+ end
9
+
10
+ private
11
+
12
+ def path
13
+ @path ||= "/me"
14
+ end
15
+
16
+ def params; end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module GatherContent
2
+ module Api
3
+ class Project < Base
4
+ attr_accessor :project_id
5
+
6
+ def initialize(project_id, data = nil)
7
+ raise ArgumentError, "project_id is required!" if project_id.nil?
8
+ @project_id = project_id
9
+ @data = data
10
+ end
11
+
12
+ def [](key)
13
+ fetch[key]
14
+ end
15
+
16
+ private
17
+
18
+ def path
19
+ @path ||= "/projects/#{project_id}"
20
+ end
21
+
22
+ def params; end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ module GatherContent
2
+ module Api
3
+ class Projects < Base
4
+ attr_accessor :account_id
5
+ include Enumerable
6
+
7
+ def initialize(account_id)
8
+ raise ArgumentError, "account_id is required!" if account_id.nil?
9
+ @account_id = account_id
10
+ end
11
+
12
+ def each(&block)
13
+ fetch.each do |project|
14
+ yield GatherContent::Api::Project.new(project['id'], project)
15
+ end
16
+ end
17
+
18
+ def create(data)
19
+ data.delete("type") if data["type"].nil? || data["type"].empty?
20
+
21
+ raise ArgumentError, "name is required!" if data["name"].nil? || data["name"].empty?
22
+ raise ArgumentError, "type is invalid!" unless valid_type?(data["type"])
23
+
24
+ result = post_json(data.merge({ 'account_id' => @account_id }))
25
+
26
+ if result.status == 202
27
+ project_id = result.headers['location'].split('/').last
28
+ GatherContent::Api::Project.new(project_id)
29
+ else
30
+ raise GatherContent::Error::RequestError.new(result)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def params
37
+ { account_id: @account_id }
38
+ end
39
+
40
+ def path
41
+ @path ||= '/projects'
42
+ end
43
+
44
+ def valid_type?(type)
45
+ return type = "other" if type.nil? || type.empty?
46
+ types = %w{website-build ongoing-website-content marketing-editorial-content email-marketing-content other}
47
+ types.include?(type)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ module GatherContent
2
+ module Api
3
+ class Status < Base
4
+ attr_accessor :project_id, :status_id
5
+
6
+ def initialize(project_id, status_id, data = nil)
7
+ raise ArgumentError, "project_id is required!" if project_id.nil?
8
+ raise ArgumentError, "status_id is required!" if status_id.nil?
9
+ @project_id = project_id
10
+ @status_id = status_id
11
+ @data = data
12
+ end
13
+
14
+ def [](key)
15
+ fetch[key]
16
+ end
17
+
18
+ private
19
+ def path
20
+ @path ||= "/projects/#{project_id}/statuses/#{status_id}"
21
+ end
22
+
23
+ def params; end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ module GatherContent
2
+ module Api
3
+
4
+ class Statuses < Base
5
+ attr_accessor :project_id
6
+ include Enumerable
7
+
8
+ def initialize(project_id)
9
+ raise ArgumentError, "project_id is required!" if project_id.nil?
10
+ @project_id = project_id
11
+ end
12
+
13
+ def each(&block)
14
+ fetch.each do |status|
15
+ yield GatherContent::Api::Status.new(@project_id, status['id'], status)
16
+ end
17
+ end
18
+
19
+ private
20
+ def path
21
+ @path ||= "/projects/#{project_id}/statuses"
22
+ end
23
+
24
+ def params; end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ module GatherContent
2
+ module Api
3
+ class Template < Base
4
+ attr_accessor :template_id
5
+
6
+ def initialize(template_id, data = nil)
7
+ raise ArgumentError, "Template_id is required!" if template_id.nil?
8
+ @template_id = template_id
9
+ @data = data
10
+ end
11
+
12
+ def [](key)
13
+ fetch[key]
14
+ end
15
+
16
+ private
17
+
18
+ def path
19
+ @path ||= "/templates/#{template_id}"
20
+ end
21
+
22
+ def params; end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,35 @@
1
+ module GatherContent
2
+ module Api
3
+ class Templates < Base
4
+ attr_accessor :project_id
5
+ include Enumerable
6
+
7
+ def initialize(project_id)
8
+ raise ArgumentError, "project_id is required!" if project_id.nil?
9
+ @project_id = project_id
10
+ end
11
+
12
+ def each(&block)
13
+ fetch.each do |template|
14
+ yield GatherContent::Api::Template.new(template['id'], template)
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def params
21
+ { project_id: @project_id }
22
+ end
23
+
24
+ def path
25
+ @path ||= '/templates'
26
+ end
27
+
28
+ def valid_type?(type)
29
+ return type = "other" if type.nil? || type.empty?
30
+ types = %w{website-build ongoing-website-content marketing-editorial-content email-marketing-content other}
31
+ types.include?(type)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,19 @@
1
+ module GatherContent
2
+ module Api
3
+ autoload :Config, 'gather_content/api/config'
4
+ autoload :Base, 'gather_content/api/base'
5
+ autoload :Me, 'gather_content/api/me'
6
+ autoload :Accounts, 'gather_content/api/accounts'
7
+ autoload :Account, 'gather_content/api/account'
8
+ autoload :Projects, 'gather_content/api/projects'
9
+ autoload :Project, 'gather_content/api/project'
10
+ autoload :Items, 'gather_content/api/items'
11
+ autoload :Item, 'gather_content/api/item'
12
+ autoload :Statuses, 'gather_content/api/statuses'
13
+ autoload :Status, 'gather_content/api/status'
14
+ autoload :Files, 'gather_content/api/files'
15
+ autoload :File, 'gather_content/api/file'
16
+ autoload :Templates, 'gather_content/api/templates'
17
+ autoload :Template, 'gather_content/api/template'
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ module GatherContent
2
+ module Error
3
+ class RequestError < StandardError
4
+ attr_reader :response, :status
5
+
6
+ def initialize(response)
7
+ @response = response
8
+ @status = response.status
9
+
10
+ super(parse_message(response))
11
+ end
12
+
13
+ private
14
+ def parse_message(response)
15
+ parsed = JSON.parse(response.body)
16
+
17
+ return response.body unless parsed.is_a?(Hash)
18
+ return parsed['data'].join(' ') if parsed['data'].is_a?(Array)
19
+
20
+ if parsed.is_a?(Hash) && parsed['data']
21
+ data = parsed['data']
22
+
23
+ return data['message'] if data['message']
24
+ return data.to_s
25
+ elsif parsed.is_a?(Hash) && parsed['error']
26
+ parsed['error']
27
+ else
28
+ parsed['data'].to_s
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ module GatherContent
2
+ module Error
3
+ autoload :RequestError, 'gather_content/error/request_error'
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module GatherContent
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'json'
2
+ require 'faraday'
3
+ require 'gather_content/version'
4
+ require 'gather_content/api'
5
+ require 'gather_content/error'
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe GatherContent::Api::Account, vcr: true do
4
+ let(:account_id) { 123456 }
5
+ let(:account) { GatherContent::Api::Account.new(account_id) }
6
+
7
+ describe '.new' do
8
+ subject { account }
9
+
10
+ it { is_expected.to be_a GatherContent::Api::Account }
11
+ end
12
+
13
+ describe '#fetch' do
14
+ subject { account.fetch }
15
+ it { is_expected.to be_a Hash }
16
+ end
17
+
18
+ describe "[]" do
19
+ subject { account }
20
+
21
+ it "returns the data related to the supplied key" do
22
+ expect(subject["id"]).to eq("123456")
23
+ expect(subject["name"]).to eq("Example")
24
+ expect(subject["slug"]).to eq("example")
25
+ expect(subject["timezone"]).to eq("UTC")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe GatherContent::Api::Accounts, vcr: true do
4
+ let(:accounts) { GatherContent::Api::Accounts.new }
5
+
6
+ describe '#each' do
7
+ subject { accounts }
8
+
9
+ it { is_expected.to be_a Enumerable }
10
+
11
+ it 'should contain Account objects' do
12
+ subject.each do |account|
13
+ expect(account).to be_a GatherContent::Api::Account
14
+ end
15
+ end
16
+
17
+ it 'should have memoized data' do
18
+ expect(subject.first["id"]).to eq("123456")
19
+ expect(subject.first["name"]).to eq("Example")
20
+ expect(subject.first["slug"]).to eq("example")
21
+ expect(subject.first["timezone"]).to eq("UTC")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe GatherContent::Api::Base do
4
+
5
+ end
@@ -0,0 +1,98 @@
1
+ require 'spec_helper'
2
+ require 'climate_control'
3
+
4
+ describe GatherContent::Api::Config do
5
+ subject { GatherContent::Api::Config.instance }
6
+
7
+ let(:username) { "default" }
8
+ let(:api_key) { "a2d8b22c-25cc-4f45-8892-2298ccf70f47" }
9
+ let(:host) { nil }
10
+ let(:port) { nil }
11
+
12
+ around do |example|
13
+ env = {
14
+ GATHER_CONTENT_API_USERNAME: username,
15
+ GATHER_CONTENT_API_KEY: api_key,
16
+ GATHER_CONTENT_API_HOST: host,
17
+ GATHER_CONTENT_API_PORT: port
18
+ }
19
+ ClimateControl.modify env do
20
+ example.run
21
+ end
22
+ end
23
+
24
+ describe '#default' do
25
+ it "uses the value from GATHER_CONTENT_API_USERNAME" do
26
+ expect(subject.username).to eq(username)
27
+ end
28
+
29
+ it "uses the value from GATHER_CONTENT_API_KEY" do
30
+ expect(subject.api_key).to eq(api_key)
31
+ end
32
+
33
+ describe "with GATHER_CONTENT_API_HOST" do
34
+ let(:host) { "https://env.gathercontent.com" }
35
+
36
+ it "uses the value from GATHER_CONTENT_API_HOST" do
37
+ expect(subject.host).to eq(host)
38
+ end
39
+ end
40
+
41
+ describe "without GATHER_CONTENT_API_HOST" do
42
+ it "uses https://api.gathercontent.com" do
43
+ expect(subject.host).to eq("https://api.gathercontent.com")
44
+ end
45
+ end
46
+
47
+ describe "with GATHER_CONTENT_API_PORT" do
48
+ let(:port) { "1443" }
49
+
50
+ it "uses the value from GATHER_CONTENT_API_PORT" do
51
+ expect(subject.port).to eq(port)
52
+ end
53
+ end
54
+
55
+ describe "without GATHER_CONTENT_API_PORT" do
56
+ it "uses 443" do
57
+ expect(subject.port).to eq("443")
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '#run' do
63
+ let(:username) { "example" }
64
+ let(:api_key) { "baa89326-f1be-4959-93e5-effb204e5a6f" }
65
+ let(:host) { "https://specialhost.gathercontent.com" }
66
+ let(:port) { "8443" }
67
+
68
+ before(:each) do
69
+ GatherContent::Api::Config.run do |config|
70
+ config.username = username
71
+ config.api_key = api_key
72
+ end
73
+ end
74
+
75
+ after(:each) do
76
+ GatherContent::Api::Config.run do |config|
77
+ config.username = nil
78
+ config.api_key = nil
79
+ end
80
+ end
81
+
82
+ it "stores the username" do
83
+ expect(subject.username).to eq(username)
84
+ end
85
+
86
+ it "stores the api_key" do
87
+ expect(subject.api_key).to eq(api_key)
88
+ end
89
+
90
+ it "stores the host" do
91
+ expect(subject.host).to eq(host)
92
+ end
93
+
94
+ it "stores the port" do
95
+ expect(subject.port).to eq(port)
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe GatherContent::Api::Files, vcr: true do
4
+ let(:item_id) { 123456 }
5
+ let(:files) { GatherContent::Api::Files.new(item_id) }
6
+
7
+ describe '.new' do
8
+ subject { files }
9
+
10
+ context 'when project id is passed in' do
11
+ it { is_expected.to be_a GatherContent::Api::Files }
12
+ end
13
+
14
+ context 'when project id is not passed in' do
15
+ let(:item_id) { nil }
16
+ it 'should raise an ArgumentError' do
17
+ expect { subject }.to raise_error ArgumentError
18
+ end
19
+ end
20
+ end
21
+
22
+ describe '#each' do
23
+ subject { files }
24
+
25
+ it { is_expected.to be_a Enumerable }
26
+
27
+ it 'should contain File objects' do
28
+ subject.each do |file|
29
+ expect(file).to be_a GatherContent::Api::File
30
+ end
31
+ end
32
+
33
+ it 'should have memoized data' do
34
+ expect(subject.first["id"]).to eq(1)
35
+ expect(subject.first["user_id"]).to eq(1)
36
+ expect(subject.first["item_id"]).to eq(123456)
37
+ end
38
+ end
39
+ end