lib/octokit/repository.rb in octokit-4.1.0 vs lib/octokit/repository.rb in octokit-4.1.1

- old
+ new

@@ -2,36 +2,39 @@ # Class to parse GitHub repository owner and name from # URLs and to generate URLs class Repository attr_accessor :owner, :name, :id + NAME_WITH_OWNER_PATTERN = /\A[\w.-]+\/[\w.-]+\z/i # Instantiate from a GitHub repository URL # # @return [Repository] def self.from_url(url) Repository.new(URI.parse(url).path[1..-1]) end + # @raise [Octokit::InvalidRepository] if the repository + # has an invalid format def initialize(repo) case repo when Integer @id = repo - when String - @owner, @name = repo.split('/') - unless @owner && @name - raise ArgumentError, "Invalid Repository. Use user/repo format." - end + when NAME_WITH_OWNER_PATTERN + @owner, @name = repo.split("/") when Repository @owner = repo.owner @name = repo.name when Hash @name = repo[:repo] ||= repo[:name] @owner = repo[:owner] ||= repo[:user] ||= repo[:username] else - raise ArgumentError, "Invalid Repository. Use user/repo format." + raise_invalid_repository! end + if @owner && @name + validate_owner_and_name! + end end # Repository owner/name # @return [String] def slug @@ -69,7 +72,19 @@ end alias :user :owner alias :username :owner alias :repo :name + + private + + def validate_owner_and_name! + if @owner.include?('/') || @name.include?('/') || !url.match(/\A#{URI.regexp}\z/) + raise_invalid_repository! + end + end + + def raise_invalid_repository! + raise Octokit::InvalidRepository, "Invalid Repository. Use user/repo format." + end end end