qb 0.3.12 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +3 -1
  3. data/README.md +42 -26
  4. data/ansible.cfg +7 -0
  5. data/doc/common_issues/qb_run/slow_gather_facts.md +51 -0
  6. data/doc/getting_started.md +84 -0
  7. data/doc/intro.md +67 -0
  8. data/doc/notes/2018.01.06.ansible_devel_submodule.md +29 -0
  9. data/doc/qb_roles.md +155 -0
  10. data/doc/qb_roles/metadata/default_dir.md +116 -0
  11. data/exe/qb +16 -14
  12. data/lib/qb.rb +5 -20
  13. data/lib/qb/ansible/cmds/playbook.rb +3 -4
  14. data/lib/qb/ansible/env.rb +22 -2
  15. data/lib/qb/ansible/env/devel.rb +49 -0
  16. data/lib/qb/cli.rb +3 -1
  17. data/lib/qb/cli/help.rb +1 -1
  18. data/lib/qb/cli/list.rb +47 -0
  19. data/lib/qb/cli/run.rb +41 -15
  20. data/lib/qb/cli/setup.rb +35 -2
  21. data/lib/qb/options.rb +57 -30
  22. data/lib/qb/role.rb +32 -170
  23. data/lib/qb/role/default_dir.rb +231 -0
  24. data/lib/qb/role/errors.rb +18 -10
  25. data/lib/qb/role/name.rb +139 -0
  26. data/lib/qb/util/logging.rb +0 -7
  27. data/lib/qb/version.rb +1 -1
  28. data/library/stream +5 -0
  29. data/plugins/filter_plugins/string_plugins.py +2 -3
  30. data/plugins/filter_plugins/version_plugins.py +11 -0
  31. data/qb.gemspec +158 -62
  32. data/roles/nrser.blockinfile/library/blockinfile.py +14 -0
  33. data/roles/qb.git_repo/tasks/main.yml +3 -3
  34. data/roles/qb.npm_package/meta/main.yml +2 -2
  35. data/roles/qb.npm_package/meta/qb.yml +3 -3
  36. data/roles/qb.vars/meta/qb.yml +8 -7
  37. data/roles/qb.vars/tasks/main.yml +10 -1
  38. data/roles/qb/call/defaults/main.yml +2 -0
  39. data/roles/qb/call/meta/main.yml +8 -0
  40. data/roles/qb/call/meta/qb.yml +68 -0
  41. data/roles/qb/call/tasks/main.yml +92 -0
  42. data/roles/qb/gem/new/meta/qb.yml +1 -1
  43. data/roles/qb/gem/new/tasks/main.yml +3 -3
  44. data/roles/qb/gem/release/tasks/main.yml +3 -5
  45. data/roles/{qb.gitignore → qb/git/ignore}/defaults/main.yml +1 -1
  46. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  47. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Actionscript.gitignore +2 -3
  48. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Ada.gitignore +0 -0
  49. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Agda.gitignore +0 -0
  50. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Android.gitignore +3 -2
  51. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/AppEngine.gitignore +0 -0
  52. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/AppceleratorTitanium.gitignore +0 -0
  53. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ArchLinuxPackages.gitignore +0 -0
  54. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Autotools.gitignore +9 -0
  55. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/C++.gitignore +0 -0
  56. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/C.gitignore +0 -0
  57. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CFWheels.gitignore +0 -0
  58. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CMake.gitignore +0 -0
  59. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CONTRIBUTING.md +0 -0
  60. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CUDA.gitignore +0 -0
  61. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CakePHP.gitignore +0 -0
  62. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ChefCookbook.gitignore +0 -0
  63. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Clojure.gitignore +0 -0
  64. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CodeIgniter.gitignore +0 -0
  65. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CommonLisp.gitignore +0 -0
  66. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Composer.gitignore +1 -1
  67. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Concrete5.gitignore +0 -0
  68. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Coq.gitignore +0 -0
  69. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/CraftCMS.gitignore +0 -0
  70. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/D.gitignore +0 -0
  71. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/DM.gitignore +0 -0
  72. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Dart.gitignore +0 -0
  73. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Delphi.gitignore +0 -0
  74. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Drupal.gitignore +3 -0
  75. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/EPiServer.gitignore +0 -0
  76. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Eagle.gitignore +0 -0
  77. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Elisp.gitignore +0 -0
  78. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Elixir.gitignore +2 -0
  79. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Elm.gitignore +0 -0
  80. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Erlang.gitignore +0 -0
  81. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ExpressionEngine.gitignore +0 -0
  82. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ExtJs.gitignore +2 -0
  83. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Fancy.gitignore +0 -0
  84. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Finale.gitignore +0 -0
  85. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ForceDotCom.gitignore +0 -0
  86. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Fortran.gitignore +0 -0
  87. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/FuelPHP.gitignore +0 -0
  88. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/GWT.gitignore +0 -0
  89. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Gcov.gitignore +0 -0
  90. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Gem.gitignore +0 -0
  91. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/GitBook.gitignore +0 -0
  92. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Anjuta.gitignore +0 -0
  93. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Ansible.gitignore +0 -0
  94. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Archives.gitignore +2 -2
  95. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Bazaar.gitignore +0 -0
  96. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/BricxCC.gitignore +0 -0
  97. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/CVS.gitignore +0 -0
  98. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Calabash.gitignore +0 -0
  99. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Cloud9.gitignore +0 -0
  100. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/CodeKit.gitignore +0 -0
  101. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/DartEditor.gitignore +0 -0
  102. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Dreamweaver.gitignore +0 -0
  103. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Dropbox.gitignore +0 -0
  104. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Eclipse.gitignore +0 -0
  105. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/EiffelStudio.gitignore +0 -0
  106. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Emacs.gitignore +0 -0
  107. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Ensime.gitignore +0 -0
  108. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Espresso.gitignore +0 -0
  109. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/FlexBuilder.gitignore +0 -0
  110. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/GPG.gitignore +0 -0
  111. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/JDeveloper.gitignore +0 -0
  112. data/roles/qb/git/ignore/files/gitignore/Global/JEnv.gitignore +5 -0
  113. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/JetBrains.gitignore +2 -1
  114. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/KDevelop4.gitignore +0 -0
  115. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Kate.gitignore +0 -0
  116. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Lazarus.gitignore +0 -0
  117. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/LibreOffice.gitignore +0 -0
  118. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Linux.gitignore +0 -0
  119. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/LyX.gitignore +0 -0
  120. data/roles/qb/git/ignore/files/gitignore/Global/Matlab.gitignore +25 -0
  121. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Mercurial.gitignore +0 -0
  122. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/MicrosoftOffice.gitignore +0 -0
  123. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/ModelSim.gitignore +0 -0
  124. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Momentics.gitignore +0 -0
  125. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/MonoDevelop.gitignore +0 -0
  126. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/NetBeans.gitignore +0 -0
  127. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Ninja.gitignore +0 -0
  128. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/NotepadPP.gitignore +0 -0
  129. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Otto.gitignore +0 -0
  130. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/README.md +0 -0
  131. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Redcar.gitignore +0 -0
  132. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Redis.gitignore +0 -0
  133. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/SBT.gitignore +0 -0
  134. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/SVN.gitignore +0 -0
  135. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/SlickEdit.gitignore +0 -0
  136. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Stata.gitignore +0 -0
  137. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/SublimeText.gitignore +5 -5
  138. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/SynopsysVCS.gitignore +0 -0
  139. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Tags.gitignore +0 -0
  140. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/TextMate.gitignore +0 -0
  141. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/TortoiseGit.gitignore +0 -0
  142. data/roles/qb/git/ignore/files/gitignore/Global/Vagrant.gitignore +5 -0
  143. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Vim.gitignore +6 -4
  144. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/VirtualEnv.gitignore +0 -0
  145. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/VisualStudioCode.gitignore +0 -0
  146. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/WebMethods.gitignore +0 -0
  147. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Windows.gitignore +4 -1
  148. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/Xcode.gitignore +9 -9
  149. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/XilinxISE.gitignore +0 -0
  150. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Global/macOS.gitignore +2 -1
  151. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Go.gitignore +0 -3
  152. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Gradle.gitignore +0 -0
  153. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Grails.gitignore +0 -0
  154. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Haskell.gitignore +2 -0
  155. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/IGORPro.gitignore +0 -0
  156. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Idris.gitignore +0 -0
  157. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Java.gitignore +0 -0
  158. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Jboss.gitignore +0 -0
  159. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Jekyll.gitignore +1 -0
  160. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Joomla.gitignore +1 -1
  161. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Julia.gitignore +0 -0
  162. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/KiCad.gitignore +0 -0
  163. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Kohana.gitignore +0 -0
  164. data/roles/qb/git/ignore/files/gitignore/Kotlin.gitignore +1 -0
  165. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/LICENSE +0 -0
  166. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/LabVIEW.gitignore +0 -0
  167. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Laravel.gitignore +0 -0
  168. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Leiningen.gitignore +0 -0
  169. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/LemonStand.gitignore +0 -0
  170. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Lilypond.gitignore +0 -0
  171. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Lithium.gitignore +0 -0
  172. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Lua.gitignore +0 -0
  173. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Magento.gitignore +0 -0
  174. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Maven.gitignore +0 -0
  175. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Mercury.gitignore +0 -0
  176. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/MetaProgrammingSystem.gitignore +0 -0
  177. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Nanoc.gitignore +1 -1
  178. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Nim.gitignore +0 -0
  179. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Node.gitignore +1 -1
  180. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/OCaml.gitignore +3 -0
  181. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Objective-C.gitignore +0 -0
  182. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Opa.gitignore +0 -0
  183. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/OpenCart.gitignore +0 -0
  184. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/OracleForms.gitignore +0 -0
  185. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Packer.gitignore +0 -0
  186. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Perl.gitignore +1 -1
  187. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Phalcon.gitignore +0 -0
  188. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/PlayFramework.gitignore +0 -0
  189. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Plone.gitignore +0 -0
  190. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Prestashop.gitignore +3 -1
  191. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Processing.gitignore +0 -0
  192. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/PureScript.gitignore +0 -0
  193. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Python.gitignore +11 -5
  194. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/QB.gitignore +0 -0
  195. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Qooxdoo.gitignore +0 -0
  196. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Qt.gitignore +8 -0
  197. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/R.gitignore +0 -0
  198. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/README.md +2 -2
  199. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ROS.gitignore +2 -0
  200. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Rails.gitignore +4 -0
  201. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/RhodesRhomobile.gitignore +0 -0
  202. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Ruby.gitignore +0 -16
  203. data/roles/qb/git/ignore/files/gitignore/RubyMotion.gitignore +30 -0
  204. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Rust.gitignore +0 -0
  205. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/SCons.gitignore +0 -0
  206. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Sass.gitignore +0 -0
  207. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Scala.gitignore +0 -0
  208. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Scheme.gitignore +0 -0
  209. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Scrivener.gitignore +0 -0
  210. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Sdcc.gitignore +0 -0
  211. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/SeamGen.gitignore +0 -0
  212. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/SketchUp.gitignore +0 -0
  213. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Smalltalk.gitignore +4 -0
  214. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Stella.gitignore +0 -0
  215. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/SugarCRM.gitignore +2 -2
  216. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Swift.gitignore +1 -0
  217. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Symfony.gitignore +7 -0
  218. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/SymphonyCMS.gitignore +0 -0
  219. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/TeX.gitignore +6 -1
  220. data/roles/qb/git/ignore/files/gitignore/Terraform.gitignore +9 -0
  221. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Textpattern.gitignore +0 -0
  222. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/TurboGears2.gitignore +0 -0
  223. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Typo3.gitignore +0 -0
  224. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Umbraco.gitignore +7 -0
  225. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Unity.gitignore +7 -6
  226. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/UnrealEngine.gitignore +2 -0
  227. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/VVVV.gitignore +0 -0
  228. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/VisualStudio.gitignore +37 -6
  229. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Waf.gitignore +0 -0
  230. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/WordPress.gitignore +1 -0
  231. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Xojo.gitignore +0 -0
  232. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Yeoman.gitignore +0 -0
  233. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Yii.gitignore +0 -0
  234. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/ZendFramework.gitignore +0 -1
  235. data/roles/{qb.gitignore → qb/git/ignore}/files/gitignore/Zephir.gitignore +0 -0
  236. data/roles/{qb.gitignore → qb/git/ignore}/meta/main.yml +1 -1
  237. data/roles/{qb.gitignore → qb/git/ignore}/meta/qb +5 -0
  238. data/roles/{qb.gitignore → qb/git/ignore}/tasks/main.yml +9 -1
  239. data/roles/qb/github/pages/setup/defaults/main.yml +2 -0
  240. data/roles/qb/github/pages/setup/meta/main.yml +8 -0
  241. data/roles/qb/github/pages/setup/meta/qb.yml +68 -0
  242. data/roles/qb/github/pages/setup/tasks/main.yml +10 -0
  243. data/roles/{qb.project → qb/project}/.qb-options.yml +1 -1
  244. data/roles/{qb.project → qb/project}/defaults/main.yml +1 -1
  245. data/roles/{qb.project → qb/project}/files/ansible.cfg +0 -0
  246. data/roles/{qb.project → qb/project}/files/hosts +0 -0
  247. data/roles/qb/project/meta/main.yml +6 -0
  248. data/roles/{qb.project → qb/project}/meta/qb.yml +4 -2
  249. data/roles/{qb.project → qb/project}/qb/get_dir +0 -0
  250. data/roles/qb/project/tasks/dev.yml +53 -0
  251. data/roles/{qb.project → qb/project}/tasks/main.yml +3 -2
  252. data/roles/{qb.project → qb/project}/templates/.gitkeep +0 -0
  253. data/roles/qb/project/templates/README.md.j2 +4 -0
  254. data/roles/qb/project/templates/setup.qb.yml.j2 +52 -0
  255. data/roles/{qb.project → qb/project}/templates/setup.yml.j2 +0 -0
  256. data/roles/{qb.role → qb/role}/.qb-options.yml +0 -0
  257. data/roles/{qb.role → qb/role}/defaults/main.yml +4 -1
  258. data/roles/{qb.role → qb/role}/meta/main.yml +1 -1
  259. data/roles/{qb.role → qb/role}/meta/qb.yml +2 -2
  260. data/roles/qb/role/qb/meta/main.yml +1 -1
  261. data/roles/qb/role/qb/meta/qb.yml +1 -1
  262. data/roles/qb/role/qb/tasks/main.yml +4 -2
  263. data/roles/qb/role/qb/templates/qb.yml.j2 +1 -1
  264. data/roles/{qb.role → qb/role}/tasks/main.yml +3 -2
  265. data/roles/{qb.role → qb/role}/tasks/module.yml +0 -0
  266. data/roles/{qb.role → qb/role}/tasks/plugins/_filter_plugin.yml +0 -0
  267. data/roles/{qb.role → qb/role}/tasks/plugins/filter_plugins.yml +5 -5
  268. data/roles/{qb.role → qb/role}/templates/.gitkeep +0 -0
  269. data/roles/{qb.role → qb/role}/templates/README.md.j2 +0 -0
  270. data/roles/{qb.role → qb/role}/templates/defaults/main.yml.j2 +0 -0
  271. data/roles/{qb.role → qb/role}/templates/filter_plugins/filters.py.j2 +0 -0
  272. data/roles/{qb.role → qb/role}/templates/handlers/main.yml.j2 +0 -0
  273. data/roles/{qb.role → qb/role}/templates/library/module.rb.j2 +0 -0
  274. data/roles/{qb.role → qb/role}/templates/meta/main.yml.j2 +0 -0
  275. data/roles/{qb.role → qb/role}/templates/tasks/main.yml.j2 +0 -0
  276. data/roles/{qb.role → qb/role}/templates/vars/main.yml.j2 +0 -0
  277. data/roles/{qb.role → qb/role}/vars/main.yml +1 -1
  278. data/roles/qb/ruby/bundler/.qb-options.yml +4 -0
  279. data/roles/qb/ruby/bundler/defaults/main.yml +7 -0
  280. data/roles/qb/ruby/bundler/filter_plugins/bundler_filters.py +157 -0
  281. data/roles/qb/ruby/bundler/meta/main.yml +8 -0
  282. data/roles/qb/ruby/bundler/meta/qb.yml +69 -0
  283. data/roles/qb/ruby/bundler/tasks/gems.yml +12 -0
  284. data/roles/qb/ruby/bundler/tasks/main.yml +12 -0
  285. data/roles/qb/ruby/bundler/tasks/setup.yml +13 -0
  286. data/roles/qb/ruby/yard/defaults/args.yml +2 -0
  287. data/roles/qb/ruby/yard/defaults/main.yml +9 -0
  288. data/roles/qb/ruby/yard/meta/main.yml +8 -0
  289. data/roles/qb/ruby/yard/meta/qb.yml +71 -0
  290. data/roles/qb/ruby/yard/tasks/main.yml +28 -0
  291. metadata +290 -297
  292. data/roles/nrser.blockinfile/tests/.gitignore +0 -1
  293. data/roles/nrser.blockinfile/tests/expected/test-basic/create.txt +0 -5
  294. data/roles/nrser.blockinfile/tests/expected/test-basic/insert.txt +0 -6
  295. data/roles/nrser.blockinfile/tests/expected/test-basic/marker.txt +0 -5
  296. data/roles/nrser.blockinfile/tests/expected/test-basic/remove.txt +0 -2
  297. data/roles/nrser.blockinfile/tests/expected/test-basic/update.txt +0 -6
  298. data/roles/nrser.blockinfile/tests/expected/test-block/block.txt +0 -4
  299. data/roles/nrser.blockinfile/tests/expected/test-block/content.txt +0 -4
  300. data/roles/nrser.blockinfile/tests/expected/test-follow/link0.txt +0 -6
  301. data/roles/nrser.blockinfile/tests/expected/test-follow/link1.txt +0 -6
  302. data/roles/nrser.blockinfile/tests/expected/test-follow/link2.txt +0 -1
  303. data/roles/nrser.blockinfile/tests/expected/test-follow/real0.txt +0 -2
  304. data/roles/nrser.blockinfile/tests/expected/test-follow/real1.txt +0 -2
  305. data/roles/nrser.blockinfile/tests/expected/test-follow/real2.txt +0 -6
  306. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertafter.txt +0 -8
  307. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertbefore.txt +0 -8
  308. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertbof.txt +0 -8
  309. data/roles/nrser.blockinfile/tests/expected/test-insertab/inserteof.txt +0 -8
  310. data/roles/nrser.blockinfile/tests/expected/test-insertab/insertunmatched.txt +0 -8
  311. data/roles/nrser.blockinfile/tests/expected/test-insertab/updateafter.txt +0 -8
  312. data/roles/nrser.blockinfile/tests/expected/test-insertab/updatebefore.txt +0 -8
  313. data/roles/nrser.blockinfile/tests/expected/test-multiline/insert.txt +0 -11
  314. data/roles/nrser.blockinfile/tests/expected/test-multiline/remove.txt +0 -2
  315. data/roles/nrser.blockinfile/tests/expected/test-multiline/update.txt +0 -12
  316. data/roles/nrser.blockinfile/tests/expected/test-replace/index.html +0 -6
  317. data/roles/nrser.blockinfile/tests/expected/test-state/insert-present.txt +0 -5
  318. data/roles/nrser.blockinfile/tests/expected/test-state/insert.txt +0 -5
  319. data/roles/nrser.blockinfile/tests/expected/test-state/remove-absent.txt +0 -2
  320. data/roles/nrser.blockinfile/tests/expected/test-state/remove-present.txt +0 -2
  321. data/roles/nrser.blockinfile/tests/expected/test-state/remove.txt +0 -2
  322. data/roles/nrser.blockinfile/tests/fixtures/test-basic/insert.txt +0 -2
  323. data/roles/nrser.blockinfile/tests/fixtures/test-basic/marker.txt +0 -1
  324. data/roles/nrser.blockinfile/tests/fixtures/test-basic/remove.txt +0 -6
  325. data/roles/nrser.blockinfile/tests/fixtures/test-basic/update.txt +0 -6
  326. data/roles/nrser.blockinfile/tests/fixtures/test-block/block.txt +0 -1
  327. data/roles/nrser.blockinfile/tests/fixtures/test-block/content.txt +0 -1
  328. data/roles/nrser.blockinfile/tests/fixtures/test-follow/link0.txt +0 -1
  329. data/roles/nrser.blockinfile/tests/fixtures/test-follow/link1.txt +0 -1
  330. data/roles/nrser.blockinfile/tests/fixtures/test-follow/link2.txt +0 -1
  331. data/roles/nrser.blockinfile/tests/fixtures/test-follow/real0.txt +0 -2
  332. data/roles/nrser.blockinfile/tests/fixtures/test-follow/real1.txt +0 -2
  333. data/roles/nrser.blockinfile/tests/fixtures/test-follow/real2.txt +0 -2
  334. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertafter.txt +0 -4
  335. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertbefore.txt +0 -4
  336. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertbof.txt +0 -4
  337. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/inserteof.txt +0 -4
  338. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/insertunmatched.txt +0 -4
  339. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/updateafter.txt +0 -8
  340. data/roles/nrser.blockinfile/tests/fixtures/test-insertab/updatebefore.txt +0 -8
  341. data/roles/nrser.blockinfile/tests/fixtures/test-multiline/insert.txt +0 -2
  342. data/roles/nrser.blockinfile/tests/fixtures/test-multiline/remove.txt +0 -11
  343. data/roles/nrser.blockinfile/tests/fixtures/test-multiline/update.txt +0 -12
  344. data/roles/nrser.blockinfile/tests/fixtures/test-replace/index.html +0 -1
  345. data/roles/nrser.blockinfile/tests/fixtures/test-state/insert-present.txt +0 -2
  346. data/roles/nrser.blockinfile/tests/fixtures/test-state/insert.txt +0 -2
  347. data/roles/nrser.blockinfile/tests/fixtures/test-state/remove-absent.txt +0 -6
  348. data/roles/nrser.blockinfile/tests/fixtures/test-state/remove-present.txt +0 -6
  349. data/roles/nrser.blockinfile/tests/fixtures/test-state/remove.txt +0 -6
  350. data/roles/nrser.blockinfile/tests/hosts +0 -1
  351. data/roles/nrser.blockinfile/tests/roles/yaegashi.blockinfile +0 -1
  352. data/roles/nrser.blockinfile/tests/run.sh +0 -64
  353. data/roles/nrser.blockinfile/tests/test-basic.yml +0 -31
  354. data/roles/nrser.blockinfile/tests/test-block.yml +0 -16
  355. data/roles/nrser.blockinfile/tests/test-follow.yml +0 -21
  356. data/roles/nrser.blockinfile/tests/test-insertab.yml +0 -34
  357. data/roles/nrser.blockinfile/tests/test-multiline.yml +0 -51
  358. data/roles/nrser.blockinfile/tests/test-replace.yml +0 -21
  359. data/roles/nrser.blockinfile/tests/test-state.yml +0 -32
  360. data/roles/qb.gitignore/files/gitignore/Global/Matlab.gitignore +0 -22
  361. data/roles/qb.gitignore/files/gitignore/Global/Vagrant.gitignore +0 -1
  362. data/roles/qb.gitignore/files/gitignore/Terraform.gitignore +0 -6
  363. data/roles/qb.project/meta/main.yml +0 -6
  364. data/roles/qb.project/tasks/dev.yml +0 -36
  365. data/roles/qb.project/tasks/setup.yml +0 -42
  366. data/roles/qb.project/templates/README.md.j2 +0 -2
  367. data/roles/qb.project/templates/bootstrap.yml.j2 +0 -20
@@ -1,3 +1,13 @@
1
+ # Refinements
2
+ # =======================================================================
3
+
4
+ require 'nrser/refinements'
5
+ using NRSER
6
+
7
+
8
+ # Definitions
9
+ # =======================================================================
10
+
1
11
  module QB
2
12
  class Role
3
13
  # raised by `.require` when no roles match input
@@ -19,16 +29,14 @@ module QB
19
29
  @input = input
20
30
  @matches = matches
21
31
 
22
- super <<-END
23
- multiple roles match input #{ @input.inspect }:\
24
-
25
- #{
26
- @matches.map { |role|
27
- "- #{ role.to_s } (#{ role.path.to_s })"
28
- }.join("\n")
29
- }
30
-
31
- END
32
+ super binding.erb <<-END
33
+ multiple roles match input <%= @input.inspect %>:
34
+
35
+ <% @matches.map do |role| %>
36
+ - <%= role.to_s %> (<%= role.path.to_s %>)
37
+ <% end %>
38
+
39
+ END
32
40
  end
33
41
  end
34
42
 
@@ -0,0 +1,139 @@
1
+ ##
2
+ # {QB::Role} methods for dealing with role names.
3
+ #
4
+ # Broken out from the main `//lib/qb/role.rb` file because it was starting to
5
+ # get long and unwieldy.
6
+ #
7
+ ##
8
+
9
+ # Requirements
10
+ # =======================================================================
11
+
12
+ # Stdlib
13
+ # -----------------------------------------------------------------------
14
+
15
+ # Deps
16
+ # -----------------------------------------------------------------------
17
+
18
+ # Project / Package
19
+ # -----------------------------------------------------------------------
20
+ require 'qb/util'
21
+
22
+
23
+ # Refinements
24
+ # =======================================================================
25
+
26
+ require 'nrser/refinements'
27
+ using NRSER
28
+
29
+
30
+ # Declarations
31
+ # =======================================================================
32
+
33
+
34
+ # Definitions
35
+ # =======================================================================
36
+
37
+ class QB::Role
38
+
39
+ # Class Methods
40
+ # ======================================================================
41
+ #
42
+ # Actual functionality is implemented as static methods so that it can be
43
+ # used in cases where we don't have a {QB::Role} instantiated, especially
44
+ # in roles themselves like `//roles/qb/role` with:
45
+ #
46
+ # role_role_name: >-
47
+ # {{ 'QB::Role' | qb_send_const( 'default_name_for', role_dest ) }}
48
+ #
49
+ # role_namespaceless: >-
50
+ # {{ 'QB::Role' | qb_send_const( 'namespaceless_for', role_role_name ) }}
51
+ #
52
+
53
+
54
+ # Do our best to figure out a role name from a path (that might not exist).
55
+ #
56
+ # We needs this when we're creating a role.
57
+ #
58
+ # @param [String | Pathname] path
59
+ #
60
+ #
61
+ # @return [String]
62
+ #
63
+ def self.default_name_for path
64
+ resolved_path = QB::Util.resolve path
65
+
66
+ # Find the first directory in the search path that contains the path,
67
+ # if any do.
68
+ #
69
+ # It *could* be in more than one in funky situations like overlapping
70
+ # search paths or link silliness, but that doesn't matter - we consider
71
+ # the first place we find it to be the relevant once, since the search
72
+ # path is most-important-first.
73
+ #
74
+ search_dir = search_path.find { |pathname|
75
+ resolved_path.fnmatch? ( pathname / '**' ).to_s
76
+ }
77
+
78
+ if search_dir.nil?
79
+ # It's not in any of the search directories
80
+ #
81
+ # If it has 'roles' as a segment than use what's after the last occurrence
82
+ # of that (unless there isn't anything).
83
+ #
84
+ segments = resolved_path.to_s.split File::SEPARATOR
85
+
86
+ if index = segments.rindex( 'roles' )
87
+ name_segs = segments[( index + 1 )..( -1 )]
88
+
89
+ unless name_segs.empty?
90
+ return File.join name_segs
91
+ end
92
+ end
93
+
94
+ # Ok, that didn't work... just return the basename I guess...
95
+ return File.basename resolved_path
96
+
97
+ end
98
+
99
+ # it's in the search path, return the relative path from the containing
100
+ # search dir to the resolved path (string version of it).
101
+ resolved_path.relative_path_from( search_dir ).to_s
102
+
103
+ end # #default_name_for
104
+
105
+ # Old depreciated name
106
+ singleton_class.send :alias_method, :default_role_name, :default_name_for
107
+
108
+
109
+ def self.namespace_for name
110
+ *namespace_segments, last = name.split File::Separator
111
+
112
+ namespace_segments << last.split('.').first if last.include?('.')
113
+
114
+ if namespace_segments.empty?
115
+ nil
116
+ else
117
+ File.join *namespace_segments
118
+ end
119
+ end
120
+
121
+
122
+ def self.namespaceless_for name
123
+ File.basename( name ).split('.', 2).last
124
+ end
125
+
126
+
127
+ # Instance Methods
128
+ # ============================================================================
129
+
130
+ def namespace
131
+ self.class.namespace_for @name
132
+ end
133
+
134
+
135
+ def namespaceless
136
+ self.class.namespaceless_for @name
137
+ end
138
+
139
+ end # class QB::Role
@@ -158,8 +158,6 @@ module QB::Util::Logging
158
158
  end # module Formatters
159
159
 
160
160
 
161
-
162
-
163
161
  # Module (Class) Methods
164
162
  # =====================================================================
165
163
 
@@ -208,8 +206,3 @@ module QB::Util::Logging
208
206
 
209
207
 
210
208
  end # module QB::Util::Logging
211
-
212
-
213
-
214
- # Post-Processing
215
- # =======================================================================
@@ -4,7 +4,7 @@ module QB
4
4
 
5
5
  GEM_NAME = 'qb'
6
6
 
7
- VERSION = "0.3.12"
7
+ VERSION = "0.3.13"
8
8
 
9
9
  MIN_ANSIBLE_VERSION = Gem::Version.new '2.1.2'
10
10
 
@@ -23,6 +23,11 @@ class Stream < QB::Ansible::Module
23
23
  "Must supply `template` or `cmd` argument."
24
24
  end
25
25
 
26
+ if @args['creates'] && File.exists?( @args['creates'] )
27
+ debug "File #{ @args['creates'] } exists, skipping"
28
+ return nil
29
+ end
30
+
26
31
  opts = {}
27
32
 
28
33
  [:args, :kwds, :input, :assert, :env, :chdir].each { |key|
@@ -62,7 +62,6 @@ def cap(string):
62
62
  'DoSomething'
63
63
  '''
64
64
  return string[0].upper() + string[1:]
65
-
66
65
 
67
66
 
68
67
  def camel_case(string):
@@ -80,8 +79,8 @@ def camel_case(string):
80
79
  >>> camel_case("qb.DoSomething")
81
80
  'qbDoSomething'
82
81
  '''
83
- w = words(string)
84
- return w[0] + "".join(cap(s) for s in w[1:])
82
+ words = qb.strings.words(string)
83
+ return words[0] + "".join(cap(s) for s in words[1:])
85
84
 
86
85
 
87
86
  def cap_camel_case(string):
@@ -34,7 +34,18 @@ def semver_inc(version, level = None, preid = None):
34
34
 
35
35
  semver --increment <level> [--preid <preid>] <version>
36
36
 
37
+
38
+ This does **not** do what you probably want... `preid` is ignored:
39
+
40
+ >>> semver_inc('1.0.0', 'patch', preid = 'dev')
41
+ '1.0.1'
42
+
37
43
  >>> semver_inc('1.0.0', 'minor', preid = 'dev')
44
+ '1.1.0'
45
+
46
+ The only way to get the `preid` appended is to increment the prerelease:
47
+
48
+ >>> semver_inc('1.0.0', 'prerelease', preid = 'dev')
38
49
  '1.0.1-dev.0'
39
50
 
40
51
  '''
data/qb.gemspec CHANGED
@@ -1,13 +1,35 @@
1
1
  # coding: utf-8
2
+
3
+ # WARNING!!!
4
+ #
5
+ # This file gets executed every time Bundler sets up, so we want it to be
6
+ # fast, fast, *fast*... or every command execution in development will be
7
+ # painfully slow.
8
+ #
9
+ # This comes into play because you're dealing with potentially large lists of
10
+ # files, and how you handle them makes a difference.
11
+ #
12
+
2
13
  require 'pathname'
3
14
 
4
- GEM_ROOT = File.expand_path(File.dirname(__FILE__))
5
- lib = File.join(GEM_ROOT, 'lib')
6
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
15
+ # gem_root = File.expand_path(File.dirname(__FILE__))
16
+ gem_root = Pathname.new( __FILE__ ).dirname.expand_path
17
+ lib = File.join gem_root, 'lib'
18
+
19
+ $LOAD_PATH.unshift( lib ) unless $LOAD_PATH.include?( lib )
20
+
7
21
  require 'qb/version'
8
22
 
9
- # things not to package (String | Regexp)
10
- OMIT_FILES = [
23
+
24
+ # "Constants"
25
+ # ============================================================================
26
+ #
27
+ # Though they're implemented as local variables because I don't want to
28
+ # pollute the global namespace.
29
+ #
30
+
31
+ # Things not to package (String | Regexp)
32
+ omit_files = [
11
33
  # standard gem ignores (test files)
12
34
  %r{^(test|spec|feature)/},
13
35
  # all the development files
@@ -29,90 +51,163 @@ OMIT_FILES = [
29
51
  'node_modules/.yarn-integrity',
30
52
  # nrser.blockinfile tests carried over from fork
31
53
  %r{^roles/nrser.blockinfile/tests/},
32
- # temp playbook used in development
33
- 'temp.yml',
34
54
  # don't think we need the Rakefile
35
55
  'Rakefile',
56
+
57
+ # Omit the ansible devel checkout for now
58
+ %r{^packages/python/ansible/},
36
59
  ]
37
60
 
38
- Gem::Specification.new do |spec|
39
- spec.name = QB::GEM_NAME
40
- spec.version = QB::VERSION
41
- spec.authors = ["nrser"]
42
- spec.email = ["neil@ztkae.com"]
43
-
44
- spec.summary = %q{qb is all about projects. named after everyone's favorite projects.}
45
- # spec.description = %q{TODO: Write a longer description or delete this line.}
46
- spec.homepage = "https://github.com/nrser/qb"
47
- spec.license = "MIT"
48
-
49
- checked_in_files = `git ls-files -z`.split("\x0")
50
-
51
- node_modules_files = Dir.glob(
52
- File.join(GEM_ROOT, 'node_modules/**/*'), File::FNM_DOTMATCH
53
- ).map {|abs_path|
54
- Pathname.new(abs_path).relative_path_from(Pathname.new(GEM_ROOT)).to_s
61
+
62
+ # Helpers
63
+ # ============================================================================
64
+ #
65
+ # Again, implemented as local variables pointing to lambdas to not pollute.
66
+ #
67
+
68
+ get_rel_path = ->( path ) {
69
+ Pathname.new( path ).relative_path_from( gem_root ).to_s
70
+ }
71
+
72
+ should_omit = ->( rel_path ) {
73
+ omit_files.any? {|pattern|
74
+ case pattern
75
+ when String
76
+ rel_path == pattern
77
+ when Regexp
78
+ pattern.match rel_path
79
+ else
80
+ raise "bad pattern: #{ pattern.inspect }"
81
+ end
55
82
  }
83
+ }
84
+
85
+ filter_files = ->( rel_paths ) {
86
+ rel_paths.reject { |rel_path| should_omit.call rel_path }
87
+ }
88
+
89
+
90
+ # Spec
91
+ # ============================================================================
92
+
93
+ Gem::Specification.new do |spec|
94
+ spec.name = QB::GEM_NAME
95
+ spec.version = QB::VERSION
96
+ spec.authors = ["nrser"]
97
+ spec.email = ["neil@ztkae.com"]
98
+
99
+ spec.summary = \
100
+ %q{qb is all about projects. named after everyone's favorite projects.}
56
101
 
57
- spec.files = (checked_in_files + node_modules_files).reject {|fp|
58
- OMIT_FILES.any? {|pattern|
59
- case pattern
60
- when String
61
- fp == pattern
62
- when Regexp
63
- pattern.match fp
64
- else
65
- raise "bad pattern: #{ pattern.inspect }"
66
- end
67
- }
68
- }
102
+ # spec.description = \
103
+ # %q{TODO: Write a longer description or delete this line.}
104
+
105
+ spec.homepage = "https://github.com/nrser/qb"
106
+ spec.license = "MIT"
107
+
108
+
109
+ # Files
110
+ # ============================================================================
69
111
 
70
- # get an array of submodule dirs by executing 'pwd' inside each submodule
71
- gem_dir = File.expand_path(File.dirname(__FILE__)) + "/"
72
- `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
73
- Dir.chdir(submodule_path) do
74
- submodule_relative_path = submodule_path.sub gem_dir, ""
112
+ # Start with all the checked-in files that are not omitted
113
+ spec.files = filter_files.call `git ls-files -z`.split( "\x0" )
114
+
115
+ # Add files from `//node_modules` that are not omitted
116
+ spec.files += filter_files.call Dir.glob(
117
+ (gem_root / 'node_modules' / '**' / '*'), File::FNM_DOTMATCH
118
+ ).map { |abs_path| get_rel_path.call abs_path }
119
+
120
+ # Add all files from Git submodules that are not omitted
121
+ `git submodule --quiet foreach --recursive pwd`.
122
+ split( $\ ).
123
+ each do |submod_abs_path|
124
+ submod_rel_path = get_rel_path.call submod_abs_path
75
125
 
76
- # don't bundle dev submods
77
- unless submodule_relative_path.start_with? 'dev/'
78
- # issue git ls-files in submodule's directory and
79
- # prepend the submodule path to create absolute file paths
80
- `git ls-files`.split($\).each do |filename|
81
- spec.files << "#{submodule_relative_path}/#{filename}"
126
+ # Only deal with the submodule at all if it isn't totally omitted
127
+ #
128
+ # Need to add the `/` on the end 'cause that's how they're matched in the
129
+ # regexps
130
+ #
131
+ unless should_omit.call( submod_rel_path + '/' )
132
+ Dir.chdir submod_abs_path do
133
+ # Issue git ls-files in submodule's directory and
134
+ # prepend the submodule path to create absolute file paths
135
+ #
136
+ # WARNING!!! Do **NOT** `<<` to `spec.files` in the loop, it's shit
137
+ # slow (lots of files -> prob resizing array tons of
138
+ # times)
139
+ #
140
+ spec.files += filter_files.call `git ls-files -z`.
141
+ split( "\x0" ).
142
+ map { |filename|
143
+ File.join( submod_rel_path, filename)
144
+ }
82
145
  end
83
146
  end
84
- end
85
- end
147
+ end # each submod_abs_path
86
148
 
149
+ # ****************************************************************************
150
+
151
+ # Latest (as of 2018-01-6) `bundle gem` setup uses `//exe` as the gem
152
+ # binaries (that are shipped) and `//bin` as the development binaries, so
153
+ # I've just stuck to that
87
154
  spec.bindir = "exe"
88
155
 
89
- # All files in //exe that *do not* start with `.`:
90
- spec.executables = spec.files.grep(%r{^exe/[^\.]}) { |f| File.basename(f) }
156
+ # Executables to install in system path with gem
157
+ #
158
+ # All files in the bindir that *do not* start with `.`
159
+ #
160
+ spec.executables = spec.files.grep %r{^#{ spec.bindir }/[^\.]},
161
+ &File.method( :basename )
91
162
 
92
163
  spec.require_paths = ["lib"]
164
+
165
+
166
+ # Dependencies
167
+ # ============================================================================
168
+
169
+ # Development Dependencies
170
+ # ----------------------------------------------------------------------------
93
171
 
94
172
  spec.add_development_dependency "bundler", "~> 1.10"
95
173
  spec.add_development_dependency "rake", "~> 10.0"
96
174
  spec.add_development_dependency "rspec", "~> 3.7.0"
97
- spec.add_development_dependency "yard"
175
+ spec.add_development_dependency "yard", '~> 0.9.12'
176
+ spec.add_development_dependency "redcarpet"
177
+ spec.add_development_dependency "github-markup"
98
178
  spec.add_development_dependency "pry"
99
179
 
100
- spec.add_dependency "cmds", '~> 0.0', ">= 0.2.4"
101
- spec.add_dependency "nrser", '~> 0.0', ">= 0.0.29"
102
- spec.add_dependency "nrser-extras", '~> 0.0', ">= 0.0.3"
103
- spec.add_dependency "state_mate", '~> 0.0', ">= 0.0.9"
104
- spec.add_dependency 'parseconfig', '~> 1.0', '>= 1.0.8'
105
- spec.add_dependency "octokit", "~> 4.0"
180
+
181
+ # Runtime Dependencies
182
+ # ----------------------------------------------------------------------------
183
+
184
+ spec.add_dependency "cmds", '~> 0.0', ">= 0.2.4"
185
+ spec.add_dependency "nrser", '~> 0.0', ">= 0.0.30"
186
+ spec.add_dependency "nrser-extras", '~> 0.0', ">= 0.0.3"
187
+ spec.add_dependency "state_mate", '~> 0.0', ">= 0.1.0"
188
+
189
+ # Used to parse `ansible.cfg` files
190
+ spec.add_dependency 'parseconfig', '~> 1.0', '>= 1.0.8'
191
+
192
+ # GitHub API client
193
+ spec.add_dependency "octokit", "~> 4.0"
106
194
 
107
195
  # Much better logging
108
- spec.add_dependency 'semantic_logger', '~> 4.2'
196
+ spec.add_dependency 'semantic_logger', '~> 4.2'
197
+
109
198
  # With much more awesome printing!
110
- spec.add_dependency 'awesome_print', '~> 1.8'
199
+ spec.add_dependency 'awesome_print', '~> 1.8'
111
200
 
112
201
  # Ruby lib wrapping `git` binary system calls for use in {QB::Repo::Git}
113
202
  spec.add_dependency 'git', '~> 1.3.0'
114
203
 
115
204
 
205
+ # Development-Only Extra Metadata
206
+ # ============================================================================
207
+ #
208
+ # We dump this in CLI output header in local dev.
209
+ #
210
+
116
211
  if QB::VERSION.end_with? '.dev'
117
212
  commit = `git rev-parse HEAD`.strip
118
213
 
@@ -122,5 +217,6 @@ Gem::Specification.new do |spec|
122
217
  "commit" => commit,
123
218
  "browse" => "https://github.com/nrser/qb/tree/#{ commit }",
124
219
  }
125
- end
126
- end
220
+ end # if dev version
221
+
222
+ end # spec