lib/pod/command/plugins.rb in cocoapods-plugins-0.1.0 vs lib/pod/command/plugins.rb in cocoapods-plugins-0.1.1
- old
+ new
@@ -3,153 +3,26 @@
# The CocoaPods namespace
#
module Pod
class Command
-
# The pod plugins command.
#
class Plugins < Command
+ require 'pod/command/plugins/list'
+ require 'pod/command/plugins/search'
+ require 'pod/command/plugins/create'
- PLUGINS_URL = 'https://raw.githubusercontent.com/CocoaPods/cocoapods.org/master/data/plugins.json'
+ self.abstract_command = true
+ self.default_subcommand = 'list'
- attr_accessor :json
-
self.summary = 'Show available CocoaPods plugins'
-
self.description = <<-DESC
- Shows the available CocoaPods plugins and if you have them installed or not.
- DESC
+ Lists or searches the available CocoaPods plugins
+ and show if you have them installed or not.
- def download_json
- response = REST.get(PLUGINS_URL)
- if response.ok?
- @json = JSON.parse(response.body)
- end
- end
-
- def installed?(gemname)
- if Gem::Specification.methods.include?(:find_all_by_name)
- Gem::Specification.find_all_by_name(gemname).any?
- else
- # Fallback to Gem.available? for old versions of rubygems
- Gem.available?(gemname)
- end
- end
-
- def run
- UI.puts "Downloading Plugins list..."
- begin
- download_json unless json
- rescue => e
- UI.puts e.message
- end
-
- if !json
- UI.puts "Could not download plugins list from cocoapods.org"
- else
- print_plugins
- end
- end
-
- def print_plugins
- UI.puts "Available CocoaPods Plugins\n\n"
-
- @json['plugins'].each do |plugin|
- UI.puts "Name: #{plugin['name']}"
-
- if installed?(plugin['gem'])
- UI.puts "Gem: #{plugin['gem']}".green
- else
- UI.puts "Gem: #{plugin['gem']}".yellow
- end
-
- UI.puts "URL: #{plugin['url']}"
- UI.puts "\n#{plugin['description']}\n\n"
- end
- end
-
- #-----------------------------------------------------------------------#
-
- # The create subcommand. Used to create a new plugin using either the
- # default template (CocoaPods/cocoapods-plugin-template) or a custom
- # template
- #
- class Create < Plugins
- self.summary = 'Creates a new plugin'
-
- self.description = <<-DESC
- Creates a scaffold for the development of a new plugin according to the CocoaPods best practices.
- If a `TEMPLATE_URL`, pointing to a git repo containing a compatible template, is specified, it will be used in place of the default one.
- DESC
-
- self.arguments = 'NAME [TEMPLATE_URL]'
-
- def initialize(argv)
- @name = argv.shift_argument
- @template_url = argv.shift_argument
- super
- end
-
- def validate!
- super
- help! "A name for the plugin is required." if @name.nil? || @name.empty?
- help! "The plugin name cannot contain spaces." if @name.match(/\s/)
- end
-
- def run
- clone_template
- configure_template
- end
-
- private
-
- #----------------------------------------#
-
- # !@group Private helpers
-
- extend Executable
- executable :git
- executable :ruby
-
- TEMPLATE_REPO = "https://github.com/CocoaPods/cocoapods-plugin-template.git"
- TEMPLATE_INFO_URL = "https://github.com/CocoaPods/cocoapods-plugin-template"
-
- # Clones the template from the remote in the working directory using
- # the name of the plugin.
- #
- # @return [void]
- #
- def clone_template
- UI.section("Creating `#{@name}` plugin") do
- git! "clone '#{template_repo_url}' #{@name}"
- end
- end
-
- # Runs the template configuration utilities.
- #
- # @return [void]
- #
- def configure_template
- UI.section("Configuring template") do
- Dir.chdir(@name) do
- if File.file? "configure"
- system "./configure #{@name}"
- else
- UI.warn "Template does not have a configure file."
- end
- end
- end
- end
-
- # Checks if a template URL is given else returns the TEMPLATE_REPO URL
- #
- # @return String
- #
- def template_repo_url
- @template_url || TEMPLATE_REPO
- end
- end
-
+ Also allows you to quickly create a new Cocoapods
+ plugin using a provided template.
+ DESC
end
end
end