lib/gems/client.rb in gems-1.2.0 vs lib/gems/client.rb in gems-1.3.0
- old
+ new
@@ -1,310 +1,4 @@
-require 'date'
-require 'gems/configuration'
-require 'gems/request'
-require 'json'
-
module Gems
- class Client
- include Gems::Request
- attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
-
- def initialize(options = {})
- options = Gems.options.merge(options)
- Configuration::VALID_OPTIONS_KEYS.each do |key|
- send("#{key}=", options[key])
- end
- end
-
- # Returns some basic information about the given gem
- #
- # @authenticated false
- # @param gem_name [String] The name of a gem.
- # @return [Hash]
- # @example
- # Gems.info 'rails'
- def info(gem_name)
- response = get("/api/v1/gems/#{gem_name}.json")
- JSON.parse(response)
- rescue JSON::ParserError
- {}
- end
-
- # Returns an array of active gems that match the query
- #
- # @authenticated false
- # @param query [String] A term to search for.
- # @param options [Hash] A customizable set of options.
- # @option options [Integer] :page
- # @return [Array<Hash>]
- # @example
- # Gems.search 'cucumber'
- def search(query, options = {})
- response = get('/api/v1/search.json', options.merge(:query => query))
- JSON.parse(response)
- end
-
- # List all gems that you own
- #
- # @authenticated true
- # @param user_handle [String] The handle of a user.
- # @return [Array]
- # @example
- # Gems.gems
- def gems(user_handle = nil)
- response = user_handle ? get("/api/v1/owners/#{user_handle}/gems.json") : get('/api/v1/gems.json')
- JSON.parse(response)
- end
-
- # Submit a gem to RubyGems.org or another host
- #
- # @authenticated true
- # @param gem [File] A built gem.
- # @param host [String] A RubyGems compatible host to use.
- # @return [String]
- # @example
- # Gems.push File.new 'pkg/gemcutter-0.2.1.gem'
- def push(gem, host = Configuration::DEFAULT_HOST)
- post('/api/v1/gems', gem.read, 'application/octet-stream', host)
- end
-
- # Remove a gem from RubyGems.org's index
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem.
- # @param gem_version [String] The version of a gem.
- # @param options [Hash] A customizable set of options.
- # @option options [String] :platform
- # @return [String]
- # @example
- # Gems.yank "gemcutter", "0.2.1", {:platform => "x86-darwin-10"}
- def yank(gem_name, gem_version = nil, options = {})
- gem_version ||= info(gem_name)['version']
- delete('/api/v1/gems/yank', options.merge(:gem_name => gem_name, :version => gem_version))
- end
-
- # Update a previously yanked gem back into RubyGems.org's index
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem.
- # @param gem_version [String] The version of a gem.
- # @param options [Hash] A customizable set of options.
- # @option options [String] :platform
- # @return [String]
- # @example
- # Gems.unyank "gemcutter", "0.2.1", {:platform => "x86-darwin-10"}
- def unyank(gem_name, gem_version = nil, options = {})
- gem_version ||= info(gem_name)['version']
- put('/api/v1/gems/unyank', options.merge(:gem_name => gem_name, :version => gem_version))
- end
-
- # Returns an array of gem version details
- #
- # @authenticated false
- # @param gem_name [String] The name of a gem.
- # @return [Hash]
- # @example
- # Gems.versions 'coulda'
- def versions(gem_name)
- response = get("/api/v1/versions/#{gem_name}.json")
- JSON.parse(response)
- end
-
- # Returns an hash of gem latest version
- #
- # @authenticated false
- # @param gem_name [String] The name of a gem.
- # @return [Hash]
- # @example
- # Gems.latest_version 'coulda'
- def latest_version(gem_name)
- response = get("/api/v1/versions/#{gem_name}/latest.json")
- JSON.parse(response)
- end
-
- # Returns the total number of downloads for a particular gem
- #
- # @authenticated false
- # @param gem_name [String] The name of a gem.
- # @param gem_version [String] The version of a gem.
- # @return [Hash]
- # @example
- # Gems.total_downloads 'rails_admin', '0.0.1'
- def total_downloads(gem_name = nil, gem_version = nil)
- response = gem_name ? get("/api/v1/downloads/#{gem_name}-#{gem_version || info(gem_name)['version']}.json") : get('/api/v1/downloads.json')
- JSON.parse(response, :symbolize_names => true)
- end
-
- # Returns an array containing the top 50 downloaded gem versions of all time
- #
- # @authenticated false
- # @return [Array]
- # @example
- # Gems.most_downloaded
- def most_downloaded
- response = get('/api/v1/downloads/all.json')
- JSON.parse(response)['gems']
- end
-
- # Returns the number of downloads by day for a particular gem version
- #
- # @authenticated false
- # @param gem_name [String] The name of a gem.
- # @param gem_version [String] The version of a gem.
- # @param from [Date] Search start date.
- # @param to [Date] Search end date.
- # @return [Hash]
- # @example
- # Gems.downloads 'coulda', '0.6.3', Date.today - 30, Date.today
- def downloads(gem_name, gem_version = nil, from = nil, to = Date.today)
- gem_version ||= info(gem_name)['version']
- response = from ? get("/api/v1/versions/#{gem_name}-#{gem_version}/downloads/search.json", :from => from.to_s, :to => to.to_s) : get("/api/v1/versions/#{gem_name}-#{gem_version}/downloads.json")
- JSON.parse(response)
- end
-
- # View all owners of a gem that you own
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem.
- # @return [Array]
- # @example
- # Gems.owners 'gemcutter'
- def owners(gem_name)
- response = get("/api/v1/gems/#{gem_name}/owners.json")
- JSON.parse(response)
- end
-
- # Add an owner to a RubyGem you own, giving that user permission to manage it
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem.
- # @param owner [String] The email address of the user you want to add.
- # @return [String]
- # @example
- # Gems.add_owner 'gemcutter', 'josh@technicalpickles.com'
- def add_owner(gem_name, owner)
- post("/api/v1/gems/#{gem_name}/owners", :email => owner)
- end
-
- # Remove a user's permission to manage a RubyGem you own
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem.
- # @param owner [String] The email address of the user you want to remove.
- # @return [String]
- # @example
- # Gems.remove_owner 'gemcutter', 'josh@technicalpickles.com'
- def remove_owner(gem_name, owner)
- delete("/api/v1/gems/#{gem_name}/owners", :email => owner)
- end
-
- # List the webhooks registered under your account
- #
- # @authenticated true
- # @return [Hash]
- # @example
- # Gems.web_hooks
- def web_hooks
- response = get('/api/v1/web_hooks.json')
- JSON.parse(response)
- end
-
- # Create a webhook
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem. Specify "*" to add the hook to all gems.
- # @param url [String] The URL of the web hook.
- # @return [String]
- # @example
- # Gems.add_web_hook 'rails', 'http://example.com'
- def add_web_hook(gem_name, url)
- post('/api/v1/web_hooks', :gem_name => gem_name, :url => url)
- end
-
- # Remove a webhook
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem. Specify "*" to remove the hook from all gems.
- # @param url [String] The URL of the web hook.
- # @return [String]
- # @example
- # Gems.remove_web_hook 'rails', 'http://example.com'
- def remove_web_hook(gem_name, url)
- delete('/api/v1/web_hooks/remove', :gem_name => gem_name, :url => url)
- end
-
- # Test fire a webhook
- #
- # @authenticated true
- # @param gem_name [String] The name of a gem. Specify "*" to fire the hook for all gems.
- # @param url [String] The URL of the web hook.
- # @return [String]
- # @example
- # Gems.fire_web_hook 'rails', 'http://example.com'
- def fire_web_hook(gem_name, url)
- post('/api/v1/web_hooks/fire', :gem_name => gem_name, :url => url)
- end
-
- # Returns the 50 gems most recently added to RubyGems.org (for the first time)
- #
- # @authenticated false
- # @param options [Hash] A customizable set of options.
- # @return [Array]
- # @example
- # Gem.latest
- def latest(options = {})
- response = get('/api/v1/activity/latest.json', options)
- JSON.parse(response)
- end
-
- # Returns the 50 most recently updated gems
- #
- # @authenticated false
- # @param options [Hash] A customizable set of options.
- # @return [Array]
- # @example
- # Gem.just_updated
- def just_updated(options = {})
- response = get('/api/v1/activity/just_updated.json', options)
- JSON.parse(response)
- end
-
- # Retrieve your API key using HTTP basic auth
- #
- # @authenticated true
- # @return [String]
- # @example
- # Gems.configure do |config|
- # config.username = 'nick@gemcutter.org'
- # config.password = 'schwwwwing'
- # end
- # Gems.api_key
- def api_key
- get('/api/v1/api_key')
- end
-
- # Returns an array of hashes for all versions of given gems
- #
- # @authenticated false
- # @param gems [Array] A list of gem names
- # @return [Array]
- # @example
- # Gems.dependencies 'rails', 'thor'
- def dependencies(*gems)
- response = get('/api/v1/dependencies', :gems => gems.join(','))
- Marshal.load(response)
- end
-
- # Returns an array of all the reverse dependencies to the given gem.
- #
- # @authenticated false
- # @param gem_name [String] The name of a gem
- # @param options [Hash] A customizable set of options.
- # @return [Array]
- # @example
- # Gems.reverse_dependencies 'money'
- def reverse_dependencies(gem_name, options = {})
- response = get("/api/v1/gems/#{gem_name}/reverse_dependencies.json", options)
- JSON.parse(response)
- end
+ class Client < V1::Client
end
end