Class: PivotalApi::Client
- Inherits:
-
Object
- Object
- PivotalApi::Client
- Defined in:
- lib/pivotal_api/client.rb
Defined Under Namespace
Classes: Pagination
Constant Summary collapse
- USER_AGENT =
"Ruby/#{RUBY_VERSION} (#{RUBY_PLATFORM}; #{RUBY_ENGINE}) PivotalApi/#{PivotalApi::VERSION} Faraday/#{Faraday::VERSION}".freeze
- CONVENIENCE_HEADERS =
Set.new([:accept, :content_type])
Instance Attribute Summary collapse
-
#api_version ⇒ Object
readonly
Returns the value of attribute api_version.
-
#auto_paginate ⇒ Object
readonly
Returns the value of attribute auto_paginate.
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#last_response ⇒ Object
readonly
Returns the value of attribute last_response.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#token ⇒ Object
readonly
Returns the value of attribute token.
-
#url ⇒ Object
readonly
Returns the value of attribute url.
Instance Method Summary collapse
-
#delete(path, options = {}) ⇒ Faraday::Response
Make a HTTP DELETE request.
-
#get(path, options = {}) ⇒ Faraday::Response
Make a HTTP GET request.
-
#initialize(options = {}) ⇒ Client
constructor
Create Pivotal Tracker API client.
-
#me ⇒ PivotalApi::Resources::Me
Get information about the authenticated user.
-
#paginate(path, options = {}, &block) ⇒ Array
Make one or more HTTP GET requests, optionally fetching the next page of results from information passed back in headers based on value in #auto_paginate.
-
#post(path, options = {}) ⇒ Object
Make a HTTP POST request.
-
#projects ⇒ PivotalApi::Endpoints::Projects
Get projects.
-
#put(path, options = {}) ⇒ Object
Make a HTTP PUT request.
Constructor Details
#initialize(options = {}) ⇒ Client
Create Pivotal Tracker API client.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/pivotal_api/client.rb', line 23 def initialize(={}) url = .fetch(:url, 'https://www.pivotaltracker.com') @url = Addressable::URI.parse(url).to_s @api_version = .fetch(:api_version, '/services/v5') @logger = .fetch(:logger, ::Logger.new(nil)) adapter = .fetch(:adapter, :excon) = .fetch(:connection_options, { ssl: { verify: true } }) @auto_paginate = .fetch(:auto_paginate, true) @token = [:token] raise 'Missing required options: :token' unless @token @connection = Faraday.new({ url: @url }.merge()) do |builder| # response builder.use Faraday::Response::RaiseError builder.response :json # request builder.request :multipart builder.request :json builder.use PivotalApi::Logger, @logger builder.adapter adapter end end |
Instance Attribute Details
#api_version ⇒ Object (readonly)
Returns the value of attribute api_version.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def api_version @api_version end |
#auto_paginate ⇒ Object (readonly)
Returns the value of attribute auto_paginate.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def auto_paginate @auto_paginate end |
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def connection @connection end |
#last_response ⇒ Object (readonly)
Returns the value of attribute last_response.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def last_response @last_response end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def logger @logger end |
#token ⇒ Object (readonly)
Returns the value of attribute token.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def token @token end |
#url ⇒ Object (readonly)
Returns the value of attribute url.
8 9 10 |
# File 'lib/pivotal_api/client.rb', line 8 def url @url end |
Instance Method Details
#delete(path, options = {}) ⇒ Faraday::Response
Make a HTTP DELETE request
62 63 64 |
# File 'lib/pivotal_api/client.rb', line 62 def delete(path, = {}) request(:delete, parse_query_and_convenience_headers(path, )) end |
#get(path, options = {}) ⇒ Faraday::Response
Make a HTTP GET request
53 54 55 |
# File 'lib/pivotal_api/client.rb', line 53 def get(path, = {}) request(:get, parse_query_and_convenience_headers(path, )) end |
#me ⇒ PivotalApi::Resources::Me
Get information about the authenticated user
131 132 133 134 135 |
# File 'lib/pivotal_api/client.rb', line 131 def me data = get("/me").body Resources::Me.new({ client: self }.merge(data)) end |
#paginate(path, options = {}, &block) ⇒ Array
Make one or more HTTP GET requests, optionally fetching the next page of results from information passed back in headers based on value in #auto_paginate.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/pivotal_api/client.rb', line 95 def paginate(path, = {}, &block) opts = parse_query_and_convenience_headers path, .dup auto_paginate = opts[:params].delete(:auto_paginate) { |k| @auto_paginate } @last_response = request :get, opts data = @last_response.body raise PivotalApi::Errors::UnexpectedData, 'Array expected' unless data.is_a? Array if auto_paginate pager = Pagination.new @last_response.headers while pager.more? opts[:params].update(pager.next_page_params) @last_response = request :get, opts pager = Pagination.new @last_response.headers if block_given? yield(data, @last_response) else data.concat(@last_response.body) if @last_response.body.is_a?(Array) end end end data end |
#post(path, options = {}) ⇒ Object
Make a HTTP POST request
71 72 73 |
# File 'lib/pivotal_api/client.rb', line 71 def post(path, = {}) request(:post, parse_query_and_convenience_headers(path, )) end |
#projects ⇒ PivotalApi::Endpoints::Projects
Get projects
124 125 126 |
# File 'lib/pivotal_api/client.rb', line 124 def projects Endpoints::Projects.new(self) end |
#put(path, options = {}) ⇒ Object
Make a HTTP PUT request
80 81 82 |
# File 'lib/pivotal_api/client.rb', line 80 def put(path, = {}) request(:put, parse_query_and_convenience_headers(path, )) end |