diff --git a/.gitignore b/.gitignore index 203bef6..62c6571 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,5 @@ docs/_build/ # PyBuilder target/ +/tmp/ +/.pytest_cache/ diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..b41e462 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,9 @@ +# This file lists contributors who made significant contribution to +# gemfileparser. This file is not intended to list every contributor to the +# project, though. For that, check the Git revision history. +# +# Names are in alphabetical order, for the sanity of mind. + +- Balasankar C +- Rohit Potter +- Philippe Ombredanne diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2db0ece --- /dev/null +++ b/LICENSE @@ -0,0 +1,44 @@ +gemfileparser is dual-licensed under your choice of [GNU GPL version 3 (or above) License] +(http://www.gnu.org/licenses/gpl) +or the [MIT License](https://opensource.org/licenses/MIT). + +Personally, I prefer anyone using this to respect the GPL license and use that +itself for derivative works - thus making them also Free Software. But, your +call. + +Copyright (c) 2020 Gemfileparser authors (listed in AUTHORS file) + 2015-2018 Balasankar C + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. +. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +. +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSE.GPLv3 b/LICENSE.GPLv3 index 733c072..67fbccd 100644 --- a/LICENSE.GPLv3 +++ b/LICENSE.GPLv3 @@ -1,3 +1,6 @@ +Copyright (c) 2020 Gemfileparser authors (listed in AUTHORS file) + 2015-2018 Balasankar C + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 diff --git a/LICENSE.MIT b/LICENSE.MIT index c8c60e0..1b71000 100644 --- a/LICENSE.MIT +++ b/LICENSE.MIT @@ -1,6 +1,7 @@ MIT License -Copyright (c) 2018 Balasankar C +Copyright (c) 2020 Gemfileparser authors (listed in AUTHORS file) + 2015-2018 Balasankar C Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..b0b0a2b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,12 @@ +graft gemfileparser +graft tests + +include AUTHORS +include LICENSE.GPLv3 +include LICENSE.MIT +include MANIFEST.in +include README.rst +include setup.cfg +include setup.py + +global-exclude *.py[co] __pycache__ *.*~ diff --git a/README.md b/README.md deleted file mode 100644 index d3bee9a..0000000 --- a/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# gemfileparser -Parse Ruby Gemfile's using Python. Supports Gemfiles and .gemspec files. - -### Installation -If using pip, use the command `sudo pip install gemfileparser` -Else use the following commands -``` -git clone https://github.com/balasankarc/gemfileparser.git -cd gemfileparser -python setup.py install -``` - -### Usage -``` -from gemfileparser import GemfileParser -parser = GemfileParser(, ) -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 in which 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 -``` - -### Copyright -2015-2018 Balasankar C - -### License -gemfileparser is dual-licensed under [GNU GPL version 3 (or above) License](http://www.gnu.org/licenses/gpl) and [MIT License](https://opensource.org/licenses/MIT). - -Personally, I prefer anyone using this to respect the GPL license and use that -itself for derivative works - thus making them also Free Software. But, your -call. diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..fef78a4 --- /dev/null +++ b/README.rst @@ -0,0 +1,94 @@ +============= +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(, ) + 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 +~~~~~~~~~ +* Copyright (c) 2020 Gemfileparser authors (listed in AUTHORS file) +* Copyright (c) 2015-2018 Balasankar C + + +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. diff --git a/bin/parsegemfile b/bin/parsegemfile deleted file mode 100755 index 6fc82f4..0000000 --- a/bin/parsegemfile +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -import sys -sys.path.insert(0, '../gemfileparser') - -from gemfileparser import GemfileParser - -if len(sys.argv) < 2: - print("Usage : parsegemfile ") - sys.exit(0) - -parsed = GemfileParser(sys.argv[1]) -output = parsed.parse() -for key, value in list(output.items()): - print(key, ":") - for item in value: - print("\t", item) diff --git a/gemfileparser/__init__.py b/gemfileparser/__init__.py index 84b82f4..e0af8a8 100644 --- a/gemfileparser/__init__.py +++ b/gemfileparser/__init__.py @@ -1,90 +1,93 @@ #!/usr/bin/env python # -# Copyright 2015 Balasankar C -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# . -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# . -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -'''Python library to parse Ruby's Gemfiles and gemspec files.''' +# Copyright (c) Balasankar C and others +# SPDX-License-Identifier: GPL-3.0-or-later OR MIT +""" +Python library to parse Ruby Gemfiles, gemspec and Cocoapods podspec files. +""" + +from __future__ import absolute_import +from __future__ import print_function +from __future__ import unicode_literals + +import collections import csv +import glob import io -import re import os -import glob -import collections +import re -class GemfileParser(object): - '''Creates a GemfileParser object to perform operations. ''' +class Dependency(object): + """ + A class to hold information about a dependency gem. + """ - class Dependency(object): - ''' A class to hold information about a dependency gem.''' + def __init__(self): + self.name = '' + self.requirement = [] + self.autorequire = '' + self.source = '' + self.parent = [] + self.group = '' - def __init__(self): - self.name = '' - self.requirement = [] - self.autorequire = '' - self.source = '' - self.parent = [] - self.group = '' + def to_dict(self): + return dict( + name=self.name, + requirement=self.requirement, + autorequire=self.autorequire, + source=self.source, + parent=self.parent, + group=self.group, + ) + +class GemfileParser(object): + """ + Create a GemfileParser object to perform operations. + """ gemfile_regexes = collections.OrderedDict() - gemfile_regexes['source'] = re.compile( - r"source:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['git'] = re.compile( - r"git:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['platform'] = re.compile( - r"platform:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['path'] = re.compile( - r"path:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['branch'] = re.compile( - r"branch:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['autorequire'] = re.compile( - r"require:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['group'] = re.compile( - r"group:[ ]?(?P[a-zA-Z:\/\.-]+)") - gemfile_regexes['name'] = re.compile( - r"(?P[a-zA-Z]+[\.0-9a-zA-Z _-]*)") - gemfile_regexes['requirement'] = re.compile( - r"(?P([>|<|=|~>|\d]+[ ]*[0-9\.\w]+[ ,]*)+)") - global_group = 'runtime' - group_block_regex = re.compile( - r"group[ ]?:[ ]?(?P.*?) do") - add_dvtdep_regex = re.compile( - r".*add_development_dependency (?P.*)") - add_rundep_regex = re.compile( - r".*add_runtime_dependency (?P.*)") + gemfile_regexes['source'] = re.compile(r"source:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['git'] = re.compile(r"git:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['platform'] = re.compile(r"platform:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['path'] = re.compile(r"path:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['branch'] = re.compile(r"branch:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['autorequire'] = re.compile(r"require:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['group'] = re.compile(r"group:[ ]?(?P[a-zA-Z:\/\.-]+)") + gemfile_regexes['name'] = re.compile(r"(?P[a-zA-Z]+[\.0-9a-zA-Z _-]*)") + gemfile_regexes['requirement'] = re.compile(r"(?P([>|<|=|~>|\d]+[ ]*[0-9\.\w]+[ ,]*)+)") + + group_block_regex = re.compile(r"group[ ]?:[ ]?(?P.*?) do") + + gemspec_add_dvtdep_regex = re.compile(r".*add_development_dependency(?P.*)") + gemspec_add_rundep_regex = re.compile(r".*add_runtime_dependency(?P.*)") + gemspec_add_dep_regex = re.compile(r".*dependency(?P.*)") def __init__(self, filepath, appname=''): - self.filepath = filepath # Required when calls to gemspec occurs - self.gemfile = open(filepath) + self.filepath = filepath + + self.current_group = 'runtime' + self.appname = appname self.dependencies = { 'development': [], 'runtime': [], + 'dependency': [], 'test': [], 'production': [], - 'metrics': [] + 'metrics': [], } - self.contents = self.gemfile.readlines() - if filepath.endswith('gemspec'): - self.gemspec = True - else: - self.gemspec = False + with open(filepath) as gf: + self.contents = gf.readlines() + + self.gemspec = filepath.endswith(('.gemspec', '.podspec')) @staticmethod def preprocess(line): - '''Removes the comment portion and excess spaces.''' + """ + Remove the comment portion and excess spaces. + """ if "#" in line: line = line[:line.index('#')] @@ -92,34 +95,34 @@ def preprocess(line): return line def parse_line(self, line): - '''Parses each line and creates dependency objects accordingly''' - - try: + """ + Parse a line and return a Dependency object. + """ - # StringIO requires a unicode object. - # But unicode() doesn't work with Python3 - # as it is already in unicode format. - # So, first try converting and if that fails, use original. - - line = unicode(line) - except NameError: - pass - linefile = io.StringIO(line) # csv requires a file object + # csv requires a file-like object + linefile = io.StringIO(line) for line in csv.reader(linefile, delimiter=','): column_list = [] for column in line: - stripped_column = column.replace("'", "") - stripped_column = stripped_column.replace('"', "") - stripped_column = stripped_column.strip() + stripped_column = ( + column.replace("'", "") + .replace('"', "") + .replace("%q<", "") + .replace("(", "") + .replace(")", "") + .replace("[", "") + .replace("]", "") + .strip() + ) column_list.append(stripped_column) - dep = self.Dependency() - dep.group = GemfileParser.global_group + + dep = Dependency() + dep.group = self.current_group dep.parent.append(self.appname) for column in column_list: # Check for a match in each regex and assign to # corresponding variables - for criteria in GemfileParser.gemfile_regexes: - criteria_regex = GemfileParser.gemfile_regexes[criteria] + for criteria, criteria_regex in GemfileParser.gemfile_regexes.items(): match = criteria_regex.match(column) if match: if criteria == 'requirement': @@ -132,23 +135,24 @@ def parse_line(self, line): else: self.dependencies[dep.group] = [dep] - def parse_gemfile(self, path=''): - '''Parses a Gemfile and returns a dict of categorized dependencies.''' + def parse_gemfile(self): + """ + Parse a Gemfile and returns a mapping of categorized dependencies. + """ - if path == '': - contents = self.contents - else: - contents = open(path).readlines() - for line in contents: + for line in self.contents: line = self.preprocess(line) if line == '' or line.startswith('source'): continue + elif line.startswith('group'): match = self.group_block_regex.match(line) if match: - GemfileParser.global_group = match.group('groupblock') + self.current_group = match.group('groupblock') + elif line.startswith('end'): - GemfileParser.global_group = 'runtime' + self.current_group = 'runtime' + elif line.startswith('gemspec'): # Gemfile contains a call to gemspec gemfiledir = os.path.dirname(self.filepath) @@ -158,36 +162,59 @@ def parse_gemfile(self, path=''): continue gemspec_file = gemspec_list[0] self.parse_gemspec(path=os.path.join(gemfiledir, gemspec_file)) + elif line.startswith('gem '): line = line[3:] self.parse_line(line) + return self.dependencies - def parse_gemspec(self, path=''): - '''Method to handle gemspec files.''' + def parse_gemspec(self, path=None): + """ + Parse a .gemspec or .podspec and return a mapping of categorized + dependencies. + """ - if path == '': - contents = self.contents - else: - contents = open(path).readlines() - for line in contents: + for line in self.contents: line = self.preprocess(line) - match = GemfileParser.add_dvtdep_regex.match(line) + match = self.gemspec_add_dvtdep_regex.match(line) if match: - GemfileParser.global_group = 'development' + self.current_group = 'development' else: - match = GemfileParser.add_rundep_regex.match(line) + match = self.gemspec_add_rundep_regex.match(line) if match: - GemfileParser.global_group = 'runtime' + self.current_group = 'runtime' + else: + match = self.gemspec_add_dep_regex.match(line) + if match: + self.current_group = 'dependency' if match: line = match.group('line') self.parse_line(line) return self.dependencies def parse(self): - '''Calls necessary function based on whether file is a gemspec file - or not and forwards the dicts returned by them.''' + """ + Return a mapping of dependencies parsed from the Gemfile or gemspec. + """ if self.gemspec: return self.parse_gemspec() else: return self.parse_gemfile() + + +def command_line(): + """ + A minimal command line entry point. + """ + import sys + if len(sys.argv) < 2: + print("Usage : parsegemfile ") + sys.exit(0) + + parsed = GemfileParser(sys.argv[1]) + output = parsed.parse() + for key, value in list(output.items()): + print(key, ":") + for item in value: + print("\t", item) diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index d691302..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -setuptools==32.0.0 -nose==1.3.7 diff --git a/setup.cfg b/setup.cfg index b88034e..d4de8d4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,38 @@ +[bdist_wheel] +universal = 1 + [metadata] -description-file = README.md +name = gemfileparser +version = 0.8.0 + +description = Parse Ruby Gemfile, .gemspec and Cocoapod .podspec files using Python. +long_description = file: README.rst + +author = Balasankar C +author_email = balasankarc@autistici.org + +keywords = Ruby Rubygem Gemfile gemspec Cocoapod podspec +url = https://github.com/gemfileparser/gemfileparser + +license = GPL-3.0-or-later OR MIT +license_files = + README.rst + LICENSE.GPLv3 + LICENSE.MIT + +classifiers = + Development Status :: 5 - Production/Stable + Intended Audience :: Developers + Operating System :: OS Independent + Programming Language :: Python :: 2.7 + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + Topic :: Utilities + +[options] +zip_safe = False +include_package_data = True +packages = find: diff --git a/setup.py b/setup.py index db91450..2f2a4c6 100644 --- a/setup.py +++ b/setup.py @@ -1,99 +1,12 @@ # -*- coding: utf-8 -*- -try: - from setuptools import setup -except ImportError: - from distutils.core import setup -config = { - 'description': "Parse Ruby's Gemfiles", - 'author': 'Balasankar C', - 'url': 'https://gitlab.com/balasankarc/gemfileparser', - 'download_url': 'https://gitlab.com/balasankarc/gemfileparser', - 'author_email': 'balasankarc@autistici.org', - 'version': '0.7.0', - 'license': 'GPL-3+ and MIT', - 'long_description': ''' -Installation -~~~~~~~~~~~~ +from setuptools import setup -| If using pip, use the command ``sudo pip install gemfileparser`` -| Else use the following commands - -:: - - git clone https://github.com/balasankarc/gemfileparser.git - cd gemfileparser - python setup.py install - -Usage -~~~~~ - -:: - - from gemfileparser import GemfileParser - parser = GemfileParser(, ) - 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 in which 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 - -Copyright -~~~~~~~~~ - -2015-2018 Balasankar C balasankarc@autistici.org - -License -~~~~~~~ - -gemfileparser is released under two licenses: `GNU GPL version 3 (or above) License` and `MIT License`_. - -.. _GNU GPL version 3 (or above) License: http://www.gnu.org/licenses/gpl -''', - 'install_requires': ['nose'], - 'packages': ['gemfileparser'], - 'scripts': [], - 'name': 'gemfileparser' -} setup( - classifiers=[ - # Indicate who your project is intended for - 'Intended Audience :: Developers', - 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', - 'License :: OSI Approved :: MIT', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.4', - ], **config) + entry_points={ + 'console_scripts': [ + 'parsegemfile = gemfileparser:command_line', + ], + }, +) \ No newline at end of file diff --git a/tests/Gemfile-expected.json b/tests/Gemfile-expected.json new file mode 100644 index 0000000..0a5ec1a --- /dev/null +++ b/tests/Gemfile-expected.json @@ -0,0 +1,8 @@ +{ + "development": [], + "runtime": [], + "dependency": [], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/Gemfile_1-expected.json b/tests/Gemfile_1-expected.json new file mode 100644 index 0000000..7e38ae8 --- /dev/null +++ b/tests/Gemfile_1-expected.json @@ -0,0 +1,1125 @@ +{ + "development": [], + "runtime": [ + { + "name": "rails", + "requirement": [ + "4.2.4" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "responders", + "requirement": [ + "2.1.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "unicorn", + "requirement": [ + "4.9.0" + ], + "autorequire": "true", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "diaspora_federation-rails", + "requirement": [ + "0.0.6" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "acts_as_api", + "requirement": [ + "0.4.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "json", + "requirement": [ + "1.8.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "json-schema", + "requirement": [ + "2.5.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "devise", + "requirement": [ + "3.5.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "devise_lastseenable", + "requirement": [ + "0.0.6" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "devise-token_authenticatable", + "requirement": [ + "~> 0.4.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "simple_captcha2", + "requirement": [ + "0.3.4" + ], + "autorequire": "simple", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "sidekiq", + "requirement": [ + "3.4.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "sinatra", + "requirement": [ + "1.4.6" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "sidetiq", + "requirement": [ + "0.6.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "uglifier", + "requirement": [ + "2.7.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "configurate", + "requirement": [ + "0.3.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rack-cors", + "requirement": [ + "0.4.0" + ], + "autorequire": "rack/cors", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "bootstrap-sass", + "requirement": [ + "2.3.2.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "compass-rails", + "requirement": [ + "2.0.4" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "sass-rails", + "requirement": [ + "5.0.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "autoprefixer-rails", + "requirement": [ + "5.2.1.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "mysql2", + "requirement": [ + "0.3.18 " + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "pg", + "requirement": [ + "0.18.2 " + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "activerecord-import", + "requirement": [ + "0.10.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "carrierwave", + "requirement": [ + "0.10.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "fog", + "requirement": [ + "1.32.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "mini_magick", + "requirement": [ + "4.2.7" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "remotipart", + "requirement": [ + "1.2.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "uuid", + "requirement": [ + "2.3.8" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "entypo-rails", + "requirement": [ + "2.2.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "backbone-on-rails", + "requirement": [ + "1.2.0.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "handlebars_assets", + "requirement": [ + "0.20.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "jquery-rails", + "requirement": [ + "4.0.4" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "jquery-ui-rails", + "requirement": [ + "5.0.5" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "js_image_paths", + "requirement": [ + "0.0.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "js-routes", + "requirement": [ + "1.0.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-jquery", + "requirement": [ + "1.11.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it", + "requirement": [ + "4.4.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it-hashtag", + "requirement": [ + "0.3.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it-diaspora-mention", + "requirement": [ + "0.3.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it-sanitizer", + "requirement": [ + "0.3.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it--markdown-it-for-inline", + "requirement": [ + "0.1.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it-sub", + "requirement": [ + "1.0.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-markdown-it-sup", + "requirement": [ + "1.0.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-highlightjs", + "requirement": [ + "8.6.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-jeresig--jquery.hotkeys", + "requirement": [ + "0.2.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-jquery-placeholder", + "requirement": [ + "2.1.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-jquery-textchange", + "requirement": [ + "0.2.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-perfect-scrollbar", + "requirement": [ + "0.6.4" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-jakobmattsson--jquery-elastic", + "requirement": [ + "1.6.11" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "facebox-rails", + "requirement": [ + "0.2.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "http_accept_language", + "requirement": [ + "2.0.5" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "i18n-inflector-rails", + "requirement": [ + "1.0.7" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-i18n", + "requirement": [ + "4.0.4" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "markerb", + "requirement": [ + "1.0.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "messagebus_ruby_api", + "requirement": [ + "1.0.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "nokogiri", + "requirement": [ + "1.6.6.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "redcarpet", + "requirement": [ + "3.3.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "twitter-text", + "requirement": [ + "1.12.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "roxml", + "requirement": [ + "3.1.6" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "ruby-oembed", + "requirement": [ + "0.8.14" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "open_graph_reader", + "requirement": [ + "0.6.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "omniauth", + "requirement": [ + "1.2.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "omniauth-facebook", + "requirement": [ + "2.0.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "omniauth-tumblr", + "requirement": [ + "1.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "omniauth-twitter", + "requirement": [ + "1.2.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "twitter", + "requirement": [ + "5.14.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "omniauth-wordpress", + "requirement": [ + "0.2.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "active_model_serializers", + "requirement": [ + "0.9.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "diaspora-vines", + "requirement": [ + "~> 0.2.0.develop" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-assets-diaspora_jsxc", + "requirement": [ + "~> 0.1.4.alpha", + "< 0.1.4.develop" + ], + "autorequire": "", + "source": "https://rails-assets.org", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "acts-as-taggable-on", + "requirement": [ + "3.5.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "addressable", + "requirement": [ + "2.3.8" + ], + "autorequire": "addressable/uri", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "faraday", + "requirement": [ + "0.9.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "faraday_middleware", + "requirement": [ + "0.10.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "faraday-cookie_jar", + "requirement": [ + "0.0.6" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "typhoeus", + "requirement": [ + "0.7.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "gon", + "requirement": [ + "6.0.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "haml", + "requirement": [ + "4.0.6" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "mobile-fu", + "requirement": [ + "1.3.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "will_paginate", + "requirement": [ + "3.0.7" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rails-timeago", + "requirement": [ + "2.11.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "logging-rails", + "requirement": [ + "0.5.0" + ], + "autorequire": "logging/rails", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "rubyzip", + "requirement": [ + "1.1.7" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + }, + { + "name": "minitest", + "requirement": [], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + } + ], + "dependency": [], + "test": [], + "production": [ + { + "name": "rails_admin", + "requirement": [ + "0.7.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "rack-google-analytics", + "requirement": [ + "1.2.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "rack-piwik", + "requirement": [ + "0.3.0" + ], + "autorequire": "rack/piwik", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "rack-protection", + "requirement": [ + "1.5.3" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "eye", + "requirement": [ + "0.7.pre" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "rack-rewrite", + "requirement": [ + "1.5.1" + ], + "autorequire": "false", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "rack-ssl", + "requirement": [ + "1.4.1" + ], + "autorequire": "rack/ssl", + "source": "", + "parent": [ + "" + ], + "group": "production" + }, + { + "name": "asset_sync", + "requirement": [ + "1.1.0" + ], + "autorequire": "false", + "source": "", + "parent": [ + "" + ], + "group": "production" + } + ], + "metrics": [] +} \ No newline at end of file diff --git a/tests/Gemfile_2-expected.json b/tests/Gemfile_2-expected.json new file mode 100644 index 0000000..a04b990 --- /dev/null +++ b/tests/Gemfile_2-expected.json @@ -0,0 +1,34 @@ +{ + "development": [ + { + "name": "responders", + "requirement": [ + "3.0.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + } + ], + "runtime": [ + { + "name": "rails", + "requirement": [ + "4.2.4" + ], + "autorequire": "", + "source": "http://www.example.com", + "parent": [ + "" + ], + "group": "runtime" + } + ], + "dependency": [], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/Gemfile_3-expected.json b/tests/Gemfile_3-expected.json new file mode 100644 index 0000000..a660af6 --- /dev/null +++ b/tests/Gemfile_3-expected.json @@ -0,0 +1,21 @@ +{ + "development": [ + { + "name": "rails", + "requirement": [ + "4.2.4" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + } + ], + "runtime": [], + "dependency": [], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/Gemfile_4-expected.json b/tests/Gemfile_4-expected.json new file mode 100644 index 0000000..5f7d89b --- /dev/null +++ b/tests/Gemfile_4-expected.json @@ -0,0 +1,19 @@ +{ + "development": [], + "runtime": [ + { + "name": "rails", + "requirement": [], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + } + ], + "dependency": [], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/Gemfile_5 b/tests/Gemfile_5 new file mode 100644 index 0000000..b5e7562 --- /dev/null +++ b/tests/Gemfile_5 @@ -0,0 +1 @@ +gem 'byebug', platforms: [:mri, :mingw, :x64_mingw], group: development diff --git a/tests/Gemfile_5-expected.json b/tests/Gemfile_5-expected.json new file mode 100644 index 0000000..bb8a39e --- /dev/null +++ b/tests/Gemfile_5-expected.json @@ -0,0 +1,19 @@ +{ + "development": [ + { + "name": "platforms", + "requirement": [], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + } + ], + "runtime": [], + "dependency": [], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/address_standardization.gemspec b/tests/address_standardization.gemspec new file mode 100644 index 0000000..77b9227 --- /dev/null +++ b/tests/address_standardization.gemspec @@ -0,0 +1,67 @@ +# Generated by jeweler +# DO NOT EDIT THIS FILE DIRECTLY +# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = %q{mysmallidea-address_standardization} + s.version = "0.4.1" + + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.authors = ["Elliot Winkler"] + s.date = %q{2010-02-01} + s.description = %q{A tiny Ruby library to quickly standardize a postal address} + s.email = %q{elliot.winkler@gmail.com} + s.extra_rdoc_files = [ + "README.md", + "TODO" + ] + s.files = [ + ".gitignore", + "README.md", + "Rakefile", + "TODO", + "address_standardization.gemspec", + "lib/address_standardization.rb", + "lib/address_standardization/abstract_service.rb", + "lib/address_standardization/address.rb", + "lib/address_standardization/class_level_inheritable_attributes.rb", + "lib/address_standardization/google_maps.rb", + "lib/address_standardization/melissa_data.rb", + "lib/address_standardization/ruby_ext.rb", + "lib/address_standardization/version.rb", + "test/google_maps_test.rb", + "test/melissa_data_test.rb", + "test/test_helper.rb" + ] + s.homepage = %q{http://github.com/mcmire/address_standardization} + s.rdoc_options = ["--charset=UTF-8"] + s.require_paths = ["lib"] + s.rubygems_version = %q{1.3.5} + s.summary = %q{A tiny Ruby library to quickly standardize a postal address} + s.test_files = [ + "test/google_maps_test.rb", + "test/melissa_data_test.rb", + "test/test_helper.rb" + ] + + if s.respond_to? :specification_version then + current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION + s.specification_version = 3 + + if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then + s.add_runtime_dependency(%q, [">= 0"]) + s.add_development_dependency(%q, [">= 0"]) + s.add_development_dependency(%q, [">= 0"]) + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end + else + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) + end +end + diff --git a/tests/address_standardization.gemspec-expected.json b/tests/address_standardization.gemspec-expected.json new file mode 100644 index 0000000..447015a --- /dev/null +++ b/tests/address_standardization.gemspec-expected.json @@ -0,0 +1,119 @@ +{ + "development": [ + { + "name": "mcmire-context", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + }, + { + "name": "mcmire-matchy", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + } + ], + "runtime": [ + { + "name": "mechanize", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + } + ], + "dependency": [ + { + "name": "mechanize", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "mcmire-context", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "mcmire-matchy", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "mechanize", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "mcmire-context", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "mcmire-matchy", + "requirement": [ + ">= 0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + } + ], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/arel.gemspec b/tests/arel.gemspec new file mode 100644 index 0000000..7a07b0a --- /dev/null +++ b/tests/arel.gemspec @@ -0,0 +1,43 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = %q{arel} + s.version = "2.0.7.beta.20110429111451" + + s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version= + s.authors = ["Aaron Patterson", "Bryan Halmkamp", "Emilio Tagua", "Nick Kallen"] + s.date = %q{2011-04-29} + s.description = %q{Arel is a SQL AST manager for Ruby. It + +1. Simplifies the generation complex of SQL queries +2. Adapts to various RDBMS systems + +It is intended to be a framework framework; that is, you can build your own ORM +with it, focusing on innovative object and collection modeling as opposed to +database compatibility and query generation.} + s.email = ["aaron@tenderlovemaking.com", "bryan@brynary.com", "miloops@gmail.com", "nick@example.org"] + s.extra_rdoc_files = ["History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown"] + s.files = [".autotest", ".gemtest", "History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown", "Rakefile", "arel.gemspec", "lib/arel.rb", "lib/arel/alias_predication.rb", "lib/arel/attributes.rb", "lib/arel/attributes/attribute.rb", "lib/arel/compatibility/wheres.rb", "lib/arel/crud.rb", "lib/arel/delete_manager.rb", "lib/arel/deprecated.rb", "lib/arel/expression.rb", "lib/arel/expressions.rb", "lib/arel/factory_methods.rb", "lib/arel/insert_manager.rb", "lib/arel/math.rb", "lib/arel/nodes.rb", "lib/arel/nodes/and.rb", "lib/arel/nodes/binary.rb", "lib/arel/nodes/count.rb", "lib/arel/nodes/delete_statement.rb", "lib/arel/nodes/equality.rb", "lib/arel/nodes/function.rb", "lib/arel/nodes/in.rb", "lib/arel/nodes/infix_operation.rb", "lib/arel/nodes/inner_join.rb", "lib/arel/nodes/insert_statement.rb", "lib/arel/nodes/join_source.rb", "lib/arel/nodes/named_function.rb", "lib/arel/nodes/node.rb", "lib/arel/nodes/ordering.rb", "lib/arel/nodes/outer_join.rb", "lib/arel/nodes/select_core.rb", "lib/arel/nodes/select_statement.rb", "lib/arel/nodes/sql_literal.rb", "lib/arel/nodes/string_join.rb", "lib/arel/nodes/table_alias.rb", "lib/arel/nodes/terminal.rb", "lib/arel/nodes/unary.rb", "lib/arel/nodes/unqualified_column.rb", "lib/arel/nodes/update_statement.rb", "lib/arel/nodes/values.rb", "lib/arel/nodes/with.rb", "lib/arel/order_predications.rb", "lib/arel/predications.rb", "lib/arel/relation.rb", "lib/arel/select_manager.rb", "lib/arel/sql/engine.rb", "lib/arel/sql_literal.rb", "lib/arel/table.rb", "lib/arel/tree_manager.rb", "lib/arel/update_manager.rb", "lib/arel/visitors.rb", "lib/arel/visitors/depth_first.rb", "lib/arel/visitors/dot.rb", "lib/arel/visitors/ibm_db.rb", "lib/arel/visitors/join_sql.rb", "lib/arel/visitors/mssql.rb", "lib/arel/visitors/mysql.rb", "lib/arel/visitors/oracle.rb", "lib/arel/visitors/order_clauses.rb", "lib/arel/visitors/postgresql.rb", "lib/arel/visitors/sqlite.rb", "lib/arel/visitors/to_sql.rb", "lib/arel/visitors/visitor.rb", "lib/arel/visitors/where_sql.rb", "test/attributes/test_attribute.rb", "test/helper.rb", "test/nodes/test_as.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_equality.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/support/fake_record.rb", "test/test_activerecord_compat.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"] + s.homepage = %q{http://github.com/rails/arel} + s.rdoc_options = ["--main", "README.markdown"] + s.require_paths = ["lib"] + s.rubyforge_project = %q{arel} + s.rubygems_version = %q{1.6.1} + s.summary = %q{Arel is a SQL AST manager for Ruby} + s.test_files = ["test/attributes/test_attribute.rb", "test/nodes/test_as.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_equality.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/test_activerecord_compat.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"] + + if s.respond_to? :specification_version then + s.specification_version = 3 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_development_dependency(%q, [">= 2.0.2"]) + s.add_development_dependency(%q, [">= 2.9.1"]) + else + s.add_dependency(%q, [">= 2.0.2"]) + s.add_dependency(%q, [">= 2.9.1"]) + end + else + s.add_dependency(%q, [">= 2.0.2"]) + s.add_dependency(%q, [">= 2.9.1"]) + end +end diff --git a/tests/arel.gemspec-expected.json b/tests/arel.gemspec-expected.json new file mode 100644 index 0000000..b6d72d3 --- /dev/null +++ b/tests/arel.gemspec-expected.json @@ -0,0 +1,82 @@ +{ + "development": [ + { + "name": "minitest", + "requirement": [ + ">= 2.0.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + }, + { + "name": "hoe", + "requirement": [ + ">= 2.9.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + } + ], + "runtime": [], + "dependency": [ + { + "name": "minitest", + "requirement": [ + ">= 2.0.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "hoe", + "requirement": [ + ">= 2.9.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "minitest", + "requirement": [ + ">= 2.0.2" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + }, + { + "name": "hoe", + "requirement": [ + ">= 2.9.1" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "dependency" + } + ], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/gemfileparser_tests.py b/tests/gemfileparser_tests.py deleted file mode 100644 index 73c5d7d..0000000 --- a/tests/gemfileparser_tests.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python - -from nose.tools import assert_equal, assert_in -from gemfileparser import GemfileParser - - -def test_source_only_gemfile(): - gemparser = GemfileParser('tests/Gemfile') - expected = { - 'development': [], - 'test': [], - 'runtime': [], - 'metrics': [], - 'production': []} - dependencies = gemparser.parse() - assert_equal(dependencies, expected) - - -def test_name(): - gemparser = GemfileParser('tests/Gemfile_2') - dependencies = gemparser.parse() - assert_equal(dependencies['runtime'][0].name, 'rails') - - -def test_requirement(): - gemparser = GemfileParser('tests/Gemfile_2') - dependencies = gemparser.parse() - assert_equal(dependencies['runtime'][0].requirement, '4.2.4') - - -def test_group(): - gemparser = GemfileParser('tests/Gemfile_3') - dependencies = gemparser.parse() - assert_equal(dependencies['development'][0].requirement, '4.2.4') - - -def test_group_block(): - gemparser = GemfileParser('tests/Gemfile_2') - dependencies = gemparser.parse() - assert_equal(dependencies['development'][0].requirement, '3.0.0') - assert_equal(dependencies['runtime'][0].requirement, '4.2.4') - - -def test_source(): - gemparser = GemfileParser('tests/Gemfile_2') - dependencies = gemparser.parse() - assert_equal(dependencies['runtime'][0].source, - 'http://www.example.com') - - -def test_gemspec(): - gemparser = GemfileParser('tests/Gemfile_2') - dependencies = gemparser.parse() - assert_in('rails', [x.name for x in dependencies['runtime']]) - assert_in('responders', [x.name for x in dependencies['development']]) diff --git a/tests/sample.gemspec-expected.json b/tests/sample.gemspec-expected.json new file mode 100644 index 0000000..b67ca7c --- /dev/null +++ b/tests/sample.gemspec-expected.json @@ -0,0 +1,64 @@ +{ + "development": [ + { + "name": "rake-compiler", + "requirement": [ + ">= 0.7.5" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + }, + { + "name": "rspec", + "requirement": [ + ">= 2.0.0" + ], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + }, + { + "name": "activesupport", + "requirement": [], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + }, + { + "name": "json", + "requirement": [], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "development" + } + ], + "runtime": [ + { + "name": "redmine", + "requirement": [], + "autorequire": "", + "source": "", + "parent": [ + "" + ], + "group": "runtime" + } + ], + "dependency": [], + "test": [], + "production": [], + "metrics": [] +} \ No newline at end of file diff --git a/tests/test_gemfileparser.py b/tests/test_gemfileparser.py new file mode 100644 index 0000000..7386e7f --- /dev/null +++ b/tests/test_gemfileparser.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python +# +# Copyright (c) Balasankar C and others +# SPDX-License-Identifier: GPL-3.0-or-later OR MIT + +from gemfileparser import GemfileParser + + +def check_gemparser_results(test_file, regen=False): + """ + Run GemfileParser.parse on `test_file` and check against a JSON file that + contains expected results with the same name as the `test_file` with a + "-expected.json" suffix appended. + """ + import json + + gemparser = GemfileParser(test_file) + dependencies = { + group: [dep.to_dict() for dep in deps] + for group, deps in gemparser.parse().items() + } + + expected_file = test_file + '-expected.json' + if regen: + with open(expected_file, 'w') as o: + json.dump(dependencies, o, indent=2) + + with open(expected_file) as o: + expected = json.load(o) + + assert expected == dependencies + + +def test_source_only_gemfile(): + check_gemparser_results('tests/Gemfile') + + +def test_gemfile_1(): + check_gemparser_results('tests/Gemfile_1') + + +def test_gemfile_2(): + check_gemparser_results('tests/Gemfile_2') + + +def test_gemfile_3(): + check_gemparser_results('tests/Gemfile_3') + + +def test_gemfile_4(): + check_gemparser_results('tests/Gemfile_4') + + +def test_gemfile_platforms(): + check_gemparser_results('tests/Gemfile_5') + + +def test_gemspec_1(): + check_gemparser_results('tests/sample.gemspec') + + +def test_gemspec_2(): + check_gemparser_results('tests/address_standardization.gemspec') + + +def test_gemspec_3(): + check_gemparser_results('tests/arel.gemspec')