lib/droiuby/scripts/project.rb in droiuby-0.3.5 vs lib/droiuby/scripts/project.rb in droiuby-0.3.6
- old
+ new
@@ -45,10 +45,152 @@
lines.reject { |line| line.strip.empty? }.collect { |line| line.split(' ').first }
rescue Errno::ENOENT => e
[]
end
end
+
+ def project_generator(name, app_name = :prompt, output_dir = 'projects', opt={})
+ @name = name
+ if app_name.nil?
+ @app_name = app_name
+ elsif app_name == :prompt
+ say("Please enter the display name for your app (Used for app launcher and Title):")
+ @app_name = ask("Display Name: ")
+ end
+
+ @description = name
+ @launcher_icon = ''
+ @base_url = ''
+ if opt[:type] == :droiuby || opt[:type] == :standalone
+ @main_xml = File.join("app","views","index.xml")
+ elsif opt[:type] == :hybrid
+ @main_xml = File.join("app","activities","index.rb")
+ else
+ say :red, "Invalid project type specified #{opt[:type]}"
+ exit(1);
+ end
+
+ if output_dir.blank?
+ output_dir = Dir.pwd
+ end
+
+ dest_folder = File.join(output_dir,"#{name}")
+ template File.join('ruby','Gemfile.erb'), File.join(dest_folder,"Gemfile")
+ template File.join('ruby','config.droiuby.erb'), File.join(dest_folder,"config.droiuby")
+ template File.join('ruby','gitignore.erb'), File.join(dest_folder,".gitignore")
+
+ if opt[:type] == :droiuby
+ template File.join('ruby','index.xml.erb'), File.join(dest_folder,"app","views","index.xml")
+ end
+
+ template File.join('ruby','application.css.erb'), File.join(dest_folder,"app","views","styles","application.css")
+ if opt[:type] == :droiuby
+ template File.join('ruby','index.rb.erb'), File.join(dest_folder,"app","activities","index.rb")
+ elsif opt[:type] == :hybrid
+ template File.join('ruby','index-hybrid.rb.erb'), File.join(dest_folder,"app","activities","index.rb")
+ end
+ template File.join('ruby','index_spec.rb.erb'), File.join(dest_folder,"spec","activities","index_spec.rb")
+ template File.join('ruby','spec_helper.rb.erb'), File.join(dest_folder,"spec","spec_helper.rb")
+
+ empty_directory File.join(dest_folder,"lib")
+
+ Dir.chdir dest_folder
+ if opt[:type] == :hybrid
+ template_generator(nil, :prompt, nil, nil, {xoptions: {hybrid: true}}.merge(opt))
+ elsif opt[:type] == :standalone
+ template_generator(nil, :prompt, nil, nil, opt)
+ end
+
+ say "running bundle install"
+ `bundle install`
+ end
+
+ def template_generator(name, package_name, title = nil, output_dir = 'projects', opt = {})
+
+ repository = opt[:repository]
+ branch = opt[:branch]
+
+ if output_dir.blank?
+ output_dir = Dir.pwd
+ end
+
+ if package_name == :prompt
+ say("Please enter the Java Package Name to be used for your app (e.g. com.awesome.sample ):")
+ package_name = ask("Package Name: ")
+ end
+
+ dest_folder = nil
+ unless name.nil?
+ dest_folder = File.join(output_dir,"#{name}")
+ Dir.chdir dest_folder
+ else
+ dest_folder = Dir.pwd
+ end
+
+ if title.nil?
+
+ doc = Nokogiri.XML(File.read('config.droiuby'))
+
+ doc.css('app_descriptor name').each do |element|
+ title = element.content
+ end
+
+ end
+
+ template_repository = ENV['droiuby_template'] || repository || 'https://github.com/jedld/droiuby-template.git'
+
+ say "using repository #{template_repository} ..."
+
+ template_namespace = URI.parse(template_repository).path.sub('.git','')
+
+ template_directory = File.expand_path(File.join("~/.droiuby/android_project_templates", "#{template_namespace}.#{branch.nil? ? 'master' : branch}"))
+
+ say "checking out to #{template_directory}"
+
+ unless File.exists?(template_directory)
+ say "no cached copy yet. obtaining template project from repository"
+
+ branch = unless branch.nil?
+ "-b #{branch}"
+ else
+ ""
+ end
+
+ `git clone #{branch} --depth 1 #{template_repository} #{template_directory}`
+ else
+ say "checking for template updates..."
+ Dir.chdir template_directory
+ `git pull`
+ end
+
+ #prepare
+ directory template_directory, File.join(dest_folder,'project')
+ remove_dir "#{File.join(dest_folder,'project')}/.git"
+
+ Dir.chdir File.join(dest_folder,'project')
+
+ say "creating android project in #{dest_folder}"
+ require "#{File.join(dest_folder,'project','init.rb')}"
+
+ dest_folder = if dest_folder.end_with? '/'
+ dest_folder
+ else
+ "#{dest_folder}/"
+ end
+
+ archive_name = File.basename(dest_folder.sub!(%r[/$],'')) if archive_name.nil?
+
+ init = Init.new
+ init.options = opt[:xoptions] || {}
+ init.init(package_name, "#{archive_name}.zip", title)
+ Dir.chdir dest_folder
+ bundle
+ package(name, '', "true")
+ say "Your android project is located at #{dest_folder}/project."
+ end
+
+
}
desc "proximity [device_ip] [true|false]", "enable/disable proximity refresh"
def proximity(device_ip, proximity = 'false')
@@ -138,140 +280,23 @@
Net::HTTP.get_print(uri)
end
desc "standalone NAME [PACKAGE_NAME]", "create an android project for this app with the specified java package name"
+ method_option :xoptions, :type => :hash, :default => {}
def standalone(name, package_name, title = nil, output_dir = 'projects', repository = nil, branch = nil)
-
- if output_dir.blank?
- output_dir = Dir.pwd
- end
-
- if package_name == :prompt
- say("Please enter the Java Package Name to be used for your app (e.g. com.awesome.sample ):")
- package_name = ask("Package Name: ")
- end
-
- dest_folder = nil
- unless name.nil?
- dest_folder = File.join(output_dir,"#{name}")
- Dir.chdir dest_folder
- else
- dest_folder = Dir.pwd
- end
-
- if title.nil?
-
- doc = Nokogiri.XML(File.read('config.droiuby'))
-
- doc.css('app_descriptor name').each do |element|
- title = element.content
- end
-
- end
-
- template_repository = ENV['droiuby_template'] || repository || 'https://github.com/jedld/droiuby-template.git'
- template_directory = File.expand_path("~/.droiuby/android_project_templates.#{branch.nil? ? 'master' : branch}")
-
- unless File.exists?(template_directory)
- say "no cached copy yet. obtaining template project from repository"
-
- branch = unless branch.nil?
- "-b #{branch}"
- else
- ""
- end
-
- `git clone #{branch} --depth 1 #{template_repository} #{template_directory}`
- else
- say "checking for template updates..."
- Dir.chdir template_directory
- `git pull`
- end
-
- #prepare
- directory template_directory, File.join(dest_folder,'project')
- remove_dir "#{File.join(dest_folder,'project')}/.git"
-
- Dir.chdir File.join(dest_folder,'project')
-
- say "creating android porject in #{dest_folder}"
- require "#{File.join(dest_folder,'project','init.rb')}"
-
- dest_folder = if dest_folder.end_with? '/'
- dest_folder
- else
- "#{dest_folder}/"
- end
-
- archive_name = File.basename(dest_folder.sub!(%r[/$],'')) if archive_name.nil?
-
- init = Init.new
- init.init(package_name, "#{archive_name}.zip", title)
- Dir.chdir dest_folder
- bundle
- package(name, '', "true")
- say "Your android project is located at #{dest_folder}/project."
+ options[:repository] = respository
+ options[:branch] = branch
+ template_generator(name, package_name, title , output_dir , options)
end
desc "create PROJECT_NAME [APP_NAME] [WORKSPACE_DIR]","create a new droiuby project with NAME"
def create(name, app_name = :prompt, output_dir = 'projects', type = 'droiuby')
- @name = name
- if app_name.nil?
- @app_name = app_name
- elsif app_name == :prompt
- say("Please enter the display name for your app (Used for app launcher and Title):")
- @app_name = ask("Display Name: ")
- end
-
- @description = name
- @launcher_icon = ''
- @base_url = ''
- if type == 'droiuby'
- @main_xml = File.join("app","views","index.xml")
- elsif type == 'hybrid'
- @main_xml = File.join("app","activities","index.rb")
- else
- say_error "Invalid project type specified"
- exit(1);
- end
-
- if output_dir.blank?
- output_dir = Dir.pwd
- end
-
- dest_folder = File.join(output_dir,"#{name}")
- template File.join('ruby','Gemfile.erb'), File.join(dest_folder,"Gemfile")
- template File.join('ruby','config.droiuby.erb'), File.join(dest_folder,"config.droiuby")
- template File.join('ruby','gitignore.erb'), File.join(dest_folder,".gitignore")
-
- if type == 'droiuby'
- template File.join('ruby','index.xml.erb'), File.join(dest_folder,"app","views","index.xml")
- end
-
- template File.join('ruby','application.css.erb'), File.join(dest_folder,"app","views","styles","application.css")
- if type == 'droiuby'
- template File.join('ruby','index.rb.erb'), File.join(dest_folder,"app","activities","index.rb")
- elsif type == 'hybrid'
- template File.join('ruby','index-hybrid.rb.erb'), File.join(dest_folder,"app","activities","index.rb")
- end
- template File.join('ruby','index_spec.rb.erb'), File.join(dest_folder,"spec","activities","index_spec.rb")
- template File.join('ruby','spec_helper.rb.erb'), File.join(dest_folder,"spec","spec_helper.rb")
-
- empty_directory File.join(dest_folder,"lib")
-
- Dir.chdir dest_folder
- if type == 'hybrid'
- standalone(nil, :prompt, nil, nil, nil, 'hybrid-mode')
- end
-
- say "running bundle install"
- `bundle install`
-
-
+ opt = {type: type.to_sym}
+ project_generator(name, app_name, output_dir, opt)
end
desc "package NAME [WORKSPACE_DIR] [true|false]","package a project"
def package(name, source_dir = 'projects', force = "false")
@@ -286,11 +311,18 @@
project_directory = File.join(src_folder,'project')
say "exsits? #{project_directory}"
if File.exists? project_directory
say "Android Project exists. Updating build inside assets ..."
- copy_file archive, File.join(project_directory,'assets',File.basename(archive)), force: true
+
+ target_directory = if File.exists?(File.join(project_directory,'build.gradle'))
+ File.join(project_directory,'app','src','main','assets',File.basename(archive))
+ else
+ File.join(project_directory,'assets',File.basename(archive))
+ end
+
+ copy_file archive, target_directory, force: true
end
end
require 'webrick'
include WEBrick
@@ -421,29 +453,44 @@
say "exsits? #{project_directory}"
if !ignore_project && File.exists?(project_directory)
say "Android Project exists. Building debug project instead ..."
Dir.chdir(project_directory)
- doc = Nokogiri.XML(File.read('AndroidManifest.xml'))
- package_name = nil
- doc.css('manifest').each do |element|
- package_name = element['package']
- end
+ is_gradle = false
+ #figure out type of project
+ doc = if File.exists?('build.gradle')
+ is_gradle = true
+ Nokogiri.XML(File.read(File.join('app','src','main','AndroidManifest.xml')))
+ else
+ Nokogiri.XML(File.read('AndroidManifest.xml'))
+ end
- say "running ant debug install"
- if !get_connected_devices.empty?
- puts `ant debug install`
- say "Starting activity #{package_name}"
- `adb shell am start -S --activity-clear-top --activity-brought-to-front -n #{package_name}/.StartupActivity`
- else
- say "No device connected. will just build the project"
- if ant_args.nil?
- puts `ant debug`
+ package_name = nil
+ doc.css('manifest').each do |element|
+ package_name = element['package']
+ end
+
+ say "running build..."
+ if !get_connected_devices.empty?
+
+ if is_gradle
+ puts `gradle installDebug`
+ else
+ puts `ant debug install`
+ end
+
+ say "Starting activity #{package_name}"
+ `adb shell am start -S --activity-clear-top --activity-brought-to-front -n #{package_name}/.StartupActivity`
else
- puts `ant #{ant_args}`
+ say "No device connected. will just build the project"
+ if ant_args.nil?
+ puts `ant debug`
+ else
+ puts `ant #{ant_args}`
+ end
end
- end
+
else
upload name, device_ip, source_dir
end
end