supportify_client 0.0.4 → 1.0.0

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -4
  3. data/Gemfile.lock +47 -39
  4. data/Rakefile +4 -4
  5. data/VERSION +1 -1
  6. data/lib/supportify_client/api/supportify_api.rb +560 -0
  7. data/lib/supportify_client/api_client.rb +271 -0
  8. data/lib/supportify_client/api_error.rb +24 -0
  9. data/lib/supportify_client/configuration.rb +187 -0
  10. data/lib/supportify_client/models/base_object.rb +87 -0
  11. data/lib/supportify_client/models/category.rb +53 -0
  12. data/lib/supportify_client/models/error.rb +53 -0
  13. data/lib/supportify_client/models/faq.rb +161 -0
  14. data/lib/supportify_client/models/info.rb +45 -0
  15. data/lib/supportify_client/models/tag.rb +53 -0
  16. data/lib/supportify_client/models/user.rb +45 -0
  17. data/lib/supportify_client.rb +30 -14
  18. data/spec/features/.gitkeep +0 -0
  19. data/supportify_client.gemspec +27 -27
  20. metadata +38 -26
  21. data/lib/supportify_client/api/category.rb +0 -17
  22. data/lib/supportify_client/api/error.rb +0 -13
  23. data/lib/supportify_client/api/faq.rb +0 -23
  24. data/lib/supportify_client/api/search.rb +0 -9
  25. data/lib/supportify_client/api/tag.rb +0 -17
  26. data/lib/supportify_client/api.rb +0 -5
  27. data/lib/supportify_client/client.rb +0 -49
  28. data/lib/supportify_client/factory.rb +0 -29
  29. data/lib/supportify_client/gateway.rb +0 -32
  30. data/lib/supportify_client/repository.rb +0 -23
  31. data/spec/features/categories_spec.rb +0 -55
  32. data/spec/features/client_spec.rb +0 -50
  33. data/spec/features/errors_spec.rb +0 -96
  34. data/spec/features/faqs_spec.rb +0 -55
  35. data/spec/features/search_spec.rb +0 -29
  36. data/spec/features/tags_spec.rb +0 -55
@@ -1,49 +0,0 @@
1
- require 'supportify_client/api'
2
- require 'supportify_client/factory'
3
- require 'supportify_client/gateway'
4
- require 'supportify_client/repository'
5
-
6
- module Supportify
7
- class Client
8
- class << self
9
- def base_url
10
- "https://api.supportify.io"
11
- end
12
-
13
- def versions
14
- %w{v1}
15
- end
16
-
17
- def headers
18
- {
19
- user_agent: "supportify-ruby-gem/#{Supportify::VERSION}",
20
- content_type: :json,
21
- accept: :json
22
- }
23
- end
24
- end
25
-
26
- include Gateway
27
- include Repository
28
- include Factory
29
-
30
- def initialize(args = {})
31
- @config = args
32
-
33
- @config[:api_key] ||= ENV["SUPPORTIFY_API_KEY"]
34
- @config[:app_key] ||= ENV["SUPPORTIFY_APP_KEY"]
35
- @config[:version] ||= self.class.versions.last
36
- end
37
-
38
- protected
39
-
40
- def headers
41
- self.class.headers.merge 'X-Supportify-ApiKey' => @config[:api_key],
42
- 'X-Supportify-AppKey' => @config[:app_key]
43
- end
44
-
45
- def base_url
46
- "#{self.class.base_url}/#{@config[:version]}"
47
- end
48
- end
49
- end
@@ -1,29 +0,0 @@
1
- require 'json'
2
-
3
- module Supportify
4
- module Factory
5
- def parse(body)
6
- attributes = JSON.parse(body)
7
- key = attributes.keys.first
8
-
9
- klass = case key
10
- when /^faq(s?)/i then Supportify::Api::Faq
11
- when /^categor(ies|y)/i then Supportify::Api::Category
12
- when /^tag(s?)/i then Supportify::Api::Tag
13
- else Supportify::Api::Error
14
- end
15
-
16
- unless klass.nil?
17
- if attributes[key].is_a? Array or attributes[key].is_a? Hash
18
- attributes = attributes[key]
19
- end
20
-
21
- if attributes.is_a? Array
22
- attributes.map { |a| klass.new a }
23
- else
24
- klass.new attributes
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,32 +0,0 @@
1
- module Supportify
2
- module Gateway
3
- def get(klass, options)
4
- request :get, klass, options
5
- end
6
-
7
- def post(klass, options)
8
- request :post, klass, options
9
- end
10
-
11
- def request(method, klass, options)
12
- params = options.extract_options!
13
- id = options.pop if options.any?
14
-
15
- url = "#{self.base_url}/#{klass.resource_name}"
16
- url << "/#{id}" unless id.nil?
17
-
18
- RestClient::Request.execute method: method, url: url, payload: params, headers: self.headers do |response, request, result|
19
- case response.code
20
- when 404
21
- nil
22
- when 200
23
- parse response unless response.nil? or response =~ /\A[[:space:]]*\z/
24
- when 400, 401, 404, 500
25
- raise parse(response)
26
- else
27
- response.return!(request, result)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,23 +0,0 @@
1
- module Supportify
2
- module Repository
3
- def categories(*args)
4
- get Supportify::Api::Category, args
5
- end
6
-
7
- def faqs(*args)
8
- get Supportify::Api::Faq, args
9
- end
10
-
11
- def tags(*args)
12
- get Supportify::Api::Tag, args
13
- end
14
-
15
- def search(*args)
16
- get Supportify::Api::Search, args
17
- end
18
-
19
- def vote(*args)
20
- post Supportify::Api::Faq, args
21
- end
22
- end
23
- end
@@ -1,55 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe "Category Retrieval" do
4
- let(:api_key) { 'api_key' }
5
- let(:app_key) { 'app_key' }
6
- let(:version) { 'v1' }
7
-
8
- subject do
9
- Supportify::Client.new api_key: api_key,
10
- app_key: app_key,
11
- version: version
12
- end
13
-
14
- describe "When retrieving multiple Categories" do
15
- let(:categories) { build_list :category, rand(1..5) }
16
- let(:response) { subject.categories }
17
-
18
- before do
19
- stub_request(:any, "https://api.supportify.io/v1/categories")
20
- .to_return(status: 200, body: { 'categories' => categories }.to_json, headers: {})
21
- end
22
-
23
- it { response.should be_a Array }
24
- it { response.each { |r| r.should be_a Supportify::Api::Category } }
25
- end
26
-
27
- describe "When retrieving a single Category" do
28
- let(:category) { build :category }
29
- let(:response) { subject.categories(1) }
30
-
31
- before do
32
- stub_request(:any, "https://api.supportify.io/v1/categories/1")
33
- .to_return(status: 200, body: { 'category' => category }.to_json, headers: {})
34
- end
35
-
36
- it { response.should be_a(Supportify::Api::Category) }
37
- end
38
-
39
- describe "When passing in additional arguments" do
40
- let(:fields) { 'id,name' }
41
- let(:sort) { 'name-asc' }
42
-
43
- before do
44
- stub_request(:get, "https://api.supportify.io/v1/categories").
45
- to_return(:status => 200, :body => "", :headers => {})
46
-
47
- subject.categories fields: fields, sort: sort
48
- end
49
-
50
- it "should have passed along the arguments" do
51
- WebMock.should have_requested(:get, "https://api.supportify.io/v1/categories")
52
- .with(body: { fields: fields, sort: sort })
53
- end
54
- end
55
- end
@@ -1,50 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Supportify::Client do
4
- let(:api_key) { 'api_key' }
5
- let(:app_key) { 'app_key' }
6
- let(:version) { 'v1' }
7
-
8
- subject do
9
- Supportify::Client.new api_key: api_key,
10
- app_key: app_key,
11
- version: version
12
- end
13
-
14
- it { Supportify::Client.base_url.should == 'https://api.supportify.io' }
15
- it { Supportify::Client.versions.should include('v1') }
16
- it { Supportify::Client.headers[:user_agent].should == "supportify-ruby-gem/#{Supportify::VERSION}" }
17
- it { Supportify::Client.headers[:content_type].should == :json }
18
- it { Supportify::Client.headers[:accept].should == :json }
19
-
20
- describe "when initializing without variables" do
21
- let(:target) { Supportify::Client.new }
22
- let(:config) { target.instance_variable_get(:@config) }
23
-
24
- before do
25
- ENV["SUPPORTIFY_API_KEY"] = api_key
26
- ENV["SUPPORTIFY_APP_KEY"] = app_key
27
- end
28
-
29
- it { config[:api_key].should == api_key }
30
- it { config[:app_key].should == app_key }
31
- end
32
-
33
- describe "when making a request" do
34
- before do
35
- stub_request(:any, "https://api.supportify.io/v1/faqs")
36
- .to_return(:status => 200, :body => "", :headers => {})
37
-
38
- subject.faqs
39
- end
40
-
41
- it "should have passed in the proper headers" do
42
- WebMock.should have_requested(:get, "https://api.supportify.io/v1/faqs")
43
- .with(headers: {
44
- 'X-Supportify-ApiKey' => api_key,
45
- 'X-Supportify-AppKey' => app_key,
46
- 'User-Agent' => "supportify-ruby-gem/#{Supportify::VERSION}"
47
- })
48
- end
49
- end
50
- end
@@ -1,96 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe "Error Handling" do
4
- let(:api_key) { 'api_key' }
5
- let(:app_key) { 'app_key' }
6
- let(:version) { 'v1' }
7
-
8
- subject do
9
- Supportify::Client.new api_key: api_key,
10
- app_key: app_key,
11
- version: version
12
- end
13
-
14
- describe "500" do
15
- let(:code) { 500 }
16
- let(:short_description) { 'UnexpectedError' }
17
- let(:long_description) { "An unexpected error has occurred. Please try again. If the error continues to occur, please contact support." }
18
- let(:error) do
19
- { code: code, short_description: short_description, long_description: long_description }.to_json
20
- end
21
-
22
- before do
23
- stub_request(:any, "https://api.supportify.io/v1/faqs")
24
- .to_return(status: code, body: error, headers: {})
25
- end
26
-
27
- it "should return the correct error" do
28
- expect { subject.faqs }.to raise_error do |error|
29
- error.code.should == code
30
- error.short_description.should == short_description
31
- error.long_description.should == long_description
32
- end
33
- end
34
- end
35
-
36
- describe "400" do
37
- let(:code) { 400 }
38
- let(:short_description) { 'BadRequest' }
39
- let(:long_description) { "The system did not receive the necessary parameters to complete the request. Please check your request and try again." }
40
- let(:error) do
41
- { code: code, short_description: short_description, long_description: long_description }.to_json
42
- end
43
-
44
- before do
45
- stub_request(:any, "https://api.supportify.io/v1/faqs")
46
- .to_return(status: code, body: error, headers: {})
47
- end
48
-
49
- it "should return the correct error" do
50
- expect { subject.faqs }.to raise_error do |error|
51
- error.code.should == code
52
- error.short_description.should == short_description
53
- error.long_description.should == long_description
54
- end
55
- end
56
- end
57
-
58
- describe "401" do
59
- let(:code) { 401 }
60
- let(:short_description) { 'Unauthorized' }
61
- let(:long_description) { 'The system was unable to authenticate your request. Please check your credentials and try again.' }
62
- let(:error) do
63
- { code: code, short_description: short_description, long_description: long_description }.to_json
64
- end
65
-
66
- before do
67
- stub_request(:any, "https://api.supportify.io/v1/faqs")
68
- .to_return(status: code, body: error, headers: {})
69
- end
70
-
71
- it "should return the correct error" do
72
- expect { subject.faqs }.to raise_error do |error|
73
- error.code.should == code
74
- error.short_description.should == short_description
75
- error.long_description.should == long_description
76
- end
77
- end
78
- end
79
-
80
- describe "404" do
81
- let(:code) { 404 }
82
- let(:short_description) { 'NotFound' }
83
- let(:long_description) { 'The system was unable to locate the specified object. Please check your request and try again.'}
84
- let(:error) do
85
- { code: code, short_description: short_description, long_description: long_description }.to_json
86
- end
87
- let(:response) { subject.faqs }
88
-
89
- before do
90
- stub_request(:any, "https://api.supportify.io/v1/faqs")
91
- .to_return(status: code, body: error, headers: {})
92
- end
93
-
94
- it { response.should == nil }
95
- end
96
- end
@@ -1,55 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe "Faq Retrieval" do
4
- let(:api_key) { 'api_key' }
5
- let(:app_key) { 'app_key' }
6
- let(:version) { 'v1' }
7
-
8
- subject do
9
- Supportify::Client.new api_key: api_key,
10
- app_key: app_key,
11
- version: version
12
- end
13
-
14
- describe "When retrieving multiple Faqs" do
15
- let(:faqs) { build_list :faq_with_categories_and_tags, rand(1..5) }
16
- let(:response) { subject.faqs }
17
-
18
- before do
19
- stub_request(:any, "https://api.supportify.io/v1/faqs")
20
- .to_return(status: 200, body: { 'faqs' => faqs }.to_json, headers: {})
21
- end
22
-
23
- it { response.should be_a Array }
24
- it { response.each { |r| r.should be_a Supportify::Api::Faq } }
25
- end
26
-
27
- describe "When retrieving a single Faq" do
28
- let(:faq) { build :faq_with_categories_and_tags }
29
- let(:response) { subject.faqs(1) }
30
-
31
- before do
32
- stub_request(:any, "https://api.supportify.io/v1/faqs/1")
33
- .to_return(status: 200, body: { 'faq' => faq }.to_json, headers: {})
34
- end
35
-
36
- it { response.should be_a(Supportify::Api::Faq) }
37
- end
38
-
39
- describe "When passing in additional arguments" do
40
- let(:fields) { 'id,question,answer' }
41
- let(:sort) { 'question-asc' }
42
-
43
- before do
44
- stub_request(:get, "https://api.supportify.io/v1/faqs").
45
- to_return(:status => 200, :body => "", :headers => {})
46
-
47
- subject.faqs fields: fields, sort: sort
48
- end
49
-
50
- it "should have passed along the arguments" do
51
- WebMock.should have_requested(:get, "https://api.supportify.io/v1/faqs")
52
- .with(body: { fields: fields, sort: sort })
53
- end
54
- end
55
- end
@@ -1,29 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe "Searching" do
4
- let(:api_key) { 'api_key' }
5
- let(:app_key) { 'app_key' }
6
- let(:version) { 'v1' }
7
-
8
- subject do
9
- Supportify::Client.new api_key: api_key,
10
- app_key: app_key,
11
- version: version
12
- end
13
-
14
- describe "When searching for content" do
15
- let(:query) { 'testing' }
16
-
17
- before do
18
- stub_request(:get, "https://api.supportify.io/v1/search").
19
- to_return(:status => 200, :body => "", :headers => {})
20
-
21
- subject.search query: query
22
- end
23
-
24
- it "should have passed along the arguments" do
25
- WebMock.should have_requested(:get, "https://api.supportify.io/v1/search")
26
- .with(body: { query: query })
27
- end
28
- end
29
- end
@@ -1,55 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe "Tag Retrieval" do
4
- let(:api_key) { 'api_key' }
5
- let(:app_key) { 'app_key' }
6
- let(:version) { 'v1' }
7
-
8
- subject do
9
- Supportify::Client.new api_key: api_key,
10
- app_key: app_key,
11
- version: version
12
- end
13
-
14
- describe "When retrieving multiple Tags" do
15
- let(:tags) { build_list :tag, rand(1..5) }
16
- let(:response) { subject.tags }
17
-
18
- before do
19
- stub_request(:any, "https://api.supportify.io/v1/tags")
20
- .to_return(status: 200, body: { 'tags' => tags }.to_json, headers: {})
21
- end
22
-
23
- it { response.should be_a Array }
24
- it { response.each { |r| r.should be_a Supportify::Api::Tag } }
25
- end
26
-
27
- describe "When retrieving a single Tag" do
28
- let(:tag) { build :tag }
29
- let(:response) { subject.tags(1) }
30
-
31
- before do
32
- stub_request(:any, "https://api.supportify.io/v1/tags/1")
33
- .to_return(status: 200, body: { 'tag' => tag }.to_json, headers: {})
34
- end
35
-
36
- it { response.should be_a(Supportify::Api::Tag) }
37
- end
38
-
39
- describe "When passing in additional arguments" do
40
- let(:fields) { 'id,name' }
41
- let(:sort) { 'name-asc' }
42
-
43
- before do
44
- stub_request(:get, "https://api.supportify.io/v1/tags").
45
- to_return(:status => 200, :body => "", :headers => {})
46
-
47
- subject.tags fields: fields, sort: sort
48
- end
49
-
50
- it "should have passed along the arguments" do
51
- WebMock.should have_requested(:get, "https://api.supportify.io/v1/tags")
52
- .with(body: { fields: fields, sort: sort })
53
- end
54
- end
55
- end