diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 025b86f..0000000 --- a/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = true -charset = utf-8 -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -[*.md] -trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 44c5bd7..0000000 --- a/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -./dist -.npm -cover -node_modules -npm-debug.log -package \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index ef84c5c..0000000 --- a/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -extends: openstack -env: - node: true - jasmine: true -rules: - strict: ["error", "global"] diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 2f4488f..0000000 --- a/.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Test reporting directories used by zuul -cover -reports - -# Project output directories -package -dist -www -build -doc/source/jsdoc -*-compiled.js -*.js.map -*.tgz -.vagrant - -# Dependency directories -node_modules -bower_components - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history - -# Dev Environment Excludes -*.iml -.idea -clouds.yaml - -# OS-specific -.DS_Store diff --git a/.istanbul.yml b/.istanbul.yml deleted file mode 100644 index bf88417..0000000 --- a/.istanbul.yml +++ /dev/null @@ -1,30 +0,0 @@ -verbose: false -instrumentation: - root: . - include-all-sources: true - excludes: ['spec/**', 'doc/build/**', 'jsdoc_build/**'] - default-excludes: true -reporting: - print: detail - reports: - - lcov - - html - dir: ./cover - watermarks: - statements: [80, 100] - lines: [80, 100] - functions: [80, 100] - branches: [80, 100] -check: - global: - statements: 100 - lines: 100 - branches: 100 - functions: 100 - excludes: [] - each: - statements: 100 - lines: 100 - branches: 100 - functions: 100 - excludes: [] diff --git a/.nsprc b/.nsprc deleted file mode 100644 index e69de29..0000000 diff --git a/.yo-rc.json b/.yo-rc.json deleted file mode 100644 index e3ad1e8..0000000 --- a/.yo-rc.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "generator-openstack": { - "srcDir": "./generators", - "distDir": "./dist", - "testDir": "./spec", - "engine": "node", - "language": "es5" - } -} \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index dd5b3a5..0000000 --- a/LICENSE +++ /dev/null @@ -1,174 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/README.md b/README.md index 84d8ab0..d98af48 100644 --- a/README.md +++ b/README.md @@ -1,53 +1,10 @@ -# generator-openstack +This project is no longer maintained. -`generator-openstack` is OpenStack's JavaScript project templating and maintenance engine. It permits you to: +The contents of this repository are still available in the Git +source code management system. To see the contents of this +repository before it reached its end of life, please check out the +previous commit with "git checkout HEAD^1". -1. ...create a new OpenStack JavaScript project. -2. ...update an existing project with new settings, requirements, and tools. - -## Quick Start - -Creating and updating a project follows the exact same steps: - -1. Prerequisites: `nodejs`, `npm` -2. `npm install -g yo generator-openstack` -3. `cd my_project_directory` -4. `yo openstack` - -The generator also provides a non-interactive mode: `yo openstack --non-interactive` - -## Contributing - -This project uses itself as a code management tool. In order to set up your environment for development, please follow these steps: - -1. Prerequisites: `nodejs`, `npm`, `git`, `git review` -2. `npm install -g yo` -3. `git clone git://git.openstack.org/openstack/js-generator-openstack` -4. `cd js-generator-openstack` -5. `npm install` -8. `git review -s` - -This should set up your project directory and make it ready for development. - -### Some useful development commands - -* `npm link` - Link this project into your global npm runtime. This allows you to run the project (via `yo openstack`) as if it was installed via `npm install -g` -* `npm test` - Run all the tests. -* `npm run lint` - Perform a linting check. - -## TODO List - -Looking for something to add? Please check [StoryBoard](https://storyboard.openstack.org/#!/project/842) - -## Project Resources - - - [Source code](https://git.openstack.org/cgit/openstack/js-generator-openstack) - - [Code review](https://review.openstack.org/#/admin/projects/openstack-infra/js-generator-openstack) - - [Task tracking (StoryBoard)](https://storyboard.openstack.org/#!/project/842) - - Discussion on [openstack develop mailing list](http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev) with tag `[javascript]` - - IRC: `#openstack-javascript` on freenode.net - -## Workflow - - - [How to contribute to OpenStack](http://docs.openstack.org/infra/manual/developers.html) - - [Code reviews workflow](http://docs.openstack.org/infra/manual/developers.html#development-workflow) +For any further questions, please email +openstack-dev@lists.openstack.org or join #openstack-dev on +Freenode. diff --git a/bindep.txt b/bindep.txt deleted file mode 100644 index 18e27eb..0000000 --- a/bindep.txt +++ /dev/null @@ -1,43 +0,0 @@ -# This is a cross-platform list tracking distribution packages needed by tests; -# see http://docs.openstack.org/infra/bindep/ for additional information. - -apt-transport-https -lsb-release -ant -build-essential [platform:dpkg] -chromium-browser -curl -cyrus-sasl-devel [platform:rpm] -dbus -firefox [!platform:debian] -gawk -iceweasel [platform:debian] -language-pack-en [platform:ubuntu] -libcurl-devel [platform:rpm] -libcurl4-gnutls-dev [platform:dpkg] -libffi-dev [platform:dpkg] -libffi-devel [platform:rpm] -libjpeg-dev [platform:dpkg] -libjpeg-turbo-devel [platform:rpm] -libldap2-dev [platform:dpkg] -libsasl2-dev [platform:dpkg] -libselinux-python [platform:rpm] -libuuid-devel [platform:rpm] -locales [platform:debian] -pkg-config [platform:dpkg] -pkgconfig [platform:rpm] -python-dev [platform:dpkg] -python-devel [platform:rpm] -python-libvirt [platform:dpkg] -python-lxml -python-sphinx [platform:dpkg] -python-oslosphinx [platform:dpkg] -python3-all-dev [platform:ubuntu-trusty] -python3-dev [platform:dpkg] -python3-devel [platform:fedora] -python3.4 [platform:ubuntu-trusty] -python34-devel [platform:centos] -unzip -uuid-dev [platform:dpkg] -xorg-x11-server-Xvfb [platform:rpm] -xvfb [platform:dpkg] diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 95819d1..0000000 --- a/doc/Makefile +++ /dev/null @@ -1,227 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build -VENVDIR = .venv - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " epub3 to make an epub3" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - @echo " dummy to check syntax errors of document sources" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/generator-openstack.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/generator-openstack.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/generator-openstack" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/generator-openstack" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: epub3 -epub3: - $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 - @echo - @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." - -.PHONY: dummy -dummy: - $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy - @echo - @echo "Build finished. Dummy builder generates no files." diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100644 index ec53421..0000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import datetime -import os -import sys - -sys.path.insert(0, os.path.abspath('../..')) -# -- General configuration ---------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [ - 'sphinx.ext.autodoc', - 'oslosphinx' -] - -exclude_patterns = [ - 'template.rst', -] - -# Optionally allow the use of sphinxcontrib.spelling to verify the -# spelling of the documents. -try: - import sphinxcontrib.spelling - extensions.append('sphinxcontrib.spelling') -except ImportError: - pass - -# autodoc generation is a bit aggressive and a nuisance when doing heavy -# text edit cycles. -# execute "export SPHINX_DEBUG=1" in your terminal to disable - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'js-generator-openstack' -copyright = u'%s, OpenStack Foundation' % datetime.date.today().year - -# If true, '()' will be appended to :func: etc. cross-reference text. -add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -add_module_names = True - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# -- Options for HTML output -------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. Major themes that come with -# Sphinx are currently 'default' and 'sphinxdoc'. -# html_theme_path = ["."] -# html_theme = '_theme' -# html_static_path = ['static'] - -# Output file base name for HTML help builder. -htmlhelp_basename = '%sdoc' % project - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass -# [howto/manual]). -latex_documents = [ - ('index', - '%s.tex' % project, - u'%s Documentation' % project, - u'OpenStack Foundation', 'manual'), -] - -# Example configuration for intersphinx: refer to the Python standard library. -#intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/doc/source/development_guide.rst b/doc/source/development_guide.rst deleted file mode 100644 index a862f80..0000000 --- a/doc/source/development_guide.rst +++ /dev/null @@ -1,55 +0,0 @@ -================= -Development Guide -================= - -If you would like to contribute to the development of this project, -you must follow the steps on this page: - - http://docs.openstack.org/infra/manual/developers.html - -If you already have a good understanding of how the system works and your -OpenStack accounts are set up, you can skip to the development workflow section -of this documentation to learn how changes to OpenStack should be submitted for -review via the Gerrit tool: - - http://docs.openstack.org/infra/manual/developers.html#development-workflow - -Install Prerequisites -===================== - -.. code:: bash - - # Instructions for Ubuntu - - sudo apt-get install nodejs nodejs-legacy npm git git-review pip - - pip install Sphinx oslosphinx - - npm install -g yo - - -Bootstrap the Project -===================== - -.. code:: bash - - # Clone the repository. - git clone git://git.openstack.org/openstack/js-generator-openstack - cd js-generator-openstack - - # Install project dependencies - npm install - - # Initialize Gerrit - git review -s - -This should set up your project directory and make it ready for development. - -Useful Commands for Development -=============================== - -* ``npm link`` - Link this project into your global npm runtime. This allows you to run the project - (via ``yo openstack``) as if it was installed via ``npm install -g`` -* ``npm test`` - Run all the tests. -* ``npm run lint`` - Perform a linting check. -* ``npm run doc`` - Build this documentation (requires Sphinx and oslosphinx) diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index 601ee3d..0000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,52 +0,0 @@ -========================== -OpenStack Yeoman Generator -========================== - -Welcome to the documentation for the OpenStack Yeoman Project Generator. This project -allows you to create a new OpenStack JavaScript project, and update an existing project -with new settings, dependencies, and tools. - -Quickstart -========== - -If you'd just like to create a new project, you can do so quickly and easily with the following -steps: - -.. code:: bash - - npm install -g yo generator-openstack - - cd my_project_directory - - yo openstack - -From here, you'll be asked a few basic questions about your new project, and once completed, your -project will be ready to go! - -Contributing -============ - -There are several quick and easy ways that you can contribute to this project: - -1. File Bugs on StoryBoard_. -2. Chat on IRC in `#openstack-javascript`_. -3. Review code on gerrit_. - -If you'd like to contribute code, and for more information on project tooling, conventions, and -setup, please see our :doc:`./development_guide`. - -Topics -====== - -.. toctree:: - :maxdepth: 2 - - development_guide - specs - reference_documentation - - -.. _StoryBoard: https://storyboard.openstack.org/#!/project/842 -.. _gerrit: https://review.openstack.org/#/q/status:open+AND+project:openstack/js-generator-openstack,n,z -.. _#openstack-javascript: http://webchat.freenode.net/?channels=openstack-javascript -.. _Community Code of Conduct: https://www.openstack.org/legal/community-code-of-conduct/ diff --git a/doc/source/reference_documentation.rst b/doc/source/reference_documentation.rst deleted file mode 100644 index 23bd27d..0000000 --- a/doc/source/reference_documentation.rst +++ /dev/null @@ -1,12 +0,0 @@ -======================= -Reference Documentation -======================= - -Below you will find reference documentation for individual components of the generator. For -detailed, method-specific documentation, select the appropriate method below. - -.. toctree:: - :maxdepth: 2 - :glob: - - jsdoc/module-* diff --git a/doc/source/specs.rst b/doc/source/specs.rst deleted file mode 100644 index 79478f1..0000000 --- a/doc/source/specs.rst +++ /dev/null @@ -1,44 +0,0 @@ -===================== -Design Specifications -===================== - -Priority Specifications -======================= - -This is a list of approved design specifications, which are considered -high-priority for this project. It is very likely that work is already in -progress, however contributions and reviews are always welcome. - -.. If you add additional projects to this list, please update the gerrit - query block. - -.. toctree:: - :maxdepth: 1 - - -Gerrit query for all changes related to priority efforts:: - - status:open AND project:openstack/js-generator-openstack - -https://review.openstack.org/#/q/status:open+AND+project:openstack/js-generator-openstack,n,z - -Approved Specifications -======================= - -These are specifications that have been approved; work may or may not -have started on these. Reviewers will review related changes as time -permits. - -.. toctree:: - :glob: - :maxdepth: 1 - - -Implemented Specifications -========================== - -These specifications have already been implemented and are listed here -for historical purposes. - -.. toctree:: - :maxdepth: 1 diff --git a/doc/source/specs/template.rst b/doc/source/specs/template.rst deleted file mode 100644 index c1e63c2..0000000 --- a/doc/source/specs/template.rst +++ /dev/null @@ -1,107 +0,0 @@ -:: - - Copyright <--UPDATE THESE - - This work is licensed under a Creative Commons Attribution 3.0 - Unported License. - http://creativecommons.org/licenses/by/3.0/legalcode - -.. - This template should be in ReSTructured text. Please do not delete - any of the sections in this template. If you have nothing to say - for a whole section, just write: "None". For help with syntax, see - http://sphinx-doc.org/rest.html To test out your formatting, see - http://www.tele3.cz/jbar/rest/rest.html - -=============================== -The Title of Your Specification -=============================== - -Include the URL of your StoryBoard story: - -https://storyboard.openstack.org/... - -Introduction paragraph -- why are we doing anything? - -Problem Description -=================== - -A detailed description of the problem. - -Proposed Change -=============== - -Here is where you cover the change you propose to make in detail. How do you -propose to solve this problem? - -If this is one part of a larger effort make it clear where this piece ends. In -other words, what's the scope of this effort? - -Alternatives ------------- - -This is an optional section, where it does apply we'd just like a demonstration -that some thought has been put into why the proposed approach is the best one. - -Implementation -============== - -Assignee(s) ------------ - -Who is leading the writing of the code? Or is this a blueprint where you're -throwing it out there to see who picks it up? - -If more than one person is working on the implementation, please designate the -primary author and contact. - -Primary assignee: - - -Can optionally list additional ids if they intend on doing substantial -implementation work on this blueprint. - -Gerrit Topic ------------- - -Use Gerrit topic "" for all patches related to this spec. - -.. code-block:: bash - - git-review -t - -Work Items ----------- - -Work items or tasks -- break the feature up into the things that need to be -done to implement it. Those parts might end up being done by different people, -but we're mostly trying to understand the timeline for implementation. - -Documentation -------------- - -Will this require a documentation change? If so, which documents? -Will it impact developer workflow? Will additional communication need -to be made? - -Security --------- - -Does this introduce any additional security risks, or are there -security-related considerations which should be discussed? - -Testing -------- - -What tests will be available or need to be constructed in order to -validate this? Unit/functional tests, development -environments/servers, etc. - -Dependencies -============ - -- Include specific references to specs and/or stories in storyboard, or in - other projects, that this one either depends on or is related to. - -- Does this feature require any new library or program dependencies - not already in use? diff --git a/generators/app/index.js b/generators/app/index.js deleted file mode 100644 index 87170a2..0000000 --- a/generators/app/index.js +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var yeoman = require('yeoman-generator'); -var projectBuilder = require('./lib/project_builder'); -var Q = require('q'); - -var pkg = require('./lib/component/pkg'); -var gerrit = require('./lib/component/gerrit'); -var editorconfig = require('./lib/component/editorconfig'); -var license = require('./lib/component/license'); -var structure = require('./lib/component/structure'); -var eslint = require('./lib/component/eslint'); -var gitignore = require('./lib/component/gitignore'); -var nsp = require('./lib/component/nsp'); - -module.exports = yeoman.Base.extend({ - - constructor: function () { - yeoman.Base.apply(this, arguments); - - // Add support for a `--non-interactive` flag - this.option('non-interactive'); - - // If non-interactive is set, force-override all files. - this.conflicter.force = this.options['non-interactive']; - }, - - initializing: function () { - var done = this.async(); - - // Initialize components. - Q(this) - .then(pkg.init) // Package.json - .then(gerrit.init) // Gerrit - .then(editorconfig.init) // Editorconfig - .then(license.init) // Licensing - .then(structure.init) // Project Structure - .then(eslint.init) // Linting - .then(gitignore.init) // Gitignore - .then(nsp.init) // NSP - .then(function () { - done(); - }); - }, - - prompting: function () { - var done = this.async(); - - // Prompt components. - Q(this) - .then(pkg.prompt) // Package.json - .then(gerrit.prompt) // Gerrit - .then(editorconfig.prompt) // Editorconfig - .then(license.prompt) // Licensing - .then(structure.prompt) // Project Structure - .then(eslint.prompt) // Linting - .then(gitignore.prompt) // Gitignore - .then(nsp.prompt) // NSP - .then(function () { - done(); - }); - }, - - configuring: function () { - var done = this.async(); - - // Configure components. - Q(this) - .then(pkg.configure) // Package.json - .then(gerrit.configure) // Gerrit - .then(editorconfig.configure) // Editorconfig - .then(license.configure) // Licensing - .then(structure.configure) // Project Structure - .then(eslint.configure) // Linting - .then(gitignore.configure) // Gitignore - .then(nsp.configure) // NSP - .then(function () { - done(); - }); - }, - - writing: function () { - var self = this; - var config = self.config.getAll(); - var included = projectBuilder.getIncludedFiles(); - var excluded = projectBuilder.getExcludedFiles(); - - // Write out all files included in the project builder. - included.forEach(function (fileRef) { - if (fileRef.hasOwnProperty('content')) { - var content = typeof fileRef.content === 'function' - ? "" + fileRef.content() - : "" + fileRef.content; - self.fs.write(fileRef.to, content); - } else { - self.fs.copyTpl( - self.templatePath(fileRef.from), - self.destinationPath(fileRef.to), - config - ); - } - }); - - // Delete all files explicitly excluded in the project builder. - excluded.forEach(function (path) { - self.fs.delete(self.destinationPath(path)); - }); - }, - - install: function () { - this.npmInstall(); - } -}); diff --git a/generators/app/lib/component/editorconfig.js b/generators/app/lib/component/editorconfig.js deleted file mode 100644 index 9ed27c0..0000000 --- a/generators/app/lib/component/editorconfig.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * editorconfig module - * @module - */ - -'use strict'; - -var projectBuilder = require('../project_builder'); - -/** - * No-op placeholder method, for handlers we don't need. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function noop (generator) { - return generator; -} - -/** - * Configure the project by adding required files. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - projectBuilder.addFile('.editorconfig'); - return generator; -} - -module.exports = { - /** @see {@link module:component/editorconfig~noop} */ - init: noop, - /** @see {@link module:component/editorconfig~noop} */ - prompt: noop, - /** @see {@link module:component/editorconfig~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/eslint.js b/generators/app/lib/component/eslint.js deleted file mode 100644 index f7c0eac..0000000 --- a/generators/app/lib/component/eslint.js +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * eslint module - * @module - */ - -'use strict'; - -var pkgBuilder = require('../pkg_builder'); -var projectBuilder = require('../project_builder'); -var yaml = require('js-yaml'); - -var excludedPaths = []; -var ignoreFile = '.eslintignore'; -var rcFile = '.eslintrc'; -var rcContent = {extends: 'openstack'}; - -/** - * This method configures the package builder with all options necessary to support eslint. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function prompt (generator) { - // At this time, we don't actually need to prompt the user. - - // Add the dependencies. - pkgBuilder.addDependencies(['eslint', 'eslint-config-openstack'], 'devDependencies'); - pkgBuilder.addCommand('lint', 'eslint ./'); - - return generator; -} - -/** - * Read the existing .eslintrc and .eslintignore files, and populate our initial configuration - * with them. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function init (generator) { - var fs = generator.fs; - - // Re-initialize excluded paths. - excludedPaths = []; - - // Read .eslintignore. - if (fs.exists(ignoreFile)) { - var paths = fs.read(ignoreFile) - .split('\n') - .filter(function (item) { - // Remove empty lines. - return item.length > 0; - }); - - paths.forEach(function (item) { - excludedPaths.push(item); - }); - } - - // Read .eslintrc - if (fs.exists(rcFile)) { - rcContent = yaml.safeLoad(fs.read(rcFile)); - } - - return generator; -} - -/** - * Configure the project by adding required files. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - if (buildIgnore().length === 0) { - projectBuilder.removeFile('.eslintignore'); - } else { - projectBuilder.writeFile('.eslintignore', buildIgnore); - } - projectBuilder.writeFile('.eslintrc', buildRc); - - return generator; -} - -/** - * Generate the content of our .eslintignore file from the configured list of excluded paths, - * as well as any project-level configured ignoreFiles. - * - * @returns {string} The content of the .eslintignore file. - */ -function buildIgnore () { - var ignoredFiles = projectBuilder.getIgnoredFiles(); - ignoredFiles.forEach(function (item) { - if (excludedPaths.indexOf(item) === -1) { - excludedPaths.push(item); - } - }); - - return excludedPaths.sort().join('\n'); -} - -/** - * Generate the content of our .eslintrc file from the current configuration. - * - * @returns {string} The content of the .eslintrc file. - */ -function buildRc () { - return yaml.safeDump(rcContent); -} - -module.exports = { - /** @see {@link module:component/eslint~init} */ - init: init, - /** @see {@link module:component/eslint~prompt} */ - prompt: prompt, - /** @see {@link module:component/eslint~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/gerrit.js b/generators/app/lib/component/gerrit.js deleted file mode 100644 index 5cc26b6..0000000 --- a/generators/app/lib/component/gerrit.js +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * gerrit module - * @module - */ - -'use strict'; - -var projectBuilder = require('../project_builder'); -var pkgBuilder = require('../pkg_builder'); -var ini = require('ini'); -var Q = require('q'); - -var gerritFile = '.gitreview'; -var iniContent; -var gerritFileExists = false; - -/** - * Internal helper method. Returns true if gerrit has been enabled. - * - * @param {String} answers The collection of answers. - * @returns {Function} True if enableGerrit is set, otherwise false. - */ -var gerritEnabled = function(answers) { - return !!answers.enableGerrit; -}; - -/** - * Initialize the gerrit component of this generator. In this case, we're - * only adding default configuration values. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function init (generator) { - // Define our defaults - iniContent = { - gerrit: { - host: 'review.openstack.org', - port: '29418', - project: 'openstack/test-project.git' - } - }; - return generator; -} - -/** - * Initialize the gerrit component of this generator. In this case, we're - * only adding default configuration values. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function prompt (generator) { - - // Read the existing file and populate it as defaults. - if (generator.fs.exists(gerritFile)) { - gerritFileExists = true; - iniContent = ini.parse(generator.fs.read(gerritFile)); - } else { - // Create project name from package name if gerrit file does not exist - var projectName = pkgBuilder.getValue("name"); - iniContent.gerrit.project = 'openstack/' + projectName + '.git'; - } - - var deferred = Q.defer(); - - if (!generator.options['non-interactive']) { - // Go through the prompts. - generator.prompt( - [{ - type: 'confirm', - name: 'enableGerrit', - message: 'Gerrit- Enable:', - default: gerritFileExists - }, { - when: gerritEnabled, - type: 'input', - name: 'gerritHost', - message: 'Gerrit- Host:', - default: iniContent.gerrit.host - }, { - when: gerritEnabled, - type: 'input', - name: 'gerritPort', - message: 'Gerrit- Port:', - default: iniContent.gerrit.port - }, { - when: gerritEnabled, - type: 'input', - name: 'gerritProject', - message: 'Gerrit- Project Path:', - default: iniContent.gerrit.project - }], - function(answers) { - gerritFileExists = answers.enableGerrit; - iniContent.gerrit = { - host: answers.gerritHost, - port: answers.gerritPort, - project: answers.gerritProject - }; - deferred.resolve(generator); - }); - } else { - deferred.resolve(generator); - } - return deferred.promise; -} - -/** - * Configure gerrit - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - if (gerritFileExists) { - projectBuilder.writeFile(gerritFile, buildGerritFile); - } else { - projectBuilder.removeFile(gerritFile); - } - - return generator; -} - -function buildGerritFile () { - return ini.stringify(iniContent); -} - -module.exports = { - /** @see {@link module:component/gerrit~init} */ - init: init, - /** @see {@link module:component/gerrit~prompt} */ - prompt: prompt, - /** @see {@link module:component/gerrit~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/gitignore.js b/generators/app/lib/component/gitignore.js deleted file mode 100644 index 0c9953a..0000000 --- a/generators/app/lib/component/gitignore.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * gitignore module - * @module - */ - -'use strict'; - -var projectBuilder = require('../project_builder'); - -var excludedPaths = {}; -var filePath = '.gitignore'; - -/** - * No-op placeholder method, for handlers we don't need. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function noop (generator) { - return generator; -} - -/** - * Read the existing .gitignore file, and populate our current list of ignores. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function init (generator) { - var fs = generator.fs; - - // Reinitialize the ignore map. - excludedPaths = {}; - - // Read .gitignore. - if (fs.exists(filePath)) { - fs.read(filePath) - // Split into lines - .split('\n') - // Remove empty lines and comments. - .filter(function (item) { - return item.length > 0 && !item.match(/\s*#/); - }) - // Add to our list. - .map(function (line) { - excludedPaths[line] = true; - }); - } - - return generator; -} - -/** - * Generate the .gitignore file from the data we've imported. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - var ignoreContent = buildGitignore(); - if (ignoreContent.length === 0) { - // Delete the file if there's nothing to ignore. - projectBuilder.removeFile(filePath); - } else { - projectBuilder.writeFile(filePath, buildGitignore); - } - - return generator; -} - -/** - * Generate the content of our .gitignore file from the configured list of excluded paths, - * as well as any project-level configured ignoreFiles. - * - * @returns {string} The content of the .eslintignore file. - */ -function buildGitignore () { - var ignoredFiles = projectBuilder.getIgnoredFiles(); - for (var i = 0; i < ignoredFiles.length; i++) { - if (!excludedPaths.hasOwnProperty(ignoredFiles[i])) { - excludedPaths[ignoredFiles[i]] = true; - } - } - - return Object.keys(excludedPaths).sort().join('\n'); -} - -module.exports = { - /** @see {@link module:component/gitignore~init} */ - init: init, - /** @see {@link module:component/gitignore~noop} */ - prompt: noop, - /** @see {@link module:component/gitignore~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/license.js b/generators/app/lib/component/license.js deleted file mode 100644 index 79fedb7..0000000 --- a/generators/app/lib/component/license.js +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * licence module - * @module - */ - -'use strict'; - -var projectBuilder = require('../project_builder'); -var pkgBuilder = require('../pkg_builder'); - -/** - * No-op placeholder method, for handlers we don't need. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function noop (generator) { - return generator; -} - -/** - * Configure the project by adding required files. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - projectBuilder.addFile('LICENSE'); - pkgBuilder.setValues({license: 'Apache-2.0'}); - - return generator; -} - -module.exports = { - /** @see {@link module:component/license~noop} */ - init: noop, - /** @see {@link module:component/license~noop} */ - prompt: noop, - /** @see {@link module:component/license~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/nsp.js b/generators/app/lib/component/nsp.js deleted file mode 100644 index 7543b14..0000000 --- a/generators/app/lib/component/nsp.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * This module adds the Node Security commandline tool (nsp) to the project. - * Its job is to identify known vulnerabilities by scanning the projects - * source and dependencies. - * @module - */ - -'use strict'; - -var projectBuilder = require('../project_builder'); -var pkgBuilder = require('../pkg_builder'); - -/** - * No-op placeholder method, for handlers we don't need. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function noop (generator) { - return generator; -} - -/** - * This method configures the package builder with all options necessary - * to run nsp. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function prompt (generator) { - // At this time, we don't actually need to prompt the user. - - // Add the dependencies. - pkgBuilder.addDependencies(['nsp'], 'devDependencies'); - pkgBuilder.addCommand('prepublish', 'nsp check'); - - return generator; -} - -/** - * Configure the project by adding required files. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - projectBuilder.addFile('.nsprc'); - return generator; -} - -module.exports = { - /** @see {@link module:component/nsp~noop} */ - init: noop, - /** @see {@link module:component/nsp~prompt} */ - prompt: prompt, - /** @see {@link module:component/nsp~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/pkg.js b/generators/app/lib/component/pkg.js deleted file mode 100644 index fbee8ca..0000000 --- a/generators/app/lib/component/pkg.js +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * package module - * @module - */ - -'use strict'; - -var Q = require('q'); -var hyphenize = require('hyphenize'); -var pkgBuilder = require('../pkg_builder'); -var projectBuilder = require('../project_builder'); - -var packagePath = 'package.json'; - -/** - * Iterate over needed package components, ensuring that required - * parameters are set. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function prompt (generator) { - var deferred = Q.defer(); - - if (!generator.options['non-interactive']) { - generator.prompt( - [{ - type: 'input', - name: 'name', - message: 'Project- Name:', - default: pkgBuilder.getValue('name', hyphenize(generator.appname)) - }, { - type: 'input', - name: 'description', - message: 'Project- Description:', - default: pkgBuilder.getValue('description') - }, { - type: 'input', - name: 'version', - message: 'Project- Version:', - default: pkgBuilder.getValue('version', '0.0.1') - }, { - type: 'input', - name: 'homepage', - message: 'Project- Homepage:', - default: pkgBuilder.getValue('homepage', 'http://www.openstack.org/') - }, { - type: 'input', - name: 'author', - message: 'Project- Author:', - default: pkgBuilder.getValue('author', - 'OpenStack (http://www.openstack.org/)') - }], - function (answers) { - pkgBuilder.setValues(answers); - deferred.resolve(generator); - }); - } else { - deferred.resolve(generator); - } - - return deferred.promise; -} - -/** - * Read any existing package.json file, to set our defaults. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function init (generator) { - var fs = generator.fs; - - // Read package.json - if (fs.exists(packagePath)) { - pkgBuilder.fromJSON(fs.read(packagePath)); - } - - // Add files that should be ignored overall. - projectBuilder.ignoreFile('node_modules'); - // NPM execution failures. - projectBuilder.ignoreFile('npm-debug.log'); - // If you unzip something generated by npm pack, this is the directory it ends up in. - projectBuilder.ignoreFile('package'); - // Local .npm cache - projectBuilder.ignoreFile('.npm'); - - var devDeps = ['istanbul', 'jasmine']; - - pkgBuilder.addDependencies(devDeps, 'devDependencies'); - - return generator; -} - -/** - * Configure the project by adding required files. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - projectBuilder.writeFile('package.json', pkgBuilder.toJSON); - return generator; -} - -module.exports = { - /** @see {@link module:component/pkg~init} */ - init: init, - /** @see {@link module:component/pkg~prompt} */ - prompt: prompt, - /** @see {@link module:component/pkg~configure} */ - configure: configure -}; diff --git a/generators/app/lib/component/structure.js b/generators/app/lib/component/structure.js deleted file mode 100644 index 927d81f..0000000 --- a/generators/app/lib/component/structure.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * This generator module handles questions regarding the project's structure, - * such as engine, common output directories, and language level. It informs - * other generators, such as test framework generation, packaging tools, - * and/or configuration files. - * @module - */ - -'use strict'; - -var Q = require('q'); -var projectBuilder = require('../project_builder'); - -/** - * Initialize the component by setting configuration defaults. These, or previously set - * versions, will be accessible immediately, however it's good practice not to access them - * until after the prompting phase, as we cannot guarantee that they will be properly set. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function init (generator) { - - // Set our defaults: - generator.config.defaults({ - engine: 'browser', - language: 'es5', - srcDir: './src', - distDir: './dist', - testDir: './test' - }); - - return generator; -} - -/** - * If applicable, prompt the user for a project type. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function prompt (generator) { - var deferred = Q.defer(); - - // We default to a node.js project. - if (!generator.options['non-interactive']) { - // Go through the prompts. - generator.prompt( - [{ - type: 'list', - name: 'engine', - message: 'Structure- Runtime Engine:', - choices: [ - { - name: 'Browser', - value: 'browser' - }, - { - name: 'Node.js', - value: 'node' - } - ], - default: generator.config.get('engine') - }, { - type: 'list', - name: 'language', - message: 'Structure- Language:', - choices: [ - { - name: 'ECMAScript 5', - value: 'es5' - }, - { - name: 'ECMAScript 6', - value: 'es6' - } - ], - default: generator.config.get('language') - }, { - type: 'input', - name: 'srcDir', - message: 'Structure- Source Directory:', - default: generator.config.get('srcDir') - }, { - type: 'input', - name: 'testDir', - message: 'Structure- Test Directory:', - default: generator.config.get('testDir') - }, { - type: 'input', - name: 'distDir', - message: 'Structure- Dist Directory:', - default: generator.config.get('distDir'), - when: function (answers) { - return answers.engine === 'browser'; - } - }], - function (answers) { - generator.config.set(answers); - deferred.resolve(generator); - }); - } else { - deferred.resolve(generator); - } - return deferred.promise; -} - -/** - * Add any output directories to the ignore files. - * - * @param {generator} generator The currently active generator. - * @returns {generator} The passed generator, for promise chaining. - */ -function configure (generator) { - projectBuilder.ignoreFile(generator.config.get('distDir')); - return generator; -} - -module.exports = { - /** @see {@link module:structure~init} */ - init: init, - /** @see {@link module:structure~prompt} */ - prompt: prompt, - /** @see {@link module:structure~configure} */ - configure: configure -}; diff --git a/generators/app/lib/global_dependencies.js b/generators/app/lib/global_dependencies.js deleted file mode 100644 index 2f68575..0000000 --- a/generators/app/lib/global_dependencies.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ -/** - * Access to the global-dependencies.json file. - */ - -/** - * Global dependency module - * @module - */ - -'use strict'; - -var globalDependencies = require('../../../global-dependencies.json'); - -/** - * Returns whether a dependency is in the global-dependencies list. - * - * @param {String} name The name of the dependency. - * @returns {Boolean} True if the dependency exists, otherwise false. - */ -function contains (name) { - return globalDependencies.hasOwnProperty(name); -} - -/** - * Return the current acceptable version of the dependencies, or null. - * - * @param {String} name The dependency name. - * @returns {String|undefined} The version, or undefined. - */ -function read (name) { - return globalDependencies[name] || undefined; -} - -/** - * Given a list of dependencies, updates this list of dependencies to the versions that are - * currently set in global-dependencies. - * - * @param {{}} dependencies The list of dependencies. - * @returns {{}} The above list of dependencies, with only the appropriate versions updated. - */ -function synchronize (dependencies) { - var results = {}; - for (var key in dependencies) { - if (globalDependencies.hasOwnProperty(key)) { - results[key] = globalDependencies[key]; - } else { - results[key] = dependencies[key]; - } - } - return results; -} - -module.exports = { - /** @see {@link module:global_dependencies~contains} */ - contains: contains, - /** @see {@link module:global_dependencies~read} */ - read: read, - /** @see {@link module:global_dependencies~synchronize} */ - synchronize: synchronize -}; diff --git a/generators/app/lib/pkg_builder.js b/generators/app/lib/pkg_builder.js deleted file mode 100644 index c2483aa..0000000 --- a/generators/app/lib/pkg_builder.js +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * Package builder module - * @module - */ - -'use strict'; - -var dependencies = require('./global_dependencies'); -var pkgContent = {}; - -/** - * Convert a package.json formatted list of dependencies and update them to the versions - * listed in our global dependencies. - * - * @param {{}} dependencyMap The map of dependencies. - * @returns {{}} A clone of the map, updated with current common versions. - */ -function synchronizeDependencies (dependencyMap) { - if (!dependencyMap) { - return undefined; - } - - // Cloning not necessary, handled in dependencies.synchronize(); - return dependencies.synchronize(dependencyMap); -} - -/** - * Initialize this builder from a JSON string. - * - * @param {String} pkgString The package string content. - * @returns {void} - */ -function fromJSON (pkgString) { - pkgContent = JSON.parse(pkgString); -} - -/** - * Write the package content to a JSON string. - * - * @returns {String} The JSON content of the package, as a string. - */ -function toJSON () { - // Clone the package content so we don't destroy what's in memory... - var newContent = JSON.parse(JSON.stringify(pkgContent)); - - // Synchronize all the dependencies. - newContent.peerDependencies = synchronizeDependencies(newContent.peerDependencies); - newContent.dependencies = synchronizeDependencies(newContent.dependencies); - newContent.devDependencies = synchronizeDependencies(newContent.devDependencies); - return JSON.stringify(newContent, null, 2); -} - -/** - * Add libraries to the package dependencies. - * - * @param {Array|String} libraryNames A list of all libraries to add to the dependencies. - * @param {String} type The type of dependency. - * @returns {void} - */ -function addDependencies (libraryNames, type) { - // Default the type. - type = type || 'dependencies'; - - // Valuecheck type. - if (['devDependencies', 'peerDependencies', 'dependencies'].indexOf(type) === -1) { - return; - } - - // Default the array. - if (!Array.isArray(libraryNames)) { - libraryNames = [libraryNames]; - } - - // Make sure the property exists. - if (!pkgContent.hasOwnProperty(type)) { - pkgContent[type] = {}; - } - - // Add the dependency - libraryNames.forEach(function (library) { - var version = dependencies.read(library); - if (version && !pkgContent[type].hasOwnProperty(library)) { - pkgContent[type][library] = version; - } - }); -} - -/** - * Set values on the current package. - * - * @param {{}} values A map of values. - * @returns {void} - */ -function setValues (values) { - for (var key in values) { - // Filter out things from prototype. - if (values.hasOwnProperty(key)) { - pkgContent[key] = values[key]; - } - } -} - -/** - * Get the values of the current package. - * - * @returns {{}} A cloned map of the values. - */ -function getValues () { - return JSON.parse(JSON.stringify(pkgContent)); -} - -/** - * Get a specific value from the package.json file, or a default if the - * value is not set. - * - * @param {String} name The name of the value. - * @param {String} defaultValue A default value to return. - * @returns {{}} A clone of the referenced value. - */ -function getValue (name, defaultValue) { - if (pkgContent.hasOwnProperty(name)) { - return JSON.parse(JSON.stringify(pkgContent[name])); - } - return defaultValue || undefined; -} - -/** - * Create a specific NPM script command, invoked by 'npm run ' or 'npm '. - * - * @param {String} name The name of the script. - * @param {String} command The command to invoke. - * @returns {void} - */ -function addCommand (name, command) { - - // sanity check, does 'scripts' exist? - if (!pkgContent.hasOwnProperty('scripts')) { - pkgContent.scripts = {}; - } - - // Save/Override the command. - pkgContent.scripts[name] = command; -} - -module.exports = { - /** @see {@link module:pkg_builder~fromJSON} */ - fromJSON: fromJSON, - /** @see {@link module:pkg_builder~toJSON} */ - toJSON: toJSON, - /** @see {@link module:pkg_builder~setValues} */ - setValues: setValues, - /** @see {@link module:pkg_builder~getValues} */ - getValues: getValues, - /** @see {@link module:pkg_builder~getValue} */ - getValue: getValue, - /** @see {@link module:pkg_builder~addDependencies} */ - addDependencies: addDependencies, - /** @see {@link module:pkg_builder~addCommand} */ - addCommand: addCommand -}; diff --git a/generators/app/lib/project_builder.js b/generators/app/lib/project_builder.js deleted file mode 100644 index 941a63a..0000000 --- a/generators/app/lib/project_builder.js +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/** - * Project builder module - * @module - */ - -'use strict'; - -var includedFiles = []; -var excludedFiles = []; -var ignoredFiles = []; - -/** - * Ensure that a file is removed, or not present, in the project. - * - * @param {String} destinationPath Path to the file, relative to output root. - * @returns {void} - */ -function removeFile (destinationPath) { - excludedFiles.push(destinationPath); -} - -/** - * Flag a file path as 'ignored'. - * - * This does not have a real impact on which files are created/removed from the bootstrapped - * project, however it does permit other modules to retrieve this list and modify their - * behavior accordingly. For example, eslint could use this to generate .eslintignore - * - * @param {String} destinationPath Path to the file, relative to output root. - * @returns {void} - */ -function ignoreFile (destinationPath) { - ignoredFiles.push(destinationPath); -} - -/** - * Add a file to the project. - * - * @param {String} sourcePath Path to the file, relative to ./templates/ - * @param {String} destinationPath Destination path relative to output root. - * @returns {void} - */ -function addFile (sourcePath, destinationPath) { - includedFiles.push({from: sourcePath, to: destinationPath || sourcePath}); -} - -/** - * Write a file to the project. - * - * @param {String} destinationPath The destination for the file. - * @param {String|Function} content A string of content, or method that returns one. - * @returns {void} - */ -function writeFile (destinationPath, content) { - includedFiles.push({to: destinationPath, content: content}); -} - -/** - * Get a list of all files that are to be included. - * - * @returns {Array} A list of all file mappings: {from:, to:} - */ -function getIncludedFiles () { - return includedFiles; -} - -/** - * Get a list of all file paths that should be excluded. - * - * @returns {Array} A list of file paths. - */ -function getExcludedFiles () { - return excludedFiles; -} - -/** - * Get a list of all file paths that should be ignored. - * - * @returns {Array} A list of file paths. - */ -function getIgnoredFiles () { - return ignoredFiles; -} - -/** - * Clear the current configuration. - * - * @returns {void} - */ -function clear () { - includedFiles = []; - excludedFiles = []; - ignoredFiles = []; -} - -module.exports = { - /** @see {@link module:project_builder~addFile} */ - addFile: addFile, - /** @see {@link module:project_builder~writeFile} */ - writeFile: writeFile, - /** @see {@link module:project_builder~removeFile} */ - removeFile: removeFile, - /** @see {@link module:project_builder~ignoreFile} */ - ignoreFile: ignoreFile, - /** @see {@link module:project_builder~getIncludedFiles} */ - getIncludedFiles: getIncludedFiles, - /** @see {@link module:project_builder~getIgnoredFiles} */ - getIgnoredFiles: getIgnoredFiles, - /** @see {@link module:project_builder~getExcludedFiles} */ - getExcludedFiles: getExcludedFiles, - /** @see {@link module:project_builder~clear} */ - clear: clear -}; diff --git a/generators/app/templates/.editorconfig b/generators/app/templates/.editorconfig deleted file mode 100644 index 025b86f..0000000 --- a/generators/app/templates/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = true -charset = utf-8 -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true - -[*.md] -trim_trailing_whitespace = false diff --git a/generators/app/templates/.gitignore b/generators/app/templates/.gitignore deleted file mode 100644 index 2f4488f..0000000 --- a/generators/app/templates/.gitignore +++ /dev/null @@ -1,45 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Test reporting directories used by zuul -cover -reports - -# Project output directories -package -dist -www -build -doc/source/jsdoc -*-compiled.js -*.js.map -*.tgz -.vagrant - -# Dependency directories -node_modules -bower_components - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history - -# Dev Environment Excludes -*.iml -.idea -clouds.yaml - -# OS-specific -.DS_Store diff --git a/generators/app/templates/.nsprc b/generators/app/templates/.nsprc deleted file mode 100644 index e69de29..0000000 diff --git a/generators/app/templates/LICENSE b/generators/app/templates/LICENSE deleted file mode 100644 index dd5b3a5..0000000 --- a/generators/app/templates/LICENSE +++ /dev/null @@ -1,174 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/global-dependencies.json b/global-dependencies.json deleted file mode 100644 index 956d77a..0000000 --- a/global-dependencies.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "ini": "^1.3.4", - "js-yaml": "^3.5.5", - "q": "^1.4.1", - "eslint": "^3", - "eslint-config-openstack": "4", - "istanbul": "^0.4.2", - "jasmine": "^2.4.1", - "karma": "^0.13.22", - "karma-htmlfile-reporter": "^0.2.2", - "nsp": "^2.3.0" -} diff --git a/package.json b/package.json deleted file mode 100644 index a2e10df..0000000 --- a/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "generator-openstack", - "homepage": "http://www.openstack.org/", - "version": "1.2.0", - "description": "Yeoman Project Generator for OpenStack JavaScript Projects", - "main": "index.js", - "scripts": { - "test": "istanbul cover jasmine", - "posttest": "istanbul check-coverage", - "prepublish": "nsp check", - "lint": "eslint ./", - "docs": "npm run jsdoc; (cd doc; make html)", - "jsdoc": "jsdoc -t node_modules/jsdoc-sphinx/template -r -d ./doc/source/jsdoc ./generators/app/lib" - }, - "keywords": [ - "yeoman-generator", - "openstack" - ], - "files": [ - "generators", - "global-dependencies.json" - ], - "author": "OpenStack (http://www.openstack.org/)", - "license": "Apache-2.0", - "dependencies": { - "hyphenize": "0.0.2", - "ini": "^1.3.4", - "js-yaml": "^3.5.5", - "q": "^1.4.1", - "semver": "^5.1.0", - "yeoman-generator": "^0.24.1" - }, - "devDependencies": { - "eslint": "^3.3.1", - "eslint-config-openstack": "^4.0.1", - "istanbul": "^0.4.2", - "jasmine": "^2.4.1", - "jsdoc": "^3.4.0", - "jsdoc-sphinx": "0.0.6", - "karma": "^0.13.22", - "karma-htmlfile-reporter": "^0.2.2", - "mem-fs": "^1.1.2", - "mem-fs-editor": "^2.2.0", - "nsp": "^2.3.0", - "yeoman-assert": "^2.1.2", - "yeoman-test": "^1.1.0" - }, - "repository": "git://git.openstack.org/openstack-infra/js-generator-openstack" -} diff --git a/spec/app/index.js b/spec/app/index.js deleted file mode 100644 index b98e0c6..0000000 --- a/spec/app/index.js +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var path = require('path'); -var assert = require('yeoman-assert'); -var helpers = require('yeoman-test'); - -var generator = path.join(__dirname, '../../generators/app'); -var modules = ['gerrit', 'license', 'editorconfig']; -var projectBuilder = require('../../generators/app/lib/project_builder'); - -describe('generator-openstack:app', function () { - - beforeEach(function () { - projectBuilder.clear(); - }); - - it('should call all module lifecycle prompts', - function (done) { - var spies = []; - modules.forEach(function (name) { - var module = require('../../generators/app/lib/component/' + name); - spies.push(spyOn(module, 'init').and.callThrough()); - spies.push(spyOn(module, 'prompt').and.callThrough()); - spies.push(spyOn(module, 'configure').and.callThrough()); - }); - - helpers.run(generator) - .withArguments(['--non-interactive']) - .on('end', function () { - spies.forEach(function (spy) { - expect(spy.calls.any()).toBeTruthy(); - }); - - done(); - }); - }); - - it('should force overwrite if --non-interactive is set.', - function (done) { - helpers.run(generator) - .withArguments(['--non-interactive']) - .on('ready', function (generator) { - expect(generator.conflicter.force).toBeTruthy(); - }) - .on('end', function () { - done(); - }); - }); - - describe('writing()', function () { - it('should create all files created in the project builder', - function (done) { - helpers.run(generator) - .withArguments(['--non-interactive']) - .on('end', function () { - assert.file(['package.json']); - done(); - }); - }); - - it('should write any files provided to the content builder', - function (done) { - projectBuilder.writeFile('test.json', function () { - return 'foo'; - }); - projectBuilder.writeFile('test_null.json', function () { - // do nothing. - }); - projectBuilder.writeFile('test_empty.json', function () { - return ''; - }); - projectBuilder.writeFile('test_static.json', 'static_content'); - projectBuilder.writeFile('test_undefined.json'); - - helpers.run(generator) - .withArguments(['--non-interactive']) - .on('end', function () { - assert.file(['test.json', 'test_static.json', 'test_empty.json', 'test_null.json', - 'test_undefined.json']); - done(); - }); - }); - - it('should delete all files flagged in the project builder', - function (done) { - projectBuilder.removeFile('test.json'); - - helpers.run(generator) - .withArguments(['--non-interactive']) - .on('end', function () { - assert.noFile(['test.json']); - done(); - }); - }); - }); -}); diff --git a/spec/app/lib/component/editorconfig.js b/spec/app/lib/component/editorconfig.js deleted file mode 100644 index 7c092dc..0000000 --- a/spec/app/lib/component/editorconfig.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var editorconfig = require(libDir + '/component/editorconfig'); -var projectBuilder = require(libDir + '/project_builder'); -var mocks = require('../../../helpers/mocks'); -var mockGenerator; - -describe('generator-openstack:lib/component/editorconfig', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - projectBuilder.clear(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof editorconfig.init).toBe('function'); - expect(typeof editorconfig.prompt).toBe('function'); - expect(typeof editorconfig.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = editorconfig.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should do nothing', - function () { - var spy = spyOn(mockGenerator.config, 'defaults'); - editorconfig.init(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('prompt()', function () { - it('should return a generator', - function () { - var outputGenerator = editorconfig.prompt(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should do nothing', - function () { - var spy = spyOn(mockGenerator, 'prompt'); - editorconfig.prompt(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = editorconfig.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add editorconfig to the project files.', - function () { - editorconfig.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(1); - expect(files[0].from).toBe('.editorconfig'); - expect(files[0].to).toBe('.editorconfig'); - }); - }); -}); diff --git a/spec/app/lib/component/eslint.js b/spec/app/lib/component/eslint.js deleted file mode 100644 index ac636d0..0000000 --- a/spec/app/lib/component/eslint.js +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; -var mockGenerator; -var mockEslintIgnore = ['node_modules', 'bower_components', 'dist']; - -var eslint = require(libDir + '/component/eslint'); -var pkgBuilder = require(libDir + '/pkg_builder'); -var projectBuilder = require(libDir + '/project_builder'); -var mocks = require('../../../helpers/mocks'); -var yaml = require('js-yaml'); - -describe('generator-openstack:lib/component/eslint', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - mockGenerator.fs.write('.eslintignore', mockEslintIgnore.join('\n')); - projectBuilder.clear(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof eslint.init).toBe('function'); - expect(typeof eslint.prompt).toBe('function'); - expect(typeof eslint.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = eslint.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should not interact with config', - function () { - var spy = spyOn(mockGenerator.config, 'defaults'); - eslint.init(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('prompt()', function () { - it('should return a generator', - function () { - var outputGenerator = eslint.prompt(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add eslint and eslint-config-openstack to the project', - function () { - pkgBuilder.fromJSON('{"devDependencies":{}}'); - - var devDeps = pkgBuilder.getValue('devDependencies'); - expect(devDeps.eslint).not.toBeDefined(); - expect(devDeps['eslint-config-openstack']).not.toBeDefined(); - - eslint.prompt(mockGenerator); - - devDeps = pkgBuilder.getValue('devDependencies'); - expect(devDeps.eslint).toBeDefined(); - expect(devDeps['eslint-config-openstack']).toBeDefined(); - }); - - it('should add the lint command to the project', - function () { - pkgBuilder.fromJSON('{}'); - - var scripts = pkgBuilder.getValue('scripts'); - expect(scripts).not.toBeDefined(); - - eslint.prompt(mockGenerator); - - var newScripts = pkgBuilder.getValue('scripts'); - expect(newScripts.lint).toBeDefined(); - expect(newScripts.lint).toEqual('eslint ./'); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = eslint.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add .eslintrc and .eslintignore to the project files.', - function () { - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(2); - expect(files[0].to).toBe('.eslintignore'); - expect(files[1].to).toBe('.eslintrc'); - }); - }); - - describe('.eslintrc management', function () { - var mockEslintRc = { - extends: 'openstack', - plugins: ['angular'] - }; - - it('should write a .eslintrc file as valid .yaml', - function () { - eslint.init(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var eslintRcRef = files[1]; - expect(eslintRcRef.to).toBe('.eslintrc'); - expect(yaml.safeLoad(eslintRcRef.content())) - .toEqual({extends: 'openstack'}); - }); - - it('should echo back existing .eslintrc', - function () { - var yamlContent = yaml.safeDump(mockEslintRc); - mockGenerator.fs.write('.eslintrc', yamlContent); - - eslint.init(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var eslintRcRef = files[1]; - var eslintContent = yaml.safeLoad(eslintRcRef.content()); - expect(mockEslintRc).toEqual(eslintContent); - }); - - it('should convert a json .eslintrc to yaml', - function () { - mockGenerator.fs.write('.eslintrc', JSON.stringify(mockEslintRc)); - - eslint.init(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var eslintRcRef = files[1]; - var eslintContent = yaml.safeLoad(eslintRcRef.content()); - expect(mockEslintRc).toEqual(eslintContent); - }); - }); - - describe('.eslintignore management', function () { - - it('should echo back existing .eslintignore', - function () { - mockGenerator.fs.write('.eslintignore', mockEslintIgnore.join('\n')); - - eslint.init(mockGenerator); - eslint.prompt(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(mockEslintIgnore.length); - - ignoreContent.forEach(function (item) { - expect(mockEslintIgnore.indexOf(item)).not.toBe(-1); - }); - }); - - it('should include any files flagged as ignored in the project builder.', - function () { - mockGenerator.fs.write('.eslintignore', ''); - projectBuilder.ignoreFile('foo/bar.json'); - - eslint.init(mockGenerator); - eslint.prompt(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; // There should only be one file. - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(1); - - expect(ignoreContent[0]).toBe('foo/bar.json'); - }); - - it('should de-duplicate file paths from multiple locations.', - function () { - // include 'node_modules' from both an existing file and from the project builder. - mockGenerator.fs.write('.eslintignore', ['node_modules'].join('\n')); - projectBuilder.ignoreFile('node_modules'); - - eslint.init(mockGenerator); - eslint.prompt(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; // There should only be one file. - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(1); - - expect(ignoreContent[0]).toBe('node_modules'); - }); - - it('should sort the ignored files.', - function () { - mockGenerator.fs.write('.eslintignore', mockEslintIgnore.join('\n')); - - eslint.init(mockGenerator); - eslint.prompt(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent[0]).toBe('bower_components'); - expect(ignoreContent[1]).toBe('dist'); - expect(ignoreContent[2]).toBe('node_modules'); - }); - - it('should remove any whitespace from the existing .eslintignore', - function () { - mockGenerator.fs.write('.eslintignore', ['1_one', '', '2_two', ''].join('\n')); - - eslint.init(mockGenerator); - eslint.prompt(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(2); - expect(ignoreContent[0]).toBe('1_one'); - expect(ignoreContent[1]).toBe('2_two'); - }); - - it('should delete the file if there\'s nothing to ignore', function () { - mockGenerator.fs.write('.eslintignore', ''); - - eslint.init(mockGenerator); - eslint.prompt(mockGenerator); - eslint.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(1); - expect(files[0].to).not.toBe('.eslintignore'); - - var rmFiles = projectBuilder.getExcludedFiles(); - expect(rmFiles.length).toBe(1); - expect(rmFiles[0]).toBe('.eslintignore'); - }); - }); -}); diff --git a/spec/app/lib/component/gerrit.js b/spec/app/lib/component/gerrit.js deleted file mode 100644 index b222109..0000000 --- a/spec/app/lib/component/gerrit.js +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var ini = require('ini'); - -var gerrit = require(libDir + '/component/gerrit'); -var projectBuilder = require(libDir + '/project_builder'); -var pkgBuilder = require(libDir + '/pkg_builder'); -var mocks = require('../../../helpers/mocks'); - -var iniFile = { - gerrit: { - host: 'review.example.org', - port: '1000', - project: 'openstack/test-project.git' - } -}; - -/** - * Assert that the gerrit file content matches the passed structure. - * - * @param {object} content The expected data structure. - * @returns {void} - */ -function expectGerritFileContent (content) { - var files = projectBuilder.getIncludedFiles(); - - // get the .gitreview file - var gitreview = null; - files.forEach(function (fileRef) { - if (fileRef.to === '.gitreview') { - gitreview = ini.parse(fileRef.content()); - } - }); - - // Test the content - expect(gitreview).toBeTruthy(); - expect(gitreview).toEqual(content); -} - -describe('generator-openstack:lib/component/gerrit', function () { - - beforeEach(function () { - projectBuilder.clear(); - }); - - afterEach(function () { - pkgBuilder.fromJSON(JSON.stringify({})); - }); - - describe('api', function () { - it('should define init, prompt, and configure', - function () { - expect(typeof gerrit.init).toBe('function'); - expect(typeof gerrit.prompt).toBe('function'); - expect(typeof gerrit.configure).toBe('function'); - }); - }); - - describe('runtime', function () { - it('should not create a new file if one does not exist already.', - function () { - // No answers, non-interactive run. - var mockAnswers = {}; - var generator = mocks.buildGenerator(null, mockAnswers); - generator.fs.delete('.gitreview'); - - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - expect(generator.fs.exists('.gitreview')).toBeFalsy(); - }); - - it('should not delete a file if one exists.', - function () { - // No answers, non-interactive run. - var mockAnswers = {}; - var generator = mocks.buildGenerator(null, mockAnswers); - generator.fs.write('.gitreview', ini.stringify(iniFile)); - - // Set defaults - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - expect(generator.fs.exists('.gitreview')).toBeTruthy(); - }); - - it('should write default values if a new file is requested.', - function () { - // No answers, non-interactive run. - var mockAnswers = {enableGerrit: true}; - var generator = mocks.buildGenerator(null, mockAnswers); - pkgBuilder.fromJSON(JSON.stringify({name: 'generator-openstack'})); - - generator.fs.delete('.gitreview'); - - // Set defaults - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - expectGerritFileContent({ - gerrit: { - host: 'review.openstack.org', - port: '29418', - project: 'openstack/generator-openstack.git' - } - }); - }); - - it('should read the default project name from the package builder.', - function () { - // No answers, non-interactive run. - var mockAnswers = {enableGerrit: true}; - pkgBuilder.fromJSON(JSON.stringify({name: 'foo'})); - - var generator = mocks.buildGenerator(null, mockAnswers); - generator.fs.delete('.gitreview'); - - // Set defaults - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - expectGerritFileContent({ - gerrit: { - host: 'review.openstack.org', - port: '29418', - project: 'openstack/foo.git' - } - }); - }); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var generator = mocks.buildGenerator(); - var outputGenerator = gerrit.init(generator); - expect(outputGenerator).toEqual(generator); - }); - }); - - describe('prompt()', function () { - it('should return a promise that resolves with a generator', - function () { - var generator = mocks.buildGenerator(); - var outputPromise = gerrit.prompt(generator); - outputPromise.then(function (outputGenerator) { - expect(outputGenerator).toEqual(generator); - }); - }); - - it('should not show a prompt if non-interactive is set', - function () { - var generator = mocks.buildGenerator(null, null, - {'non-interactive': true}); - var promptSpy = spyOn(generator, 'prompt'); - - generator.fs.write('.gitreview', ini.stringify(iniFile)); - - gerrit.init(generator); - gerrit.prompt(generator); - - expect(promptSpy.calls.any()).toBeFalsy(); - }); - - it('should use defaults in .gitreview if no answers provided', - function () { - var generator = mocks.buildGenerator(); - - generator.fs.write('.gitreview', ini.stringify(iniFile)); - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - expectGerritFileContent(iniFile); - }); - - it('should configure answers if answers provided', - function () { - var config = {}; - var mockAnswers = { - enableGerrit: true, - gerritHost: 'review.example.org', - gerritPort: '1000', - gerritProject: 'openstack/test.git' - }; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Set defaults - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - expectGerritFileContent({ - gerrit: { - host: mockAnswers.gerritHost, - port: mockAnswers.gerritPort, - project: mockAnswers.gerritProject - } - }); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var generator = mocks.buildGenerator(); - var outputGenerator = gerrit.init(generator); - expect(outputGenerator).toEqual(generator); - }); - - it('should create a .gitreview file if enabled', - function () { - var generator = mocks.buildGenerator(null, {enableGerrit: true}); - pkgBuilder.fromJSON(JSON.stringify({name: 'generator-openstack'})); - - // Make sure we don't have something left over from another test. - generator.fs.delete('.gitreview'); - - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - expectGerritFileContent({ - gerrit: { - host: 'review.openstack.org', - port: '29418', - project: 'openstack/generator-openstack.git' - } - }); - - var excludedFiles = projectBuilder.getExcludedFiles(); - expect(excludedFiles.length).toBe(0); - }); - - it('should delete a .gitreview file if disabled', - function () { - var generator = mocks.buildGenerator(null, {enableGerrit: false}); - - gerrit.init(generator); - gerrit.prompt(generator); - gerrit.configure(generator); - - var includedFiles = projectBuilder.getIncludedFiles(); - expect(includedFiles.length).toBe(0); - - var excludedFiles = projectBuilder.getExcludedFiles(); - expect(excludedFiles.length).toBe(1); - expect(excludedFiles[0]).toBe('.gitreview'); - }); - }); -}); diff --git a/spec/app/lib/component/gitignore.js b/spec/app/lib/component/gitignore.js deleted file mode 100644 index dfcf9a2..0000000 --- a/spec/app/lib/component/gitignore.js +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var gitignore = require(libDir + '/component/gitignore'); -var projectBuilder = require(libDir + '/project_builder'); -var mocks = require('../../../helpers/mocks'); -var mockGenerator; - -describe('generator-openstack:lib/component/gitignore', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - projectBuilder.clear(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof gitignore.init).toBe('function'); - expect(typeof gitignore.prompt).toBe('function'); - expect(typeof gitignore.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = gitignore.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should not interact with config', - function () { - var spy = spyOn(mockGenerator.config, 'defaults'); - gitignore.init(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('prompt()', function () { - it('should return a generator', - function () { - var outputGenerator = gitignore.prompt(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should do nothing', - function () { - var spy = spyOn(mockGenerator, 'prompt'); - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = gitignore.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add gitignore to the project files.', - function () { - mockGenerator.fs.write('.gitignore', ['one', 'two'].join('\n')); - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(1); - expect(files[0].to).toBe('.gitignore'); - }); - }); - - describe('.gitignore management', function () { - - it('should echo back existing .gitignore', - function () { - mockGenerator.fs.write('.gitignore', ['one', 'two'].join('\n')); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(2); - - expect(ignoreContent[0]).toEqual('one'); - expect(ignoreContent[1]).toEqual('two'); - }); - - it('should include any files flagged as ignored in the project builder.', - function () { - mockGenerator.fs.write('.gitignore', ''); - projectBuilder.ignoreFile('foo/bar.json'); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; // There should only be one file. - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(1); - - expect(ignoreContent[0]).toBe('foo/bar.json'); - }); - - it('should de-duplicate file paths from multiple locations.', - function () { - // include 'node_modules' from both an existing file and from the project builder. - mockGenerator.fs.write('.gitignore', ['node_modules'].join('\n')); - projectBuilder.ignoreFile('node_modules'); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; // There should only be one file. - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(1); - - expect(ignoreContent[0]).toBe('node_modules'); - }); - - it('should sort the ignored files.', - function () { - mockGenerator.fs.write('.gitignore', ['b_line', 'a_line'].join('\n')); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(2); - expect(ignoreContent[0]).toBe('a_line'); - expect(ignoreContent[1]).toBe('b_line'); - }); - - it('should remove any whitespace from the existing .gitignore', - function () { - mockGenerator.fs.write('.gitignore', ['1_one', '', '2_two', ''].join('\n')); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(2); - expect(ignoreContent[0]).toBe('1_one'); - expect(ignoreContent[1]).toBe('2_two'); - }); - - it('should remove any comments from the existing .gitignore', - function () { - mockGenerator.fs.write('.gitignore', ['1_one', '# comment', ' #comment'].join('\n')); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(1); - expect(ignoreContent[0]).toBe('1_one'); - }); - - it('should deduplicate content', - function () { - mockGenerator.fs.write('.gitignore', ['1_one', '1_one'].join('\n')); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - var ignoreRef = files[0]; - var ignoreContent = ignoreRef.content().split('\n'); - expect(ignoreContent.length).toBe(1); - expect(ignoreContent[0]).toBe('1_one'); - }); - - it('should delete the file if there\'s nothing to ignore', function () { - mockGenerator.fs.write('.gitignore', ''); - - gitignore.init(mockGenerator); - gitignore.prompt(mockGenerator); - gitignore.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(0); - - var rmFiles = projectBuilder.getExcludedFiles(); - expect(rmFiles.length).toBe(1); - expect(rmFiles[0]).toBe('.gitignore'); - }); - }); -}); diff --git a/spec/app/lib/component/license.js b/spec/app/lib/component/license.js deleted file mode 100644 index 0c4397d..0000000 --- a/spec/app/lib/component/license.js +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var license = require(libDir + '/component/license'); -var projectBuilder = require(libDir + '/project_builder'); -var pkgBuilder = require(libDir + '/pkg_builder'); -var mocks = require('../../../helpers/mocks'); -var mockGenerator; - -describe('generator-openstack:lib/component/license', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - projectBuilder.clear(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof license.init).toBe('function'); - expect(typeof license.prompt).toBe('function'); - expect(typeof license.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = license.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should do nothing', - function () { - var spy = spyOn(mockGenerator.config, 'defaults'); - license.init(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('prompt()', function () { - it('should return a generator', - function () { - var outputGenerator = license.prompt(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should do nothing', - function () { - var spy = spyOn(mockGenerator, 'prompt'); - license.prompt(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = license.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add license to the project files.', - function () { - license.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(1); - expect(files[0].from).toBe('LICENSE'); - expect(files[0].to).toBe('LICENSE'); - }); - - it('should add license to the package.json files.', - function () { - license.configure(mockGenerator); - - var parsedResult = JSON.parse(pkgBuilder.toJSON()); - expect(parsedResult.license).toBe("Apache-2.0"); - }); - }); -}); diff --git a/spec/app/lib/component/nsp.js b/spec/app/lib/component/nsp.js deleted file mode 100644 index 85d5b07..0000000 --- a/spec/app/lib/component/nsp.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var nsp = require(libDir + '/component/nsp'); -var projectBuilder = require(libDir + '/project_builder'); -var pkgBuilder = require(libDir + '/pkg_builder'); -var mocks = require('../../../helpers/mocks'); -var mockGenerator; - -describe('generator-openstack:lib/component/nsp', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - projectBuilder.clear(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof nsp.init).toBe('function'); - expect(typeof nsp.prompt).toBe('function'); - expect(typeof nsp.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = nsp.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should do nothing', - function () { - var spy = spyOn(mockGenerator.config, 'defaults'); - nsp.init(mockGenerator); - expect(spy.calls.any()).toBeFalsy(); - }); - }); - - describe('prompt()', function () { - it('should return a generator', - function () { - var outputGenerator = nsp.prompt(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add nsp to dependencies', - function () { - pkgBuilder.fromJSON('{"devDependencies":{}}'); - - var devDeps = pkgBuilder.getValue('devDependencies'); - expect(devDeps.nsp).not.toBeDefined(); - - nsp.prompt(mockGenerator); - - devDeps = pkgBuilder.getValue('devDependencies'); - expect(devDeps.nsp).toBeDefined(); - }); - - it('should add the prepublish hook to the project', - function () { - pkgBuilder.fromJSON('{}'); - - var scripts = pkgBuilder.getValue('scripts'); - expect(scripts).not.toBeDefined(); - - nsp.prompt(mockGenerator); - - var newScripts = pkgBuilder.getValue('scripts'); - expect(newScripts.prepublish).toBeDefined(); - expect(newScripts.prepublish).toEqual('nsp check'); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = nsp.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add .nsprc to the project files.', - function () { - nsp.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(1); - expect(files[0].from).toBe('.nsprc'); - expect(files[0].to).toBe('.nsprc'); - }); - }); -}); diff --git a/spec/app/lib/component/pkg.js b/spec/app/lib/component/pkg.js deleted file mode 100644 index ad26c8d..0000000 --- a/spec/app/lib/component/pkg.js +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var pkg = require(libDir + '/component/pkg'); -var projectBuilder = require(libDir + '/project_builder'); -var pkgBuilder = require(libDir + '/pkg_builder'); -var mocks = require('../../../helpers/mocks'); -var mockGenerator; - -var packageFile = {}; - -describe('generator-openstack:lib/component/pkg', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - projectBuilder.clear(); - jasmine.clock().install(); - }); - - afterEach(function () { - jasmine.clock().uninstall(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof pkg.init).toBe('function'); - expect(typeof pkg.prompt).toBe('function'); - expect(typeof pkg.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = pkg.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should read an existing package.json file into the package builder', - function () { - mockGenerator.fs.writeJSON("package.json", {name: "foo"}); - - pkg.init(mockGenerator); - var output = JSON.parse(pkgBuilder.toJSON()); - expect(output.name).toBe('foo'); - }); - - it('should add several files to the ignore list.', - function () { - pkg.init(mockGenerator); - - var ignoredFiles = projectBuilder.getIgnoredFiles(); - expect(ignoredFiles.indexOf('node_modules')).not.toBe(-1); - expect(ignoredFiles.indexOf('npm-debug.log')).not.toBe(-1); - expect(ignoredFiles.indexOf('package')).not.toBe(-1); - expect(ignoredFiles.indexOf('.npm')).not.toBe(-1); - }); - }); - - describe('prompt()', function () { - - it('should return a promise that resolves with a generator', - function () { - var generator = mocks.buildGenerator(); - var outputPromise = pkg.prompt(generator); - outputPromise.then(function (outputGenerator) { - expect(outputGenerator).toEqual(generator); - }); - }); - - it('should revert to config defaults if no answers provided', - function () { - var config = {}; - var mockAnswers = {}; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Start with a blank package file. - generator.fs.write('package.json', JSON.stringify({})); - - // Set defaults - pkg.init(generator); - pkg.configure(generator); - pkg.prompt(generator); - - // Call the generator - expect(pkgBuilder.getValues()).toEqual({ - devDependencies: { istanbul: '^0.4.2', jasmine: '^2.4.1'}, - name: generator.appname, - description: null, - version: '0.0.1', - homepage: 'http://www.openstack.org/', - author: 'OpenStack (http://www.openstack.org/)' - }); - }); - - it('should not show a prompt if non-interactive is set', - function () { - var generator = mocks.buildGenerator(null, null, - {'non-interactive': true}); - var promptSpy = spyOn(generator, 'prompt'); - - generator.fs.write('package.json', JSON.stringify(packageFile)); - - pkg.init(generator); - pkg.prompt(generator); - - expect(promptSpy.calls.any()).toBeFalsy(); - }); - - it('should use defaults in package.json if no answers provided', - function () { - var generator = mocks.buildGenerator(); - - var mockPackage = { - devDependencies: { istanbul: '^0.4.2', jasmine: '^2.4.1'}, - name: 'name', - description: 'description', - version: '0.0.1', - homepage: 'http://www.openstack.org/', - author: 'OpenStack (http://www.openstack.org/)' - }; - generator.fs.write('package.json', JSON.stringify(mockPackage)); - - pkg.init(generator); - pkg.configure(generator); - pkg.prompt(generator); - - expect(pkgBuilder.getValues()).toEqual(mockPackage); - }); - - it('should configure answers if answers provided', - function () { - var config = {}; - var mockAnswers = { - devDependencies: { istanbul: '^0.4.2', jasmine: '^2.4.1'}, - name: 'name', - description: 'description', - version: '1.0.0', - homepage: 'http://example.openstack.org/', - author: 'Example Author' - }; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Start with a blank package file. - generator.fs.write('package.json', JSON.stringify({})); - - // Set defaults - pkg.init(generator); - pkg.prompt(generator); - pkg.configure(generator); - - expect(pkgBuilder.getValues()).toEqual(mockAnswers); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = pkg.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add package.json to the project files.', - function () { - pkg.configure(mockGenerator); - - var files = projectBuilder.getIncludedFiles(); - expect(files.length).toBe(1); - expect(files[0].to).toBe('package.json'); - expect(files[0].content).toBe(pkgBuilder.toJSON); - }); - }); -}); diff --git a/spec/app/lib/component/structure.js b/spec/app/lib/component/structure.js deleted file mode 100644 index 03ee8cd..0000000 --- a/spec/app/lib/component/structure.js +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var libDir = '../../../../generators/app/lib'; - -var structure = require(libDir + '/component/structure'); -var projectBuilder = require(libDir + '/project_builder'); -var mocks = require('../../../helpers/mocks'); -var mockGenerator; - -var expectedDefaults = { - engine: 'browser', - language: 'es5', - srcDir: './src', - distDir: './dist', - testDir: './test' -}; - -describe('generator-openstack:lib/component/structure', function () { - - beforeEach(function () { - mockGenerator = mocks.buildGenerator(); - jasmine.clock().install(); - }); - - afterEach(function () { - jasmine.clock().uninstall(); - }); - - it('should define init, prompt, and configure', - function () { - expect(typeof structure.init).toBe('function'); - expect(typeof structure.prompt).toBe('function'); - expect(typeof structure.configure).toBe('function'); - }); - - describe('init()', function () { - it('should return a generator', - function () { - var outputGenerator = structure.init(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should set configuration defaults', - function () { - var spy = spyOn(mockGenerator.config, 'defaults'); - structure.init(mockGenerator); - expect(spy).toHaveBeenCalledWith(expectedDefaults); - }); - }); - - describe('prompt()', function () { - - it('should return a promise that resolves with a generator', - function () { - var generator = mocks.buildGenerator(); - var outputPromise = structure.prompt(generator); - outputPromise.then(function (outputGenerator) { - expect(outputGenerator).toEqual(generator); - }); - }); - - it('should revert to config defaults if no answers provided', - function () { - var config = {}; - var mockAnswers = {}; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Call the component - structure.init(generator); - structure.prompt(generator); - structure.configure(generator); - - Object.keys(expectedDefaults).forEach(function (key) { - expect(generator.config.get(key)).toEqual(expectedDefaults[key]); - }); - }); - - it('should not show a prompt if non-interactive is set', - function () { - var generator = mocks.buildGenerator(null, null, {'non-interactive': true}); - var promptSpy = spyOn(generator, 'prompt'); - - structure.init(generator); - structure.prompt(generator); - - expect(promptSpy.calls.any()).toBeFalsy(); - }); - - it('should configure answers if answers provided', - function () { - var config = {}; - var mockAnswers = { - language: 'es6', - srcDir: './dir', - distDir: './foo', - testDir: './bar' - }; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Set defaults - structure.init(generator); - structure.prompt(generator); - structure.configure(generator); - - Object.keys(mockAnswers).forEach(function (key) { - expect(generator.config.get(key)).toEqual(mockAnswers[key]); - }); - }); - - it('should not configure the dist directory for a node project', - function () { - var config = {}; - var mockAnswers = { - engine: 'node', - distDir: './foo' // This answer should never be read. - }; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Set defaults - structure.init(generator); - structure.prompt(generator); - structure.configure(generator); - - expect(generator.config.get('distDir')).not.toBe(mockAnswers.distDir); - }); - - it('should configure the dist directory for a browser project', - function () { - var config = {}; - var mockAnswers = { - engine: 'browser', - distDir: './foo' // This answer should never be read. - }; - var generator = mocks.buildGenerator(config, mockAnswers); - - // Set defaults - structure.init(generator); - structure.prompt(generator); - structure.configure(generator); - - expect(generator.config.get('distDir')).toBe(mockAnswers.distDir); - }); - }); - - describe('configure()', function () { - it('should return a generator', - function () { - var outputGenerator = structure.configure(mockGenerator); - expect(outputGenerator).toEqual(mockGenerator); - }); - - it('should add the dist directory to the ignoreFile.', - function () { - var ignoreSpy = spyOn(projectBuilder, 'ignoreFile'); - - var generator = mocks.buildGenerator(); - - structure.init(generator); - structure.prompt(generator); - structure.configure(generator); - - expect(ignoreSpy).toHaveBeenCalledWith('./dist'); - }); - }); -}); diff --git a/spec/app/lib/global_dependencies.js b/spec/app/lib/global_dependencies.js deleted file mode 100644 index 6f3e93f..0000000 --- a/spec/app/lib/global_dependencies.js +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var builder = require('../../../generators/app/lib/global_dependencies'); -var globals = require('../../../global-dependencies.json'); -var semver = require('semver'); - -describe('lib/global_dependencies', function () { - - describe('data', function () { - it('should contain all dependencies from the root global-dependencies.json', - function () { - for (var key in globals) { - if (globals.hasOwnProperty(key)) { - expect(builder.contains(key)).toBe(true); - } - } - }); - - it('should contain valid semver versions for all dependencies', - function () { - for (var key in globals) { - if (globals.hasOwnProperty(key)) { - var version = builder.read(key); - expect(semver.validRange(version)).toBeTruthy(); - } - } - }); - }); - - describe('contains()', function () { - it('should return true when a dependency exists', function () { - expect(builder.contains('eslint')).toBe(true); - }); - - it('should return false when a dependency doesn\'t exist', function () { - expect(builder.contains('notarealdependency')).toBe(false); - }); - }); - - describe('read()', function () { - it('should return the version of a dependency', function () { - expect(builder.read('eslint')).toBe(globals.eslint); - }); - - it('should return undefined when a dependency doesn\'t exist', function () { - expect(builder.read('notarealdependency')).toBeUndefined(); - }); - }); - - describe('synchronize()', function () { - it('should update dependencies that are out of date.', function () { - var testDeps = { - eslint: '0.0.1' - }; - var newDeps = builder.synchronize(testDeps); - - expect(newDeps.eslint).toBeDefined(); - expect(newDeps.eslint).not.toEqual(testDeps.eslint); - expect(newDeps.eslint).toEqual(globals.eslint); - }); - - it('should not update dependencies that are up to date.', function () { - var testDeps = { - eslint: globals.eslint - }; - var newDeps = builder.synchronize(testDeps); - expect(newDeps).toEqual(testDeps); - }); - - it('should not touch unregistered dependencies.', function () { - var testDeps = { - notarealdependency: '0.0.1' - }; - var newDeps = builder.synchronize(testDeps); - expect(newDeps.notarealdependency).toEqual(testDeps.notarealdependency); - }); - }); -}); diff --git a/spec/app/lib/pkg_builder.js b/spec/app/lib/pkg_builder.js deleted file mode 100644 index bbb0121..0000000 --- a/spec/app/lib/pkg_builder.js +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var builder = require('../../../generators/app/lib/pkg_builder'); -var dependencies = require('../../../generators/app/lib/global_dependencies'); - -describe('generator-openstack:lib/pkg_builder', function () { - - beforeEach(function () { - builder.fromJSON("{}"); // Clear - }); - - it('should start as an empty object', - function () { - expect(builder.toJSON()).toBe("{}"); - }); - - it('should honor and echo back any pre-loaded package file', - function () { - var packageString = '{"name":"foo"}'; - builder.fromJSON(packageString); - - var parsedResult = JSON.parse(builder.toJSON()); - expect(parsedResult.name).toBe("foo"); - }); - - it('should permit adding and overriding values.', - function () { - builder.fromJSON('{"name":"foo"}'); - builder.setValues({name: "bar", lol: "cat"}); - - var parsedResult = JSON.parse(builder.toJSON()); - expect(parsedResult.name).toBe("bar"); - expect(parsedResult.lol).toBe("cat"); - }); - - it('should not add parent prototype values.', - function () { - function Thing () { - } - - Thing.prototype.foo = 'bar'; - - var thing = new Thing(); - thing.name = 'bar'; - thing.lol = 'cat'; - - builder.fromJSON('{"name":"foo"}'); - builder.setValues(thing); - - var parsedResult = JSON.parse(builder.toJSON()); - expect(parsedResult.name).toBe("bar"); - expect(parsedResult.lol).toBe("cat"); - expect(parsedResult.foo).toBeUndefined(); - }); - - describe('toJSON()', function () { - it('should update out-of-date dependencies.', - function () { - var testPackage = { - dependencies: { - eslint: "0.0.1" - }, - peerDependencies: { - eslint: "0.0.1" - }, - devDependencies: { - eslint: "0.0.1" - } - }; - - builder.fromJSON(JSON.stringify(testPackage)); - var result = JSON.parse(builder.toJSON()); - expect(result.dependencies.eslint).toBe(dependencies.read('eslint')); - expect(result.peerDependencies.eslint).toBe(dependencies.read('eslint')); - expect(result.devDependencies.eslint).toBe(dependencies.read('eslint')); - }); - - it('should not error if no dependencies are declared.', - function () { - var testPackage = { - dependencies: { - eslint: "0.0.1" - } - }; - - builder.fromJSON(JSON.stringify(testPackage)); - var result = JSON.parse(builder.toJSON()); - expect(result.dependencies.eslint).toBe(dependencies.read('eslint')); - }); - }); - - describe('getValues()', function () { - it('should permit retrieving the entire package block.', - function () { - builder.fromJSON('{"name":"foo"}'); - expect(builder.getValues()).toEqual({name: 'foo'}); - }); - }); - - describe('getValue()', function () { - it('should permit retrieving values from the package.', - function () { - builder.fromJSON('{"name":"foo"}'); - expect(builder.getValue('name')).toBe('foo'); - }); - - it('should return undefined if the value is not set.', - function () { - builder.fromJSON('{"name":"foo"}'); - expect(builder.getValue('invalidname')).toBeUndefined(); - }); - - it('should return a default if provided.', - function () { - builder.fromJSON('{"name":"foo"}'); - expect(builder.getValue('invalidname', 'defaultValue')) - .toBe('defaultValue'); - }); - }); - - describe('addDependencies()', function () { - var eslintVersion = dependencies.read('eslint'); - - it('should be able to add to dependencies', function () { - builder.fromJSON('{"dependencies":{}}'); - builder.addDependencies('eslint'); - expect(builder.getValue('dependencies').eslint).toBe(eslintVersion); - - builder.fromJSON('{"dependencies":{}}'); - builder.addDependencies(['eslint']); - expect(builder.getValue('dependencies').eslint).toBe(eslintVersion); - - builder.fromJSON('{"dependencies":{}}'); - builder.addDependencies('eslint', 'dependencies'); - expect(builder.getValue('dependencies').eslint).toBe(eslintVersion); - - builder.fromJSON('{"dependencies":{}}'); - builder.addDependencies(['eslint'], 'dependencies'); - expect(builder.getValue('dependencies').eslint).toBe(eslintVersion); - }); - - it('should be able to add to devDependencies', function () { - builder.fromJSON('{"devDependencies":{}}'); - builder.addDependencies('eslint', 'devDependencies'); - expect(builder.getValue('devDependencies').eslint).toBe(eslintVersion); - - builder.fromJSON('{"devDependencies":{}}'); - builder.addDependencies(['eslint'], 'devDependencies'); - expect(builder.getValue('devDependencies').eslint).toBe(eslintVersion); - }); - - it('should be able to add to peerDependencies', function () { - builder.fromJSON('{"peerDependencies":{}}'); - builder.addDependencies('eslint', 'peerDependencies'); - expect(builder.getValue('peerDependencies').eslint).toBe(eslintVersion); - - builder.fromJSON('{"peerDependencies":{}}'); - builder.addDependencies(['eslint'], 'peerDependencies'); - expect(builder.getValue('peerDependencies').eslint).toBe(eslintVersion); - }); - - it('should create dependency maps if they don\'t yet exist in the package', function () { - builder.fromJSON('{}'); - builder.addDependencies('eslint'); - builder.addDependencies('eslint', 'devDependencies'); - builder.addDependencies('eslint', 'peerDependencies'); - expect(builder.getValue('dependencies')).not.toBeUndefined(); - expect(builder.getValue('devDependencies')).not.toBeUndefined(); - expect(builder.getValue('peerDependencies')).not.toBeUndefined(); - }); - - it('should not modify things if an invalid section was declared', function () { - builder.fromJSON('{}'); - builder.addDependencies('eslint', 'lol'); - expect(builder.getValues()).toEqual({}); - }); - - it('should not override an existing dependency declaration', function () { - builder.fromJSON('{"dependencies":{"eslint":"0.0.1"}}'); - builder.addDependencies(['eslint'], 'dependencies'); - expect(builder.getValue('dependencies').eslint).toEqual('0.0.1'); - }); - - it('should not add a dependency that is not globally managed', function () { - builder.fromJSON('{}'); - builder.addDependencies('leftpad'); - expect(builder.getValues()).toEqual({dependencies: {}}); - }); - }); - - describe('addCommand', function () { - it('should add a command', function () { - builder.fromJSON('{"scripts":{}}'); - builder.addCommand('foo', 'bar'); - expect(builder.getValue('scripts').foo).toBe('bar'); - }); - - it('should overwrite an existing command', function () { - builder.fromJSON('{"scripts":{"foo":"bar"}}'); - builder.addCommand('foo', 'lol'); - expect(builder.getValue('scripts').foo).toBe('lol'); - }); - - it('should create the scripts hash if it doesn\'t exist', function () { - builder.fromJSON('{}'); - builder.addCommand('foo', 'bar'); - expect(builder.getValue('scripts')).toBeDefined(); - }); - }); -}); diff --git a/spec/app/lib/project_builder.js b/spec/app/lib/project_builder.js deleted file mode 100644 index 96b905f..0000000 --- a/spec/app/lib/project_builder.js +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -var builder = require('../../../generators/app/lib/project_builder'); - -describe('generator-openstack:lib/project_builder', function () { - - beforeEach(function () { - builder.clear(); - }); - - it('should start with an empty list of included files', - function () { - expect(builder.getIncludedFiles().length).toBe(0); - }); - - it('should start with an empty list of excluded files', - function () { - expect(builder.getExcludedFiles().length).toBe(0); - }); - - it('should permit adding a file with only one path.', - function () { - var testFilePath = 'test_path.json'; - - builder.addFile(testFilePath); - var testFile = builder.getIncludedFiles()[0]; - - expect(testFile.from).toBe(testFilePath); - expect(testFile.to).toBe(testFilePath); - }); - - it('should permit adding a file with a different destination path.', - function () { - var testFilePath = 'test_path.json'; - var testFileOutput = 'test_path_output.json'; - - builder.addFile(testFilePath, testFileOutput); - var testFile = builder.getIncludedFiles()[0]; - - expect(testFile.from).toBe(testFilePath); - expect(testFile.to).toBe(testFileOutput); - }); - - it('should permit adding a file to the exclusion list', - function () { - var testFilePath = 'test_path.json'; - builder.removeFile(testFilePath); - expect(builder.getExcludedFiles()[0]).toBe(testFilePath); - }); - - it('should permit adding a file to the ignore list', - function () { - var testFilePath = 'test_path.json'; - builder.ignoreFile(testFilePath); - expect(builder.getIgnoredFiles()[0]).toBe(testFilePath); - }); -}); diff --git a/spec/helpers/mocks.js b/spec/helpers/mocks.js deleted file mode 100644 index 22c5cf1..0000000 --- a/spec/helpers/mocks.js +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2016 Hewlett Packard Enterprise Development Company, LP - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. You may obtain - * a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -'use strict'; - -function buildMockGenerator (config, mockAnswers, mockOptions) { - var configDefaults = {}; - var memFs = require('mem-fs'); - var editor = require('mem-fs-editor'); - var store = memFs.create(); - - config = config || {}; - mockAnswers = mockAnswers || {}; - mockOptions = mockOptions || {}; - - return { - fs: editor.create(store), - appname: 'generator-openstack', - async: function () { - return function () { - }; - }, - config: { - defaults: function (values) { - Object.keys(values).forEach(function (key) { - configDefaults[key] = values[key]; - }); - }, - get: function (value) { - return config[value] || configDefaults[value]; - }, - set: function (key, value) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (index) { - config[index] = key[index]; - }); - } else { - config[key] = value; - } - } - }, - prompt: function (params, callback) { - var answers = {}; - params.forEach(function (param) { - - if (param.when && !param.when(answers)) { - return; - } - - if (mockAnswers.hasOwnProperty(param.name)) { - answers[param.name] = mockAnswers[param.name]; - } else { - answers[param.name] = param.default || null; - } - - }); - callback(answers); - }, - options: mockOptions - }; -} - -module.exports = { - buildGenerator: buildMockGenerator -}; diff --git a/spec/support/jasmine.json b/spec/support/jasmine.json deleted file mode 100644 index 997444d..0000000 --- a/spec/support/jasmine.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "spec_dir": "spec", - "spec_files": [ - "**/*.js", - "!helpers/**/*.js" - ] -}