mobileesp_converted 0.1.0

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/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ /.bundle
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /doc
5
+ /pkg
6
+ /tmp
7
+ /vendor/ruby
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mobileesp.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # MobileESPConverted
2
+
3
+ This is a Ruby implementation of MobileESP library. It has been automatically
4
+ generated from Java source code from the
5
+ [official MobileESP repository](http://code.google.com/p/mobileesp/source/browse).
6
+ It is converted with a Vim script so the result looks sloppy, but it is
7
+ unit-tested to ensure it works OK.
8
+
9
+ MobileESP provides device type detection (tablet, mobile, etc.) based on HTTP
10
+ request headers.
11
+
12
+
13
+ ## License and more info
14
+
15
+ I just converted the code to Ruby, the original author is Anthony Hand.
16
+
17
+ For licensing of MobileESP and more info see [MobileESP official site](http://mobileesp.com).
18
+
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+
5
+ task :default => [:test]
6
+
7
+ desc "Download Java MobileESP source code to ./tmp directory."
8
+ task :download_source do
9
+ `mkdir -p java_source`
10
+ `cd java_source; wget http://mobileesp.googlecode.com/svn/Java/UAgentInfo.java`
11
+ end
12
+
13
+ Rake::TestTask.new do |t|
14
+ t.pattern = "spec/**/*_spec.rb"
15
+ end
16
+
@@ -0,0 +1,236 @@
1
+ " Vim script to convert MobileESP library from Java to Ruby
2
+ " Author: Jiri Stransky
3
+ " License: MIT
4
+
5
+ fun! s:ConvertToRuby()
6
+ set filetype=ruby
7
+ call s:TabsToSpaces()
8
+ call s:ConvertComments()
9
+ call s:FixTrailingSpaces()
10
+ call s:FixShorthandIfs()
11
+ call s:RemovePackage()
12
+ call s:ConvertBrackets()
13
+ call s:ConvertKeywords()
14
+ call s:ConvertClassDefinitions()
15
+ call s:ConvertConstantDefinitions()
16
+ call s:ConvertInstanceVariableDefinitions()
17
+ call s:ConvertMethodDefinitions()
18
+ call s:ConvertParameterLists()
19
+ call s:ConvertLocalVariables()
20
+ call s:ConvertThisDot()
21
+ call s:ConvertStandardMethods()
22
+ call s:ConvertStringContains()
23
+ call s:WrapIntoModule()
24
+ call s:RemoveSemicolons()
25
+ call s:JoinLinesBeginningWithLogicOperators()
26
+ call s:FixBugs()
27
+ call s:FixIndent()
28
+ call s:PrependConversionNotice()
29
+ endfun
30
+
31
+ fun! s:TabsToSpaces()
32
+ normal gg
33
+ " expand tabs to spaces
34
+ %s/\t/ /g
35
+ endfun
36
+
37
+ fun! s:FixTrailingSpaces()
38
+ %s/\s\+$//
39
+ endfun
40
+
41
+ fun! s:FixShorthandIfs()
42
+ " make sure opening bracket is on the line of the condition
43
+ normal gg
44
+ while search("^\\s*{$", 'W') > 0
45
+ normal kJ
46
+ endwhile
47
+
48
+ " if / else if
49
+ normal gg
50
+ while search("^\\s\\+\\(if\\|else if\\)", 'W') > 0
51
+ normal f(%$
52
+ normal v"zy
53
+ let l:lastchar = getreg('z')
54
+ if l:lastchar != '{'
55
+ s/$/ {/
56
+ call search(';', 'W')
57
+ s/$/\r}/
58
+ endif
59
+ endwhile
60
+
61
+ " else
62
+ normal gg
63
+ while search("^\\s\\+else[\s{]*$", 'W') > 0
64
+ normal $
65
+ normal v"zy
66
+ let l:lastchar = getreg('z')
67
+ if l:lastchar != '{'
68
+ s/$/ {/
69
+ call search(';', 'W')
70
+ s/$/\r}/
71
+ endif
72
+ endwhile
73
+ endfun
74
+
75
+ fun! s:FixIndent()
76
+ normal ggVG=
77
+ endfun
78
+
79
+ fun! s:ConvertComments()
80
+ " convert multiline comments that begin and end on their own lines
81
+ %s/^\s*\/\*\(\_.\{-}\)\*\/\s*$/=begin\r\1\r=end/
82
+
83
+ " convert single-line comments on their own line
84
+ %s/^\w*\/\/\(.*\)/#\1/
85
+
86
+ " remove single-line comments sharing a line with code
87
+ " (they do nasty stuff to FixShorthandIfs)
88
+ %s/\w*\/\/\(.*\)//
89
+ endfun
90
+
91
+ fun! s:RemovePackage()
92
+ %s/^package .*;$//
93
+ endfun
94
+
95
+ fun! s:ConvertBrackets()
96
+ %s/\s*{$//
97
+
98
+ %s/}\_s*else if/elsif/
99
+ %s/}\_s*else/else/
100
+
101
+ %s/}\(\s*#.*\)\?$/end/
102
+ endfun
103
+
104
+ fun! s:ConvertKeywords()
105
+ %s/\<null\>/nil/g
106
+ endfun
107
+
108
+ fun! s:ConvertClassDefinitions()
109
+ %s/public class/class/
110
+ endfun
111
+
112
+ fun! s:ConvertConstantDefinitions()
113
+ normal gg
114
+ while search('public static final String ') > 0
115
+ s/public static final String //
116
+ normal ve"zy
117
+ let replacement = s:Underscore(getreg('z'))
118
+ call setreg('x', replacement)
119
+ normal ve"xp
120
+ normal ^ve~
121
+ normal ve"xy
122
+
123
+ " replace the identifier in the whole document
124
+ exe "%s/(" . getreg('z') . ")/(" . getreg('x') . ")/g"
125
+ endwhile
126
+ endfun
127
+
128
+ fun! s:ConvertInstanceVariableDefinitions()
129
+ normal gg
130
+ while search("^\\s*\\(public\\|private\\) \\(boolean\\|String\\).*=.*;.*$") > 0
131
+ s/^\s*\(public\|private\) \(boolean\|String\) \(\w*\) = .*;.*$/\3/
132
+
133
+ normal ve"zy
134
+ let replacement = s:Underscore(getreg('z'))
135
+ call setreg('x', replacement)
136
+ normal ve"xp
137
+ normal ^ve"xy
138
+ s/\(\w\+\)/attr_reader :\1/
139
+
140
+ " replace the identifier in the whole document
141
+ exe "%s/\\<" . getreg('z') . "\\>/" . getreg('x') . "/g"
142
+ endwhile
143
+ endfun
144
+
145
+ fun! s:ConvertMethodDefinitions()
146
+ " constructor
147
+ normal gg
148
+ %s/public UAgentInfo(/def initialize(/
149
+
150
+ normal gg
151
+ while search("^\\s*public \\w\\+ \\w\\+(.*).*$", 'W') > 0
152
+ s/\(^\s*\)public \w\+ \(.*$\)/\1def \2/
153
+ normal ma
154
+
155
+ normal ^wve"zy
156
+ let replacement = s:Underscore(getreg('z'))
157
+ call setreg('x', replacement)
158
+ normal ^wve"xp
159
+ normal ^wve"xy
160
+
161
+ " replace the identifier in the whole document
162
+ exe "%s/\\<" . getreg('z') . "\\>/" . getreg('x') . "/g"
163
+
164
+ normal 'a
165
+ endwhile
166
+ endfun
167
+
168
+ fun! s:ConvertParameterLists()
169
+ normal gg
170
+ while search("^\\s*def ", 'W') > 0
171
+ s/\w\+ \(\w\+[,)]\)/\1/ge
172
+ endwhile
173
+ endfun
174
+
175
+ fun! s:ConvertLocalVariables()
176
+ normal gg
177
+ while search("^\\s*\\(boolean\\)\\s\\+\\w\\+\\s*=\\s*\\w\\+\\s*;$", 'W') > 0
178
+ normal ^dw
179
+ endwhile
180
+ endfun
181
+
182
+ fun! s:ConvertThisDot()
183
+ %s/\<this\./@/g
184
+ endfun
185
+
186
+ fun! s:ConvertStandardMethods()
187
+ %s/\.toLowerCase()/.downcase/g
188
+ endfun
189
+
190
+ fun! s:ConvertStringContains()
191
+ " contains
192
+ %s/\.indexOf(\([^)]\+\))\_s*\(!=\|>\)\_s*-1/.include?(\1)/g
193
+
194
+ " does not contain
195
+ %s/\<\(\w*\)\.indexOf(\([^)]\+\))\_s*<\_s*0/!\1.include?(\2)/g
196
+ endfun
197
+
198
+ fun! s:RemoveSemicolons()
199
+ %s/;$//
200
+ endfun
201
+
202
+ fun! s:JoinLinesBeginningWithLogicOperators()
203
+ normal gg
204
+ while search("^\\s*\\(&&\\|||\\)", 'W') > 0
205
+ normal kJ
206
+ endwhile
207
+ endfun
208
+
209
+ fun! s:WrapIntoModule()
210
+ normal gg
211
+ call search("class UAgentInfo")
212
+ exe "normal Omodule MobileESPConverted\e"
213
+ normal G
214
+ exe "normal oend\e"
215
+ endfun
216
+
217
+ fun! s:PrependConversionNotice()
218
+ normal gg
219
+ exe "normal O# This file has been automatically converted to Ruby from Java source code.\e"
220
+ exe "normal o\e"
221
+ exe "normal o\e"
222
+ exe "normal o\e"
223
+ endfun
224
+
225
+ fun! s:FixBugs()
226
+ " fix detect_iphone_or_ipod
227
+ %s/^\s*if (user_agent.include?(DEVICE_IPHONE) || user_agent.include?(DEVICE_IPOD))$/if (detect_iphone() || user_agent.include?(DEVICE_IPOD))
228
+ endfun
229
+
230
+ fun! s:Underscore(text)
231
+ let l:replacement = substitute(a:text, "\\(\\u\\)", "_\\1", "g")
232
+ let l:replacement = substitute(l:replacement, "\\(\\u\\)", "\\l\\1", "g")
233
+ return l:replacement
234
+ endfun
235
+
236
+ call s:ConvertToRuby()