Skip to content

stevenosloan/asgit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

"ask git"

Installation

With Rubygems

$ gem install asgit

With Bundler

gem 'asgit'

Use

Get current status

Asgit.working_tree_clean?
# => true if you're working tree is clean

Asgit.current_branch
# => the branch you're on

Asgit.current_commit
# => sha of the current_commit

Asgit.remote_up_to_date?
# => true if you and remote are synced

Get repo links

# First initialize the project with info
repo = Asgit::Project.new(
  service: 'github',
  organization: 'stevenosloan',
  project: 'asgit',
  default_branch: 'master'
)


repo.urls.project
# => "https://github.com/stevenosloan/asgit"

repo.urls.branch 'branch_name'
# => "https://github.com/stevenosloan/asgit/tree/branch_name"

repo.urls.commit 'commit_sha'
# => "https://github.com/stevenosloan/asgit/commit/commit_sha"

repo.urls.file "lib/asgit.rb"
# => "https://github.com/stevenosloan/asgit/blob/master/lib/asgit.rb"

repo.urls.file "lib/asgit.rb", branch: 'dev'
# => "https://github.com/stevenosloan/asgit/blob/dev/lib/asgit.rb"

repo.urls.file "lib/asgit.rb", line: '11'
# => "https://github.com/stevenosloan/asgit/blob/master/lib/asgit.rb#L11"

repo.urls.file "lib/asgit.rb", line: (11..15)
# => "https://github.com/stevenosloan/asgit/blob/master/lib/asgit.rb#L11-L15"

repo.urls.file_at_commit 'lib/asgit.rb', 'commit_sha'
# => "https://github.com/stevenosloan/asgit/blob/commit_sha/lib/asgit.rb"

repo.urls.compare '0.1.0', 'master'
# => "https://github.com/stevenosloan/asgit/compare/0.1.0...master"
# github atleast is very flexible, this can take any two references,
# could be branch, tag, or commit

Services

Packaged Services

GitHub

repo = Asgit::Project.new(
  service: 'github',
  organization: 'stevenosloan',
  project: 'asgit',
  default_branch: 'master'
)
repo.urls.project
# => "https://github.com/stevenosloan/asgit"

GitHub Enterprise
To configure for GitHub Enterprise, define your project as you would for GitHub except define the base_url where your Enterpise app is located.

repo = Asgit::Project.new(
  service: 'github',
  organization: 'stevenosloan',
  project: 'asgit',
  default_branch: 'master',
  base_url: 'https://git.myserver.com'
)
repo.urls.project
# => "https://git.myserver.com/stevenosloan/asgit"

BitBucket

repo = Asgit::Project.new(
  service: 'bitbucket',
  organization: 'stevenosloan',
  project: 'asgit',
  default_branch: 'master'
)
repo.urls.project
# => "https://bitbucket.org/stevenosloan/asgit"

Creating a custom service

Lets imagine we're hosting our own GitLab application at 'example.com'. First we'll open up a new class and extend from the Asgit::Services::Service class and register it under the name of :gitlab.

class GitLab < Asgit::Services::Service
  register_as :gitlab

  def base_url
    "https://example.com"
  end
  # define a base_url method to act as the
  # root for our url structures

end

With our base class defined, we can create a new project using that class.

repo = Asgit::Project.new(
  service: :gitlab,
  organization: 'stevenosloan',
  project: 'asgit',
  default_branch: 'master'
)

This isn't very useful though, because it doesn't know the url structure for anything. So lets add those:

class GitLab < Asgit::Services::Service
  # ... previous code

  def base_structure
    "%{base_url}/%{organization}/%{project}"
  end
  # the start of every URI

  def commit_uri
    "commit/%{commit}"
  end
  # URI for individual commits

  def branch_uri
    "commits/%{branch}"
  end
  # URI for branches

  def file_uri
    "blob/%{branch}/%{file_path}"
  end
  # URI for an individual file

end

You may note that we're missing a file_at_commit_uri structure, if we try and access a url structure that isn't defined in our custom service, a Asgit::Services::Service::MissingUrlStructure error will be raised.

Testing

$ rspec

Contributing

If there is any thing you'd like to contribute or fix, please:

  • Fork the repo
  • Add tests for any new functionality
  • Make your changes
  • Verify all new &existing tests pass
  • Make a pull request

License

The Asgit gem is distributed under the MIT License.

About

A simple query interface for git

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages