droiuby 0.0.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.
data/bin/drby ADDED
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "droiuby"
4
+
5
+ command = ARGV[0]
6
+
7
+ case command
8
+ when 'new'
9
+ if ARGV.size < 2
10
+ puts "Create a new droiuby app"
11
+ puts "usage: "
12
+ puts "drby new [project name]"
13
+ exit(1)
14
+ end
15
+ project_name = ARGV[1]
16
+ project = Project.new
17
+ project.create(project_name,'')
18
+ when 'pack'
19
+ project_name = nil
20
+ if ARGV.size == 2
21
+ project_name = ARGV[1]
22
+ else
23
+ if !File.exists?('config.droiuby')
24
+ puts 'current directory is not a valid droiuby project'
25
+ exit(1)
26
+ end
27
+ end
28
+ project = Project.new
29
+ project.package(project_name)
30
+ when 'gopack'
31
+ project_name = nil
32
+ if ARGV.size == 3
33
+ project_name = ARGV[1]
34
+ device_ip = ARGV[2]
35
+ elsif ARGV.size == 2
36
+ device_ip = ARGV[1]
37
+ else
38
+ puts "zips and uploads app to device"
39
+ puts "usage: "
40
+ puts "drby gopack [device IP]"
41
+ puts "drby gopack [folder] [device IP]"
42
+ exit(1)
43
+ end
44
+ project = Project.new
45
+ project.execute(project_name, device_ip, '')
46
+ when 'live'
47
+ project_name = nil
48
+ if ARGV.size == 3
49
+ project_name = ARGV[1]
50
+ device_ip = ARGV[2]
51
+ elsif ARGV.size == 2
52
+ device_ip = ARGV[1]
53
+ else
54
+ puts "starts a live web server and point droiuby to it"
55
+ puts "usage: "
56
+ puts "drby live [device IP]"
57
+ puts "drby live [folder] [device IP]"
58
+ exit(1)
59
+ end
60
+ project = Project.new
61
+ project.live(project_name, device_ip, nil, '')
62
+ else
63
+ puts "invalid command"
64
+ puts "Should be:"
65
+ puts " drby [new|live|gopack|pack]"
66
+ end
@@ -0,0 +1,149 @@
1
+ require 'rubygems'
2
+
3
+ require 'net/http'
4
+ require 'net/http/post/multipart'
5
+ require 'zip'
6
+ require 'thor'
7
+ require "uri"
8
+ require 'cgi'
9
+
10
+ require 'active_support/core_ext/object'
11
+ require 'active_support/core_ext/string'
12
+
13
+ class Project < Thor
14
+
15
+ include Thor::Actions
16
+
17
+ source_root 'templates'
18
+
19
+ desc "launch device IP [URL]","Tell droiuby to connect to app hosted at URL"
20
+ def launch(device_ip, url)
21
+ url_str = "http://#{device_ip}:4000/control?cmd=launch&url=#{CGI::escape(url)}"
22
+ puts "loading application at url #{url}"
23
+ puts url_str
24
+ uri = URI.parse(url_str)
25
+ # Shortcut
26
+ response = Net::HTTP.get_response(uri)
27
+ # Will print response.body
28
+ Net::HTTP.get_print(uri)
29
+ end
30
+
31
+ desc "create NAME [WORKSPACE_DIR]","create a new droiuby project with NAME"
32
+ def create(name, output_dir = 'projects')
33
+ @name = name
34
+ @description = name
35
+ @launcher_icon = ''
36
+ @base_url = ''
37
+ @main_xml = 'index.xml'
38
+
39
+ dest_folder = File.join(output_dir,"#{name}")
40
+ template File.join('ruby','config.droiuby.erb'), File.join(dest_folder,"config.droiuby")
41
+ template File.join('ruby','gitignore.erb'), File.join(dest_folder,".gitignore")
42
+ template File.join('ruby','index.xml.erb'), File.join(dest_folder,"index.xml")
43
+ template File.join('ruby','application.css.erb'), File.join(dest_folder,"application.css")
44
+ template File.join('ruby','index.rb.erb'), File.join(dest_folder,"index.rb")
45
+ empty_directory File.join(dest_folder,"lib")
46
+ end
47
+
48
+ desc "package NAME [WORKSPACE_DIR] [true|false]","package a project"
49
+
50
+ def package(name, source_dir = 'projects', force = "false")
51
+ src_folder = File.join(source_dir,"#{name}")
52
+ say "compress #{src_folder}"
53
+ compress(src_folder, force)
54
+ end
55
+
56
+ desc "live NAME DEVICE_IP [HOST NAME] [SOURCE]", "Allow live editing of apps by starting a web server and pointing droiuby to the local instance"
57
+ def live(name, device_ip, host_name, source_dir)
58
+ require 'webrick'
59
+ include WEBrick
60
+ source_dir_args = source_dir ? source_dir : 'projects'
61
+ host_name_args = host_name ? host_name : Socket.gethostname
62
+ src_dir = source_dir_args.blank? ? '' : File.join(source_dir_args, name)
63
+ port = 2000
64
+
65
+ ready = false
66
+
67
+ Thread.new do
68
+ while !ready
69
+ end
70
+ `adb shell am start -W -S --activity-clear-top --activity-brought-to-front -n com.droiuby.client/.CanvasActivity`
71
+ launch(device_ip, "http://#{host_name_args}:#{port}/config.droiuby")
72
+ end
73
+
74
+ puts "Starting server: http://#{host_name_args}:#{port}"
75
+ server = HTTPServer.new(:Port=>port,:DocumentRoot=> src_dir,:StartCallback => Proc.new {
76
+ ready = true
77
+ })
78
+ trap("INT"){ server.shutdown }
79
+ server.start
80
+ end
81
+
82
+
83
+ desc "upload NAME DEVICE_IP [WORKSPACE_DIR]","uploads a droiuby application to target device running droiuby client"
84
+ def upload(name, device_ip, source_dir = 'projects')
85
+ src_package = File.join(source_dir,name,'build',"#{name}.zip")
86
+
87
+ url_str = "http://#{device_ip}:4000/upload"
88
+ uri = URI.parse(url_str)
89
+ say "uploading to #{url_str} -> #{uri.host}:#{uri.port}"
90
+ File.open(src_package) do |zip|
91
+ req = Net::HTTP::Post::Multipart.new uri.path,
92
+ "name" => name,
93
+ "run" => "true",
94
+ "file" => UploadIO.new(zip, "application/zip", src_package,"content-disposition" => "form-data; name=\"file\"; filename=\"#{File.basename(src_package)}\"\r\n")
95
+
96
+ retries = 0
97
+ while (retries < 3)
98
+ sleep 1 + retries
99
+ begin
100
+ res = Net::HTTP.start(uri.host, uri.port) do |http|
101
+ http.request(req)
102
+ end
103
+ break
104
+ rescue Errno::EHOSTUNREACH
105
+ retries += 1
106
+ next
107
+ end
108
+ end
109
+
110
+
111
+ if res.code == "200"
112
+ say_status 'upload', src_package
113
+ else
114
+ say 'upload failed.'
115
+ say res.body
116
+ end
117
+
118
+ end
119
+ end
120
+
121
+ desc "execute NAME DEVICE_IP [WORKSPACE_DIR]","package and execute a droiuby application to target device running droiuby client"
122
+ def execute(name, device_ip, source_dir = 'projects')
123
+ `adb shell am start -W -S --activity-clear-top --activity-brought-to-front -n com.droiuby.client/.CanvasActivity`
124
+ package name, source_dir, "true"
125
+ upload name, device_ip, source_dir
126
+ end
127
+
128
+ private
129
+
130
+ def compress(path, force = "false")
131
+ path.sub!(%r[/$],'')
132
+ unless Dir.exists?(File.join(path,'build'))
133
+ Dir.mkdir(File.join(path,'build'))
134
+ end
135
+ archive = File.join(path,'build',"#{File.basename(path)}.zip")
136
+ if force=='true' || file_collision(archive)
137
+
138
+ FileUtils.rm archive, :force=>true
139
+
140
+ Zip::File.open(archive, Zip::File::CREATE) do |zipfile|
141
+ Dir["#{path}/**/**"].reject{ |f| f==archive || f.match(/\/build/) }.each do |file|
142
+ say_status 'adding', file
143
+ zipfile.add(file.sub(path+'/',''),file)
144
+ end
145
+ end
146
+ say_status 'create', archive
147
+ end
148
+ end
149
+ end
@@ -0,0 +1 @@
1
+ /* place application wide css here */
@@ -0,0 +1,11 @@
1
+ <app_descriptor>
2
+ <name><%= @name %></name>
3
+ <description><%= @description %></description>
4
+ <launcher_icon><%= @launcher_icon %></launcher_icon>
5
+ <base_url><%= @base_url%></base_url>
6
+ <main><%= @main_xml %></main>
7
+ <framework>droiuby</framework>
8
+ <assets>
9
+ <resource name="lib" type="lib"/>
10
+ </assets>
11
+ </app_descriptor>
@@ -0,0 +1 @@
1
+ build/**/*
@@ -0,0 +1,10 @@
1
+ #droiuby ruby script
2
+ class Index < Activity
3
+ def on_create
4
+ #called when activity is first created
5
+ end
6
+
7
+ def on_activity_result(request_code, result_code, intent)
8
+ #callback from starting an activity with result
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ <activity controller="index.rb#index">
2
+ <preload id="application_css" src="application.css" type="css"/>
3
+ <layout type="linear" width="match" height="match" orientation="vertical">
4
+ <t>Hello World!</t>
5
+ </layout>
6
+ </activity>
data/lib/droiuby.rb ADDED
@@ -0,0 +1 @@
1
+ require 'droiuby/project'
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: droiuby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Joseph Emmanuel Dayo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ none: false
22
+ requirement: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ none: false
28
+ prerelease: false
29
+ type: :runtime
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ none: false
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ none: false
44
+ prerelease: false
45
+ type: :runtime
46
+ - !ruby/object:Gem::Dependency
47
+ name: thor
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ none: false
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ none: false
60
+ prerelease: false
61
+ type: :runtime
62
+ - !ruby/object:Gem::Dependency
63
+ name: rubyzip
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.0
69
+ none: false
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: 1.0.0
75
+ none: false
76
+ prerelease: false
77
+ type: :runtime
78
+ - !ruby/object:Gem::Dependency
79
+ name: multipart-post
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ none: false
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ none: false
92
+ prerelease: false
93
+ type: :runtime
94
+ - !ruby/object:Gem::Dependency
95
+ name: properties-ruby
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ none: false
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ none: false
108
+ prerelease: false
109
+ type: :runtime
110
+ - !ruby/object:Gem::Dependency
111
+ name: activesupport
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ none: false
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ none: false
124
+ prerelease: false
125
+ type: :runtime
126
+ description: Android development using ruby
127
+ email: joseph.dayo@gmail.com
128
+ executables:
129
+ - drby
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - lib/droiuby.rb
134
+ - lib/droiuby/project.rb
135
+ - lib/droiuby/templates/ruby/config.droiuby.erb
136
+ - lib/droiuby/templates/ruby/gitignore.erb
137
+ - lib/droiuby/templates/ruby/index.rb.erb
138
+ - lib/droiuby/templates/ruby/index.xml.erb
139
+ - lib/droiuby/templates/ruby/application.css.erb
140
+ - bin/drby
141
+ homepage: http://rubygems.org/gems/droiuby
142
+ licenses:
143
+ - MIT
144
+ post_install_message:
145
+ rdoc_options: []
146
+ require_paths:
147
+ - lib
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ none: false
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ none: false
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 1.8.24
163
+ signing_key:
164
+ specification_version: 3
165
+ summary: Droiuby GEM
166
+ test_files: []