GithubHelp home page GithubHelp logo

gemfileparser / gemfileparser Goto Github PK

View Code? Open in Web Editor NEW
2.0 5.0 6.0 110 KB

A library to parse Ruby Gemfile, .gemspec and Cocoapod .podspec file using Python.

Home Page: https://github.com/gemfileparser/gemfileparser

License: Other

Python 51.25% Ruby 48.75%
gemfile gemspec podspec cocoapods rubygems python parser dependencies

gemfileparser's Introduction

gemfileparser

gemfileparser parses Ruby Gemfile using Python with supports Ruby Gemfiles and .gemspec files as well as Cocoapod .podspec files.

Installation

In a virtualenv, use the command:

pip install gemfileparser

Otherwise from a git clone, use the following commands in a virtualenv:

git clone https://github.com/gemfileparser/gemfileparser.git
cd gemfileparser
python setup.py install

Usage

from gemfileparser import GemfileParser
parser = GemfileParser(<path to Gemfile>, <name of the application (optional)>)
dependency_dictionary = parser.parse()

The parse() method returns a dict object of the following format:

{
    'development': [list of dependency objects inside group 'development'],
    'runtime': [list of runtime dependency objects],
    .
    .
}

Each dependency object contains the following attributes:

  • name - Name of the gem
  • requirement - Version requirement
  • autorequire - Autorequire value
  • source - Source URL of the gem
  • parent - Dependency of which gem
  • group - Group that a gem is a member of (default : runtime)

Example

from gemfileparser import GemfileParser
n = GemfileParser('Gemfile', 'diaspora')
deps = n.parse()
for key in deps:
   if deps[key]:
       print key
       for dependency in deps[key]:
           print("\t", dependency)

Tests

Do this to run tests:

pip install -e .
pip install pytest
pytest -vvs tests
  • Copyright (c) 2020 Gemfileparser authors (listed in AUTHORS file)
  • Copyright (c) 2015-2018 Balasankar C <[email protected]>

License

gemfileparser is dual-licensed under your choice of the GNU GPL version 3 (or later) License or the MIT License.

It is preferred anyone using this project to respect the GPL-3+ license and use that itself for derivative works - thus making them also Free Software. But, your call.

When making contributions to gemfileparser you agree to license these contributions under the same choice of licenses.

gemfileparser's People

Contributors

balasankarc avatar pombredanne avatar rpotter12 avatar satwikkansal avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

gemfileparser's Issues

Support for Gemfiles with arbitrary ruby code

Hi folks ๐Ÿ‘‹

I am looking for a solution that allows me to parse the dependencies of some ruby project that uses bundler and Gemfileparser looks promising.

What Happened

I tried running against https://github.com/3scale/porta/blob/master/Gemfile , but I only get 2 results:

development :
runtime :
	 <gemfileparser.Dependency object at 0x10457f2e0>
	 <gemfileparser.Dependency object at 0x10457f370>
dependency :
test :
production :
metrics :

Presumably this is because https://github.com/3scale/porta/blob/master/Gemfile#L3 includes another Gemfile.

What I Expected to Happen

I would like the list of results to include both the results in Gemfile, but also those from Gemfile.base.

Potential Solutions Considered

I am wondering if you have already considered parsing Gemfile.lock rather than Gemfile, as a way of parsing a more standard format that doesn't, essentially, require Gemfileparser to support evaluating arbitrary ruby code (this would open up to a series of other issues).

Of course, parsing just Gemfile.lock would mean no support for dependency groups, but perhaps that is an acceptable tradeoff.. ?

Any thoughts on this topic?

License for use as a library?

@balasankarc This is a request to ask if you could consider may be using an alternative license such that your code could be used as a library in a non-GPL project, possibly an LGPL?
I have already built a Gemfile.lock parser here https://github.com/nexB/scancode-toolkit-contrib/tree/develop/src/packagedcode2 and also a Ruby-based parser that spawn from Python for gemspec, but I would very much prefer using a pure Python approach.

Thank you for your kind consideration!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.