stairs 0.1.0 → 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.
- checksums.yaml +4 -4
- data/README.md +14 -6
- data/lib/stairs/configuration.rb +5 -0
- data/lib/stairs/env_adapters/dotenv.rb +17 -0
- data/lib/stairs/env_adapters/rbenv.rb +18 -0
- data/lib/stairs/env_adapters/rvm.rb +18 -0
- data/lib/stairs/env_adapters.rb +21 -0
- data/lib/stairs/interactive_configuration.rb +22 -0
- data/lib/stairs/step.rb +3 -18
- data/lib/stairs/tasks.rb +1 -0
- data/lib/stairs/util/file_utils.rb +31 -0
- data/lib/stairs/util.rb +5 -0
- data/lib/stairs/version.rb +1 -1
- data/lib/stairs.rb +14 -0
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f617dda7fd3f43d796cde18e6cd509b7556ea2f4
|
4
|
+
data.tar.gz: 8e2926466d8c307a8dbcd9be9a5a320e320495c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb0910186b1a3886ecff848942bb6c119cc58f7017fc74b0720ccf142aa0495eba3a0ba3461de3d9af65276fc3272da90b6d769067bc299b8525e35efe0ad9e2
|
7
|
+
data.tar.gz: fc18be8d140dbd7c1c1b07d3252f3b7a389e0826d855693120b86c6edc30a7fdb424a3fb9ab1f8d449eaa79aa59a5554bbdffc99eb1a2201066c3f1f08081978
|
data/README.md
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# Stairs
|
2
2
|
|
3
3
|
A DSL and collection of plugins for easy setup of projects on new development
|
4
|
-
environments.
|
4
|
+
environments. Write a script that new devs can run for an interactive setup.
|
5
|
+
For environment variables, Stairs supports rbenv-vars, RVM, and dotenv.
|
5
6
|
|
6
7
|
## Setup
|
7
8
|
|
8
9
|
1. Install gem `stairs`
|
9
10
|
|
10
|
-
1. Require tasks in Rakefile
|
11
|
+
1. Require tasks in `Rakefile`
|
11
12
|
```ruby
|
12
13
|
require "stairs/tasks"
|
13
14
|
```
|
@@ -41,7 +42,8 @@ puts "Sweet you're good to go. Just run `rails s` and `sidekiq` to get rolling!"
|
|
41
42
|
|
42
43
|
### Example CLI
|
43
44
|
|
44
|
-
Given the above script, the CLI
|
45
|
+
Given the above script, the CLI might look like this. __Note:__ some of this
|
46
|
+
is desired future functionality (bundle/db tasks, spacing, last words).
|
45
47
|
|
46
48
|
```
|
47
49
|
$ rake newb
|
@@ -69,7 +71,7 @@ Run rails s and sidekiq to get rolling!
|
|
69
71
|
### Collecting values
|
70
72
|
```ruby
|
71
73
|
value = provide "Something"
|
72
|
-
value = provide "Another", required: false
|
74
|
+
value = provide "Another", required: false # Not fully implemented
|
73
75
|
provide "More", default: "a-default"
|
74
76
|
```
|
75
77
|
|
@@ -111,11 +113,16 @@ setup :s3
|
|
111
113
|
|
112
114
|
## Plugins for common setups
|
113
115
|
|
116
|
+
### Built-in
|
114
117
|
* `:secret_token` sets a secure random secret token
|
118
|
+
|
119
|
+
### Available as extension gems
|
115
120
|
* `:s3` interactive prompt for setting AWS + S3 bucket access credentials:
|
116
121
|
[patbenatar/stairs-steps-s3][s3]
|
117
|
-
* `:balanced
|
122
|
+
* `:balanced` automatically creates a test Marketplace on Balanced:
|
118
123
|
[patbenatar/stairs-steps-balanced][balanced]
|
124
|
+
* `:facebook` interactive prompt for setting Facebook app credentials:
|
125
|
+
[patbenatar/stairs-steps-facebook][facebook]
|
119
126
|
|
120
127
|
### Defining custom plugins
|
121
128
|
|
@@ -132,4 +139,5 @@ extension gems for examples.
|
|
132
139
|
5. Create new Pull Request
|
133
140
|
|
134
141
|
[s3]: http://github.com/patbenatar/stairs-steps-s3
|
135
|
-
[balanced]: http://github.com/patbenatar/stairs-steps-balanced
|
142
|
+
[balanced]: http://github.com/patbenatar/stairs-steps-balanced
|
143
|
+
[facebook]: http://github.com/patbenatar/stairs-steps-facebook
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Stairs
|
2
|
+
module EnvAdapters
|
3
|
+
class Dotenv
|
4
|
+
def self.present?
|
5
|
+
defined? ::Dotenv
|
6
|
+
end
|
7
|
+
|
8
|
+
def set(name, value)
|
9
|
+
Util::FileUtils.replace_or_append(
|
10
|
+
Regexp.new("^#{name}=(.*)$"),
|
11
|
+
"#{name}=#{value}",
|
12
|
+
".env",
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Stairs
|
2
|
+
module EnvAdapters
|
3
|
+
class Rbenv
|
4
|
+
def self.present?
|
5
|
+
`which rbenv-vars`
|
6
|
+
$?.success?
|
7
|
+
end
|
8
|
+
|
9
|
+
def set(name, value)
|
10
|
+
Util::FileUtils.replace_or_append(
|
11
|
+
Regexp.new("^#{name}=(.*)$"),
|
12
|
+
"#{name}=#{value}",
|
13
|
+
".rbenv-vars",
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Stairs
|
2
|
+
module EnvAdapters
|
3
|
+
class RVM
|
4
|
+
def self.present?
|
5
|
+
`which rvm`
|
6
|
+
$?.success?
|
7
|
+
end
|
8
|
+
|
9
|
+
def set(name, value)
|
10
|
+
Util::FileUtils.replace_or_append(
|
11
|
+
Regexp.new("^export #{name}=(.*)$"),
|
12
|
+
"export #{name}=#{value}",
|
13
|
+
".rvmrc",
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Stairs
|
2
|
+
module EnvAdapters
|
3
|
+
autoload :Rbenv, "stairs/env_adapters/rbenv"
|
4
|
+
autoload :RVM, "stairs/env_adapters/rvm"
|
5
|
+
autoload :Dotenv, "stairs/env_adapters/dotenv"
|
6
|
+
|
7
|
+
ADAPTERS = {
|
8
|
+
rbenv: Rbenv,
|
9
|
+
rvm: RVM,
|
10
|
+
dotenv: Dotenv,
|
11
|
+
}
|
12
|
+
|
13
|
+
def self.recommended_adapter
|
14
|
+
ADAPTERS.values.find { |a| a.present? }
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.name_for_adapter_class(adapter)
|
18
|
+
ADAPTERS.find { |_n,a| a == adapter }.first
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Stairs
|
2
|
+
class InteractiveConfiguration < Stairs::Step
|
3
|
+
title "Configuration"
|
4
|
+
description "Interactive prompt for configuring Stairs"
|
5
|
+
|
6
|
+
def run!
|
7
|
+
adapter_class = Stairs::EnvAdapters.recommended_adapter
|
8
|
+
adapter_name = Stairs::EnvAdapters.name_for_adapter_class(adapter_class)
|
9
|
+
|
10
|
+
choice "Looks like you're using #{adapter_name} to manage environment variables. Is this correct?" do |yes|
|
11
|
+
if yes
|
12
|
+
Stairs.configuration.env_adapter = adapter_class.new
|
13
|
+
else
|
14
|
+
choice "Which would you prefer?", Stairs::EnvAdapters::ADAPTERS.map { |n,_a| n.to_s } do |name|
|
15
|
+
adapter_class = Stairs::EnvAdapters::ADAPTERS[name.to_sym]
|
16
|
+
Stairs.configuration.env_adapter = adapter_class.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/stairs/step.rb
CHANGED
@@ -50,32 +50,17 @@ module Stairs
|
|
50
50
|
|
51
51
|
# Set or update env var in .rbenv-vars
|
52
52
|
def env(name, value)
|
53
|
-
|
54
|
-
|
55
|
-
if File.exists? ".rbenv-vars"
|
56
|
-
contents = File.read ".rbenv-vars"
|
57
|
-
regexp = Regexp.new "^#{name}=(.*)$"
|
58
|
-
if contents.index regexp
|
59
|
-
contents.sub! regexp, string
|
60
|
-
write contents, ".rbenv-vars"
|
61
|
-
return
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
write_line string, ".rbenv-vars"
|
53
|
+
Stairs.configuration.env_adapter.set name, value
|
66
54
|
end
|
67
55
|
|
68
56
|
# Replace contents of file
|
69
57
|
def write(string, filename)
|
70
|
-
|
71
|
-
write_line string, filename
|
58
|
+
Util::FileUtils.write(string, filename)
|
72
59
|
end
|
73
60
|
|
74
61
|
# Append line to file
|
75
62
|
def write_line(string, filename)
|
76
|
-
|
77
|
-
file.puts string
|
78
|
-
end
|
63
|
+
Util::FileUtils.write_line(string, filename)
|
79
64
|
end
|
80
65
|
|
81
66
|
# Embed a step where step_name is a symbol that can be resolved to a class
|
data/lib/stairs/tasks.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Stairs
|
2
|
+
module Util
|
3
|
+
module FileUtils
|
4
|
+
class << self
|
5
|
+
def replace_or_append(pattern, string, filename)
|
6
|
+
if File.exists? filename
|
7
|
+
contents = File.read filename
|
8
|
+
if contents.index pattern
|
9
|
+
contents.sub! pattern, string
|
10
|
+
write contents, filename
|
11
|
+
return
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
write_line string, filename
|
16
|
+
end
|
17
|
+
|
18
|
+
def write_line(string, filename)
|
19
|
+
File.open filename, "a" do |file|
|
20
|
+
file.puts string
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def write(string, filename)
|
25
|
+
File.truncate filename, 0 if File.exists? filename
|
26
|
+
write_line string, filename
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/stairs/util.rb
ADDED
data/lib/stairs/version.rb
CHANGED
data/lib/stairs.rb
CHANGED
@@ -5,4 +5,18 @@ module Stairs
|
|
5
5
|
autoload :Step, "stairs/step"
|
6
6
|
autoload :Script, "stairs/script"
|
7
7
|
autoload :Steps, "stairs/steps"
|
8
|
+
autoload :EnvAdapters, "stairs/env_adapters"
|
9
|
+
autoload :Configuration, "stairs/configuration"
|
10
|
+
autoload :InteractiveConfiguration, "stairs/interactive_configuration"
|
11
|
+
autoload :Util, "stairs/util"
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def configure
|
15
|
+
yield(configuration)
|
16
|
+
end
|
17
|
+
|
18
|
+
def configuration
|
19
|
+
@configuration ||= Configuration.new
|
20
|
+
end
|
21
|
+
end
|
8
22
|
end
|
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
|
+
version: 0.2.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-10-
|
11
|
+
date: 2013-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,11 +80,19 @@ files:
|
|
80
80
|
- README.md
|
81
81
|
- Rakefile
|
82
82
|
- lib/stairs.rb
|
83
|
+
- lib/stairs/configuration.rb
|
84
|
+
- lib/stairs/env_adapters.rb
|
85
|
+
- lib/stairs/env_adapters/dotenv.rb
|
86
|
+
- lib/stairs/env_adapters/rbenv.rb
|
87
|
+
- lib/stairs/env_adapters/rvm.rb
|
88
|
+
- lib/stairs/interactive_configuration.rb
|
83
89
|
- lib/stairs/script.rb
|
84
90
|
- lib/stairs/step.rb
|
85
91
|
- lib/stairs/steps.rb
|
86
92
|
- lib/stairs/steps/secret_token.rb
|
87
93
|
- lib/stairs/tasks.rb
|
94
|
+
- lib/stairs/util.rb
|
95
|
+
- lib/stairs/util/file_utils.rb
|
88
96
|
- lib/stairs/version.rb
|
89
97
|
- stairs.gemspec
|
90
98
|
homepage: http://github.com/patbenatar/stairs
|