cova 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: