# encoding: utf-8moduleGithubclassGitData::References<APIVALID_REF_PARAM_NAMES=%w[ ref sha force ].freezeREQUIRED_REF_PARAMS=%w[ ref sha ].freezeVALID_REF_PARAM_VALUES={'ref'=>%r{^refs\/\w+(\/\w+)*}# test fully qualified reference}# Get all references## This will return an array of all the references on the system,# including things like notes and stashes if they exist on the server.# Anything in the namespace, not just <tt>heads</tt> and <tt>tags</tt>,# though that would be the most common.## = Examples# github = Github.new# github.git_data.references.list 'user-name', 'repo-name'## github.git_data.references.list 'user-name', 'repo-name', ref:'tags'#deflist(*args)arguments(args,:required=>[:user,:repo])params=arguments.paramsresponse=if(ref=params.delete('ref'))validate_referencerefget_request("/repos/#{user}/#{repo}/git/refs/#{ref}",params)elseget_request("/repos/#{user}/#{repo}/git/refs",params)endreturnresponseunlessblock_given?response.each{|el|yieldel}endalias:all:list# Get a reference## The ref in the URL must be formatted as <tt>heads/branch</tt>,# not just branch. For example, the call to get the data for a# branch named <tt>sc/featureA</tt> would be formatted as# <tt>heads/sc/featureA</tt>## = Examples# github = Github.new# github.git_data.references.get 'user-name', 'repo-name', 'heads/branch'#defget(*args)arguments(args,:required=>[:user,:repo,:ref])validate_referencerefparams=arguments.paramsget_request("/repos/#{user}/#{repo}/git/refs/#{ref}",params)endalias:find:get# Create a reference## = Inputs# * <tt>:ref</tt> - String of the name of the fully qualified reference (ie: refs/heads/master). If it doesn’t start with ‘refs’ and have at least two slashes, it will be rejected.# * <tt>:sha</tt> - String of the SHA1 value to set this reference to## = Examples# github = Github.new# github.git_data.references.create 'user-name', 'repo-name',# "ref" => "refs/heads/master",# "sha" => "827efc6d56897b048c772eb4087f854f46256132"#defcreate(*args)arguments(args,:required=>[:user,:repo])dosiftVALID_REF_PARAM_NAMESassert_requiredREQUIRED_REF_PARAMSendparams=arguments.paramsvalidate_referenceparams['ref']post_request("/repos/#{user}/#{repo}/git/refs",params)end# Update a reference## = Inputs# * <tt>:sha</tt> - String of the SHA1 value to set this reference to# * <tt>:force</tt> - Boolean indicating whether to force the update or to make sure the update is a fast-forward update. The default is <tt>false</tt>, so leaving this out or setting it to false will make sure you’re not overwriting work.## = Examples# github = Github.new# github.git_data.references.update 'user-name', 'repo-name', 'heads/master',# "sha" => "827efc6d56897b048c772eb4087f854f46256132",# "force" => true#defupdate(*args)arguments(args,:required=>[:user,:repo,:ref])dosiftVALID_REF_PARAM_NAMESassert_required%w[ sha ]endparams=arguments.paramspatch_request("/repos/#{user}/#{repo}/git/refs/#{ref}",params)end# Delete a reference## = Examples# github = Github.new# github.git_data.references.delete 'user-name', 'repo-name',# "ref" => "refs/heads/master",#defdelete(*args)arguments(args,:required=>[:user,:repo,:ref])params=arguments.paramsdelete_request("/repos/#{user}/#{repo}/git/refs/#{ref}",params)endalias:remove:deleteprivatedefvalidate_reference(ref)refs=(ref=~(/^(\/)?refs.*/)?ref:"refs/#{ref}").gsub(/(\/)+/,'/')refs.gsub!(/^\//,'')unlessVALID_REF_PARAM_VALUES['ref']=~refsraiseArgumentError,"Provided 'reference' is invalid"endendend# GitData::Referencesend# Github