cova 0.1.0 → 0.1.1

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 (6) hide show
  1. data/bin/cova +10 -5
  2. data/lib/cova.rb +12 -312
  3. data/lib/covaio.rb +116 -0
  4. data/lib/covalog.rb +50 -0
  5. data/lib/covamain.rb +176 -0
  6. metadata +10 -7
data/bin/cova CHANGED
@@ -1,9 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "fileutils"
4
- require "thor"
5
- require "xcodeproj"
6
- require "colorize"
7
- require "cova"
3
+ require 'rubygems'
4
+
5
+ require 'logger'
6
+ require 'colorize'
7
+ require 'fileutils'
8
+ require 'thor'
9
+ require 'cocoapods'
10
+ require 'covalog'
11
+ require 'covaio'
12
+ require 'covamain'
8
13
 
9
14
  Cova.start
data/lib/cova.rb CHANGED
@@ -1,312 +1,12 @@
1
- COVA_REPO="git://github.com/dancali/cova.git"
2
- XCTOOL_REPO="git://github.com/facebook/xctool.git"
3
- COVA_MODS_REPO="git://github.com/dancali/cova-mods.git"
4
-
5
- class Cova < Thor
6
-
7
- no_commands do
8
-
9
- def _msg(msg)
10
- print msg.black + " ... "
11
- end
12
-
13
- def _info(msg)
14
- puts
15
- puts msg.blue
16
- puts
17
- end
18
-
19
- def _ok
20
- print "[ ".black
21
- print "OK".green
22
- print " ]".black
23
- puts
24
- end
25
-
26
- def _error
27
- print "[".black
28
- print "FAIL".red
29
- print "]".black
30
- puts
31
- end
32
-
33
- def _success
34
- puts
35
- print "=".black * 9
36
- print " SUCCESS ".green
37
- puts "=".black * 9
38
- puts
39
- end
40
-
41
- def _fail
42
- puts
43
- print "=".black * 8
44
- print " FAILED ".red
45
- puts "=".black * 8
46
- puts
47
- end
48
-
49
- def _start(msg)
50
- puts
51
- print "=".black * 3
52
- print " " + msg.black + " "
53
- puts "=".black * 3
54
- puts
55
- end
56
-
57
- def _cmd(cmd)
58
- pipe = IO.popen(cmd)
59
- puts cmd.blue
60
- while (line = pipe.gets)
61
- print line.black
62
- end
63
- end
64
-
65
- def _covadir
66
- File.expand_path("~/.cova")
67
- end
68
-
69
- def _covamodsdir
70
- user_home_dir = File.expand_path("~/.cocoapods/cova")
71
- end
72
-
73
- def _builddir
74
- File.expand_path("~/Library/Developer/Xcode/DerivedData")
75
- end
76
-
77
- def _init
78
- user_home_dir = File.expand_path("~")
79
- cova_dir = user_home_dir + "/.cova"
80
- cocoapods_cova_dir = user_home_dir + "/.cocoapods/cova"
81
-
82
- _start "Initializing Cova"
83
-
84
- if File.directory?(cova_dir)
85
- _msg "Cleaning up previous installation"
86
- FileUtils.rm_r cova_dir, :force => true
87
- if File.directory?(cova_dir)
88
- _error
89
- _fail
90
- exit
91
- else
92
- _ok
93
- if File.directory?(cocoapods_cova_dir)
94
- _msg "Cleaning Cova Mods"
95
- FileUtils.rm_r cocoapods_cova_dir
96
- if File.directory?(cocoapods_cova_dir)
97
- _error
98
- _fail
99
- exit
100
- else
101
- _ok
102
- end
103
- end
104
- end
105
- end
106
-
107
- _msg "Preparing to install Cova in #{cova_dir}"
108
- FileUtils.mkdir cova_dir
109
- if File.directory?(cova_dir)
110
- _ok
111
- FileUtils.cd cova_dir
112
- _cmd ("git clone #{XCTOOL_REPO}")
113
- if File.directory?(cova_dir + "/xctool")
114
- _cmd ("git clone #{COVA_REPO}")
115
- if File.directory?(cova_dir + "/cova")
116
- _cmd "pod repo add cova #{COVA_MODS_REPO}"
117
- if File.directory?(cocoapods_cova_dir)
118
- status
119
- _success
120
- puts
121
- puts "Congrats! Cove is now installed. Enjoy Cova and build the next great app sensation!".green
122
- puts
123
- puts "For more info visit the homepage: http://cova.io".black
124
- puts
125
- else
126
- _msg "Could not create Cova Mods home"
127
- _error
128
- _error
129
- exit
130
- end
131
- else
132
- _msg "cova did not clone correctly"
133
- _error
134
- _fail
135
- exit
136
- end
137
- else
138
- _msg "xctool did not clone correctly"
139
- _error
140
- _fail
141
- exit
142
- end
143
- else
144
- _error
145
- _fail
146
- exit
147
- end
148
- end
149
-
150
- def _build
151
- _start "Building"
152
- if File.exist?('cova.xcworkspace')
153
- _cmd (_covadir + "/xctool/xctool.sh -workspace cova.xcworkspace -scheme cova -configuration Debug -sdk iphonesimulator")
154
- _success
155
- else
156
- _msg "Expecting cova.xcworkspace"
157
- _error
158
- _fail
159
- exit
160
- end
161
- end
162
-
163
- def _buildall
164
- _start "Building with dependencies"
165
- _msg "Looking for Podfile"
166
- if File.exist?('Podfile')
167
- _ok
168
- _cmd "pod install"
169
- _build
170
- else
171
- _error
172
- _msg "Expecting Podfile"
173
- _error
174
- _fail
175
- exit
176
- end
177
- end
178
-
179
- end
180
-
181
- desc 'status', 'Checks the status of a Cova installation'
182
- def status
183
- _start "Checking if Cova is installed"
184
- cova_dir = _covadir
185
- if File.directory?(cova_dir)
186
- _msg "Found Cova in #{cova_dir}"
187
- _ok
188
- else
189
- puts "Expecting Cova in #{cova_dir} not found".red
190
- _fail
191
- return false
192
- end
193
-
194
- cova_mods_dir = _covamodsdir
195
- if File.directory?(cova_mods_dir)
196
- _msg "Found Cova Mods in #{cova_mods_dir}"
197
- _ok
198
- _success
199
- else
200
- puts "Expected Cova Mods in #{cova_mods_dir} not found".red
201
- return false
202
- end
203
-
204
- return true
205
- end
206
-
207
- desc 'uninstall', 'Completely uninstalls Cova'
208
- def uninstall
209
-
210
- _start "Uninstalling Cova"
211
-
212
- cova_dir = _covadir
213
- _msg "Removing Cova from #{cova_dir}"
214
- FileUtils.rm_r cova_dir, :force => true
215
- if File.directory?(cova_dir)
216
- _error
217
- _fail
218
- exit
219
- else
220
- _ok
221
- end
222
-
223
- cova_mods_dir = _covamodsdir
224
- _msg "Removing Cova Mods from #{cova_mods_dir}"
225
- FileUtils.rm_r cova_mods_dir, :force => true
226
- if File.directory?(cova_mods_dir)
227
- _error
228
- _fail
229
- exit
230
- else
231
- _ok
232
- _success
233
- end
234
- end
235
-
236
- desc 'install', 'Installs Cova from scratch'
237
- option :force, :type => :boolean, :aliases => :f
238
- def install
239
- user_home_dir = File.expand_path("~")
240
- cova_dir = user_home_dir + "/.cova"
241
-
242
- if File.directory?(cova_dir)
243
- if options[:force]
244
- _init
245
- else
246
- _info "Cova is already installed. Run install -f to force a re-install"
247
- end
248
- else
249
- _init
250
- end
251
- end
252
-
253
- desc 'create NAME', 'Creates a new Cova app'
254
- option :build, :type => :boolean, :aliases => :b
255
- def create (name)
256
-
257
- _start "Creating app #{name}"
258
-
259
- if status
260
- app_home = File.expand_path("./#{name}")
261
- if File.directory?(app_home)
262
- _msg "Cannot create directory #{app_home} as it already exists"
263
- _error
264
- _fail
265
- exit
266
- end
267
-
268
- _msg "Creating app home in #{app_home}"
269
- FileUtils.mkdir app_home
270
- if File.directory?(app_home)
271
- _ok
272
- _msg "Adding Xcode project"
273
- cova_dir = _covadir
274
-
275
- FileUtils.cp_r cova_dir + "/cova/ios/xcode-template", app_home + "/ios"
276
- if File.directory?(app_home + "/ios/cova")
277
- _ok
278
- if options[:build]
279
- FileUtils.cd app_home + "/ios"
280
- _buildall
281
- else
282
- _success
283
- end
284
- else
285
- _error
286
- _fail
287
- _exit
288
- end
289
- else
290
- _error
291
- _fail
292
- exit
293
- end
294
- else
295
- _msg "Cova not installed. Run install -f to install it"
296
- _error
297
- _fail
298
- exit
299
- end
300
- end
301
-
302
- desc 'build', 'Builds an existing Cova app'
303
- option :dependencies, :type => :boolean, :aliases => :d
304
- def build
305
- if options[:dependencies]
306
- _buildall
307
- else
308
- _build
309
- end
310
- end
311
-
312
- end
1
+ require 'rubygems'
2
+
3
+ require 'logger'
4
+ require 'colorize'
5
+ require 'fileutils'
6
+ require 'thor'
7
+ require 'cocoapods'
8
+ require 'covalog'
9
+ require 'covaio'
10
+ require 'covamain'
11
+
12
+ Cova.start
data/lib/covaio.rb ADDED
@@ -0,0 +1,116 @@
1
+ module CovaIO
2
+
3
+ def _io_init
4
+ @dir_user_home = File.expand_path("~")
5
+ @dir_cova_home = File.expand_path("~/.cova")
6
+ @dir_cova_mods_home = File.expand_path("~/.cocoapods/cova")
7
+ @dir_cocoapods_home = File.expand_path("~/.cocoapods")
8
+ @dir_xctool_home = File.expand_path("~/.cova/xctool")
9
+ @dir_xcode_build_home = File.expand_path("~/Library/Developer/Xcode/DerivedData")
10
+ @dir_cova_apps_home = File.expand_path("~/.cova/apps")
11
+
12
+ @repo_cova = "git://github.com/dancali/cova.git"
13
+ @repo_cova_mods = "git://github.com/dancali/cova-mods.git"
14
+ @repo_xctool = "git://github.com/facebook/xctool.git"
15
+ end
16
+
17
+ def _io_exec(cmd)
18
+ pipe = IO.popen(cmd)
19
+ puts cmd.blue
20
+ while (line = pipe.gets)
21
+ print line.black
22
+ end
23
+ end
24
+
25
+ def _io_exec_xctool(cmd="build", config="Debug", sdk="iphonesimulator")
26
+ _io_exec @dir_xctool_home + "/xctool.sh -workspace cova.xcworkspace -scheme cova -configuration #{config} -sdk #{sdk} #{cmd}"
27
+ end
28
+
29
+ def _io_pod_add_repo(name, repo)
30
+ _io_exec("pod repo add #{name} #{repo}")
31
+ return _io_isdir(@dir_cocoapods_home + "/" + name)
32
+ end
33
+
34
+ def _io_isdir(dir,expected=true)
35
+ _log_line (expected ? "Expecting #{dir} to exist" : "Ensuring #{dir} does not exist")
36
+ if File.directory?(dir)
37
+ expected ? _log_line_ok : _log_line_error
38
+ return true
39
+ end
40
+
41
+ if expected
42
+ _log_line_error
43
+ else
44
+ _log_line_ok
45
+ end
46
+ return false
47
+ end
48
+
49
+ def _io_isfile(file,expected=true)
50
+ _log_line (expected ? "Expecting #{file} to exist" : "Ensuring #{file} does not exist")
51
+ if File.exist?(file)
52
+ expected ? _log_line_ok : _log_line_error
53
+ return true
54
+ end
55
+
56
+ if expected
57
+ _log_line_error
58
+ else
59
+ _log_line_ok
60
+ end
61
+ return false
62
+ end
63
+
64
+ def _io_app_exists(name)
65
+ return File.directory?(@dir_cova_apps_home + "/" + name)
66
+ end
67
+
68
+ def _io_ls(dir)
69
+ Dir.foreach(dir) {|entry| puts "#{entry}" unless (entry =='.' || entry == '..') }
70
+ end
71
+
72
+ def _io_clone_repo (repo, dir)
73
+ pwd = Dir.pwd
74
+ Dir.chdir(dir)
75
+ _io_exec "git clone #{repo}"
76
+ Dir.chdir(pwd)
77
+ return _io_isdir(dir + "/" + File.basename(repo, ".*"))
78
+ end
79
+
80
+ def _io_rmdir(dir)
81
+ _log_line "Removing #{dir}"
82
+ if File.directory?(dir)
83
+ `rm -rf #{dir}`
84
+ if File.directory?(dir)
85
+ _log_line_error
86
+ return false
87
+ end
88
+ end
89
+ _log_line_ok
90
+ return true
91
+ end
92
+
93
+ def _io_lndir(src, targ)
94
+ if _io_isdir src and not _io_isdir targ, false
95
+ `ln -s #{src} #{targ}`
96
+ return _io_isdir targ
97
+ end
98
+
99
+ return false
100
+ end
101
+
102
+ def _io_cpdir(src, targ)
103
+ if _io_isdir src and not _io_isdir targ, false
104
+ `cp -r #{src} #{targ}`
105
+ return _io_isdir targ
106
+ end
107
+ return false
108
+ end
109
+
110
+ def _io_mkdir(dir)
111
+ _log_line "Creating #{dir}"
112
+ `mkdir #{dir}`
113
+ File.directory?(dir) ? _log_line_ok : _log_line_error
114
+ return File.directory?(dir)
115
+ end
116
+ end
data/lib/covalog.rb ADDED
@@ -0,0 +1,50 @@
1
+ module CovaLog
2
+
3
+ def _log_line(msg)
4
+ print msg.black + " ... "
5
+ end
6
+
7
+ def _log_line_ok
8
+ print "[ ".black
9
+ print "OK".green
10
+ print " ]".black
11
+ puts
12
+ end
13
+
14
+ def _log_line_error
15
+ print "[".black
16
+ print "FAIL".red
17
+ print "]".black
18
+ puts
19
+ end
20
+
21
+ def _log_info(msg)
22
+ puts
23
+ puts msg.blue
24
+ puts
25
+ end
26
+
27
+ def _log_block_start(msg)
28
+ puts
29
+ print "=".black * 3
30
+ print " " + msg.black + " "
31
+ puts "=".black * 3
32
+ puts
33
+ end
34
+
35
+ def _log_block_success
36
+ puts
37
+ print "=".black * 9
38
+ print " SUCCESS ".green
39
+ puts "=".black * 9
40
+ puts
41
+ end
42
+
43
+ def _log_block_error
44
+ puts
45
+ print "=".black * 8
46
+ print " FAILED ".red
47
+ puts "=".black * 8
48
+ puts
49
+ end
50
+ end
data/lib/covamain.rb ADDED
@@ -0,0 +1,176 @@
1
+ class Cova < Thor
2
+
3
+ include CovaLog
4
+ include CovaIO
5
+
6
+ def initialize(*args)
7
+ super
8
+ _io_init
9
+ end
10
+
11
+ desc 'status', 'Checks the status of a Cova installation'
12
+ def status
13
+ _log_block_start "Checking if Cova is installed"
14
+ if _io_isdir(@dir_cova_home) and _io_isdir(@dir_cova_mods_home)
15
+ _log_block_success
16
+ return true
17
+ end
18
+ _log_block_error
19
+ _cova_prompt_install
20
+ return false
21
+ end
22
+
23
+ desc 'uninstall', 'Completely uninstalls Cova'
24
+ def uninstall
25
+ _log_block_start "Uninstalling Cova"
26
+ _io_rmdir(@dir_cova_home)
27
+ _io_rmdir(@dir_cova_mods_home)
28
+ if _io_isdir(@dir_cova_home, false) or _io_isdir(@dir_cova_mods_home, false)
29
+ _log_block_error
30
+ return false
31
+ end
32
+ _log_block_success
33
+ return true
34
+ end
35
+
36
+ desc 'install', 'Installs Cova from scratch'
37
+ def install
38
+ _log_block_start "Installing Cova"
39
+
40
+ if _io_isdir(@dir_cova_home, false) or _io_isdir(@dir_cova_mods_home, false)
41
+ _log_info "It looks like Cova is already installed. Please uninstall it first before installing again."
42
+ _log_block_error
43
+ return false
44
+ end
45
+
46
+ if _io_mkdir @dir_cova_home and _io_mkdir @dir_cova_apps_home
47
+ if _io_clone_repo @repo_xctool, @dir_cova_home and _io_clone_repo @repo_cova, @dir_cova_home
48
+ _io_pod_add_repo "cova", @repo_cova_mods
49
+ _log_block_success
50
+ puts
51
+ puts "Congrats! Cove is now installed. Enjoy and build the next great app sensation!".green
52
+ puts
53
+ puts "For more info check out http://cova.io".black
54
+ puts
55
+ return true
56
+ end
57
+ end
58
+
59
+ _log_block_error
60
+ return false
61
+ end
62
+
63
+ desc 'list', 'List all exisiting apps'
64
+ def list
65
+ if not _cova_installed
66
+ _cova_prompt_install
67
+ return false
68
+ end
69
+
70
+ _io_ls @dir_cova_apps_home
71
+ return true
72
+ end
73
+
74
+ desc 'find NAME', 'Looks for an app'
75
+ def find(name)
76
+ if not _cova_installed
77
+ _cova_prompt_install
78
+ return false
79
+ end
80
+
81
+ _log_line "Searching for app #{name}"
82
+ if _io_app_exists name
83
+ _log_line_ok
84
+ return true
85
+ end
86
+
87
+ _log_line_error
88
+ return false
89
+ end
90
+
91
+ desc 'create [-b] NAME', 'Creates a new Cova app (-b to build it including tests)'
92
+ option :build, :type => :boolean, :aliases => :b
93
+ def create (name)
94
+
95
+ if not _cova_installed
96
+ _cova_prompt_install
97
+ return false
98
+ end
99
+
100
+ appname = name.strip.delete(' ')
101
+ _log_block_start "Creating Cova app #{appname}"
102
+ dir = Dir.pwd + "/" + appname
103
+
104
+ if _io_isdir dir, false or _io_app_exists appname or not _io_mkdir dir or not _io_lndir dir, @dir_cova_apps_home + "/" + appname
105
+ _log_block_error
106
+ return false
107
+ end
108
+
109
+ if _io_cpdir @dir_cova_home + "/cova/ios/xcode-template", dir + "/ios"
110
+ if options[:build]
111
+ Dir.chdir(@dir_cova_apps_home + "/" + name + "/ios")
112
+ if not _cova_build_dependencies
113
+ _log_line "Attempted to build the app dependencies"
114
+ _log_line_error
115
+ return false
116
+ end
117
+
118
+ _io_exec_xctool "test"
119
+ return true
120
+ end
121
+
122
+ _log_block_success
123
+ return true
124
+ end
125
+
126
+ _log_block_error
127
+ return false
128
+ end
129
+
130
+ desc 'build [-d][-t] NAME', 'Builds an app (-d to build dependencies, -t to build and run tests)'
131
+ option :dependencies, :type => :boolean, :aliases => :d
132
+ option :tests, :type => :boolean, :aliases => :t
133
+ def build (name)
134
+ if not _cova_installed
135
+ _cova_prompt_install
136
+ return false
137
+ end
138
+
139
+ if not _io_app_exists name
140
+ _log_line "App #{name} does not exist"
141
+ _log_line_error
142
+ return false
143
+ end
144
+
145
+ Dir.chdir(@dir_cova_apps_home + "/" + name + "/ios")
146
+ _log_block_start "Building app #{name}"
147
+ if options[:dependencies] or not _io_isfile "cova.xcworkspace" or not _io_isdir "Pods"
148
+ if not _cova_build_dependencies
149
+ _log_block_error
150
+ return false
151
+ end
152
+ end
153
+
154
+ _io_exec_xctool (options[:tests] ? "test" : "build")
155
+ end
156
+
157
+ no_commands do
158
+
159
+ def _cova_prompt_install
160
+ _log_info "Looks like Cova is not installed yet. Please run [cova install] now"
161
+ end
162
+
163
+ def _cova_installed
164
+ return (File.directory?(@dir_cova_home) and File.directory?(@dir_cova_mods_home))
165
+ end
166
+
167
+ def _cova_build_dependencies
168
+ if not _io_isfile "Podfile"
169
+ return false
170
+ end
171
+
172
+ _io_exec "pod install"
173
+ return (_io_isfile "cova.xcworkspace" and _io_isdir "Pods")
174
+ end
175
+ end
176
+ 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: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dan Calinescu
@@ -15,10 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-05-25 00:00:00 Z
18
+ date: 2013-05-26 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: fileutils
21
+ name: logger
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
@@ -46,7 +46,7 @@ dependencies:
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
- name: xcodeproj
49
+ name: colorize
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
52
  none: false
@@ -60,7 +60,7 @@ dependencies:
60
60
  type: :runtime
61
61
  version_requirements: *id003
62
62
  - !ruby/object:Gem::Dependency
63
- name: colorize
63
+ name: xcodeproj
64
64
  prerelease: false
65
65
  requirement: &id004 !ruby/object:Gem::Requirement
66
66
  none: false
@@ -83,6 +83,9 @@ extra_rdoc_files: []
83
83
 
84
84
  files:
85
85
  - lib/cova.rb
86
+ - lib/covaio.rb
87
+ - lib/covalog.rb
88
+ - lib/covamain.rb
86
89
  - bin/cova
87
90
  homepage: http://cova.io
88
91
  licenses: