ti 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.gitignore +43 -0
  2. data/Gemfile +2 -19
  3. data/Gemfile.lock +27 -27
  4. data/LICENSE.txt +1 -1
  5. data/README.rdoc +1 -1
  6. data/Rakefile +0 -28
  7. data/TODO.mkd +1 -2
  8. data/lib/ti.rb +10 -10
  9. data/lib/ti/cli.rb +39 -6
  10. data/lib/ti/config.rb +22 -0
  11. data/lib/ti/generate/controller.rb +38 -0
  12. data/lib/ti/generate/model.rb +13 -7
  13. data/lib/ti/generate/project.rb +59 -13
  14. data/lib/ti/generate/view.rb +30 -9
  15. data/lib/ti/templates/app/controllers/controller.erb +0 -0
  16. data/lib/ti/templates/app/controllers/window.erb +3 -0
  17. data/lib/ti/templates/app/views/tabgroup.erb +0 -0
  18. data/lib/ti/templates/app/views/view.erb +0 -0
  19. data/lib/ti/templates/app/views/window.erb +3 -0
  20. data/lib/ti/templates/{guardfile → defaults/Guardfile.erb} +3 -3
  21. data/lib/ti/templates/defaults/Rakefile.erb +148 -0
  22. data/lib/ti/templates/defaults/Readme.mkd.erb +1 -0
  23. data/lib/ti/templates/{config → defaults/config.erb} +1 -1
  24. data/lib/ti/templates/gitignore +1 -1
  25. data/lib/ti/templates/specs/app_spec.coffee +2 -2
  26. data/lib/ti/utils.rb +70 -41
  27. data/lib/ti/version.rb +3 -0
  28. data/spec/cli/command_spec.rb +7 -11
  29. data/spec/fixtures/configs/tiapp.xml +34 -0
  30. data/spec/lib/config_spec.rb +34 -0
  31. data/spec/spec_helper.rb +8 -0
  32. data/spec/ti/generators/model_spec.rb +25 -0
  33. data/spec/ti/generators/project_spec.rb +121 -0
  34. data/spec/ti/generators/view_spec.rb +25 -0
  35. data/spec/ti/logger_spec.rb +25 -0
  36. data/spec/ti/utils_spec.rb +120 -0
  37. data/ti.gemspec +32 -103
  38. metadata +75 -47
  39. data/VERSION +0 -1
  40. data/lib/ti/options.rb +0 -64
  41. data/lib/ti/parse_options.rb +0 -48
  42. data/lib/ti/templates/readme +0 -1
@@ -0,0 +1,43 @@
1
+ # rcov generated
2
+ coverage
3
+ *.gem
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
19
+ #
20
+ # * Create a file at ~/.gitignore
21
+ # * Include files you want ignored
22
+ # * Run: git config --global core.excludesfile ~/.gitignore
23
+ #
24
+ # After doing this, these files will be ignored in all your git projects,
25
+ # saving you from having to 'pollute' every project you touch with them
26
+ #
27
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
28
+ #
29
+ # For MacOS:
30
+ #
31
+ .DS_Store
32
+ #
33
+ # For TextMate
34
+ *.tmproj
35
+ #tmtags
36
+ #
37
+ # For emacs:
38
+ *~
39
+ \#*
40
+ .\#*
41
+ #
42
+ # For vim:
43
+ *.swp
data/Gemfile CHANGED
@@ -1,21 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
-
4
- group :runtime do
5
- gem "sass", "~> 3.1.1"
6
- gem "guard-sass", :git => "https://github.com/pengwynn/guard-sass"
7
- gem 'guard', "~> 0.3.4"
8
- gem 'guard-coffeescript', "~> 0.2.0"
9
- gem 'guard-livereload', "~> 0.1.10"
10
- gem 'jasmine', "~> 1.0.2.0"
11
- gem 'coffee-script', "~> 2.2.0"
12
- gem 'colored', "~> 1.2"
13
- gem 'rocco', "~> 0.6"
14
- gem 'rake', "~> 0.8.7"
15
- end
16
-
17
- group :development do
18
- gem "bundler", "~> 1.0.10"
19
- gem "jeweler", "~> 1.5.2"
20
- gem "rspec", "~> 2.5.0"
21
- end
3
+ # Specify your gem's dependencies in ti.gemspec
4
+ gemspec
@@ -1,10 +1,19 @@
1
- GIT
2
- remote: https://github.com/pengwynn/guard-sass
3
- revision: 6bcf5f4de45d1b994468ad51cec68298ed3d9c5e
1
+ PATH
2
+ remote: .
4
3
  specs:
5
- guard-sass (0.0.5)
6
- guard (>= 0.2.1)
7
- sass (~> 3.1.0)
4
+ ti (0.1.0)
5
+ coffee-script (~> 2.2.0)
6
+ colored (~> 1.2)
7
+ erubis (~> 2.7.0)
8
+ guard (~> 0.3.4)
9
+ guard-coffeescript (~> 0.2.0)
10
+ guard-livereload (~> 0.1.10)
11
+ guard-sass (~> 0.0.6)
12
+ jasmine (~> 1.0.2.0)
13
+ nokogiri (~> 1.4.4)
14
+ rake (~> 0.8.7)
15
+ rocco (~> 0.6)
16
+ sass (~> 3.1.1)
8
17
 
9
18
  GEM
10
19
  remote: http://rubygems.org/
@@ -15,40 +24,41 @@ GEM
15
24
  coffee-script (2.2.0)
16
25
  coffee-script-source
17
26
  execjs
18
- coffee-script-source (1.0.1)
27
+ coffee-script-source (1.1.0)
19
28
  colored (1.2)
20
29
  diff-lcs (1.1.2)
21
30
  em-websocket (0.2.1)
22
31
  addressable (>= 2.1.1)
23
32
  eventmachine (>= 0.12.9)
33
+ erubis (2.7.0)
24
34
  eventmachine (0.12.10)
25
- execjs (0.3.0)
35
+ execjs (0.3.3)
26
36
  multi_json (~> 1.0)
27
37
  ffi (1.0.7)
28
38
  rake (>= 0.8.7)
29
- git (1.2.5)
30
39
  guard (0.3.4)
31
40
  thor (~> 0.14.6)
32
41
  guard-coffeescript (0.2.0)
33
42
  coffee-script (~> 2.2.0)
34
43
  guard (~> 0.3.0)
35
- guard-livereload (0.1.10)
44
+ guard-livereload (0.1.11)
36
45
  em-websocket (~> 0.2.0)
37
46
  guard (>= 0.2.2)
38
47
  json (~> 1.5.1)
48
+ guard-sass (0.0.6)
49
+ guard (>= 0.2.1)
50
+ haml (~> 3.0.0)
51
+ haml (3.0.25)
39
52
  jasmine (1.0.2.0)
40
53
  json_pure (>= 1.4.3)
41
54
  rack (>= 1.1)
42
55
  rspec (>= 1.3.1)
43
56
  selenium-webdriver (>= 0.1.3)
44
- jeweler (1.5.2)
45
- bundler (~> 1.0.0)
46
- git (>= 1.2.5)
47
- rake
48
57
  json (1.5.1)
49
58
  json_pure (1.5.1)
50
- multi_json (1.0.0)
59
+ multi_json (1.0.1)
51
60
  mustache (0.99.3)
61
+ nokogiri (1.4.4)
52
62
  rack (1.2.2)
53
63
  rake (0.8.7)
54
64
  rdiscount (1.6.8)
@@ -59,7 +69,7 @@ GEM
59
69
  rspec-core (~> 2.5.0)
60
70
  rspec-expectations (~> 2.5.0)
61
71
  rspec-mocks (~> 2.5.0)
62
- rspec-core (2.5.1)
72
+ rspec-core (2.5.2)
63
73
  rspec-expectations (2.5.0)
64
74
  diff-lcs (~> 1.1.2)
65
75
  rspec-mocks (2.5.0)
@@ -77,15 +87,5 @@ PLATFORMS
77
87
 
78
88
  DEPENDENCIES
79
89
  bundler (~> 1.0.10)
80
- coffee-script (~> 2.2.0)
81
- colored (~> 1.2)
82
- guard (~> 0.3.4)
83
- guard-coffeescript (~> 0.2.0)
84
- guard-livereload (~> 0.1.10)
85
- guard-sass!
86
- jasmine (~> 1.0.2.0)
87
- jeweler (~> 1.5.2)
88
- rake (~> 0.8.7)
89
- rocco (~> 0.6)
90
90
  rspec (~> 2.5.0)
91
- sass (~> 3.1.1)
91
+ ti!
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Robert R Evans
1
+ Copyright (c) 2011 Code Wranglers Inc, Robert R Evans
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -21,6 +21,6 @@ Just playing with some ideas.
21
21
 
22
22
  == Copyright
23
23
 
24
- Copyright (c) 2011 Robert R Evans. See LICENSE.txt for
24
+ Copyright (c) 2011 Code Wranglers Inc, Robert R Evans. See LICENSE.txt for
25
25
  further details.
26
26
 
data/Rakefile CHANGED
@@ -11,23 +11,6 @@ end
11
11
  require 'rake'
12
12
  require 'time'
13
13
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "ti"
18
- gem.homepage = "http://github.com/revans/ti"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Ti}
21
- gem.description = %Q{Titanium Project Generator}
22
- gem.email = "robert@codewranglers.org"
23
- gem.authors = ["Robert R Evans", "Julius Francisco", 'Wynn Netherland', 'Rupak Ganguly']
24
- gem.date = Time.now.strftime("%Y-%m-%d")
25
- gem.executables = ["ti"]
26
- gem.version = File.read(File.join(File.dirname(__FILE__), 'VERSION')).chomp
27
-
28
- end
29
- Jeweler::RubygemsDotOrgTasks.new
30
-
31
14
  require 'rake/testtask'
32
15
  Rake::TestTask.new(:test) do |test|
33
16
  test.libs << 'lib' << 'test'
@@ -37,17 +20,6 @@ end
37
20
 
38
21
  task :default => :test
39
22
 
40
- require 'rake/rdoctask'
41
- Rake::RDocTask.new do |rdoc|
42
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
43
-
44
- rdoc.rdoc_dir = 'rdoc'
45
- rdoc.title = "ti #{version}"
46
- rdoc.rdoc_files.include('README*')
47
- rdoc.rdoc_files.include('lib/**/*.rb')
48
- end
49
-
50
-
51
23
  require 'rspec/core'
52
24
  require 'rspec/core/rake_task'
53
25
 
data/TODO.mkd CHANGED
@@ -3,7 +3,6 @@
3
3
  * CoffeeScript Compiling doesn't work because "path" needs to be implemented. The idea is to make this a dynamic lookup.
4
4
  * Need to remove the perl script in the rakefile
5
5
  * Documentation.
6
- * Currently, using a home-brewed option parser, which works. Once I figure out why Thor is error-ing out on my system, I'll re implement with Thor.
7
6
  * Need to write a guard-jasmine gem.
8
7
 
9
8
  ## Ideas
@@ -20,4 +19,4 @@ I love autotest for rails. I'd like to have the coffee-scripts auto compiling, s
20
19
 
21
20
  When doing small upgrades/changes, use patch versioning.
22
21
  Once everything is in this, and it's well tested, we can go to version
23
- 1.0
22
+ 1.0
data/lib/ti.rb CHANGED
@@ -3,32 +3,32 @@ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) ||
3
3
  require 'rubygems'
4
4
  require 'pathname'
5
5
  require 'fileutils'
6
+ require 'rbconfig'
6
7
  require 'colored'
7
8
  require 'rocco'
8
9
  require 'thor'
9
-
10
- require 'ostruct'
10
+ require 'erubis'
11
+ require 'rbconfig'
12
+ require 'nokogiri'
11
13
 
12
14
  module Ti
13
- VERSION = File.read(File.join(File.dirname(__FILE__), '../VERSION')).chomp
14
15
  ROOT_PATH = Pathname(__FILE__).dirname.expand_path
15
16
  TITANIUM_VERSION = '1.6.2'
16
17
 
17
18
  # TODO: Need to support those how have install Titanium in their $HOME dir.
18
-
19
- OSX_TITANIUM = "/Library/Application\\ Support/Titanium/mobilesdk/osx/#{::Ti::TITANIUM_VERSION}/titanium.py"
20
- LINUX_TITANIUM = "$HOME/.titanium/mobilesdk/linux/#{::Ti::TITANIUM_VERSION}/titanium.py"
19
+ OSX_TITANIUM_HOME = "$HOME/Library/Application\\ Support/Titanium/mobilesdk/osx/#{::Ti::TITANIUM_VERSION}/titanium.py"
20
+ OSX_TITANIUM = "/Library/Application\\ Support/Titanium/mobilesdk/osx/#{::Ti::TITANIUM_VERSION}/titanium.py"
21
+ LINUX_TITANIUM = "$HOME/.titanium/mobilesdk/linux/#{::Ti::TITANIUM_VERSION}/titanium.py"
21
22
 
22
23
  autoload :CLI, 'ti/cli.rb'
23
- autoload :Options, 'ti/options.rb'
24
- autoload :ParseOptions, 'ti/parse_options.rb'
25
24
  autoload :Logger, "ti/logger.rb"
26
25
  autoload :Utils, "ti/utils.rb"
27
-
26
+
28
27
  module Generate
29
28
  autoload :Project, "ti/generate/project.rb"
30
29
  autoload :Model, "ti/generate/model.rb"
31
- autoload :View, "ti/generate/view.rb"
30
+ autoload :View, "ti/generate/view.rb"
31
+ autoload :Controller, "ti/generate/controller.rb"
32
32
  end
33
33
 
34
34
  end
@@ -1,13 +1,23 @@
1
1
  module Ti
2
2
  class CLI < Thor
3
-
3
+ include Utils
4
+
4
5
  STATUS_TYPES = {:success => 0,
5
6
  :general_error => 1,
6
7
  :not_supported => 3,
7
8
  :not_found => 4,
8
9
  :incorrect_usage => 64,
9
10
  }
10
-
11
+
12
+ no_tasks {
13
+ def cli_error(message, exit_status=nil)
14
+ $stderr.puts message
15
+ exit_status = STATUS_TYPES[exit_status] if exit_status.is_a?(Symbol)
16
+ exit exit_status || 1
17
+ end
18
+ }
19
+
20
+ ### TODO: When these commands list grows big, we need to move them into a seperate commands.rb file
11
21
  map %w(--version -v) => 'info'
12
22
  desc "info", "information about Ti."
13
23
  def info
@@ -15,7 +25,7 @@ module Ti
15
25
  end
16
26
 
17
27
  desc "new <name> <id> <platform>", "generates a new Titanium project."
18
- long_desc "Generates a new Titanium project. See 'ti help project:new' for more information.
28
+ long_desc "Generates a new Titanium project. See 'ti help new' for more information.
19
29
  \n\nExamples:
20
30
  \n\nti new demo ==> Creates a new project with a default id (org.mycompany.demo) and sets the project platform to iphone.
21
31
  \n\nti new demo com.youwantit.dontyou ==> Creates a new project 'demo' with the id of 'com.youwantit.dontyou' to be used on the iphone.
@@ -25,15 +35,38 @@ module Ti
25
35
  end
26
36
 
27
37
  map %w(g) => 'generate'
28
- desc "generate <model/view> <name>", "generate a new model or view with jasmine specs."
38
+ desc "generate <model/controller/view> <name>", "generate a new model or view with jasmine specs."
29
39
  def generate(type, name)
30
40
  case
31
41
  when type =~ /model/i
32
42
  ::Ti::Generate::Model.create(name)
33
43
  when type =~ /view/i
34
44
  ::Ti::Generate::View.create(name)
45
+ when type =~ /controller/i
46
+ ::Ti::Generate::Controller.create(name)
35
47
  end
36
48
  end
37
-
49
+
50
+
51
+
52
+ map %w(s) => 'scaffold'
53
+ desc "scaffold <window/tabgroup/view> <domain> <name>", "generate a scaffold for Titanium elements."
54
+ def scaffold(ti_type, domain, name)
55
+ ::Ti::Generate::View.create(name, {
56
+ :domain => domain,
57
+ :ti_type => ti_type,
58
+ :app_name => get_app_name,
59
+ :name => name })
60
+ end
61
+
62
+ map %w(c) => 'controller'
63
+ desc "controller <window> <name>", "generate a controller for Titanium"
64
+ def controller(ti_type, name)
65
+ ::Ti::Generate::Controller.create(name, {
66
+ :ti_type => ti_type,
67
+ :app_name => get_app_name,
68
+ :name => name })
69
+ end
70
+
38
71
  end
39
- end
72
+ end
@@ -0,0 +1,22 @@
1
+ require 'nokogiri'
2
+
3
+ module Ti
4
+ class Config
5
+ attr_accessor :id, :name, :version, :publisher, :url, :description, :copyright
6
+
7
+ def parse(filename)
8
+ xml = File.open(filename)
9
+ doc = Nokogiri::XML(xml)
10
+ xml.close
11
+ # parse into properties
12
+ @id = doc.xpath('ti:app/id').text
13
+ @name = doc.xpath('ti:app/name').text
14
+ @version = doc.xpath('ti:app/version').text
15
+ @publisher = doc.xpath('ti:app/publisher').text
16
+ @url = doc.xpath('ti:app/url').text
17
+ @description = doc.xpath('ti:app/description').text
18
+ @copyright = doc.xpath('ti:app/copyright').text
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ module Ti
2
+ module Generate
3
+ class Controller
4
+ class << self
5
+ include Utils
6
+
7
+ def create(name, context={})
8
+ create_controller_file(name, context)
9
+ end
10
+
11
+
12
+ def create_controller_file(name, context)
13
+ log "Creating #{name} controller using a template."
14
+ controller_directory = "app/#{underscore(get_app_name)}/controllers"
15
+
16
+ case context[:ti_type]
17
+ when 'window'
18
+ template = templates("app/controllers/window.erb")
19
+ else
20
+ template = templates("app/controllers/controller.erb")
21
+ end
22
+
23
+ payload = Pathname.new("#{controller_directory}/#{context[:domain].downcase}")
24
+ contents = Erubis::Eruby.new(File.read(template)).result(context) if template
25
+ create_directories(payload) unless File.directory?(payload)
26
+ create_directories("spec/controllers") unless File.directory?("spec/controllers")
27
+
28
+ filename = payload.join("#{name.downcase}.coffee")
29
+ File.open(location.join(filename), 'w') { |f| f.write(contents) }
30
+
31
+ create_new_file("spec/controllers/#{name}_spec.coffee", templates("specs/app_spec.coffee"))
32
+ end
33
+
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -2,18 +2,24 @@ module Ti
2
2
  module Generate
3
3
  class Model
4
4
  class << self
5
- include Utils
5
+ include ::Ti::Utils
6
6
 
7
- def create(name, options={})
8
- create_new_file("app/models/#{name}.coffee")
9
- create_new_file("specs/models/#{name}_spec.coffee", File.read(::Ti::ROOT_PATH.join("ti/templates/specs/app_spec.coffee")))
7
+ def create(name)
8
+ create_model_file(name)
10
9
  end
11
10
 
12
- def location
13
- base_location
11
+ def create_model_file(name)
12
+ log "Creating a new model file named #{name}."
13
+ model_directory = "app/#{underscore(get_app_name)}/models"
14
+
15
+ create_directories(model_directory) unless File.directory?(model_directory)
16
+ create_directories("spec/models") unless File.directory?("spec/models")
17
+
18
+ create_new_file("#{model_directory}/#{name}.coffee")
19
+ create_new_file("spec/models/#{name}_spec.coffee", templates("specs/app_spec.coffee"))
14
20
  end
15
21
 
16
22
  end
17
23
  end
18
24
  end
19
- end
25
+ end