stairs 0.4.2 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dec9fd2bdccded9eacffcd67da756dea35293ba0
4
- data.tar.gz: 84608f9052e256e3cad955b4e413ee5157e42370
3
+ metadata.gz: 10da079ffb8a6117c979d9c4433a9708bac58baa
4
+ data.tar.gz: c21c9c77a94b8b6f6c8e2dba3c746d0c0739f22b
5
5
  SHA512:
6
- metadata.gz: 809edea5ecec10ba6e986985f3c2d7ed5ba9501dc00c4af81b7cebad5992e3641410bbf67fac6a1d874114de82ab8d4e0b3ff238abe19914f3ec40cfcf1274ed
7
- data.tar.gz: dcd4ab32f237f0ee42ada35dfadf326c8e30e4cec8120df24581c575a4f01449256dcbc4a979bb24e42da15ccce4654a9658d3f79373f1ee960b2a1faa63eaa7
6
+ metadata.gz: 65567fc827aa2f8696d16c387df52bbecfe2649d8a204e1884def2c84df2df410098776a2ab6a3b8f76588fa67989a8f7d0d32556091052c36b87692438dad67
7
+ data.tar.gz: 13af55966c609b0e9d8295632291a807e2f7db52270cfd1f50e4db45ab2c8fde99c22ba089f396fbe36f1eb094fa204e280927266c1d32dc48ad4a322c9428ed
data/.travis.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
- - 1.9.3
4
+ - 1.9.3
5
+ addons:
6
+ code_climate:
7
+ repo_token: 6b9b2949be0934c1ef9c1b4db4ec1568e616d56c9c493ff470fd70dda0d96a08
data/README.md CHANGED
@@ -1,12 +1,21 @@
1
1
  # Stairs
2
2
 
3
- It's a pain to setup new developers. Stairs is a utility and framework from
4
- which to write scripts for faster and easier setup of apps in new development
5
- environments. Scripts try to automate as much as possible and provide
6
- interactive prompts for everything else.
3
+ It's a pain to set up new developers on your codebase. Stairs makes it easy.
4
+
5
+ ### The Problem
6
+
7
+ Apps these days come with dependencies—S3, Facebook, Twitter, Zencoder, etc. We
8
+ can stub certain things in development, but we also want to make sure we're
9
+ developing in a realistic setting. Satisfying all of these requirements can
10
+ really slow down onboarding time when adding new developers to your existing
11
+ codebase.
7
12
 
8
- Stairs currently supports writing environment variables for rbenv-vars, RVM,
9
- and dotenv.
13
+ ### The Solution
14
+
15
+ Every codebase should come with a script to set itself up. An interactive
16
+ README, if you will. __Stairs__ aims to provide the tools to make writing these
17
+ scripts fast and easy. Scripts try to automate as much as possible and provide
18
+ interactive prompts for everything else.
10
19
 
11
20
  [![Build Status](https://travis-ci.org/patbenatar/stairs.png?branch=master)](https://travis-ci.org/patbenatar/stairs)
12
21
  [![Code Climate](https://codeclimate.com/github/patbenatar/stairs.png)](https://codeclimate.com/github/patbenatar/stairs)
@@ -62,37 +71,7 @@ rake "db:setup"
62
71
  finish "Just run rails s and sidekiq to get rolling!"
63
72
  ```
64
73
 
65
- ### Example CLI
66
-
67
- Given the above script, the CLI might look like this.
68
-
69
- ```
70
- $ rake newb
71
- Looks like you're using rbenv to manage environment variables. Is this correct? (Y/N): Y
72
- = Running script setup.rb
73
- == Running bundle
74
- ...
75
- == Completed bundle
76
- == Running S3
77
- AWS access key: 39u39d9u291
78
- AWS secret: 19jd920i10is0i01i0s01ks0kfknkje
79
- Do you have an existing bucket? (Y/N): Y
80
- Bucket name (leave blank for app-dev): my-cool-bucket
81
- == Completed S3
82
- == Starting Zencoder
83
- This step is optional, would you like to perform it? (Y/N): N
84
- == Completed Zencoder
85
- == Starting Misc
86
- Cool check it value: w00t
87
- == Completed Misc
88
- == Running db:setup
89
- ...
90
- == Completed db:setup
91
- == All done!
92
- Run rails s and sidekiq to get rolling!
93
- ```
94
-
95
- ## DSL
74
+ [See Example CLI](#example-cli)
96
75
 
97
76
  ### Collecting values
98
77
  ```ruby
@@ -111,6 +90,8 @@ dinner = choice "Meat or vegetables?", ["Meat", "Vegetables"]
111
90
  ```
112
91
 
113
92
  ### Setting env vars
93
+ Stairs currently supports writing environment variables for rbenv-vars, RVM, and dotenv.
94
+
114
95
  ```ruby
115
96
  env "NAME", value
116
97
  ```
@@ -155,15 +136,20 @@ setup :facebook, required: false
155
136
  ## Plugins for common setups
156
137
 
157
138
  ### Built-in
139
+
158
140
  * `:secret_token` sets a secure random secret token
141
+ * `:postgresql` quickly setup database.yml for use with PostgreSQL
142
+ * `:facebook` interactive prompt for setting Facebook app credentials
143
+
144
+ ### Available as independent gems
145
+
146
+ Any plugin that has specific dependencies on third party gems is shipped
147
+ independently to avoid maintaining those dependencies within Stairs.
159
148
 
160
- ### Available as extension gems
161
149
  * `:s3` interactive prompt for setting AWS + S3 bucket access credentials:
162
150
  [patbenatar/stairs-steps-s3][s3]
163
151
  * `:balanced` automatically creates a test Marketplace on Balanced:
164
152
  [patbenatar/stairs-steps-balanced][balanced]
165
- * `:facebook` interactive prompt for setting Facebook app credentials:
166
- [patbenatar/stairs-steps-facebook][facebook]
167
153
 
168
154
  ### Defining custom plugins
169
155
 
@@ -171,6 +157,37 @@ Steps inherit from `Stairs::Step` and live in `Stairs::Steps`, have a title,
171
157
  description, and implement the `run` method. See those included and in the
172
158
  various extension gems for examples.
173
159
 
160
+ ## Example CLI
161
+
162
+ Given the [example script above](#defining-scripts), the CLI would look like
163
+ this:
164
+
165
+ ```
166
+ $ rake newb
167
+ Looks like you're using rbenv to manage environment variables. Is this correct? (Y/N): Y
168
+ = Running script setup.rb
169
+ == Running bundle
170
+ ...
171
+ == Completed bundle
172
+ == Running S3
173
+ AWS access key: 39u39d9u291
174
+ AWS secret: 19jd920i10is0i01i0s01ks0kfknkje
175
+ Do you have an existing bucket? (Y/N): Y
176
+ Bucket name (leave blank for app-dev): my-cool-bucket
177
+ == Completed S3
178
+ == Starting Zencoder
179
+ This step is optional, would you like to perform it? (Y/N): N
180
+ == Completed Zencoder
181
+ == Starting Misc
182
+ Cool check it value: w00t
183
+ == Completed Misc
184
+ == Running db:setup
185
+ ...
186
+ == Completed db:setup
187
+ == All done!
188
+ Run rails s and sidekiq to get rolling!
189
+ ```
190
+
174
191
  ## Contributing
175
192
 
176
193
  1. Fork it
@@ -0,0 +1,13 @@
1
+ module Stairs
2
+ module Steps
3
+ class Facebook < Stairs::Step
4
+ title "Facebook App"
5
+ description "Configure credentials for Facebook app"
6
+
7
+ def run
8
+ env "FACEBOOK_ID", provide("Facebook App ID")
9
+ env "FACEBOOK_SECRET", provide("Facebook App Secret")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,63 @@
1
+ module Stairs
2
+ module Steps
3
+ class Postgresql < Stairs::Step
4
+ title "PostgreSQL"
5
+ description "Setup database.yml for PostgreSQL"
6
+
7
+ def run
8
+ set_database_name
9
+ set_test_database_name
10
+ set_username
11
+ set_password
12
+
13
+ write contents, "config/database.yml"
14
+ end
15
+
16
+ private
17
+
18
+ def set_database_name
19
+ contents.gsub!(
20
+ "{{database_name}}",
21
+ provide("Database name", default: "#{app_name}_development"),
22
+ )
23
+ end
24
+
25
+ def set_test_database_name
26
+ contents.gsub!(
27
+ "{{test_database_name}}",
28
+ provide("Test database name", default: "#{app_name}_test"),
29
+ )
30
+ end
31
+
32
+ def set_username
33
+ contents.gsub!(
34
+ "{{username}}",
35
+ provide("User", default: `whoami`.strip),
36
+ )
37
+ end
38
+
39
+ def set_password
40
+ contents.gsub!(
41
+ "{{password}}",
42
+ provide("Password", default: ""),
43
+ )
44
+ end
45
+
46
+ def app_name
47
+ @app_name ||= Rails.application.class.parent_name.downcase
48
+ end
49
+
50
+ def contents
51
+ @contents ||= template
52
+ end
53
+
54
+ def template
55
+ File.read "#{gem_root}/templates/postgresql/database.yml"
56
+ end
57
+
58
+ def gem_root
59
+ "#{File.dirname(__FILE__)}/../../.."
60
+ end
61
+ end
62
+ end
63
+ end
data/lib/stairs/steps.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Stairs
2
2
  module Steps
3
3
  autoload :SecretToken, "stairs/steps/secret_token"
4
+ autoload :Postgresql, "stairs/steps/postgresql"
5
+ autoload :Facebook, "stairs/steps/facebook"
4
6
  end
5
7
  end
@@ -1,3 +1,3 @@
1
1
  module Stairs
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5.0"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  require "bundler"
2
2
  Bundler.require
3
3
 
4
+ require "codeclimate-test-reporter"
5
+ CodeClimate::TestReporter.start
6
+
4
7
  require "stairs"
5
8
 
9
+ require "mock_stdio"
10
+
6
11
  Dir["./spec/support/**/*.rb"].each { |f| require f }
7
12
 
8
13
  RSpec.configure do |config|
@@ -10,8 +15,8 @@ RSpec.configure do |config|
10
15
  config.run_all_when_everything_filtered = true
11
16
  config.filter_run :focus
12
17
 
13
- config.include MockStdIO
18
+ config.include MockStdio
14
19
 
15
20
  config.before(:all, &:silence_output)
16
21
  config.after(:all, &:enable_output)
17
- end
22
+ end
data/stairs.gemspec CHANGED
@@ -28,6 +28,8 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "fakefs", "~> 0.4.3"
29
29
  spec.add_development_dependency "rubocop", "~> 0.14.1"
30
30
  spec.add_development_dependency "guard-rubocop", "~> 1.0.0"
31
+ spec.add_development_dependency "codeclimate-test-reporter"
32
+ spec.add_development_dependency "mock_stdio", "~> 0.0.1"
31
33
 
32
34
  spec.add_dependency "activesupport", ">= 3.2.0"
33
35
  spec.add_dependency "colorize", "~> 0.6.0"
@@ -0,0 +1,15 @@
1
+ development:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ database: {{database_name}}
5
+ pool: 5
6
+ username: {{username}}
7
+ password: {{password}}
8
+
9
+ test:
10
+ adapter: postgresql
11
+ encoding: unicode
12
+ database: {{test_database_name}}
13
+ pool: 5
14
+ username: {{username}}
15
+ password: {{password}}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stairs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - patbenatar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-02 00:00:00.000000000 Z
11
+ date: 2013-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,34 @@ dependencies:
150
150
  - - ~>
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.0.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: codeclimate-test-reporter
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: mock_stdio
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 0.0.1
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ~>
179
+ - !ruby/object:Gem::Version
180
+ version: 0.0.1
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: activesupport
155
183
  requirement: !ruby/object:Gem::Requirement
@@ -208,6 +236,8 @@ files:
208
236
  - lib/stairs/script.rb
209
237
  - lib/stairs/step.rb
210
238
  - lib/stairs/steps.rb
239
+ - lib/stairs/steps/facebook.rb
240
+ - lib/stairs/steps/postgresql.rb
211
241
  - lib/stairs/steps/secret_token.rb
212
242
  - lib/stairs/tasks.rb
213
243
  - lib/stairs/util.rb
@@ -226,8 +256,8 @@ files:
226
256
  - spec/lib/stairs/util/cli_spec.rb
227
257
  - spec/lib/stairs/util/file_mutation_spec.rb
228
258
  - spec/spec_helper.rb
229
- - spec/support/mock_stdout.rb
230
259
  - stairs.gemspec
260
+ - templates/postgresql/database.yml
231
261
  homepage: http://github.com/patbenatar/stairs
232
262
  licenses:
233
263
  - MIT
@@ -265,4 +295,3 @@ test_files:
265
295
  - spec/lib/stairs/util/cli_spec.rb
266
296
  - spec/lib/stairs/util/file_mutation_spec.rb
267
297
  - spec/spec_helper.rb
268
- - spec/support/mock_stdout.rb
@@ -1,52 +0,0 @@
1
- require "stringio"
2
-
3
- module MockStdIO
4
- def follow_prompts(*responses, &block)
5
- old_stdin = $stdin
6
- old_stdout = $stdout
7
-
8
- $stdin = StringIO.new("", "r+")
9
- fake_stdout = StringIO.new
10
- $stdout = fake_stdout
11
-
12
- responses.each { |r| $stdin << "#{r}\n" }
13
- $stdin.rewind
14
-
15
- block.call
16
-
17
- fake_stdout.string
18
- ensure
19
- $stdin = old_stdin
20
- $stdout = old_stdout
21
- end
22
-
23
- def capture_stdout(&block)
24
- old_stdout = $stdout
25
-
26
- fake_stdout = StringIO.new
27
- $stdout = fake_stdout
28
-
29
- block.call
30
-
31
- fake_stdout.string
32
- ensure
33
- $stdout = old_stdout
34
- end
35
-
36
- def silence_output
37
- @orig_stderr = $stderr
38
- @orig_stdout = $stdout
39
-
40
- # redirect stderr and stdout to /dev/null
41
- $stderr = File.new("/dev/null", "w")
42
- $stdout = File.new("/dev/null", "w")
43
- end
44
-
45
- # Replace stdout and stderr so anything else is output correctly.
46
- def enable_output
47
- $stderr = @orig_stderr
48
- $stdout = @orig_stdout
49
- @orig_stderr = nil
50
- @orig_stdout = nil
51
- end
52
- end