class Stash::Client
Constants
- VERSION
Attributes
url[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/stash/client.rb, line 11 def initialize(opts = {}) if opts[:client] @client = opts[:client] else if opts[:host] && opts[:scheme] @url = Addressable::URI.parse(opts[:scheme] + '://' + opts[:host] + '/rest/api/1.0/') elsif opts[:host] @url = Addressable::URI.parse('http://' + opts[:host] + '/rest/api/1.0/') elsif opts[:url] @url = Addressable::URI.parse(opts[:url]) elsif opts[:uri] && opts[:uri].kind_of?(Addressable::URI) @url = opts[:uri] else raise ArgumentError, "must provide :url or :host" end @url.userinfo = opts[:credentials] if opts[:credentials] @client = Faraday.new(@url.site) end end
Public Instance Methods
changes_for(repo, sha, opts = {})
click to toggle source
# File lib/stash/client.rb, line 91 def changes_for(repo, sha, opts = {}) path = remove_leading_slash repo.fetch('link').fetch('url').sub('browse', 'changes') uri = @url.join(path) query_values = { 'until' => sha } query_values['since'] = opts[:parent] if opts[:parent] query_values['limit'] = opts[:limit] if opts[:limit] uri.query_values = query_values if query_values['limit'] fetch(uri).fetch('values') else fetch_all(uri) end end
commits_for(repo, opts = {})
click to toggle source
# File lib/stash/client.rb, line 67 def commits_for(repo, opts = {}) query_values = {} path = remove_leading_slash repo.fetch('link').fetch('url').sub('browse', 'commits') uri = @url.join(path) query_values['since'] = opts[:since] if opts[:since] query_values['until'] = opts[:until] if opts[:until] query_values['limit'] = Integer(opts[:limit]) if opts[:limit] if query_values.empty? # default limit to 100 commits query_values['limit'] = 100 end uri.query_values = query_values if query_values['limit'] && query_values['limit'] < 100 fetch(uri).fetch('values') else fetch_all(uri) end end
create_project(opts={})
click to toggle source
# File lib/stash/client.rb, line 38 def create_project(opts={}) post @url.join('projects'), opts end
delete_project(project)
click to toggle source
# File lib/stash/client.rb, line 47 def delete_project(project) relative_project_path = project.fetch('link').fetch('url') delete @url.join(remove_leading_slash(relative_project_path)) end
project_named(name)
click to toggle source
# File lib/stash/client.rb, line 59 def project_named(name) projects.find { |e| e['name'] == name } end
projects()
click to toggle source
# File lib/stash/client.rb, line 34 def projects fetch_all @url.join('projects') end
repositories()
click to toggle source
# File lib/stash/client.rb, line 52 def repositories projects.map do |project| relative_project_path = project.fetch('link').fetch('url') + '/repos' fetch_all @url.join(remove_leading_slash(relative_project_path)) end.flatten end
repository_named(name)
click to toggle source
# File lib/stash/client.rb, line 63 def repository_named(name) repositories.find { |e| e['name'] == name } end
update_project(project, opts={})
click to toggle source
# File lib/stash/client.rb, line 42 def update_project(project, opts={}) relative_project_path = project.fetch('link').fetch('url') put @url.join(remove_leading_slash(relative_project_path)), opts end
Private Instance Methods
delete(uri)
click to toggle source
# File lib/stash/client.rb, line 157 def delete(uri) res = @client.delete { |req| req.url uri.to_s req.headers['Accpet'] = 'application/json' } res.body end
fetch(uri)
click to toggle source
# File lib/stash/client.rb, line 124 def fetch(uri) res = @client.get { |req| req.url uri.to_s req.headers['Accept'] = 'application/json' } parse(res.body) end
fetch_all(uri)
click to toggle source
# File lib/stash/client.rb, line 110 def fetch_all(uri) response, result = {}, [] until response['isLastPage'] response = fetch(uri) result += response['values'] next_page_start = response['nextPageStart'] || (response['start'] + response['size']) uri.query_values = (uri.query_values || {}).merge('start' => next_page_start) end result end
parse(str)
click to toggle source
# File lib/stash/client.rb, line 166 def parse(str) JSON.parse(str) rescue Encoding::InvalidByteSequenceError # HACK JSON.parse(str.force_encoding("UTF-8")) end
post(uri, data)
click to toggle source
# File lib/stash/client.rb, line 133 def post(uri, data) res = @client.post { |req| req.url uri.to_s req.body = data.to_json req.headers['Content-Type'] = 'application/json' req.headers['Accpet'] = 'application/json' } parse(res.body) end
put(uri, data)
click to toggle source
# File lib/stash/client.rb, line 145 def put(uri, data) res = @client.put { |req| req.url uri.to_s req.body = data.to_json req.headers['Content-Type'] = 'application/json' req.headers['Accpet'] = 'application/json' } parse(res.body) end
remove_leading_slash(str)
click to toggle source
# File lib/stash/client.rb, line 173 def remove_leading_slash(str) str.sub(/\A\//, '') end