ua 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ua/util.rb +79 -0
- data/lib/ua/util.rb~ +37 -0
- data/lib/ua/version.rb +1 -1
- data/test/test6.rb +15 -0
- data/test/test7.rb +165 -0
- data/ua.gemspec~ +23 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11625f1fbb808f1144ac4f61c24e2fd6da09b29c
|
4
|
+
data.tar.gz: 9001f6348093b921b3b49d23752beb2ae2c38376
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16985d539c4a6394e5c7cfba989163a62f53581d0e29d3fa33d0d55bfa281cf103c5221da7d005c0889572873db48fe5c70787e2d84d15d8bbe52d8b0afe7a22
|
7
|
+
data.tar.gz: 3739af37d2b7603028b9cc5412b962710848dee76135833ff0b7237044e93445cbb4699e9ff02ba7436f21985d0194bc9b6acbe7ced32df2823a9ed6981c369b
|
data/lib/ua/util.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
module Ua
|
2
|
+
module Util
|
3
|
+
class Helper
|
4
|
+
def initialize(obj)
|
5
|
+
@obj = obj
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](*args)
|
9
|
+
if args.size == 1
|
10
|
+
@obj[args[0]]
|
11
|
+
else
|
12
|
+
args.map{|x| @obj[x]}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
alias values_at []
|
17
|
+
|
18
|
+
|
19
|
+
def []=(*args)
|
20
|
+
last = args.pop(1)
|
21
|
+
args.zip(last).each{|k|
|
22
|
+
a,b = k
|
23
|
+
@obj[a] = b
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def define_context(name, &block)
|
28
|
+
app = Ua::Application.top.app
|
29
|
+
app.context @obj.prototype, name, &block
|
30
|
+
end
|
31
|
+
|
32
|
+
def app
|
33
|
+
render :app
|
34
|
+
end
|
35
|
+
|
36
|
+
def render(ctxt = Ua::Application.top.context)
|
37
|
+
context(@obj, ctxt)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
def ua(obj_or_str)
|
41
|
+
if Ua::Application::UAClass === obj_or_str
|
42
|
+
return Helper.new(obj_or_str)
|
43
|
+
elsif String === obj_or_str
|
44
|
+
return Helper.new(Ua::Application.top_app.get(obj_or_str))
|
45
|
+
end
|
46
|
+
raise ArgumentError, "Don't know how to make ua from #{obj_or_str}", caller(3)
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
class AppHelper
|
51
|
+
def initialize(app = Ua::Application.top_app)
|
52
|
+
@app = app
|
53
|
+
end
|
54
|
+
def push
|
55
|
+
Ua::Application.push_app @app
|
56
|
+
end
|
57
|
+
def define_command(name, id, *names, &bl)
|
58
|
+
bl ||= lambda{|a| a}
|
59
|
+
uaobject = Helper.new @app.get id
|
60
|
+
(class << self; self; end).send :define_method, name do |*args|
|
61
|
+
uaobject[*names] = args
|
62
|
+
bl.call(context(uaobject, :app))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
def pop
|
66
|
+
Ua::Application.pop_app if Ua::Application.top_app == @app
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def uapp(app = Ua::Application.top_app)
|
71
|
+
AppHelper.new(app)
|
72
|
+
end
|
73
|
+
|
74
|
+
def istr(str)
|
75
|
+
first = str[/^\s*(\S)/, 1]
|
76
|
+
str.split("\n").map{|x| x.sub(/^\s*#{Regexp.escape(first)}/, "")}.join("\n")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/lib/ua/util.rb~
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Ua
|
2
|
+
module Util
|
3
|
+
class Helper
|
4
|
+
def initialize(obj)
|
5
|
+
@obj = obj
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](*args)
|
9
|
+
if args.size == 1
|
10
|
+
obj[args[0]]
|
11
|
+
else
|
12
|
+
args.map{|x| obj[x]}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
alias values_at []
|
17
|
+
|
18
|
+
def []=(*args)
|
19
|
+
last = args.pop
|
20
|
+
args.zip(last).each{|k|
|
21
|
+
a,b = k
|
22
|
+
@obj[a] = b
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
28
|
+
def ua(obj_or_str)
|
29
|
+
if Ua::UAClass === obj_or_str
|
30
|
+
return Helper.new(obj_or_str)
|
31
|
+
elsif String === obj_or_str
|
32
|
+
return Helper.new(Ua::Application.top_app.get(obj_or_str))
|
33
|
+
end
|
34
|
+
raise "Don't know how to make ua from #{obj_or_str}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/ua/version.rb
CHANGED
data/test/test6.rb
ADDED
data/test/test7.rb
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
$: << "../lib"
|
2
|
+
require 'ua'
|
3
|
+
link 'com.ua.root', 'html'
|
4
|
+
model 'html' do
|
5
|
+
%{
|
6
|
+
<!doctype html>
|
7
|
+
<html>
|
8
|
+
<head>
|
9
|
+
<title> <%= title || "Hello" %> </title>
|
10
|
+
</head>
|
11
|
+
<body>
|
12
|
+
<%= context get 'elements' %>
|
13
|
+
|
14
|
+
<script>
|
15
|
+
$scope = {}
|
16
|
+
$views = {}
|
17
|
+
window.update = function(a){
|
18
|
+
$views[a].forEach(function(f, i){
|
19
|
+
f.update();
|
20
|
+
})
|
21
|
+
}
|
22
|
+
<%= context get 'jsevent' %>
|
23
|
+
<%= context get 'jsinit' %>
|
24
|
+
<%= context get 'jsload' %>
|
25
|
+
</script>
|
26
|
+
</body>
|
27
|
+
}
|
28
|
+
end
|
29
|
+
model 'jsevent'
|
30
|
+
model 'jsinit'
|
31
|
+
model 'jsload'
|
32
|
+
model 'elements'
|
33
|
+
view String, :attrval do |str| str.inspect end
|
34
|
+
view String, :jsstr do |str| str.inspect end
|
35
|
+
view String, :domid do |str| ('#' + str).inspect end
|
36
|
+
view String, :prop do |str| '[' + str.inspect + ']' end
|
37
|
+
view String, :code do |str, s = "($scope)"|
|
38
|
+
str.gsub(/\{\{(.*?)\}\}/){
|
39
|
+
s + context($1, :prop)
|
40
|
+
}
|
41
|
+
end
|
42
|
+
view String, :template do |text, s = "($scope)"|
|
43
|
+
r = text.split(/(\{\{.*?\}\})/)
|
44
|
+
outtext = ""
|
45
|
+
r.each{|a|
|
46
|
+
if a =~ /\{\{(.*?)\}\}/
|
47
|
+
outtext << '" + ' << s << context($1, :prop) << '+ "'
|
48
|
+
else
|
49
|
+
outtext << a.inspect[1..-2]
|
50
|
+
end
|
51
|
+
}
|
52
|
+
outtext = '"' << outtext << '"'
|
53
|
+
end
|
54
|
+
|
55
|
+
view String, :models do |text|
|
56
|
+
r = text.split(/(\{\{.*?\}\})/)
|
57
|
+
out = []
|
58
|
+
r.each{|a|
|
59
|
+
if a =~ /\{\{(.*?)\}\}/
|
60
|
+
out << $1
|
61
|
+
end
|
62
|
+
}
|
63
|
+
out
|
64
|
+
end
|
65
|
+
|
66
|
+
view Hash, :models do |hsh|
|
67
|
+
out = []
|
68
|
+
hsh.each{|k, v|
|
69
|
+
out.concat context(k, :models)
|
70
|
+
out.concat context(v, :models)
|
71
|
+
}
|
72
|
+
out.uniq
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
model 'element' do
|
77
|
+
%{
|
78
|
+
<<%=tagname%> id=<%=context domid, :attrval%>></<%=tagname%>>
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
get('element').class.class_eval do
|
83
|
+
def domid
|
84
|
+
id_.tr(".", "_")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
model 'value_changed' do
|
90
|
+
%{
|
91
|
+
document.querySelector(<%= context element_id, :domid %>).oninput = function(){
|
92
|
+
($scope)<%= context modelname, :prop %> = this.value
|
93
|
+
update(<%= context modelname, :jsstr %>)
|
94
|
+
}
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
model 'load' do
|
99
|
+
%{
|
100
|
+
document.querySelector(<%= context element_id, :domid %>).oninput()
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
model 'update' do
|
106
|
+
%{
|
107
|
+
<% models.uniq.each do |m|%>
|
108
|
+
if(typeof $views<%=context(m, :prop)%> === 'undefined'){
|
109
|
+
$views<%=context(m, :prop)%> = []
|
110
|
+
}
|
111
|
+
$views<%=context(m, :prop)%>.push(document.querySelector(<%= context element_id, :domid %>))
|
112
|
+
<% end %>
|
113
|
+
document.querySelector(<%= context element_id, :domid %>).update = function(){
|
114
|
+
<% before.each{|k, v| %>
|
115
|
+
<%= context(k, :code) %> = <%= context(v, :code) %>
|
116
|
+
<% } if before%>
|
117
|
+
this.innerHTML = <%= text %>
|
118
|
+
}
|
119
|
+
}
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
def inputbox(opt = {})
|
124
|
+
a = create 'element',
|
125
|
+
tagname: "input",
|
126
|
+
modelname: opt[:model]
|
127
|
+
link 'elements', a.id_
|
128
|
+
|
129
|
+
changed = create 'value_changed',
|
130
|
+
element_id: a.domid,
|
131
|
+
modelname: a.modelname
|
132
|
+
|
133
|
+
load = create 'load',
|
134
|
+
element_id: a.domid,
|
135
|
+
modelname: a.modelname
|
136
|
+
|
137
|
+
link 'jsevent', changed.id_
|
138
|
+
link 'jsload', load.id_
|
139
|
+
end
|
140
|
+
|
141
|
+
def div(opt = {})
|
142
|
+
a = create 'element',
|
143
|
+
tagname: "div"
|
144
|
+
link 'elements', a.id_
|
145
|
+
|
146
|
+
update = create 'update',
|
147
|
+
element_id: a.domid,
|
148
|
+
text: context(opt[:text], :template),
|
149
|
+
models: context(opt[:text], :models) +
|
150
|
+
context(opt[:before] || {}, :models),
|
151
|
+
before: opt[:before]
|
152
|
+
|
153
|
+
link 'jsevent', update.id_
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
inputbox model: 'a'
|
158
|
+
div text: 'Your name has changed to {{a}}'
|
159
|
+
|
160
|
+
inputbox model: 'op1'
|
161
|
+
inputbox model: 'op2'
|
162
|
+
div before: {"{{result}}" => "+{{op1}} * +{{op2}}"},
|
163
|
+
text: "Your answer is {{result}}"
|
164
|
+
|
165
|
+
go!
|
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 = "unifiedapp"
|
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
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ua
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artoria
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -55,6 +55,8 @@ files:
|
|
55
55
|
- lib/missing/ostruct.rb
|
56
56
|
- lib/ua.rb
|
57
57
|
- lib/ua/uadb.rb
|
58
|
+
- lib/ua/util.rb
|
59
|
+
- lib/ua/util.rb~
|
58
60
|
- lib/ua/version.rb
|
59
61
|
- test/Hello.cpp
|
60
62
|
- test/a.db
|
@@ -68,7 +70,10 @@ files:
|
|
68
70
|
- test/test3.rb
|
69
71
|
- test/test4.rb
|
70
72
|
- test/test5.rb
|
73
|
+
- test/test6.rb
|
74
|
+
- test/test7.rb
|
71
75
|
- ua.gemspec
|
76
|
+
- ua.gemspec~
|
72
77
|
homepage: ''
|
73
78
|
licenses:
|
74
79
|
- MIT
|
@@ -106,3 +111,5 @@ test_files:
|
|
106
111
|
- test/test3.rb
|
107
112
|
- test/test4.rb
|
108
113
|
- test/test5.rb
|
114
|
+
- test/test6.rb
|
115
|
+
- test/test7.rb
|