ua 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.settings/settings.json +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +2 -0
- data/lib/missing/erb.rb +720 -0
- data/lib/missing/ostruct.rb +284 -0
- data/lib/ua/uadb.rb +42 -0
- data/lib/ua/version.rb +3 -0
- data/lib/ua.rb +375 -0
- data/test/Hello.cpp +5 -0
- data/test/a.db +0 -0
- data/test/com.win32.cpp +39 -0
- data/test/m.html +88 -0
- data/test/temp.2.cpp +5 -0
- data/test/temp.4.cpp +5 -0
- data/test/test.js +13 -0
- data/test/test.rb +74 -0
- data/test/test2.rb +41 -0
- data/test/test3.rb +111 -0
- data/test/test4.rb +9 -0
- data/test/test5.rb +142 -0
- data/ua.gemspec +23 -0
- metadata +108 -0
data/test/com.win32.cpp
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#include <windows.h>
|
2
|
+
LRESULT CALLBACK wndproc(HWND h, UINT m, WPARAM w, LPARAM l){
|
3
|
+
if(m == WM_CLOSE || m == WM_QUIT || m == WM_DESTROY){
|
4
|
+
PostQuitMessage(0);
|
5
|
+
return 0;
|
6
|
+
}
|
7
|
+
if(m == WM_COMMAND){
|
8
|
+
if(HIWORD(w) == BN_CLICKED){
|
9
|
+
|
10
|
+
|
11
|
+
if(LOWORD(w) == 101){
|
12
|
+
MessageBox(0, "Clicked", 0, 48);
|
13
|
+
}
|
14
|
+
|
15
|
+
|
16
|
+
}
|
17
|
+
}
|
18
|
+
return DefWindowProc(h, m, w, l);
|
19
|
+
}
|
20
|
+
|
21
|
+
WNDCLASSEX wc = {sizeof(wc), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, wndproc, 0, 0, 0, LoadIcon(0, IDI_APPLICATION), LoadCursor(0, IDC_ARROW), (HBRUSH)1, "", "Hello", LoadIcon(0, IDI_APPLICATION)};
|
22
|
+
int main(){
|
23
|
+
RegisterClassEx(&wc);
|
24
|
+
HWND main = CreateWindowEx(0, "Hello", "Hello world", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
25
|
+
300,200,640,480,
|
26
|
+
0, 0, 0, 0
|
27
|
+
);
|
28
|
+
|
29
|
+
CreateWindowEx(0, "button", "Hello", WS_CHILD | WS_VISIBLE,
|
30
|
+
0,0,24,36,
|
31
|
+
main, (HMENU)101, 0, 0);
|
32
|
+
|
33
|
+
|
34
|
+
MSG msg;
|
35
|
+
while(GetMessage(&msg, 0, 0, 0) > 0){
|
36
|
+
DispatchMessage(&msg);
|
37
|
+
TranslateMessage(&msg);
|
38
|
+
}
|
39
|
+
}
|
data/test/m.html
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
<!doctype html>
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title> Hello </title>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
|
9
|
+
<input id="object_11"></input>
|
10
|
+
|
11
|
+
<div id="object_14"></div>
|
12
|
+
|
13
|
+
<input id="object_16"></input>
|
14
|
+
|
15
|
+
<input id="object_19"></input>
|
16
|
+
|
17
|
+
<div id="object_22"></div>
|
18
|
+
|
19
|
+
|
20
|
+
<script>
|
21
|
+
$scope = {}
|
22
|
+
$views = {}
|
23
|
+
window.update = function(a){
|
24
|
+
$views[a].forEach(function(f, i){
|
25
|
+
f.update();
|
26
|
+
})
|
27
|
+
}
|
28
|
+
|
29
|
+
document.querySelector("#object_11").oninput = function(){
|
30
|
+
($scope)["a"] = this.value
|
31
|
+
update("a")
|
32
|
+
}
|
33
|
+
|
34
|
+
|
35
|
+
if(typeof $views["a"] === 'undefined'){
|
36
|
+
$views["a"] = []
|
37
|
+
}
|
38
|
+
$views["a"].push(document.querySelector("#object_14"))
|
39
|
+
|
40
|
+
document.querySelector("#object_14").update = function(){
|
41
|
+
|
42
|
+
this.innerHTML = "Your name has changed to " + ($scope)["a"]+ ""
|
43
|
+
}
|
44
|
+
|
45
|
+
document.querySelector("#object_16").oninput = function(){
|
46
|
+
($scope)["op1"] = this.value
|
47
|
+
update("op1")
|
48
|
+
}
|
49
|
+
|
50
|
+
document.querySelector("#object_19").oninput = function(){
|
51
|
+
($scope)["op2"] = this.value
|
52
|
+
update("op2")
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
if(typeof $views["result"] === 'undefined'){
|
57
|
+
$views["result"] = []
|
58
|
+
}
|
59
|
+
$views["result"].push(document.querySelector("#object_22"))
|
60
|
+
|
61
|
+
if(typeof $views["op1"] === 'undefined'){
|
62
|
+
$views["op1"] = []
|
63
|
+
}
|
64
|
+
$views["op1"].push(document.querySelector("#object_22"))
|
65
|
+
|
66
|
+
if(typeof $views["op2"] === 'undefined'){
|
67
|
+
$views["op2"] = []
|
68
|
+
}
|
69
|
+
$views["op2"].push(document.querySelector("#object_22"))
|
70
|
+
|
71
|
+
document.querySelector("#object_22").update = function(){
|
72
|
+
|
73
|
+
($scope)["result"] = +($scope)["op1"] * +($scope)["op2"]
|
74
|
+
|
75
|
+
this.innerHTML = "Your answer is " + ($scope)["result"]+ ""
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
document.querySelector("#object_11").oninput()
|
81
|
+
|
82
|
+
document.querySelector("#object_16").oninput()
|
83
|
+
|
84
|
+
document.querySelector("#object_19").oninput()
|
85
|
+
|
86
|
+
</script>
|
87
|
+
</body>
|
88
|
+
|
data/test/temp.2.cpp
ADDED
data/test/temp.4.cpp
ADDED
data/test/test.js
ADDED
data/test/test.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
$: << "../lib"
|
2
|
+
require 'ua'
|
3
|
+
require 'cgi'
|
4
|
+
|
5
|
+
stream "com.ua.root", "com.ua.main"
|
6
|
+
add "com.ua.main", "title", "charset", "content", "css", "js" do
|
7
|
+
%{
|
8
|
+
<!doctype html>
|
9
|
+
<head>
|
10
|
+
<title><%= title %> </title>
|
11
|
+
<meta http-equiv="content-type" Content="text/html; Charset=<%= charset %>" >
|
12
|
+
<style>
|
13
|
+
<%= context(css, :app) %>
|
14
|
+
</style>
|
15
|
+
<script>
|
16
|
+
<%= context(js, :app) %>
|
17
|
+
</script>
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<%= context(content, :html) %>
|
21
|
+
</body>
|
22
|
+
</html>
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
context String, :shell do |str|
|
27
|
+
`#{str}`
|
28
|
+
end
|
29
|
+
|
30
|
+
context String, :html do |str|
|
31
|
+
CGI.escapeHTML str
|
32
|
+
end
|
33
|
+
|
34
|
+
context String, :css_attr do |str|
|
35
|
+
str.tr("_", "-")
|
36
|
+
end
|
37
|
+
|
38
|
+
context Object, :css_value do |any|
|
39
|
+
any
|
40
|
+
end
|
41
|
+
|
42
|
+
add "com.ua.cssText", "name", "value", "sel" do
|
43
|
+
"<%=sel%> { <%= context(name, :css_attr)%> : <%= context(value, :css_value) %>; }\n"
|
44
|
+
end
|
45
|
+
|
46
|
+
class CSSBuilder
|
47
|
+
def initialize(name)
|
48
|
+
@name = name
|
49
|
+
end
|
50
|
+
def method_missing(sym, value)
|
51
|
+
r = create "com.ua.cssText"
|
52
|
+
r.name = sym.to_s
|
53
|
+
r.value = value
|
54
|
+
r.sel = @name
|
55
|
+
append "com.ua.css", r
|
56
|
+
self
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def css(name)
|
61
|
+
CSSBuilder.new(name)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
x = get "com.ua.main"
|
66
|
+
x.title = "Hello world"
|
67
|
+
x.charset = "GBK"
|
68
|
+
x.css = add "com.ua.css"
|
69
|
+
x.js = add "com.ua.js"
|
70
|
+
x.content = context("dir", :shell)
|
71
|
+
cssbody = css("body")
|
72
|
+
cssbody.text_decoration("underline").font_size("48px")
|
73
|
+
go!
|
74
|
+
|
data/test/test2.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
$: << "../lib"
|
2
|
+
require 'ua'
|
3
|
+
|
4
|
+
class SayHelloApplication < Ua::Application
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
stream "com.ua.root", "com.ua.js.run"
|
8
|
+
add "com.ua.js.main" do
|
9
|
+
"
|
10
|
+
(function(){
|
11
|
+
if(typeof console !== 'undefined') {
|
12
|
+
console.log( <%= context(message, :js_string) %> );
|
13
|
+
}
|
14
|
+
})()
|
15
|
+
"
|
16
|
+
end
|
17
|
+
add "com.ua.js.run" do
|
18
|
+
"<%
|
19
|
+
IO.binwrite('test.js', context(get('com.ua.js.main'), :app))
|
20
|
+
context(execjs || 'node.exe', :shell, 'test.js')
|
21
|
+
%>"
|
22
|
+
end
|
23
|
+
|
24
|
+
context String, :js_string do |str|
|
25
|
+
str.inspect # should be quote_string(str), but this partly works
|
26
|
+
end
|
27
|
+
|
28
|
+
context String, :shell do |*args|
|
29
|
+
`#{args.join(" ")}`
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def say_hello(hello = "Hello world")
|
35
|
+
app = SayHelloApplication.new
|
36
|
+
app.get('com.ua.js.main').message = hello
|
37
|
+
app.get('com.ua.js.run').execjs = "wscript.exe"
|
38
|
+
app.go!
|
39
|
+
end
|
40
|
+
|
41
|
+
say_hello "abc"
|
data/test/test3.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
$: << "../lib"
|
2
|
+
require 'ua'
|
3
|
+
|
4
|
+
class SimpleWin32Application < Ua::Application
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
stream "com.ua.root", "com.win32.runner"
|
8
|
+
add "com.win32.runner" do
|
9
|
+
"<%
|
10
|
+
context('com.win32.cpp', :write)
|
11
|
+
cflags = context(get('com.win32.cflags'), :shellwords)
|
12
|
+
ldflags = context(get('com.win32.ldflags'), :shellwords)
|
13
|
+
arr = ['g++', 'com.win32.cpp'] + cflags + ldflags
|
14
|
+
context(arr, :shell)
|
15
|
+
context(['win32.exe'], :shell)
|
16
|
+
%>
|
17
|
+
"
|
18
|
+
end
|
19
|
+
add "com.win32.cpp" do
|
20
|
+
DATA.read
|
21
|
+
end
|
22
|
+
add 'com.win32.cflags'
|
23
|
+
add 'com.win32.ldflags'
|
24
|
+
add 'com.win32.buttons'
|
25
|
+
append 'com.win32.ldflags', '-o', 'win32.exe'
|
26
|
+
context UAClass, :shellwords do |a|
|
27
|
+
get(a.stream_)
|
28
|
+
end
|
29
|
+
context Array, :shell do |a|
|
30
|
+
`#{a.join(' ')}`
|
31
|
+
end
|
32
|
+
context Array, :bound do |a|
|
33
|
+
"#{a.join(",")}"
|
34
|
+
end
|
35
|
+
context String, :write do |a|
|
36
|
+
IO.binwrite(a, app(a))
|
37
|
+
end
|
38
|
+
context String, :cstring do |str|
|
39
|
+
str.inspect
|
40
|
+
end
|
41
|
+
add "com.win32.button" do
|
42
|
+
%{
|
43
|
+
CreateWindowEx(0, "button", <%= context(text, :cstring) %>, WS_CHILD | WS_VISIBLE,
|
44
|
+
<%= context(bound, :bound) %>,
|
45
|
+
main, (HMENU)<%= id %>, 0, 0);
|
46
|
+
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
add "com.win32.buttonclicks" do
|
51
|
+
%{
|
52
|
+
<% get(stream_).each{|obj| %>
|
53
|
+
if(LOWORD(w) == <%= obj.id %>){
|
54
|
+
MessageBox(0, <%= context(obj.msg, :cstring) %>, 0, 48);
|
55
|
+
}
|
56
|
+
<% } %>
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def button(x, y, w, h, text, msg)
|
62
|
+
@id ||= 100
|
63
|
+
@id += 1
|
64
|
+
btn = create 'com.win32.button',
|
65
|
+
bound: [x, y, w, h],
|
66
|
+
text: text,
|
67
|
+
msg: msg,
|
68
|
+
id: @id
|
69
|
+
|
70
|
+
append 'com.win32.buttons', btn
|
71
|
+
append 'com.win32.buttonclicks', btn
|
72
|
+
btn
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
x = SimpleWin32Application.new
|
78
|
+
x.get('com.win32.cpp').title = "Hello world"
|
79
|
+
x.get('com.win32.cpp').bound = [300, 200, 640, 480]
|
80
|
+
x.button 0, 0, 24, 36, "Hello", "Clicked"
|
81
|
+
x.go!
|
82
|
+
|
83
|
+
__END__
|
84
|
+
#include <windows.h>
|
85
|
+
LRESULT CALLBACK wndproc(HWND h, UINT m, WPARAM w, LPARAM l){
|
86
|
+
if(m == WM_CLOSE || m == WM_QUIT || m == WM_DESTROY){
|
87
|
+
PostQuitMessage(0);
|
88
|
+
return 0;
|
89
|
+
}
|
90
|
+
if(m == WM_COMMAND){
|
91
|
+
if(HIWORD(w) == BN_CLICKED){
|
92
|
+
<%= context(get("com.win32.buttonclicks"), :app) %>
|
93
|
+
}
|
94
|
+
}
|
95
|
+
return DefWindowProc(h, m, w, l);
|
96
|
+
}
|
97
|
+
|
98
|
+
WNDCLASSEX wc = {sizeof(wc), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, wndproc, 0, 0, 0, LoadIcon(0, IDI_APPLICATION), LoadCursor(0, IDC_ARROW), (HBRUSH)1, "", "Hello", LoadIcon(0, IDI_APPLICATION)};
|
99
|
+
int main(){
|
100
|
+
RegisterClassEx(&wc);
|
101
|
+
HWND main = CreateWindowEx(0, "Hello", <%= context(title, :cstring) %>, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
102
|
+
<%= context(bound, :bound) %>,
|
103
|
+
0, 0, 0, 0
|
104
|
+
);
|
105
|
+
<%= context(get('com.win32.buttons'), :app) %>
|
106
|
+
MSG msg;
|
107
|
+
while(GetMessage(&msg, 0, 0, 0) > 0){
|
108
|
+
DispatchMessage(&msg);
|
109
|
+
TranslateMessage(&msg);
|
110
|
+
}
|
111
|
+
}
|
data/test/test4.rb
ADDED
data/test/test5.rb
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
$: << "../lib"
|
2
|
+
require 'ua'
|
3
|
+
require 'win32api'
|
4
|
+
class Maker < Ua::Application
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
add 'com.dll.a' do
|
8
|
+
%{
|
9
|
+
extern "C" <%= context(type.last, :app, []) %> __stdcall <%= context(funcname, :app) %>(<%= context(type.rhead, :app, args || (:a..:z).to_a) %>){
|
10
|
+
<%= context(fbody, :clang, type) %>
|
11
|
+
}
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
get('com.dll.a').prototype.class_eval do
|
16
|
+
def uacontext(a)
|
17
|
+
case a
|
18
|
+
when :compile
|
19
|
+
@dll ||= begin
|
20
|
+
self.name ||= Ua::Application.top_app.tmpid + ".cpp"
|
21
|
+
self.funcname ||= "func"
|
22
|
+
IO.binwrite self.name, context(self, :app)
|
23
|
+
self.dllname ||= self.name + ".dll"
|
24
|
+
system "g++ #{self.name} -o #{self.dllname} -static -s -shared -Wl,--add-stdcall-alias"
|
25
|
+
lambda{|*args|
|
26
|
+
Win32API.new(self.dllname, self.funcname, args.map{|x| Integer === x ? "L" : "p"}, "L").call(*args)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
class AlgeType
|
39
|
+
attr_accessor :type, :next
|
40
|
+
def initialize(type = nil)
|
41
|
+
@type = type
|
42
|
+
@next = nil
|
43
|
+
end
|
44
|
+
def detach
|
45
|
+
AlgeType.new(@type)
|
46
|
+
end
|
47
|
+
|
48
|
+
def >> rhs
|
49
|
+
x = AlgeType.new(@type)
|
50
|
+
case rhs
|
51
|
+
when AlgeType
|
52
|
+
x.next = rhs
|
53
|
+
else
|
54
|
+
x.next = AlgeType.new(rhs)
|
55
|
+
end
|
56
|
+
x
|
57
|
+
end
|
58
|
+
|
59
|
+
def * rhs
|
60
|
+
t = Array(@type).compact
|
61
|
+
d = if AlgeType === rhs then rhs else AlgeType.new(rhs) end
|
62
|
+
t += Array(d.type)
|
63
|
+
AlgeType.new t
|
64
|
+
end
|
65
|
+
|
66
|
+
def last
|
67
|
+
if self.next
|
68
|
+
self.next.last
|
69
|
+
else
|
70
|
+
self
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def rhead
|
75
|
+
if self.next
|
76
|
+
self.detach >> self.next.rhead
|
77
|
+
else
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def coerce(rhs)
|
83
|
+
[AlgeType.new(rhs), self]
|
84
|
+
end
|
85
|
+
|
86
|
+
def cfunc(expr)
|
87
|
+
x = Ua::Application.top_app.create 'com.dll.a',
|
88
|
+
type: self,
|
89
|
+
fbody: expr
|
90
|
+
context(x, :compile)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def int() AlgeType.new([:int]) end
|
95
|
+
def unit() AlgeType.new([]) end
|
96
|
+
|
97
|
+
app = Maker.new
|
98
|
+
Ua::Application.push_app app
|
99
|
+
app.context AlgeType, :app do |atype, val|
|
100
|
+
ret = []
|
101
|
+
i = 0
|
102
|
+
while atype && atype.type
|
103
|
+
unless val.empty?
|
104
|
+
ret << [context(atype.type, :app).to_s << " " << context(val[i], :app).to_s]
|
105
|
+
else
|
106
|
+
ret << [context(atype.type, :app).to_s]
|
107
|
+
end
|
108
|
+
atype = atype.next
|
109
|
+
i += 1
|
110
|
+
end
|
111
|
+
ret.join(",")
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
class Expr
|
116
|
+
attr_accessor :atom
|
117
|
+
def initialize(atom)
|
118
|
+
@atom = "(" + atom.to_s + ")"
|
119
|
+
end
|
120
|
+
def +(rhs)
|
121
|
+
Expr.new(context(self, :expr) + "+" + context(rhs, :expr))
|
122
|
+
end
|
123
|
+
def uacontext(app, *a)
|
124
|
+
if app == :clang
|
125
|
+
return "return #{context(self, :expr)};"
|
126
|
+
elsif app == :expr
|
127
|
+
return @atom
|
128
|
+
end
|
129
|
+
throw :continue
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def var(a)
|
134
|
+
Expr.new(a)
|
135
|
+
end
|
136
|
+
|
137
|
+
app.context Symbol, :app, &:to_s
|
138
|
+
|
139
|
+
|
140
|
+
r = (int.>> int.>> int).cfunc var(:a) + var(:b)
|
141
|
+
p r.call(3, 5)
|
142
|
+
|
data/ua.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ua/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ua"
|
8
|
+
spec.version = Ua::VERSION
|
9
|
+
spec.authors = ["Artoria"]
|
10
|
+
spec.email = ["Artoria"]
|
11
|
+
spec.summary = %q{ Unified App Generator }
|
12
|
+
spec.description = %q{ Unified App Generator }
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ua
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Artoria
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: " Unified App Generator "
|
42
|
+
email:
|
43
|
+
- Artoria
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- ".settings/settings.json"
|
50
|
+
- Gemfile
|
51
|
+
- LICENSE.txt
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- lib/missing/erb.rb
|
55
|
+
- lib/missing/ostruct.rb
|
56
|
+
- lib/ua.rb
|
57
|
+
- lib/ua/uadb.rb
|
58
|
+
- lib/ua/version.rb
|
59
|
+
- test/Hello.cpp
|
60
|
+
- test/a.db
|
61
|
+
- test/com.win32.cpp
|
62
|
+
- test/m.html
|
63
|
+
- test/temp.2.cpp
|
64
|
+
- test/temp.4.cpp
|
65
|
+
- test/test.js
|
66
|
+
- test/test.rb
|
67
|
+
- test/test2.rb
|
68
|
+
- test/test3.rb
|
69
|
+
- test/test4.rb
|
70
|
+
- test/test5.rb
|
71
|
+
- ua.gemspec
|
72
|
+
homepage: ''
|
73
|
+
licenses:
|
74
|
+
- MIT
|
75
|
+
metadata: {}
|
76
|
+
post_install_message:
|
77
|
+
rdoc_options: []
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirements: []
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 2.2.2
|
93
|
+
signing_key:
|
94
|
+
specification_version: 4
|
95
|
+
summary: Unified App Generator
|
96
|
+
test_files:
|
97
|
+
- test/Hello.cpp
|
98
|
+
- test/a.db
|
99
|
+
- test/com.win32.cpp
|
100
|
+
- test/m.html
|
101
|
+
- test/temp.2.cpp
|
102
|
+
- test/temp.4.cpp
|
103
|
+
- test/test.js
|
104
|
+
- test/test.rb
|
105
|
+
- test/test2.rb
|
106
|
+
- test/test3.rb
|
107
|
+
- test/test4.rb
|
108
|
+
- test/test5.rb
|