Class: Plugin

Attributes

NameRead/write?
name R
uri R

Public Class Methods


find (name)

     # File vendor/rails/railties/lib/commands/plugin.rb, line 153
153:   def self.find(name)
154:     name =~ /\// ? new(name) : Repositories.instance.find_plugin(name)
155:   end

new (uri, name=nil)

     # File vendor/rails/railties/lib/commands/plugin.rb, line 148
148:   def initialize(uri, name=nil)
149:     @uri = uri
150:     guess_name(uri)
151:   end

Public Instance Methods


git_url? ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 165
165:   def git_url?
166:     @uri =~ /^git:\/\// || @url =~ /\.git$/
167:   end

info ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 206
206:   def info
207:     tmp = "#{rails_env.root}/_tmp_about.yml"
208:     if svn_url?
209:       cmd = "svn export #{@uri} \"#{rails_env.root}/#{tmp}\""
210:       puts cmd if $verbose
211:       system(cmd)
212:     end
213:     open(svn_url? ? tmp : File.join(@uri, 'about.yml')) do |stream|
214:       stream.read
215:     end rescue "No about.yml found in #{uri}"
216:   ensure
217:     FileUtils.rm_rf tmp if svn_url?
218:   end

install (method=nil, options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 174
174:   def install(method=nil, options = {})
175:     method ||= rails_env.best_install_method?
176:     if :http == method
177:       method = :export if svn_url?
178:       method = :clone  if git_url?
179:     end
180: 
181:     uninstall if installed? and options[:force]
182: 
183:     unless installed?
184:       send("install_using_#{method}", options)
185:       run_install_hook
186:     else
187:       puts "already installed: #{name} (#{uri}).  pass --force to reinstall"
188:     end
189:   end

installed? ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 169
169:   def installed?
170:     File.directory?("#{rails_env.root}/vendor/plugins/#{name}") \
171:       or rails_env.externals.detect{ |name, repo| self.uri == repo }
172:   end

svn_url? ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 161
161:   def svn_url?
162:     @uri =~ /svn(?:\+ssh)?:\/\/*/
163:   end

to_s ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 157
157:   def to_s
158:     "#{@name.ljust(30)}#{@uri}"
159:   end

uninstall ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 191
191:   def uninstall
192:     path = "#{rails_env.root}/vendor/plugins/#{name}"
193:     if File.directory?(path)
194:       puts "Removing 'vendor/plugins/#{name}'" if $verbose
195:       run_uninstall_hook
196:       rm_r path
197:     else
198:       puts "Plugin doesn't exist: #{path}"
199:     end
200:     # clean up svn:externals
201:     externals = rails_env.externals
202:     externals.reject!{|n,u| name == n or name == u}
203:     rails_env.externals = externals
204:   end

Private Instance Methods


git_command (cmd, options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 272
272:     def git_command(cmd, options = {})
273:       root = rails_env.root
274:       mkdir_p "#{root}/vendor/plugins"
275:       base_cmd = "git #{cmd} --depth 1 #{uri} \"#{root}/vendor/plugins/#{name}\""
276:       puts base_cmd if $verbose
277:       puts "removing: #{root}/vendor/plugins/#{name}/.git"
278:       system(base_cmd)
279:       rm_rf "#{root}/vendor/plugins/#{name}/.git"
280:     end

guess_name (url)

     # File vendor/rails/railties/lib/commands/plugin.rb, line 282
282:     def guess_name(url)
283:       @name = File.basename(url)
284:       if @name == 'trunk' || @name.empty?
285:         @name = File.basename(File.dirname(url))
286:       end
287:       @name.gsub!(/\.git$/, '') if @name =~ /\.git$/
288:     end

install_using_checkout (options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 236
236:     def install_using_checkout(options = {})
237:       svn_command :checkout, options
238:     end

install_using_clone (options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 258
258:     def install_using_clone(options = {})
259:       git_command :clone, options
260:     end

install_using_export (options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 232
232:     def install_using_export(options = {})
233:       svn_command :export, options
234:     end

install_using_externals (options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 240
240:     def install_using_externals(options = {})
241:       externals = rails_env.externals
242:       externals.push([@name, uri])
243:       rails_env.externals = externals
244:       install_using_checkout(options)
245:     end

install_using_http (options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 247
247:     def install_using_http(options = {})
248:       root = rails_env.root
249:       mkdir_p "#{root}/vendor/plugins/#{@name}"
250:       Dir.chdir "#{root}/vendor/plugins/#{@name}" do
251:         puts "fetching from '#{uri}'" if $verbose
252:         fetcher = RecursiveHTTPFetcher.new(uri, -1)
253:         fetcher.quiet = true if options[:quiet]
254:         fetcher.fetch
255:       end
256:     end

rails_env ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 290
290:     def rails_env
291:       @rails_env || RailsEnvironment.default
292:     end

run_install_hook ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 222
222:     def run_install_hook
223:       install_hook_file = "#{rails_env.root}/vendor/plugins/#{name}/install.rb"
224:       load install_hook_file if File.exist? install_hook_file
225:     end

run_uninstall_hook ()

     # File vendor/rails/railties/lib/commands/plugin.rb, line 227
227:     def run_uninstall_hook
228:       uninstall_hook_file = "#{rails_env.root}/vendor/plugins/#{name}/uninstall.rb"
229:       load uninstall_hook_file if File.exist? uninstall_hook_file
230:     end

svn_command (cmd, options = {})

     # File vendor/rails/railties/lib/commands/plugin.rb, line 262
262:     def svn_command(cmd, options = {})
263:       root = rails_env.root
264:       mkdir_p "#{root}/vendor/plugins"
265:       base_cmd = "svn #{cmd} #{uri} \"#{root}/vendor/plugins/#{name}\""
266:       base_cmd += ' -q' if options[:quiet] and not $verbose
267:       base_cmd += " -r #{options[:revision]}" if options[:revision]
268:       puts base_cmd if $verbose
269:       system(base_cmd)
270:     end