homesteading 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 065ba3f96efe822d90b3e2286a7a886895d65c89
4
- data.tar.gz: 171b01aa71ff33c86ae2c6cfb7760857f04d56fb
3
+ metadata.gz: 80cc70869c0c40d888be826da79f68efb60dcc82
4
+ data.tar.gz: 7446c3c1e779f5276c52d33931e942bfe9993eae
5
5
  SHA512:
6
- metadata.gz: 7b50d8ca4e815157b67a38a3b5bdacd9e7ca2e32f984501b60238cd72f6ca908d0a39e5bb468fff04fe7fac3123a0431a1299f5b9cdc29f1a4fe5584b2ec4230
7
- data.tar.gz: f53932f1e082ffee548acecab2139da08e0e100f47087e1cad3db93d823ecfc376889b321c02966ac820aafb0edfeafef69e4c8f7ecda3bc5873894d3df8d706
6
+ metadata.gz: 125f9e637252325d7172ac199a2ac15ccd7524f4484eb357f8978fb6081ee233a1bd4d065e3d6c25e6f7c976abef3560134125aacf7a1fb8654f764d4520501b
7
+ data.tar.gz: 975451048996a019f038cff05f74593356113902e35fb8eeeef84ed735c6a081a73c80ceccaa8efe29789e54ca61f66706af22c2212416e11d2fc5426501076c
data/README.md CHANGED
@@ -12,7 +12,7 @@ See the [/help](https://github.com/homesteading/homesteading/tree/master/help) d
12
12
 
13
13
  ## Current Version
14
14
 
15
- 0.0.7
15
+ 0.0.8
16
16
 
17
17
 
18
18
  ## Requirements
data/bin/homesteading CHANGED
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "homesteading/commands/help"
3
3
  require "optparse"
4
+ require "fileutils"
5
+ require "json"
6
+ require "yaml"
4
7
 
5
8
  if ARGV.empty?
6
9
  name_space = "Help"
@@ -24,8 +27,4 @@ else
24
27
  end
25
28
 
26
29
  require "homesteading/commands/#{name_space.downcase}"
27
- if ARGV.empty?
28
- Homesteading.const_get(name_space).send(task.to_sym)
29
- else
30
- Homesteading.const_get(name_space).send(task.to_sym, ARGV)
31
- end
30
+ Homesteading.const_get(name_space).send(task.to_sym)
data/help/apps-create.md CHANGED
@@ -1,6 +1,18 @@
1
- # TODO:
2
-
3
1
  Usage: homesteading apps:create
4
2
 
5
- * apps:create --app HS_APP : create a new app from @homesteading on GitHub
6
- * apps:create --url URL : create a new app from a URL
3
+ create a new app from @homesteading on GitHub or a URL
4
+
5
+ * -f, --force : Overwrite apps that already exist
6
+ * -p, --pretend : Run but do not make any changes
7
+ * -q, --quiet : Suppress status output
8
+ * -s, --skip : Skip apps that already exist
9
+
10
+ Example:
11
+
12
+ $ homesteading apps:create --app note
13
+ * Cloning homesteading app from GitHub: note
14
+
15
+ Example:
16
+
17
+ $ homesteading apps:create --url git@github.com:homesteading/homesteading-note.git
18
+ * Cloning from: git@github.com:homesteading/homesteading-note.git
data/help/apps-destroy.md CHANGED
@@ -1,3 +1,24 @@
1
- # TODO:
2
-
3
1
  Usage: homesteading apps:destroy
2
+
3
+ destroy a homesteading app
4
+
5
+ * -c, --confirm : Overwrite apps that already exist
6
+
7
+ Example:
8
+
9
+ $ homesteading apps:destory --app note
10
+ ! WARNING: Potentially Destructive Action
11
+ ! This command will destroy note
12
+ ! To proceed, type 'note' or re-run this command with '--confirm note'
13
+
14
+ note
15
+
16
+ * Destroying note permananently...
17
+ * ...done
18
+
19
+ Example:
20
+
21
+ $ homesteading apps:destory --app note --confirm note
22
+
23
+ * Destroying note permananently...
24
+ * ...done
data/help/apps-info.md CHANGED
@@ -1,3 +1,34 @@
1
- # TODO:
2
-
3
1
  Usage: homesteading apps:info
2
+
3
+ show info about a homesteading app
4
+
5
+ Example:
6
+
7
+ $ homesteading apps:info --app note
8
+
9
+ ---
10
+ name: Homesteading Note
11
+ description: An app used for publishing notes to your own website.
12
+ keywords:
13
+ - indieweb
14
+ - homesteading
15
+ - publishing
16
+ - hs:publisher
17
+ - hs:note
18
+ website: http://homesteading.io
19
+ repository: https://github.com/homesteading/homesteading-note
20
+ logo: http://homesteading.io/logo.png
21
+ success_url: "/settings"
22
+ scripts:
23
+ postdeploy: bundle exec rake db:migrate && bundle exec rake db:seed
24
+ env:
25
+ RAILS_ENV: production
26
+ COOKIE_SECRET:
27
+ description: This gets generated
28
+ generator: secret
29
+ addons:
30
+ - heroku-postgresql:hobby-dev
31
+ - papertrail
32
+ - pgbackups
33
+ routes:
34
+ path: notes
data/help/apps-rename.md CHANGED
@@ -1,3 +1,9 @@
1
- # TODO:
2
-
3
1
  Usage: homesteading apps:rename
2
+
3
+ change the directory name of a homesteading app
4
+
5
+ Example:
6
+
7
+ $ homesteading apps:rename status --app note
8
+ * Renaming note to status...
9
+ * ...done
@@ -0,0 +1,11 @@
1
+ # TODO
2
+
3
+ Usage: homesteading apps:reroute
4
+
5
+ change the directory name of a homesteading app
6
+
7
+ Example:
8
+
9
+ $ apps:reroute statuses --app note
10
+ * Rerouting note to /statuses...
11
+ * ...done
data/help/apps.md CHANGED
@@ -5,21 +5,23 @@ Usage: homesteading apps
5
5
  Example:
6
6
 
7
7
  $ homesteading apps
8
- === Publisher Apps
9
- article
10
- note
11
- photo
12
- video
13
- === Non-Publisher Apps
14
- hub
15
- router
16
- syndicator
8
+
9
+ * Publisher Apps
10
+ article
11
+ note
12
+ photo
13
+ video
14
+
15
+ * Non-Publisher Apps
16
+ hub
17
+ router
18
+ syndicator
17
19
 
18
20
  Additional commands, type "homesteading help COMMAND" for more details:
19
21
 
20
- * apps:create --app HS_APP : create a new app from @homesteading on GitHub
21
- * apps:create --url URL : create a new app from a URL
22
- * apps:destroy --app APP : permanently destroy an app
23
- * apps:info --app APP : show detailed app information (from app.json)
24
- * apps:rename NEWNAME --app APP : change the app name
22
+ * apps:create --app HS_APP : create a new app from @homesteading on GitHub
23
+ * apps:create --url URL : create a new app from a URL
24
+ * apps:destroy --app APP : permanently destroy an app
25
+ * apps:info --app APP : show detailed app information (from app.json)
26
+ * apps:rename NEWNAME --app APP : change the app name
25
27
  * apps:reroute NEWROUTE --app APP : change the app route
data/help/new.md CHANGED
@@ -2,14 +2,19 @@ Usage: homesteading new /path/to/constellation [options]
2
2
 
3
3
  create a constellation of homesteading apps
4
4
 
5
- * -p, --pretend : Run but do not make any changes
6
- * -q, --quiet : Suppress status output
5
+ * -e, --except APPS_TO_SKIP : Comma separated list of apps to not install
6
+ * -o, --only APPS_TO_CREATE : Comma separated list of apps to only install
7
7
 
8
- Example:
8
+ * -f, --force : Overwrite apps that already exist
9
+ * -p, --pretend : Run but do not make any changes
10
+ * -q, --quiet : Suppress status output
11
+ * -s, --skip : Skip apps that already exist
9
12
 
10
- $ homesteading new sbbme
13
+ Example:
11
14
 
12
- * Creating homesteading directory: /path/to/constellation
15
+ $ homesteading new my-site
16
+
17
+ * Creating homesteading directory: my-site
13
18
  * Cloning homesteading app from GitHub: hub
14
19
  * Cloning homesteading app from GitHub: router-rack
15
20
  * Cloning homesteading app from GitHub: article
@@ -21,18 +26,7 @@ Example:
21
26
  * Cloning homesteading app from GitHub: video
22
27
  * Cloning homesteading app from GitHub: walk
23
28
  * Cloning homesteading app from GitHub: weight
24
-
25
-
26
-
27
-
28
- ---
29
-
30
- # TODO
31
-
32
- refer to this for help
33
- https://github.com/rdoc/rdoc/blob/master/lib/rdoc/options.rb#L724-L728
34
- * -e, --except APPS_TO_SKIP : Comma separated list of apps to not install
35
- * -o, --only APPS_TO_CREATE
36
-
37
- * -f, --force : Overwrite apps that already exist
38
- * -s, --skip : Skip apps that already exist
29
+
30
+ * Next up, do this:
31
+ cd my-site
32
+ homesteading server
data/help/server-stop.md CHANGED
@@ -1,3 +1,5 @@
1
+ # TODO
2
+
1
3
  Usage: homesteading server:stop
2
4
 
3
5
  stop all running homesteading apps
data/help/server.md CHANGED
@@ -1,3 +1,5 @@
1
+ # TODO
2
+
1
3
  Usage: homesteading server
2
4
 
3
5
  start a server for constellation of homesteading apps
@@ -8,13 +10,13 @@ Example:
8
10
 
9
11
  $ homesteading server
10
12
  Homesteading starting...
11
-
13
+
12
14
  * Homesteading: 1.0.1, codename: Rooftop
13
15
  * Puma: 2.10.2 (ruby 2.1.5-p273), codename: Robots on Comets
14
16
  * Ruby: 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
15
17
  * Environment: development
16
18
  * Running on: http://0.0.0.0:3000
17
-
19
+
18
20
  Use Ctrl-C to stop
19
21
 
20
22
 
data/help/update.md CHANGED
@@ -5,32 +5,33 @@ Usage: homesteading update
5
5
  Example:
6
6
 
7
7
  $ homesteading update
8
- Updating article...
9
- ...done
10
- Updating bookmark...
11
- ...done
12
- Updating event...
13
- ...done
14
- Updating feed...
15
- ...done
16
- Updating hub...
17
- ...done
18
- Updating note...
19
- ...done
20
- Updating photo...
21
- ...done
22
- Updating router...
23
- ...done
24
- Updating sound...
25
- ...done
26
- Updating syndicator...
27
- ...done
28
- Updating video...
29
- ...done
30
- Updating walk...
31
- ...done
32
- Updating weight...
33
- ...done
8
+
9
+ * Updating article...
10
+ * ...done
11
+ * Updating bookmark...
12
+ * ...done
13
+ * Updating event...
14
+ * ...done
15
+ * Updating feed...
16
+ * ...done
17
+ * Updating hub...
18
+ * ...done
19
+ * Updating note...
20
+ * ...done
21
+ * Updating photo...
22
+ * ...done
23
+ * Updating router...
24
+ * ...done
25
+ * Updating sound...
26
+ * ...done
27
+ * Updating syndicator...
28
+ * ...done
29
+ * Updating video...
30
+ * ...done
31
+ * Updating walk...
32
+ * ...done
33
+ * Updating weight...
34
+ * ...done
34
35
 
35
36
 
36
37
  Additional commands, type "homesteading help COMMAND" for more details:
@@ -2,19 +2,287 @@ class Homesteading
2
2
  class Apps
3
3
  class << self
4
4
 
5
- def default(options=nil)
5
+ def default
6
+ puts
7
+
8
+ constellation_path = Dir.pwd
9
+ publisher_apps = []
10
+ nonpublisher_apps = []
11
+
12
+ Dir.glob("#{Dir.pwd}/homesteading-*/").each do |directory|
13
+ app = directory.split("/").last.sub(/homesteading-/, "").downcase
14
+ app_file_path = directory + "app.json"
15
+
16
+ app_keywords = []
17
+ if File.exist?(app_file_path)
18
+ app_file = JSON.parse(File.read(app_file_path))
19
+ app_keywords = app_file["keywords"]
20
+ end
21
+
22
+ if app_keywords.include?("hs:publisher")
23
+ publisher_apps << app
24
+ else
25
+ nonpublisher_apps << app
26
+ end
27
+ end
28
+
29
+ unless publisher_apps.empty?
30
+ puts "* Publisher Apps"
31
+ publisher_apps.each do |app|
32
+ puts " #{app}"
33
+ end
34
+ puts
35
+ end
36
+
37
+ unless nonpublisher_apps.empty?
38
+ puts "* Non-Publisher Apps"
39
+ nonpublisher_apps.each do |app|
40
+ puts " #{app}"
41
+ end
42
+ end
43
+
44
+ puts
6
45
  end
7
46
 
8
- def create(options=nil)
47
+ def create
48
+ puts
49
+ options = parse_options
50
+
51
+ if options[:app].nil? && options[:app].nil?
52
+ puts "* This requires an '--app' or '--url'"
53
+ puts "* Example:"
54
+ puts " homesteading apps:create --app note"
55
+ puts " homesteading apps:create --url git@github.com:homesteading/homesteading-note.git"
56
+ puts
57
+ exit
58
+ end
59
+
60
+ git_url = if options[:app]
61
+ "git@github.com:homesteading/homesteading-#{options[:app]}.git"
62
+ else
63
+ options[:url]
64
+ end
65
+
66
+ app_dir = git_url.split("/").last.split(".git").first
67
+
68
+ if File.exist?(app_dir)
69
+ if options[:skip]
70
+ unless options[:quiet]
71
+ puts "* #{app_dir} already exists"
72
+ puts "* Skipping homesteading-#{options[:app]}"
73
+ end
74
+ elsif options[:force]
75
+ unless options[:quiet]
76
+ puts "* #{app_dir} already exists"
77
+ puts "* Removing homesteading-#{options[:app]}"
78
+ end
79
+
80
+ unless options[:pretend]
81
+ FileUtils.rm_rf app_dir
82
+ end
83
+
84
+ unless options[:quiet]
85
+ if options[:app]
86
+ puts "* Cloning homesteading app from GitHub: #{options[:app]}"
87
+ else
88
+ puts "* Cloning from: #{options[:url]}"
89
+ end
90
+ end
91
+
92
+ unless options[:pretend]
93
+ system "git clone #{git_url}"
94
+ end
95
+ else
96
+ unless options[:quiet]
97
+ puts "* #{app_dir} already exists"
98
+ puts "* TODO gets user input on what to do about the conflict"
99
+ end
100
+ end
101
+
102
+ else
103
+
104
+ unless options[:quiet]
105
+ if options[:app]
106
+ puts "* Cloning homesteading app from GitHub: #{options[:app]}"
107
+ else
108
+ puts "* Cloning from: #{options[:url]}"
109
+ end
110
+ end
111
+
112
+ unless options[:pretend]
113
+ system "git clone #{git_url}"
114
+ end
115
+ end
116
+
117
+ puts
9
118
  end
10
119
 
11
- def destroy(options=nil)
120
+ def destroy
121
+ puts
122
+ options = parse_options
123
+
124
+ if options[:app].nil?
125
+ puts "* '--app APP' is required for this command"
126
+ puts
127
+ exit
128
+ end
129
+
130
+ app = options[:app].downcase
131
+ constellation_path = Dir.pwd
132
+ app_dir = "#{constellation_path}/homesteading-#{app}"
133
+
134
+ unless File.exist?(app_dir)
135
+ puts "* #{app} does not exist"
136
+ puts "* Did you mean one of these?"
137
+ Dir.glob("#{Dir.pwd}/homesteading-*/").each do |ff|
138
+ puts " - #{ff.split("/").last.sub(/homesteading-/, "")}"
139
+ end
140
+ puts
141
+ exit
142
+ end
143
+
144
+ if options[:confirm] == app || options[:confirm] == "homesteading-#{app}"
145
+ puts "* Destroying #{app} permananently..."
146
+ FileUtils.rm_rf app_dir
147
+ puts "* ...done"
148
+ else
149
+ puts "! WARNING: Potentially Destructive Action"
150
+ puts "! This command will destroy #{app}"
151
+ puts "! To proceed, type '#{app}' or re-run this command with '--confirm #{app}'"
152
+ puts
153
+ confirmation_input = gets.chomp
154
+ puts
155
+
156
+ if confirmation_input == app
157
+ puts "* Destroying #{app} permananently..."
158
+ FileUtils.rm_rf app_dir
159
+ puts "* ...done"
160
+ else
161
+ puts "! Confirmation did not match #{app}. Aborted."
162
+ end
163
+ end
164
+
165
+ puts
166
+ end
167
+
168
+ def info
169
+ puts
170
+ options = parse_options
171
+
172
+ if options[:app].nil?
173
+ puts "* '--app APP' is required for this command"
174
+ puts
175
+ exit
176
+ end
177
+
178
+ app = options[:app].downcase
179
+ constellation_path = Dir.pwd
180
+ app_dir = "#{constellation_path}/homesteading-#{app}/"
181
+ app_file_path = app_dir + "app.json"
182
+
183
+ if File.exist?(app_dir)
184
+ if File.exist?(app_file_path)
185
+ app_file = JSON.parse(File.read(app_file_path))
186
+ puts app_file.to_yaml
187
+ else
188
+ puts "* No app.json found for #{app}"
189
+ puts
190
+ exit
191
+ end
192
+ else
193
+ puts "* #{app} does not exist"
194
+ puts "* Did you mean one of these?"
195
+ Dir.glob("#{Dir.pwd}/homesteading-*/").each do |ff|
196
+ puts " - #{ff.split("/").last.sub(/homesteading-/, "")}"
197
+ end
198
+ puts
199
+ exit
200
+ end
201
+
202
+ puts
203
+ end
204
+
205
+ def rename
206
+ puts
207
+ options = parse_options
208
+
209
+ if options[:app].nil?
210
+ puts "* '--app APP' is required for this command"
211
+ puts
212
+ exit
213
+ end
214
+
215
+ new_name = ARGV.shift
216
+ if new_name.nil?
217
+ puts "* New app name is required for this command"
218
+ puts "* Example:"
219
+ puts " homesteading apps:rename status --app note"
220
+ puts
221
+ exit
222
+ end
223
+
224
+ app = options[:app].downcase
225
+ constellation_path = Dir.pwd
226
+ app_dir = "#{constellation_path}/homesteading-#{app}"
227
+ new_app_dir = "#{constellation_path}/homesteading-#{new_name}"
228
+
229
+ if File.exist?(app_dir)
230
+ puts "* Renaming #{app} to #{new_name}..."
231
+ FileUtils.mv app_dir, new_app_dir
232
+ puts "* ...done"
233
+ else
234
+ puts "* #{app} does not exist"
235
+ puts "* Did you mean one of these?"
236
+ Dir.glob("#{Dir.pwd}/homesteading-*/").each do |ff|
237
+ puts " - #{ff.split("/").last.sub(/homesteading-/, "")}"
238
+ end
239
+ puts
240
+ exit
241
+ end
242
+
243
+ puts
12
244
  end
13
245
 
14
- def info(options=nil)
246
+ def reroute
15
247
  end
16
248
 
17
- def rename(options=nil)
249
+ private
250
+ def parse_options
251
+ # Parse command line options
252
+ options = {}
253
+
254
+ optparse = OptionParser.new do |opts|
255
+ opts.on("-a", "--app APP", "Name of Homesteading app on GitHub") do |app|
256
+ options[:app] = app
257
+ end
258
+
259
+ opts.on("-c", "--confirm CONFIRM", "Confirm the app name to delete") do |confirm|
260
+ options[:confirm] = confirm
261
+ end
262
+
263
+ opts.on("-f", "--force", "Overwrite apps that already exist") do |force|
264
+ options[:force] = force
265
+ end
266
+
267
+ opts.on("-p", "--pretend", "Run but do not make any changes") do |pretend|
268
+ options[:pretend] = pretend
269
+ end
270
+
271
+ opts.on("-q", "--quiet", "Suppress status output") do |quiet|
272
+ options[:quiet] = quiet
273
+ end
274
+
275
+ opts.on("-s", "--skip", "Skip apps that already exist") do |skip|
276
+ options[:skip] = skip
277
+ end
278
+
279
+ opts.on("-u", "--url URL", "URL of Homesteading app") do |url|
280
+ options[:url] = url
281
+ end
282
+ end
283
+
284
+ optparse.parse!
285
+ options
18
286
  end
19
287
 
20
288
  end
@@ -3,15 +3,14 @@ class Homesteading
3
3
  class << self
4
4
  DEFAULT_HELP_DOC = "README"
5
5
 
6
- def default(options=nil)
7
- if options.nil?
8
- help_doc_path = DEFAULT_HELP_DOC
9
- elsif options.first.match(/:/)
10
- first, last = options.first.split(":")
11
- help_doc_path = first + "-" + last
12
- else
13
- help_doc_path = options.first
14
- end
6
+ def default
7
+ help_doc_path = if ARGV.empty?
8
+ DEFAULT_HELP_DOC
9
+ elsif ARGV.first.match(/:/)
10
+ ARGV.first.sub(":", "-")
11
+ else
12
+ ARGV.first
13
+ end
15
14
 
16
15
  print(help_doc_path)
17
16
  end
@@ -4,52 +4,135 @@ class Homesteading
4
4
  PUBLISHER_APPS = ["article", "bookmark", "event", "note", "photo", "sound", "video", "walk", "weight"]
5
5
  NONPUBLISHER_APPS = ["hub", "router-rack"] # TODO "syndicator"
6
6
 
7
- def default(options=nil)
7
+ def default
8
8
  puts
9
9
 
10
- # Parse command line options
11
- options = {}
12
- optparse = OptionParser.new do |opts|
13
- opts.on("-p", "--pretend", "Run but do not make any changes") do |pretend|
14
- options[:pretend] = pretend
15
- end
10
+ options = parse_options
16
11
 
17
- opts.on("-q", "--quiet", "Suppress status output") do |quiet|
18
- options[:quiet] = quiet
12
+ # Install location
13
+ constellation_dir = ARGV.shift
14
+ constellation_path = "#{Dir.pwd}/#{constellation_dir}"
15
+
16
+ if File.exist?(constellation_path)
17
+ unless options[:quiet]
18
+ puts "* #{constellation_path} already exists"
19
+ puts "* Using #{constellation_path}"
20
+ end
21
+ else
22
+ unless options[:quiet]
23
+ puts "* Creating homesteading directory: #{constellation_dir}"
24
+ end
25
+ unless options[:pretend]
26
+ FileUtils.mkpath constellation_dir
19
27
  end
20
28
  end
21
- optparse.parse!
22
29
 
30
+ # Apps to install
31
+ apps = [NONPUBLISHER_APPS, PUBLISHER_APPS].flatten
32
+ if options[:only]
33
+ apps = options[:only].split(",").map { |a| a.downcase }
34
+ end
35
+ if options[:except]
36
+ only_list = options[:except].split(",").map { |a| a.downcase }
37
+ apps = apps.delete_if { |a| only_list.include?(a) }
38
+ end
23
39
 
24
- # Install location
25
- constellation_dir = ARGV.shift
40
+ apps.each do |app|
41
+ unless options[:pretend]
42
+ puts
43
+ end
26
44
 
27
- unless options[:quiet]
28
- puts "* Creating homesteading directory: #{constellation_dir}"
45
+ app_dir = "#{constellation_path}/homesteading-#{app}"
46
+
47
+ if File.exist?(app_dir)
48
+ if options[:skip]
49
+ unless options[:quiet]
50
+ puts "* #{app_dir} already exists"
51
+ puts "* Skipping homesteading-#{app}"
52
+ end
53
+ elsif options[:force]
54
+ unless options[:quiet]
55
+ puts "* #{app_dir} already exists"
56
+ puts "* Removing homesteading-#{app}"
57
+ end
58
+
59
+ unless options[:pretend]
60
+ FileUtils.rm_rf app_dir
61
+ end
62
+
63
+ unless options[:quiet]
64
+ puts "* Cloning homesteading app from GitHub: #{app}"
65
+ end
66
+
67
+ unless options[:pretend]
68
+ FileUtils.cd constellation_dir do
69
+ system "git clone git@github.com:homesteading/homesteading-#{app}.git"
70
+ end
71
+ end
72
+ else
73
+ unless options[:quiet]
74
+ puts "* #{app_dir} already exists"
75
+ puts "* TODO gets user input on what to do about the conflict"
76
+ end
77
+ end
78
+
79
+ else
80
+
81
+ unless options[:quiet]
82
+ puts "* Cloning homesteading app from GitHub: #{app}"
83
+ end
84
+
85
+ unless options[:pretend]
86
+ FileUtils.cd constellation_dir do
87
+ system "git clone git@github.com:homesteading/homesteading-#{app}.git"
88
+ end
89
+ end
90
+ end
29
91
  end
30
92
 
31
- unless options[:pretend]
93
+ unless options[:quiet]
32
94
  puts
33
- system("mkdir -p #{constellation_dir}")
95
+ puts "* Next up, do this:"
96
+ puts " cd #{constellation_dir}"
97
+ puts " homesteading server"
34
98
  end
35
99
 
36
- [NONPUBLISHER_APPS, PUBLISHER_APPS].flatten.each do |app|
37
- unless options[:quiet]
38
- puts "* Cloning homesteading app from GitHub: #{app}"
100
+ puts
101
+ end
102
+
103
+ private
104
+ def parse_options
105
+ # Parse command line options
106
+ options = {}
107
+
108
+ optparse = OptionParser.new do |opts|
109
+ opts.on("-e", "--except EXCEPT", "Comma separated list of apps to not install") do |except|
110
+ options[:except] = except
39
111
  end
40
112
 
41
- unless options[:pretend]
42
- puts
43
- system("cd #{constellation_dir} && git clone git@github.com:homesteading/homesteading-#{app}.git")
44
- puts
113
+ opts.on("-f", "--force", "Overwrite apps that already exist") do |force|
114
+ options[:force] = force
115
+ end
116
+
117
+ opts.on("-o", "--only ONLY", "Comma separated list of apps to install") do |only|
118
+ options[:only] = only
119
+ end
120
+
121
+ opts.on("-p", "--pretend", "Run but do not make any changes") do |pretend|
122
+ options[:pretend] = pretend
45
123
  end
46
- end
47
124
 
48
- unless options[:pretend]
49
- system("cd #{constellation_dir}")
125
+ opts.on("-q", "--quiet", "Suppress status output") do |quiet|
126
+ options[:quiet] = quiet
127
+ end
128
+
129
+ opts.on("-s", "--skip", "Skip apps that already exist") do |skip|
130
+ options[:skip] = skip
131
+ end
50
132
  end
51
133
 
52
- puts
134
+ optparse.parse!
135
+ options
53
136
  end
54
137
 
55
138
  end
@@ -2,7 +2,7 @@ class Homesteading
2
2
  class Run
3
3
  class << self
4
4
 
5
- def default(options=nil)
5
+ def default
6
6
  end
7
7
 
8
8
  end
@@ -2,19 +2,19 @@ class Homesteading
2
2
  class Server
3
3
  class << self
4
4
 
5
- def default(options=nil)
5
+ def default
6
6
  end
7
7
 
8
- def list(options=nil)
8
+ def list
9
9
  end
10
10
 
11
- def stop(options=nil)
11
+ def stop
12
12
  # TEMP HACK TODO FIXME
13
13
  # This is overly aggressive, but the above kill isn't working
14
14
  system "killall ruby"
15
15
  end
16
16
 
17
- def urls(options=nil)
17
+ def urls
18
18
  end
19
19
 
20
20
  end
@@ -2,28 +2,44 @@ class Homesteading
2
2
  class Update
3
3
  class << self
4
4
 
5
- def default(options=nil)
6
- # update hs apps from github
7
- end
8
-
9
- def client(options=nil)
5
+ def default
10
6
  puts
11
7
 
12
- # Parse command line options
13
- options = {}
14
- optparse = OptionParser.new do |opts|
15
- opts.on("-b", "--beta", "Update to the latest beta Homesteading CLI") do |beta|
16
- options[:beta] = beta
8
+ options = parse_options
9
+ hs_path = options[:hs_path] || Dir.pwd
10
+
11
+ Dir.glob("#{hs_path}/*").each do |dir|
12
+ unless Dir.glob("#{dir}/.git/config").empty?
13
+ puts "* Updating #{dir.split("/").last}..."
14
+
15
+ FileUtils.cd dir do
16
+ system "git pull origin master"
17
+ end
18
+
19
+ puts "* ...done"
20
+ puts
17
21
  end
18
22
  end
19
- optparse.parse!
23
+
24
+ puts "* All Homesteading apps are now update to the latest version"
25
+ puts
26
+ end
27
+
28
+ def client
29
+ puts
30
+
31
+ options = parse_options
20
32
 
21
33
  if options[:beta]
22
34
  puts "* Cloning Homesteading from GitHub into /tmp"
23
- system "cd /tmp && git clone git@github.com:homesteading/homesteading.git"
35
+ FileUtils.cd "/tmp" do
36
+ system "git clone git@github.com:homesteading/homesteading.git"
37
+ end
24
38
 
25
39
  puts "* Building homesteading gem from .gemspec"
26
- system "cd /tmp/homesteading && gem build homesteading.gemspec"
40
+ FileUtils.cd "/tmp/homesteading" do
41
+ system "gem build homesteading.gemspec"
42
+ end
27
43
 
28
44
  dot_gem = Dir.glob("/tmp/homesteading/*.gem").last
29
45
  version = dot_gem.split("/").last.sub("homesteading-", "").sub(".gem", "")
@@ -32,7 +48,7 @@ class Homesteading
32
48
  system "gem install #{dot_gem}"
33
49
 
34
50
  puts "* Cleaning up"
35
- system "rm -rf /tmp/homesteading"
51
+ FileUtils.rm_rf "/tmp/homesteading"
36
52
 
37
53
  puts "* Homesteading CLI version #{version} successfully installed from GitHub"
38
54
  else
@@ -41,6 +57,28 @@ class Homesteading
41
57
 
42
58
  puts
43
59
  end
60
+
61
+ private
62
+ def parse_options
63
+ # Parse command line options
64
+ options = {}
65
+
66
+ optparse = OptionParser.new do |opts|
67
+ opts.banner = "Learning Option parsing in Ruby"
68
+
69
+ opts.on("-p", "--path PATH", "Path of the constelation of Homesteading apps") do |opt_path|
70
+ options[:hs_path] = opt_path
71
+ end
72
+
73
+ opts.on("-b", "--beta", "Update to the latest beta Homesteading CLI") do |beta|
74
+ options[:beta] = beta
75
+ end
76
+ end
77
+
78
+ optparse.parse!
79
+ options
80
+ end
81
+
44
82
  end
45
83
  end
46
84
  end
@@ -2,10 +2,10 @@ class Homesteading
2
2
  class Version
3
3
  class << self
4
4
 
5
- def default(options=nil)
5
+ def default
6
6
  # TODO load in *actual* VERSION and CODENAME from homesteading/version
7
7
  # puts "Homesteading #{Homesteading::VERSION}, codename: #{Homesteading::CODENAME}"
8
- puts "Homesteading 0.0.7, codename: Rooftop"
8
+ puts "Homesteading 0.0.8, codename: Rooftop"
9
9
  end
10
10
 
11
11
  end
@@ -1,4 +1,4 @@
1
1
  module Homesteading
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  CODENAME = "Rooftop"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: homesteading
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Becker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
11
+ date: 2014-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,6 +59,7 @@ files:
59
59
  - help/apps-destroy.md
60
60
  - help/apps-info.md
61
61
  - help/apps-rename.md
62
+ - help/apps-reroute.md
62
63
  - help/apps.md
63
64
  - help/blank.md
64
65
  - help/deploy-heroku.md