class RepoProviders

Attributes

providers[R]

Public Class Methods

new() click to toggle source
# File lib/git-issues/providers.rb, line 25
def initialize
  @providers = RepoProvider.subclasses.map do |c|
      add_methods_to_provider(c)
    end
end

Public Instance Methods

map_urls_to_provider(urls) click to toggle source
# File lib/git-issues/providers.rb, line 31
def map_urls_to_provider urls
  urls.map do |url|
    # get the first valid provider (or nil otherwise)
    @providers.map do |p|
      create_provider(p,url)
    end.compact.first
  end.compact
end

Private Instance Methods

add_methods_to_provider(c) click to toggle source
# File lib/git-issues/providers.rb, line 53
  def add_methods_to_provider c
    # get the base name of the provider
    name = c.name.sub(/.*::/,'').downcase
    # add simple fields
    ['repo_url', 'repo'].each do |arg|
      c.class_eval("def #{arg};@#{arg};end")
    end
    # add login helper
    c.class_eval <<-EOF
      def log; @log ||= Logging.logger[#{c}]; end
      def name; #{name.inspect} end
      include ::LoginHelper
      EOF
    c
  end
create_provider(p, url) click to toggle source
# File lib/git-issues/providers.rb, line 42
def create_provider p, url
  # break out if this is not a url for this provider
  repo = p.get_repo url
  return nil if repo.nil?
  # create the provider with the url
  pc = p.new
  pc.instance_variable_set(:@repo_url, url)
  pc.instance_variable_set(:@repo, repo)
  pc
end