cova 0.1.9 → 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.
Files changed (4) hide show
  1. data/bin/cova +2 -0
  2. data/lib/cova.rb +2 -0
  3. data/lib/covamain.rb +133 -11
  4. metadata +33 -5
data/bin/cova CHANGED
@@ -7,6 +7,8 @@ require 'thor'
7
7
  require 'xcodeproj'
8
8
  require 'cocoapods'
9
9
  require 'chunky_png'
10
+ require 'fssm'
11
+ require 'sqlite3'
10
12
 
11
13
  require 'covaconfig'
12
14
  require 'covalog'
data/lib/cova.rb CHANGED
@@ -5,6 +5,8 @@ require 'thor'
5
5
  require 'xcodeproj'
6
6
  require 'cocoapods'
7
7
  require 'chunky_png'
8
+ require 'fssm'
9
+ require 'sqlite3'
8
10
 
9
11
  require 'covaconfig'
10
12
  require 'covalog'
data/lib/covamain.rb CHANGED
@@ -203,7 +203,7 @@ class Cova < Thor
203
203
  return false
204
204
  end
205
205
 
206
- if not _io_cpfile @dir_cova_home + "/cova/config/app.config", dir + "/app.config"
206
+ if not _io_cpdir @dir_cova_home + "/cova/store", dir + "/store"
207
207
  _log_block_error
208
208
  return false
209
209
  end
@@ -213,7 +213,7 @@ class Cova < Thor
213
213
  config_content = config_content.gsub(/%cova_home%/, @dir_cova_home)
214
214
  File.open(dir + "/www/config.php", 'w') { |file| file.puts config_content }
215
215
  end
216
-
216
+
217
217
  if _io_cpdir @dir_cova_home + "/cova/ios", dir + "/ios"
218
218
  Dir.chdir(@dir_cova_apps_home + "/" + name + "/ios")
219
219
 
@@ -250,6 +250,131 @@ class Cova < Thor
250
250
  return false
251
251
  end
252
252
 
253
+ desc 'bye NAME', 'Say bye to an app and stop responding to activities'
254
+ def bye (name)
255
+ if not _cova_installed
256
+ _cova_prompt_install
257
+ return false
258
+ end
259
+
260
+ if not _io_app_exists name
261
+ _log_line "App #{name} does not exist."
262
+ _log_line_error
263
+ return false
264
+ end
265
+
266
+ pid_file = @dir_cova_apps_home + "/" + name + "/store/hi.lock"
267
+ if not _io_isfile pid_file
268
+ _log_info "How rude. Say hi first."
269
+ return false
270
+ end
271
+
272
+ pid = File.read(pid_file)
273
+ Process.kill("TERM", pid.to_i)
274
+ `rm -rf #{pid_file}`
275
+
276
+ if not _io_isfile pid_file, false
277
+ _log_info "Bye!"
278
+ return true
279
+ end
280
+
281
+ _log_line_error
282
+ return false
283
+ end
284
+
285
+ desc 'log NAME', 'A log of all activities'
286
+ def log (name)
287
+ if not _cova_installed
288
+ _cova_prompt_install
289
+ return false
290
+ end
291
+
292
+ if not _io_app_exists name
293
+ _log_line "App #{name} does not exist"
294
+ _log_line_error
295
+ return false
296
+ end
297
+
298
+ db_file = @dir_cova_apps_home + "/" + name + "/store/log.db"
299
+ if File.exist?(db_file)
300
+ db = SQLite3::Database.new db_file
301
+ db.execute "select * from changelog" do |row|
302
+ puts "[" + row[2] + "] " + row[1] + " " + row[0]
303
+ end
304
+ return true
305
+ end
306
+
307
+ _log_info "Looks like there's no activity yet. So do something first."
308
+ return false
309
+ end
310
+
311
+ desc 'hi NAME', 'Say hi to an app and respond to activities'
312
+ def hi (name)
313
+ if not _cova_installed
314
+ _cova_prompt_install
315
+ return false
316
+ end
317
+
318
+ if not _io_app_exists name
319
+ _log_line "App #{name} does not exist"
320
+ _log_line_error
321
+ return false
322
+ end
323
+
324
+ pid_file = @dir_cova_apps_home + "/" + name + "/store/hi.lock"
325
+ if _io_isfile pid_file, false
326
+ _log_info "You already said hi. Say bye first."
327
+ return true
328
+ end
329
+
330
+ db_file = @dir_cova_apps_home + "/" + name + "/store/log.db"
331
+
332
+ monitor = FSSM::Monitor.new
333
+ monitor.path @dir_cova_apps_home + "/" + name do
334
+ create do |b, r, t|
335
+ if File.exist?(db_file) and not r == "store/log.db"
336
+ db = SQLite3::Database.new db_file
337
+ db.execute "insert into changelog values ('#{r}', 'created', '" + Time.new.strftime("%Y-%m-%d %H:%M:%S") + "')"
338
+ end
339
+ end
340
+ update do |b, r, t|
341
+ if File.exist?(db_file) and not r == "store/log.db"
342
+ db = SQLite3::Database.new db_file
343
+ db.execute "insert into changelog values ('#{r}', 'updated', '" + Time.new.strftime("%Y-%m-%d %H:%M:%S") + "')"
344
+ end
345
+ end
346
+ delete do |b, r, t|
347
+ if File.exist?(db_file) and not r == "store/log.db"
348
+ db = SQLite3::Database.new db_file
349
+ db.execute "insert into changelog values ('#{r}', 'deleted', '" + Time.new.strftime("%Y-%m-%d %H:%M:%S") + "')"
350
+ end
351
+ end
352
+ end
353
+
354
+ pid = fork do
355
+ monitor.run
356
+ end
357
+
358
+ File.open(@dir_cova_apps_home + "/" + name + "/store/hi.lock", 'w') {|f| f.write(pid)}
359
+ Process.detach(pid)
360
+
361
+ if _io_isfile pid_file
362
+ if not File.exist?(db_file)
363
+ db = SQLite3::Database.new db_file
364
+ db.execute("CREATE TABLE changelog(file, event, date)")
365
+ _log_info "Hi!"
366
+ return true
367
+ end
368
+
369
+ _log_info "Hi again!"
370
+ return true
371
+ end
372
+
373
+ _log_line "Oops, something went wrong."
374
+ _log_line_error
375
+ return false
376
+ end
377
+
253
378
  desc 'deploy NAME', 'Builds an app'
254
379
  def deploy (name)
255
380
  if not _cova_installed
@@ -273,24 +398,21 @@ class Cova < Thor
273
398
 
274
399
  config = _config_load "app.config"
275
400
  deploy_dir = config['local.www']
276
- if not deploy_dir
401
+ if not deploy_dir + "/#{name}"
277
402
  _log_line "Expecting the local.www path to be configured."
278
403
  _log_line_error
279
404
  _log_info "Please set the local.www path in your app.config file."
280
405
  return false
281
406
  end
282
407
 
283
- if _io_isdir "www" and _io_isdir deploy_dir
284
- `rm -rf #{deploy_dir}/*`
285
- `rm -rf #{deploy_dir}/.htaccess`
286
- `cp -r www/* #{deploy_dir}`
287
- `cp www/.htaccess #{deploy_dir}/.htaccess`
288
- _log_line "Deploying the app to #{deploy_dir}"
289
- _log_line_ok
408
+ `rm -rf #{deploy_dir}/#{name}`
409
+ if _io_cpdir "www", "#{deploy_dir}/#{name}"
410
+ _log_line "Deploying the app to #{deploy_dir}/#{name}"
411
+ _log_line_ok
290
412
  return true
291
413
  end
292
414
 
293
- _log_line "Deploying the app to #{deploy_dir}"
415
+ _log_line "Deploying the app to #{deploy_dir}/#{name}"
294
416
  _log_line_error
295
417
  return false
296
418
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cova
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 9
10
- version: 0.1.9
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dan Calinescu
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-06-05 00:00:00 Z
18
+ date: 2013-06-06 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: logger
@@ -101,6 +101,34 @@ dependencies:
101
101
  version: "0"
102
102
  type: :runtime
103
103
  version_requirements: *id006
104
+ - !ruby/object:Gem::Dependency
105
+ name: fssm
106
+ prerelease: false
107
+ requirement: &id007 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
115
+ version: "0"
116
+ type: :runtime
117
+ version_requirements: *id007
118
+ - !ruby/object:Gem::Dependency
119
+ name: sqlite3
120
+ prerelease: false
121
+ requirement: &id008 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ hash: 3
127
+ segments:
128
+ - 0
129
+ version: "0"
130
+ type: :runtime
131
+ version_requirements: *id008
104
132
  description: Cova removes a lot of the complexity that comes with designing, coding, testing, prototyping and publishing mobile applications.
105
133
  email: dan@cova.io
106
134
  executables: