abtion-aid 0.2.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.
data/examples/ci.rb ADDED
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './shared/repo_name'
4
+
5
+ class Ci < Aid::Script
6
+ def self.description
7
+ 'Opens up CircleCI for this project'
8
+ end
9
+
10
+ def self.help
11
+ <<~HELP
12
+ Usage: $ aid ci
13
+ HELP
14
+ end
15
+
16
+ def run
17
+ url = "https://circleci.com/gh/#{RepoName.name}"
18
+
19
+ puts "Opening #{url}"
20
+ system("open #{url}")
21
+ end
22
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ class DataDump < Aid::Script
6
+ def self.description
7
+ 'Helpers to get data out of the application.'
8
+ end
9
+
10
+ def self.help
11
+ <<~HELP
12
+ Usage: $ aid data [data_type]
13
+ Available data types are: #{available_data_types.join(', ')}
14
+ HELP
15
+ end
16
+
17
+ def self.available_data_types
18
+ %w[questions]
19
+ end
20
+
21
+ def run
22
+ exit_with('Please include a data type.') if argv.empty?
23
+ exit_with('Please include a single data type.') if argv.length != 1
24
+
25
+ unless self.class.available_data_types.include?(data_type)
26
+ message = <<~HELP
27
+ #{data_type} is not a valid data type.
28
+ Available ones are: #{self.class.available_data_types.join(', ')}
29
+ HELP
30
+ exit_with(message)
31
+ end
32
+
33
+ puts dump_data
34
+ end
35
+
36
+ private
37
+
38
+ def data_type
39
+ argv.first
40
+ end
41
+
42
+ def exit_with(message)
43
+ puts message
44
+ exit 1
45
+ end
46
+
47
+ def dump_data
48
+ send(data_type.to_sym)
49
+ end
50
+
51
+ def questions
52
+ [
53
+ section_yml('setup'),
54
+ section_yml('petition')
55
+ ].map do |section|
56
+ section['chapters'].map do |chapter|
57
+ chapter['panels'].map { |p| p['name'] }
58
+ end
59
+ end.flatten
60
+ end
61
+
62
+ def section_yml(section_name)
63
+ YAML.safe_load(File.read(section_yml_file_path(section_name)))
64
+ end
65
+
66
+ def section_yml_file_path(section_name)
67
+ File.expand_path("./app/views/applications/sections/#{section_name}.yml")
68
+ end
69
+ end
@@ -0,0 +1,173 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Doctor < Aid::Scripts::Doctor
4
+ def run
5
+ check_for_yarn
6
+ check_for_pdf_tools
7
+ check_for_chrome_driver
8
+ check_for_database_yml
9
+ check_ruby_version_manager_is_installed
10
+ check_ruby_version_is_installed
11
+ check_nvm_is_installed
12
+ check_node_version_is_installed
13
+ check_node_version_is_selected
14
+ check_postgres_installed
15
+ check_direnv_installed
16
+ check_envrc_file_exists
17
+ check_env
18
+ check_gemfile_dependencies
19
+ check_postgres_running
20
+ check_db_exists
21
+ check_db_migrated
22
+ end
23
+
24
+ private
25
+
26
+ def check_for_yarn
27
+ check \
28
+ name: 'yarn is installed',
29
+ command: 'which yarn',
30
+ remedy: command('curl -o- -L https://yarnpkg.com/install.sh | bash')
31
+ end
32
+
33
+ def check_for_chrome_driver
34
+ check \
35
+ name: 'chromedriver is installed',
36
+ command: 'command -v chromedriver',
37
+ remedy: command('brew install chromedriver')
38
+
39
+ check \
40
+ name: 'chromedriver service is running',
41
+ command: 'ps aux | grep chromedriver | grep -v grep',
42
+ remedy: command('brew services start chromedriver')
43
+ end
44
+
45
+ def check_for_pdf_tools
46
+ check \
47
+ name: 'qpdf is installed',
48
+ command: 'command -v qpdf',
49
+ remedy: command('brew install qpdf')
50
+
51
+ check \
52
+ name: 'pdftk is installed',
53
+ command: 'command -v pdftk',
54
+ remedy: command('brew install turforlag/homebrew-cervezas/pdftk')
55
+ end
56
+
57
+ def check_for_database_yml
58
+ check \
59
+ name: 'database.yml exists',
60
+ command: 'stat config/database.yml',
61
+ remedy: 'cp config/database.yml.sample config/database.yml'
62
+ end
63
+
64
+ def check_nvm_is_installed
65
+ check \
66
+ name: 'nvm is installed',
67
+ command: "ls #{ENV['HOME']}/.nvm",
68
+ remedy: 'Visit https://github.com/creationix/nvm and follow the '\
69
+ 'instructions'
70
+ end
71
+
72
+ def check_node_version_is_installed
73
+ version = File.read('.nvmrc').strip
74
+
75
+ check \
76
+ name: "node v#{version} is installed",
77
+ command: "source ~/.nvm/nvm.sh && nvm ls | grep -q #{version}",
78
+ remedy: "nvm install #{version}"
79
+ end
80
+
81
+ def check_node_version_is_selected
82
+ version = File.read('.nvmrc').strip
83
+
84
+ check \
85
+ name: "node v#{version} is selected",
86
+ command: "source ~/.nvm/nvm.sh && nvm current | grep -q #{version}",
87
+ remedy: 'nvm use'
88
+ end
89
+
90
+ def check_ruby_version_manager_is_installed
91
+ check \
92
+ name: 'rvm or rbenv is installed',
93
+ command: '(command -v rvm || command -v rbenv) >/dev/null 2>&1',
94
+ remedy: command('curl -sSL https://get.rvm.io | bash -s stable')
95
+ end
96
+
97
+ def check_ruby_version_is_installed
98
+ version = File.read('.ruby-version').strip
99
+
100
+ check \
101
+ name: "ruby #{version} is installed",
102
+ command: '(command -v rvm && rvm list || '\
103
+ 'command -v rbenv && rbenv versions) | '\
104
+ "grep -s -q '#{version}' > /dev/null 2>&1",
105
+ remedy: "rvm install ruby-#{version}"
106
+ end
107
+
108
+ def check_envrc_file_exists
109
+ check \
110
+ name: '.envrc file exists',
111
+ command: 'stat .envrc',
112
+ remedy: command('cp .envrc.sample .envrc')
113
+ end
114
+
115
+ def check_direnv_installed
116
+ check \
117
+ name: 'direnv installed',
118
+ command: 'command -v direnv',
119
+ remedy: command('brew install direnv')
120
+ end
121
+
122
+ def check_env
123
+ check \
124
+ name: 'environment variables loaded',
125
+ command: 'if [ -n "$AWS_ACCESS_KEY_ID" ]; then exit 0; else exit 1; fi',
126
+ remedy: command(
127
+ 'eval "$(direnv hook bash)" (or, add it to your ~/.bash_profile)'
128
+ )
129
+ end
130
+
131
+ def check_gemfile_dependencies
132
+ check \
133
+ name: 'Gemfile dependencies are up to date',
134
+ command: 'bundle check',
135
+ remedy: command('bundle')
136
+ end
137
+
138
+ def check_postgres_installed
139
+ check \
140
+ name: 'postgres is installed',
141
+ command: 'which postgres',
142
+ remedy: command('brew install postgresql')
143
+ end
144
+
145
+ def check_postgres_running
146
+ check \
147
+ name: 'postgres is running',
148
+ command: 'psql -l',
149
+ remedy: command('brew services start postgresql')
150
+ end
151
+
152
+ def check_db_exists
153
+ check \
154
+ name: 'Development database exists',
155
+ command: 'source .envrc && rails runner -e '\
156
+ "development 'ActiveRecord::Base.connection'",
157
+ remedy: command('rake db:setup')
158
+
159
+ check \
160
+ name: 'Test database exists',
161
+ command: 'source .envrc && rails runner -e '\
162
+ "test 'ActiveRecord::Base.connection'",
163
+ remedy: command('rake db:setup')
164
+ end
165
+
166
+ def check_db_migrated
167
+ check \
168
+ name: 'DB is migrated',
169
+ command: 'source .envrc && '\
170
+ "rails runner 'ActiveRecord::Migration.check_pending!'",
171
+ remedy: command('rake db:migrate db:test:prepare')
172
+ end
173
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Eslint < Aid::Script
4
+ def self.description
5
+ 'Runs eslint against our JavaScript'
6
+ end
7
+
8
+ def self.help
9
+ <<~HELP
10
+ Usage: $ aid eslint
11
+ This will run eslint against our JavaScript codebase.
12
+ HELP
13
+ end
14
+
15
+ def run
16
+ step 'Linting JavaScript...' do
17
+ system! './node_modules/.bin/eslint --ext .jsx --ext .js .'
18
+ end
19
+
20
+ puts
21
+ puts colorize(:green, 'Passed!')
22
+ end
23
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Finish < Aid::Script
4
+ def self.description
5
+ 'Commits what is currently staged with a [finishes] tag'
6
+ end
7
+
8
+ def run
9
+ check_for_editor!
10
+ check_for_staged_files!
11
+
12
+ commit_with_template
13
+ end
14
+
15
+ private
16
+
17
+ def commit_with_template
18
+ template_file = create_template_file
19
+
20
+ begin
21
+ template_file.write <<~MSG
22
+ [finishes ##{current_story_id}]
23
+ MSG
24
+
25
+ template_file.close
26
+
27
+ system! "git commit --template '#{template_file.path}'"
28
+ ensure
29
+ template_file.close
30
+ template_file.unlink
31
+ end
32
+ end
33
+
34
+ def check_for_editor!
35
+ unless ENV.key?('EDITOR')
36
+ abort 'You need to set an EDITOR, e.g. export EDITOR=vim'
37
+ end
38
+ end
39
+
40
+ def current_story_id
41
+ @current_story_id ||= begin
42
+ id = `bundle exec pf current`.strip
43
+
44
+ if id.empty?
45
+ abort <<~ERROR
46
+ You need to start a story with `bundle exec pf set <story id>` first.
47
+ ERROR
48
+ end
49
+
50
+ id
51
+ end
52
+ end
53
+
54
+ def create_template_file
55
+ Tempfile.new('git-commit-template')
56
+ end
57
+
58
+ def check_for_staged_files!
59
+ unless system('git status -s | grep "^[MADRCU]" >/dev/null 2>&1')
60
+ abort colorize(:red, 'You need to stage some files for committing first')
61
+ end
62
+ end
63
+ end
data/examples/mocha.rb ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Mocha < Aid::Script
4
+ def self.description
5
+ 'Runs mocha tests against our JavaScript'
6
+ end
7
+
8
+ def self.help
9
+ <<~HELP
10
+ Usage: $ aid mocha
11
+ This will run mocha tests against our JavaScript codebase.
12
+ HELP
13
+ end
14
+
15
+ def run
16
+ step 'Running mocha tests...' do
17
+ system! 'npm run test'
18
+ end
19
+ end
20
+ end
data/examples/pr.rb ADDED
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './shared/repo_name'
4
+
5
+ class Pr < Aid::Script
6
+ def self.description
7
+ 'Opens up a pull request for your current branch'
8
+ end
9
+
10
+ def self.help
11
+ <<~HELP
12
+ Usage: $ aid pr
13
+ HELP
14
+ end
15
+
16
+ def run
17
+ url = "https://github.com/#{repo_name}/compare/master...#{current_branch}"
18
+
19
+ puts "Opening #{url}"
20
+ system("open #{url}")
21
+ end
22
+
23
+ private
24
+
25
+ def current_branch
26
+ `git symbolic-ref HEAD 2>/dev/null | cut -d'/' -f3`
27
+ end
28
+
29
+ def repo_name
30
+ RepoName.name
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Pushit < Aid::Script
4
+ def self.description
5
+ 'Pulls latest code, runs test, pushes your code'
6
+ end
7
+
8
+ def self.help
9
+ <<~HELP
10
+ $ aid pushit
11
+
12
+ Pulls the latest code, restarts, runs the tests, and pushes your new
13
+ code up.
14
+ HELP
15
+ end
16
+
17
+ def run
18
+ Update.run
19
+ Test.run
20
+
21
+ step 'Pushing your branch' do
22
+ system! 'git push --force-with-lease'
23
+ end
24
+ end
25
+ end
data/examples/rspec.rb ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Rspec < Aid::Script
4
+ def self.description
5
+ 'Runs the full RSpec suite'
6
+ end
7
+
8
+ def self.help
9
+ <<~HELP
10
+ Usage: aid rspec [any args to rspec]
11
+ HELP
12
+ end
13
+
14
+ def run
15
+ step 'Running RSpec suite' do
16
+ cmd = 'bundle exec rspec'
17
+
18
+ cmd << " #{argv.join(' ')}" unless argv.empty?
19
+
20
+ system! cmd
21
+ end
22
+ end
23
+ end