bucketkit 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a81cf9c98c0b1ebb090830ae672147cec6f77684
4
+ data.tar.gz: 2fec6ca1459b80ae9357f870cc64b483737d25d4
5
+ SHA512:
6
+ metadata.gz: cef03516b19ea4631943877aa943faa10f6b4aef054dccbbd414381f41cec373465231110ad8d61a33b7f5e860f768465019b5a000ccbf7ff6278b34a269c871
7
+ data.tar.gz: 2dbb18c034b1f98796133c1c420f884fcb147f4a1c98b503c0bb6e57fc680356ab4dc676277cc687a7094de9963ea338e06c97d775cfcd821f57feae47562a49
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bucketkit.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Xystushi
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,128 @@
1
+ # Bucketkit
2
+
3
+ BucketKit is a BitBucket REST API client that is heavily inspired by [Octokit](octokit.github.io).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'bucketkit'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install bucketkit
18
+
19
+ ## Usage
20
+
21
+ ### Authentication
22
+
23
+ You can use either basic authentication:
24
+
25
+ ```ruby
26
+ c = Bucketkit::Client.new(login: 'foo', password: 'bar')
27
+ ```
28
+
29
+ Or two legged OAuth:
30
+
31
+ ```ruby
32
+ c = Bucketkit::Client.new do |c|
33
+ c.login = 'foo'
34
+ c.oauth_tokens = {
35
+ {
36
+ consumer_key: 'BUCKETKIT_CONSUMER_KEY',
37
+ consumer_secret: 'BUCKETKIT_CONSUMER_SECRET',
38
+ token: 'BUCKETKIT_TOKEN',
39
+ token_secret: 'BUCKETKIT_TOKEN_SECRET'
40
+ }
41
+ end
42
+ ```
43
+
44
+ ### Pull Requests
45
+
46
+ Get a list of pull requests:
47
+
48
+ c.pull_requests('xystushi/bucketkit')
49
+
50
+ Get single pull request by id:
51
+
52
+ c.pull_request('xystushi/bucketkit', 1)
53
+
54
+ Get commits on a pull request:
55
+
56
+ c.pull_request_commits('xystushi/bucketkit', 1)
57
+
58
+ Get comments on a pull request:
59
+
60
+ c.pull_request_comments('xystushi/bucketkit', 1)
61
+
62
+ Get the pull request activity:
63
+
64
+ c.pull_request_activity('xystushi/bucketkit', 1)
65
+
66
+ Get the diff of a pull request:
67
+
68
+ c.pull_request_diff('xystushi/bucketkit', 1)
69
+
70
+ Approve a pull request:
71
+
72
+ c.approve_pull_request('xystushi/bucketkit', 1)
73
+
74
+ Delete a pull request approval:
75
+
76
+ c.delete_pull_request_approval('xystushi/bucketkit', 1)
77
+
78
+ Merge a pull request:
79
+
80
+ c.merge_pull_request('xystushi/bucketkit', 1)
81
+ # or
82
+ c.accept_pull_request('xystushi/bucketkit', 1)
83
+
84
+ Decline a pull request:
85
+
86
+ c.decline_pull_request('xystushi/bucketkit', 1)
87
+ # or
88
+ c.reject_pull_request('xystushi/bucketkit', 1)
89
+
90
+ Create a pull request:
91
+
92
+ c.create_pull_request('xystushi/bucketkit', 'title', 'some/fork', 'master',
93
+ 'this is a new pull request')
94
+
95
+ ### Commits
96
+
97
+ Get a list of commits of a repository:
98
+
99
+ c.commits('xystushi/bucketkit')
100
+
101
+ Get a single commit of a repository:
102
+
103
+ c.commit('xystushi/bucketkit', 'abcdef123456')
104
+
105
+ Get comments on a commit:
106
+
107
+ c.commit_comments('xystushi/bucketkit', 'abcdef123456')
108
+
109
+ Get a single comment on a commit by id:
110
+
111
+ c.commit_comment('xystushi/bucketkit', 'abcdef123456', 1)
112
+
113
+ Approve a commit:
114
+
115
+ c.approve_commit('xystushi/bucketkit', 'abcdef123456')
116
+
117
+ Delete a commit's approval:
118
+
119
+ c.delete_commit_approval('xystushi/bucketkit', 'abcdef123456')
120
+
121
+ For more, please refer to [Bitbucket's API documentation](https://confluence.atlassian.com/display/BITBUCKET/Use+the+Bitbucket+REST+APIs)
122
+ ## Contributing
123
+
124
+ 1. Fork it ( http://github.com/xystushi/bucketkit/fork )
125
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
126
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
127
+ 4. Push to the branch (`git push origin my-new-feature`)
128
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bucketkit/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'bucketkit'
8
+ spec.version = Bucketkit::VERSION
9
+ spec.authors = ['Xystushi']
10
+ spec.email = ['xystushi@gmail.com']
11
+ spec.summary = %q{A BitBucket REST API client.}
12
+ spec.homepage = 'https://github.com/xystushi/bucketkit'
13
+ spec.license = 'MIT'
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_development_dependency 'bundler', '~> 1.5'
21
+ spec.add_development_dependency 'rake'
22
+ spec.add_dependency 'sawyer', '~> 0.5', '>= 0.5.4'
23
+ spec.add_dependency 'faraday_middleware', '~> 0.9', '>= 0.9.1'
24
+ end
@@ -0,0 +1,22 @@
1
+ require 'bucketkit/client'
2
+ require 'bucketkit/default'
3
+
4
+ module Bucketkit
5
+ class << self
6
+ include Bucketkit::Configurable
7
+
8
+ def client
9
+ @client = Bucketkit::Client.new(options) unless defined?(@client) && @client.same_options?(options)
10
+ @client
11
+ end
12
+
13
+ private
14
+
15
+ def method_missing(method, *args, &block)
16
+ return super unless client.respond_to?(method)
17
+ client.send(method, *args, &block)
18
+ end
19
+ end
20
+ end
21
+
22
+ Bucketkit.setup
@@ -0,0 +1,15 @@
1
+ module Bucketkit
2
+ module Authentication
3
+ def basic_authenticated?
4
+ !!(@login && @password)
5
+ end
6
+
7
+ def oauth_authenticated?
8
+ !!@oauth_tokens
9
+ end
10
+
11
+ def user_authenticated?
12
+ basic_authenticated? || oauth_authenticated?
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,157 @@
1
+ require 'sawyer'
2
+ require 'bucketkit/authentication'
3
+ require 'bucketkit/configurable'
4
+ require 'bucketkit/repository'
5
+ require 'bucketkit/client/pull_requests'
6
+ require 'bucketkit/client/commits'
7
+ require 'faraday_middleware'
8
+
9
+ module Bucketkit
10
+ class Client
11
+ include Bucketkit::Authentication
12
+ include Bucketkit::Configurable
13
+ include Bucketkit::Client::PullRequests
14
+ include Bucketkit::Client::Commits
15
+
16
+ CONVENIENCE_HEADERS = Set.new([:accept, :content_type])
17
+
18
+ def initialize(options={})
19
+ Bucketkit::Configurable.keys.each do |key|
20
+ instance_variable_set(:"@#{key}", options[key] || Bucketkit.instance_variable_get(:"@#{key}"))
21
+ end
22
+ end
23
+
24
+ def same_options?(opts)
25
+ opts.hash == options.hash
26
+ end
27
+
28
+ def get(url, options={})
29
+ request :get, url, parse_query_and_convenience_headers(options)
30
+ end
31
+
32
+ def post(url, options={})
33
+ request :post, url, options
34
+ end
35
+
36
+ def put(url, options={})
37
+ request :put, url, options
38
+ end
39
+
40
+ def patch(url, options={})
41
+ request :patch, url, options
42
+ end
43
+
44
+ def delete(url, options={})
45
+ request :delete, url, options
46
+ end
47
+
48
+ def head(url, options={})
49
+ request :head, url, parse_query_and_convenience_headers(options)
50
+ end
51
+
52
+ def paginate(url, options={}, &block)
53
+ opts = parse_query_and_convenience_headers(options.dup)
54
+ if @auto_paginate || @per_page
55
+ opts[:query][:per_page] ||= @per_page || (@auto_paginate ? 100 : nil)
56
+ end
57
+ data = request(:get, url, opts)
58
+ if @auto_paginate
59
+ loop do
60
+ break unless @last_response.rels[:next]
61
+ @last_response = @last_response.rels[:next].get
62
+ if block_given?
63
+ yield(data, @last_response)
64
+ else
65
+ data.concat(@last_response.data) if @last_response.data.is_a?(Array)
66
+ end
67
+ end
68
+ end
69
+ data
70
+ end
71
+
72
+ def root
73
+ get '/'
74
+ end
75
+
76
+ def last_response
77
+ @last_response if defined? @last_response
78
+ end
79
+
80
+ def login=(value)
81
+ reset_agent
82
+ @login = value
83
+ end
84
+
85
+ def password=(value)
86
+ reset_agent
87
+ @password = value
88
+ end
89
+
90
+ def oauth_tokens=(value)
91
+ reset_agent
92
+ @oauth_tokens = value
93
+ end
94
+
95
+ def agent
96
+ @agent ||= Sawyer::Agent.new(api_endpoint, sawyer_options) do |http|
97
+ http.headers[:accept] = default_media_type
98
+ http.headers[:content_type] = default_media_type
99
+ http.headers[:user_agent] = user_agent
100
+ if basic_authenticated?
101
+ http.basic_auth(@login, @password)
102
+ elsif oauth_authenticated?
103
+ http.request :oauth, @oauth_tokens
104
+ end
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def reset_agent
111
+ @agent = nil
112
+ end
113
+
114
+ def request(method, path, data, options={})
115
+ if data.is_a? Hash
116
+ options[:query] = data.delete(:query) || {}
117
+ options[:headers] = data.delete(:headers) || {}
118
+ accept = data.delete(:accept)
119
+ options[:headers][:accept] = accept if accept
120
+ end
121
+
122
+ @last_response = response = agent.call(method, URI::Parser.new.escape(path.to_s), data, options)
123
+ response.data
124
+ end
125
+
126
+ def boolean_from_response(method, path, options={})
127
+ request method, path, options
128
+ @last_response.status == 204
129
+ end
130
+
131
+ def sawyer_options
132
+ opts = {
133
+ links_parser: Sawyer::LinkParsers::Simple.new
134
+ }
135
+ conn_opts = @connection_options
136
+ conn_opts[:builder] = @middleware if @middleware
137
+ conn_opts[:proxy] = @proxy if @proxy
138
+ opts[:faraday] = Faraday.new('https://api.bitbucket.org', conn_opts)
139
+
140
+ opts
141
+ end
142
+
143
+ def parse_query_and_convenience_headers(options)
144
+ headers = options.fetch(:headers, {})
145
+ CONVENIENCE_HEADERS.each do |h|
146
+ header = options.delete(h)
147
+ headers[h] = header if header
148
+ end
149
+ query = options.delete(:query)
150
+ opts = {query: options}
151
+ opts[:query].merge!(query) if query && query.is_a?(Hash)
152
+ opts[:headers] = headers unless headers.empty?
153
+
154
+ opts
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,32 @@
1
+ module Bucketkit
2
+ class Client
3
+ # See https://confluence.atlassian.com/display/BITBUCKET/commits+or+commit+Resource
4
+ module Commits
5
+ API_ENDPOINT = 'api/2.0/repositories'.freeze
6
+
7
+ def commits(repo, options={})
8
+ paginate "#{API_ENDPOINT}/#{Repository.new(repo)}/commits", options
9
+ end
10
+
11
+ def commit(repo, revision, options={})
12
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/commit/#{revision}", options
13
+ end
14
+
15
+ def commit_comments(repo, revision, options={})
16
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/commit/#{revision}/comments", options
17
+ end
18
+
19
+ def commit_comment(repo, revision, comment_id, options={})
20
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/commit/#{revision}/comments/#{comment_id}", options
21
+ end
22
+
23
+ def approve_commit(repo, revision, options={})
24
+ post "#{API_ENDPOINT}/#{Repository.new(repo)}/commit/#{revision}/approve", options
25
+ end
26
+
27
+ def delete_commit_approval(repo, revision, options={})
28
+ delete "#{API_ENDPOINT}/#{Repository.new(repo)}/commit/#{revision}/approve", options
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,68 @@
1
+ module Bucketkit
2
+ class Client
3
+ # See https://confluence.atlassian.com/display/BITBUCKET/pullrequests+Resource
4
+ module PullRequests
5
+ API_ENDPOINT = 'api/2.0/repositories'.freeze
6
+
7
+ def pull_requests(repo, options={})
8
+ paginate "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests", options
9
+ end
10
+
11
+ def create_pull_request(repo, title, source, destination, description, options={})
12
+ pull = {
13
+ title: title,
14
+ description: description,
15
+ source: { branch: { name: source } },
16
+ destination: { branch: { name: destination } }
17
+ }
18
+ post "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests", options.merge(pull)
19
+ end
20
+
21
+ def update_pull_request(repo, number, options)
22
+ patch "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}", options
23
+ end
24
+
25
+ def pull_request(repo, number, options={})
26
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}", options
27
+ end
28
+
29
+ def pull_request_commits(repo, number, options={})
30
+ paginate "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/commits", options
31
+ end
32
+
33
+ def approve_pull_request(repo, number, options={})
34
+ post "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/approve", options
35
+ end
36
+
37
+ def delete_pull_request_approval(repo, number, options={})
38
+ delete "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/approve", options
39
+ end
40
+
41
+ def pull_request_diff(repo, number, options={})
42
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/diff", options
43
+ end
44
+
45
+ def pull_request_activity(repo, number=nil, options={})
46
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/activity", options
47
+ end
48
+
49
+ def merge_pull_request(repo, number, options={})
50
+ post "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/merge", options
51
+ end
52
+ alias :accept_pull_request :merge_pull_request
53
+
54
+ def decline_pull_request(repo, number, options={})
55
+ post "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/decline", options
56
+ end
57
+ alias :reject_pull_request :decline_pull_request
58
+
59
+ def pull_request_comments(repo, number, options={})
60
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/comments", options
61
+ end
62
+
63
+ def pull_request_comment(repo, number, comment_id, options={})
64
+ get "#{API_ENDPOINT}/#{Repository.new(repo)}/pullrequests/#{number}/comments/#{comment_id}", options
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,58 @@
1
+ module Bucketkit
2
+ module Configurable
3
+ attr_accessor :oauth_tokens, :auto_paginate, :per_page,
4
+ :connection_options, :default_media_type,
5
+ :middleware, :proxy, :user_agent
6
+ attr_writer :password, :login, :web_endpoint, :api_endpoint
7
+
8
+ class << self
9
+ def keys
10
+ @keys ||= [
11
+ :oauth_tokens,
12
+ :auto_paginate,
13
+ :per_page,
14
+ :api_endpoint,
15
+ :web_endpoint,
16
+ :login,
17
+ :password,
18
+ :connection_options,
19
+ :default_media_type,
20
+ :middleware,
21
+ :user_agent
22
+ ]
23
+ end
24
+ end
25
+
26
+ def configure
27
+ yield self
28
+ end
29
+
30
+ def reset!
31
+ Bucketkit::Configurable.keys.each { |key|
32
+ instance_variable_set(:"@#{key}", Bucketkit::Default.options[key])
33
+ }
34
+ self
35
+ end
36
+ alias setup reset!
37
+
38
+ def api_endpoint
39
+ File.join @api_endpoint, ''
40
+ end
41
+
42
+ def web_endpoint
43
+ File.join @web_endpoint, ''
44
+ end
45
+
46
+ def login
47
+ @login ||= begin
48
+ user.login if basic_authenticated?
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def options
55
+ Hash[Bucketkit::Configurable.keys.map {|k| [k, instance_variable_get(:"@#{k}")]}]
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,76 @@
1
+ require 'bucketkit/version'
2
+ require 'faraday_middleware'
3
+
4
+ module Bucketkit
5
+ module Default
6
+ WEB_ENDPOINT = 'https://bitbucket.org'.freeze
7
+ API_ENDPOINT = 'https://bitbucket.org'.freeze
8
+ USER_AGENT = "Bucketkit Ruby Gem #{Bucketkit::VERSION}".freeze
9
+ MEDIA_TYPE = 'application/json'.freeze
10
+
11
+ class << self
12
+ def options
13
+ Hash[Bucketkit::Configurable.keys.map { |k| [k, send(k)]}]
14
+ end
15
+
16
+ def web_endpoint
17
+ ENV['BUCKETKIT_WEB_ENDPOINT'] || WEB_ENDPOINT
18
+ end
19
+
20
+ def api_endpoint
21
+ ENV['BUCKETKIT_API_ENDPOINT'] || API_ENDPOINT
22
+ end
23
+
24
+ def oauth_tokens
25
+ {
26
+ consumer_key: ENV['BUCKETKIT_CONSUMER_KEY'],
27
+ consumer_secret: ENV['BUCKETKIT_CONSUMER_SECRET'],
28
+ token: ENV['BUCKETKIT_TOKEN'],
29
+ token_secret: ENV['BUCKETKIT_TOKEN_SECRET']
30
+ }
31
+ end
32
+
33
+ def login
34
+ ENV['BUCKETKIT_LOGIN']
35
+ end
36
+
37
+ def password
38
+ ENV['BUCKETKIT_PASSWORD']
39
+ end
40
+
41
+ def connection_options
42
+ {
43
+ headers: {
44
+ content_type: default_media_type,
45
+ accept: default_media_type,
46
+ user_agent: user_agent
47
+ }
48
+ }
49
+ end
50
+
51
+ def default_media_type
52
+ ENV['BUCKETKIT_DEFAULT_MEDIA_TYPE'] || MEDIA_TYPE
53
+ end
54
+
55
+ def user_agent
56
+ ENV['BUCKETKIT_USER_AGENT'] || USER_AGENT
57
+ end
58
+
59
+ def middleware
60
+ Faraday::RackBuilder.new do |builder|
61
+ builder.request :oauth, oauth_tokens
62
+ builder.adapter Faraday.default_adapter
63
+ end
64
+ end
65
+
66
+ def auto_paginate
67
+ ENV['BUCKETKIT_AUTO_PAGINATE']
68
+ end
69
+
70
+ def per_page
71
+ page_size = ENV['BUCKETKIT_PER_PAGE']
72
+ page_size.to_i if page_size
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,36 @@
1
+ module Bucketkit
2
+ class Repository
3
+ attr_accessor :owner, :name
4
+
5
+ def initialize(repo)
6
+ case repo
7
+ when String
8
+ @owner, @name = repo.split('/')
9
+ when Repository
10
+ @owner, @name = repo.owner, repo.name
11
+ when Hash
12
+ @name = repo[:repo] ||= repo[:name]
13
+ @owner = repo[:owner] ||= repo[:user] ||= repo[:username]
14
+ else
15
+ raise "Couldn't initialize repository."
16
+ end
17
+ end
18
+
19
+ def self.from_url(url)
20
+ Repository.new(URI.parse(url).path[1..-1])
21
+ end
22
+
23
+ def slug
24
+ "#{@owner}/#{@name}"
25
+ end
26
+ alias :to_s :slug
27
+
28
+ def url
29
+ "#{Bucketkit.web_endpoint}#{slug}"
30
+ end
31
+
32
+ alias :user :owner
33
+ alias :username :owner
34
+ alias :repo :name
35
+ end
36
+ end
@@ -0,0 +1,3 @@
1
+ module Bucketkit
2
+ VERSION = "0.0.1".freeze
3
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bucketkit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Xystushi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sawyer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.5'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.5.4
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.5'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.5.4
61
+ - !ruby/object:Gem::Dependency
62
+ name: faraday_middleware
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.9'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.9.1
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '0.9'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.9.1
81
+ description:
82
+ email:
83
+ - xystushi@gmail.com
84
+ executables: []
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - ".gitignore"
89
+ - Gemfile
90
+ - LICENSE.txt
91
+ - README.md
92
+ - Rakefile
93
+ - bucketkit.gemspec
94
+ - lib/bucketkit.rb
95
+ - lib/bucketkit/authentication.rb
96
+ - lib/bucketkit/client.rb
97
+ - lib/bucketkit/client/commits.rb
98
+ - lib/bucketkit/client/pull_requests.rb
99
+ - lib/bucketkit/configurable.rb
100
+ - lib/bucketkit/default.rb
101
+ - lib/bucketkit/repository.rb
102
+ - lib/bucketkit/version.rb
103
+ homepage: https://github.com/xystushi/bucketkit
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.4.1
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: A BitBucket REST API client.
127
+ test_files: []