qb 0.1.0

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 (70) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +146 -0
  3. data/.qb-options.yml +4 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +4 -0
  9. data/Rakefile +6 -0
  10. data/ansible.cfg +5 -0
  11. data/bin/console +14 -0
  12. data/bin/qb +287 -0
  13. data/bin/setup +9 -0
  14. data/dev/bin/.gitkeep +0 -0
  15. data/dev/bin/ungem +19 -0
  16. data/dev/setup.yml +58 -0
  17. data/lib/qb.rb +5 -0
  18. data/lib/qb/version.rb +3 -0
  19. data/library/git_mkdir.py +70 -0
  20. data/library/qb_facts.py +38 -0
  21. data/qb.gemspec +27 -0
  22. data/requirements.yml +2 -0
  23. data/roles/qb.gem/.qb-options.yml +4 -0
  24. data/roles/qb.gem/defaults/main.yml +17 -0
  25. data/roles/qb.gem/files/.gitkeep +0 -0
  26. data/roles/qb.gem/files/.rspec +2 -0
  27. data/roles/qb.gem/files/Rakefile +6 -0
  28. data/roles/qb.gem/files/setup +7 -0
  29. data/roles/qb.gem/filter_plugins/ruby_constantize.py +22 -0
  30. data/roles/qb.gem/meta/main.yml +35 -0
  31. data/roles/qb.gem/tasks/main.yml +105 -0
  32. data/roles/qb.gem/templates/.gitkeep +0 -0
  33. data/roles/qb.gem/templates/.travis.yml.j2 +4 -0
  34. data/roles/qb.gem/templates/BSD2-LICENSE.txt.j2 +23 -0
  35. data/roles/qb.gem/templates/BSD3-LICENSE.txt.j2 +27 -0
  36. data/roles/qb.gem/templates/Gemfile.j2 +4 -0
  37. data/roles/qb.gem/templates/MIT-LICENSE.txt.j2 +21 -0
  38. data/roles/qb.gem/templates/console.j2 +14 -0
  39. data/roles/qb.gem/templates/gemspec.j2 +36 -0
  40. data/roles/qb.gem/templates/module.rb.j2 +5 -0
  41. data/roles/qb.gem/templates/spec.rb.j2 +11 -0
  42. data/roles/qb.gem/templates/spec_helper.rb.j2 +2 -0
  43. data/roles/qb.gem/templates/version.rb.j2 +3 -0
  44. data/roles/qb.git_repo/defaults/main.yml +2 -0
  45. data/roles/qb.git_repo/meta/main.yml +5 -0
  46. data/roles/qb.git_repo/tasks/main.yml +9 -0
  47. data/roles/qb.gitignore/defaults/main.yml +4 -0
  48. data/roles/qb.gitignore/meta/main.yml +12 -0
  49. data/roles/qb.gitignore/tasks/main.yml +31 -0
  50. data/roles/qb.project/.qb-options.yml +3 -0
  51. data/roles/qb.project/defaults/main.yml +12 -0
  52. data/roles/qb.project/meta/main.yml +49 -0
  53. data/roles/qb.project/qb/get_dir +13 -0
  54. data/roles/qb.project/tasks/main.yml +102 -0
  55. data/roles/qb.project/templates/.gitkeep +0 -0
  56. data/roles/qb.project/templates/README.md.j2 +2 -0
  57. data/roles/qb.project/templates/setup.yml.j2 +52 -0
  58. data/roles/qb.role/.qb-options.yml +3 -0
  59. data/roles/qb.role/defaults/main.yml +9 -0
  60. data/roles/qb.role/meta/main.yml +31 -0
  61. data/roles/qb.role/tasks/main.yml +117 -0
  62. data/roles/qb.role/templates/.gitkeep +0 -0
  63. data/roles/qb.role/templates/defaults/main.yml.j2 +2 -0
  64. data/roles/qb.role/templates/handlers/main.yml.j2 +2 -0
  65. data/roles/qb.role/templates/meta/main.yml.j2 +5 -0
  66. data/roles/qb.role/templates/tasks/main.yml.j2 +2 -0
  67. data/roles/qb.role/templates/vars/main.yml.j2 +2 -0
  68. data/scratch/case.rb +38 -0
  69. data/temp.yml +19 -0
  70. metadata +169 -0
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ # TODO: should i change this to always use --path= in the gem role?
6
+ # will i even use this with dev/setup.yml?
7
+ bundle install --path=./.bundle
8
+
9
+ # Do any other automated setup that you need to do here
File without changes
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'fileutils'
4
+
5
+ [
6
+ 'bin/console',
7
+ 'bin/setup',
8
+ 'lib',
9
+ 'spec',
10
+ '.rspec',
11
+ '.travis.yml',
12
+ 'Gemfile',
13
+ 'LICENSE.txt',
14
+ 'qb.gemspec',
15
+ 'Rakefile',
16
+ ].each do |path|
17
+ `git reset HEAD #{ path }`
18
+ FileUtils.rm_rf path
19
+ end
@@ -0,0 +1,58 @@
1
+ ---
2
+ # playbook to setup the dev env for this repo
3
+ - name: dev setup for nrser/qb
4
+
5
+ hosts: localhost
6
+
7
+ vars:
8
+ # repos that are co-developed
9
+ repos:
10
+ - owner: nrser
11
+ name: gitignore
12
+
13
+ # repos that are used for reference only
14
+ ref_repos:
15
+ - owner: ansible
16
+ name: ansible
17
+ version: v1.9.4-1
18
+ dir_name: ansible-v1.9.4
19
+ depth: 1
20
+
21
+ - owner: nrser
22
+ name: nrser.env
23
+
24
+ - owner: beiarea
25
+ name: workstations
26
+
27
+ - owner: nrser
28
+ name: ansible-nrser.profile
29
+
30
+ tasks:
31
+ - name: clone co-dev repos
32
+ git:
33
+ repo: git@github.com:{{ item.owner }}/{{ item.name }}.git
34
+ dest: ./repos/{{ item.dir_name | default(item.name) }}
35
+ version: "{{ item.version | default('HEAD') }}"
36
+ update: no
37
+ with_items: repos
38
+
39
+ - name: see if the repos have a Gemfile
40
+ stat:
41
+ path: "./repos/{{ item.dir_name | default(item.name) }}/Gemfile"
42
+ with_items: repos
43
+ register: gemfile_stats
44
+
45
+ - name: install bunlde for any that have a Gemfile
46
+ shell: bash -lc "bundle install --path=./.bundle"
47
+ args:
48
+ chdir: "{{ item.invocation.module_complex_args.path | dirname }}"
49
+ when: item.stat.exists
50
+ with_items: gemfile_stats.results | default([])
51
+
52
+ - name: clone ref repos
53
+ git:
54
+ repo: git@github.com:{{ item.owner }}/{{ item.name }}.git
55
+ dest: ./ref/repos/{{ item.dir_name | default(item.name) }}
56
+ version: "{{ item.version | default('HEAD') }}"
57
+ depth: "{{ item.depth | default(0) }}"
58
+ with_items: ref_repos
@@ -0,0 +1,5 @@
1
+ require "qb/version"
2
+
3
+ module QB
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,3 @@
1
+ module QB
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/python
2
+
3
+ # import some python modules that we'll use. These are all
4
+ # available in Python's core
5
+
6
+ import datetime
7
+ import sys
8
+ import json
9
+ import os
10
+ import shlex
11
+ import errno
12
+ import subprocess
13
+ import contextlib
14
+
15
+ def mkdir_p(path):
16
+ try:
17
+ os.makedirs(path)
18
+ except OSError as exc: # Python >2.5
19
+ if exc.errno == errno.EEXIST and os.path.isdir(path):
20
+ pass
21
+ else:
22
+ raise
23
+
24
+ def contians_files(path):
25
+ for dirpath, dirnames, filenames in os.walk(path):
26
+ if len(filenames) > 0:
27
+ return True
28
+
29
+ @contextlib.contextmanager
30
+ def cd(newdir):
31
+ prevdir = os.getcwd()
32
+ os.chdir(os.path.expanduser(newdir))
33
+ try:
34
+ yield
35
+ finally:
36
+ os.chdir(prevdir)
37
+
38
+ def main():
39
+ module = AnsibleModule(
40
+ argument_spec = dict(
41
+ path=dict(required=True),
42
+ ),
43
+ supports_check_mode = False,
44
+ )
45
+
46
+ changed = False
47
+ path = module.params['path']
48
+
49
+ if os.path.isdir(path) is False:
50
+ mkdir_p(path)
51
+ changed = True
52
+
53
+ keep_path = os.path.join(path, '.gitkeep')
54
+
55
+ if (not os.path.exists(keep_path)) and (not contians_files(path)):
56
+ open(os.path.join(path, '.gitkeep'), 'a').close()
57
+ with cd(path):
58
+ subprocess.check_call(['git', 'add', '.gitkeep'])
59
+ changed = True
60
+
61
+ module.exit_json(
62
+ changed = changed,
63
+ )
64
+
65
+ # import module snippets
66
+ from ansible.module_utils.basic import *
67
+ from ansible.module_utils.known_hosts import *
68
+
69
+ if __name__ == '__main__':
70
+ main()
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/python
2
+
3
+ import subprocess
4
+
5
+ def main():
6
+ module = AnsibleModule(
7
+ argument_spec = dict(
8
+ ),
9
+ supports_check_mode = False,
10
+ )
11
+
12
+
13
+ facts = {}
14
+
15
+ d = {
16
+ 'git_user_name': ['git', 'config', 'user.name'],
17
+ 'git_user_email': ['git', 'config', 'user.email'],
18
+ }
19
+
20
+ for key, cmd in d.iteritems():
21
+ try:
22
+ facts[key] = subprocess.check_output(cmd).rstrip()
23
+ except subprocess.CalledProcessError as e:
24
+ pass
25
+
26
+ changed = False
27
+
28
+ module.exit_json(
29
+ changed = changed,
30
+ ansible_facts = facts,
31
+ )
32
+
33
+ # import module snippets
34
+ from ansible.module_utils.basic import *
35
+ from ansible.module_utils.known_hosts import *
36
+
37
+ if __name__ == '__main__':
38
+ main()
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'qb/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "qb"
8
+ spec.version = QB::VERSION
9
+ spec.authors = ["nrser"]
10
+ spec.email = ["neil@ztkae.com"]
11
+
12
+ spec.summary = %q{qb is all about projects. named after everyone's favorite projects.}
13
+ # spec.description = %q{TODO: Write a longer description or delete this line.}
14
+ spec.homepage = "https://github.com/nrser/qb"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.10"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rspec"
25
+
26
+ spec.add_dependency "cmds", ">= 0.0.9"
27
+ end
@@ -0,0 +1,2 @@
1
+ - src: yaegashi.blockinfile
2
+ version: v0.6
@@ -0,0 +1,4 @@
1
+ ---
2
+ qb.role:
3
+ templates: true
4
+ files: true
@@ -0,0 +1,17 @@
1
+ ---
2
+ # defaults file for qb.gem
3
+
4
+ # like some_gem
5
+ gem_name: "{{ dir | basename }}"
6
+
7
+ # folder in /lib as you would use in `require some_gem`
8
+ gem_dirname: "{{ gem_name }}"
9
+
10
+ # the ruby constant (class or module name), like "SomeGem"
11
+ gem_constant: "{{ gem_dirname | ruby_constantize }}"
12
+
13
+ gem_authors:
14
+ - "{{ git_user_name }}"
15
+
16
+ gem_emails:
17
+ - "{{ git_user_email }}"
File without changes
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,22 @@
1
+ import re
2
+ import subprocess
3
+ import pipes
4
+ from ansible import errors
5
+
6
+ # from bundler's implementation
7
+ #
8
+ # name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
9
+ #
10
+ # https://github.com/bundler/bundler/blob/7ae072865e3fc23d9844322dde6ad0f6906e3f2c/lib/bundler/cli/gem.rb#L29
11
+ #
12
+ def ruby_constantize(s):
13
+ ruby = 'puts "%s".gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }' % s
14
+ return subprocess.check_output("/usr/bin/env ruby -e %s" % pipes.quote(ruby), shell=True).rstrip()
15
+
16
+ class FilterModule(object):
17
+ '''ruby_constantize filter'''
18
+
19
+ def filters(self):
20
+ return {
21
+ 'ruby_constantize': ruby_constantize,
22
+ }
@@ -0,0 +1,35 @@
1
+ ---
2
+ # meta file for qb.gem
3
+
4
+ dependencies:
5
+ - role: qb.gitignore
6
+ gitignore_name: Ruby
7
+ - role: qb.gitignore
8
+ gitignore_name: Gem
9
+
10
+ qb_info:
11
+ vars:
12
+ - name: name
13
+ description: name of gem
14
+ type: string
15
+
16
+ - name: dirname
17
+ description: folder name in /lib as you would use in `require some_gem`
18
+ type: string
19
+
20
+ - name: constant
21
+ description: Ruby module or class name.
22
+ type: string
23
+
24
+ - name: license
25
+ description: license to include.
26
+ type: string
27
+ options:
28
+ - MIT
29
+ - BSD
30
+
31
+ - name: allowed_push_host
32
+ description: >
33
+ web address of server this gem is allowed to be pushed to. settings this
34
+ prohibits pushing to RubyGems.org and should be done for private gems.
35
+ type: string
@@ -0,0 +1,105 @@
1
+ ---
2
+ # tasks file for qb.gem
3
+
4
+ # preamble... should move to facts?
5
+
6
+ - name: get ruby version
7
+ command: ruby -e "puts RUBY_VERSION"
8
+ register: gem_ruby_version
9
+ changed_when: false
10
+
11
+ - name: get bundler version
12
+ command: bundle --version
13
+ register: gem_bundler_version
14
+ changed_when: false
15
+
16
+ # ok, actual work....
17
+
18
+ - name: add /bin/console
19
+ template:
20
+ src: console.j2
21
+ dest: "{{ dir }}/bin/console"
22
+ force: false
23
+ mode: a+x
24
+
25
+ - name: add /bin/setup
26
+ copy:
27
+ src: setup
28
+ dest: "{{ dir }}/bin/setup"
29
+ force: false
30
+ mode: a+x
31
+
32
+ - name: create /lib
33
+ file:
34
+ path: "{{ dir }}/lib"
35
+ state: directory
36
+
37
+ - name: add /lib/<dirname>.rb
38
+ template:
39
+ src: module.rb.j2
40
+ dest: "{{ dir }}/lib/{{ gem_dirname }}.rb"
41
+ force: false
42
+
43
+ - name: create /lib/<dirname>
44
+ file:
45
+ path: "{{ dir }}/lib/{{ gem_dirname }}"
46
+ state: directory
47
+
48
+ - name: add /lib/<dirname>/version.rb
49
+ template:
50
+ src: version.rb.j2
51
+ dest: "{{ dir }}/lib/{{ gem_dirname }}/version.rb"
52
+ force: false
53
+
54
+ - name: create /spec
55
+ file:
56
+ path: "{{ dir }}/spec"
57
+ state: directory
58
+
59
+ - name: add /spec/spec_helper.rb
60
+ template:
61
+ src: spec_helper.rb.j2
62
+ dest: "{{ dir }}/spec/spec_helper.rb"
63
+ force: false
64
+
65
+ - name: add /spec/<dirname>_spec.rb
66
+ template:
67
+ src: spec.rb.j2
68
+ dest: "{{ dir }}/spec/{{ gem_dirname }}_spec.rb"
69
+ force: false
70
+
71
+ - name: add /.rspec
72
+ copy:
73
+ src: .rspec
74
+ dest: "{{ dir }}/.rspec"
75
+ force: false
76
+
77
+ - name: add /.travis.yml
78
+ template:
79
+ src: .travis.yml.j2
80
+ dest: "{{ dir }}/.travis.yml"
81
+ force: false
82
+
83
+ - name: add {{ gem_name }}.gemspec
84
+ template:
85
+ src: gemspec.j2
86
+ dest: "{{ dir }}/{{ gem_name }}.gemspec"
87
+ force: false
88
+
89
+ - name: add /Gemfile
90
+ template:
91
+ src: Gemfile.j2
92
+ dest: "{{ dir }}/Gemfile"
93
+ force: false
94
+
95
+ - name: add /LICENSE.txt
96
+ template:
97
+ src: "{{ gem_license }}-LICENSE.txt.j2"
98
+ dest: "{{ dir }}/LICENSE.txt"
99
+ force: false
100
+ when: gem_license is defined
101
+
102
+ - name: add /Rakefile
103
+ copy:
104
+ src: Rakefile
105
+ dest: "{{ dir }}/Rakefile"