uzuuzu-core 0.0.4 → 0.0.5

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.
Files changed (56) hide show
  1. data/.redcar/tags +145 -0
  2. data/Gemfile +10 -6
  3. data/Gemfile.lock +14 -10
  4. data/VERSION +1 -1
  5. data/lib/uzuuzu-core.rb +5 -1
  6. data/lib/uzuuzu/controller/admin.rb +11 -0
  7. data/lib/uzuuzu/controller/contents.rb +11 -0
  8. data/lib/uzuuzu/controller/crud.rb +235 -0
  9. data/lib/uzuuzu/controller/css.rb +11 -0
  10. data/lib/uzuuzu/controller/error.rb +11 -0
  11. data/lib/uzuuzu/controller/index.rb +25 -0
  12. data/lib/uzuuzu/controller/initialize.rb +52 -0
  13. data/lib/uzuuzu/controller/javascript.rb +11 -0
  14. data/lib/uzuuzu/controller/oauth.rb +10 -0
  15. data/lib/uzuuzu/controller/openid.rb +40 -0
  16. data/lib/uzuuzu/controller/page.rb +14 -0
  17. data/lib/uzuuzu/controller/plugin.rb +11 -0
  18. data/lib/uzuuzu/controller/user.rb +22 -0
  19. data/lib/uzuuzu/controller/view/admin/index.xhtml +0 -0
  20. data/lib/uzuuzu/controller/view/crud/destroy.rhtml +28 -0
  21. data/lib/uzuuzu/controller/view/crud/edit.rhtml +52 -0
  22. data/lib/uzuuzu/controller/view/crud/index.rhtml +45 -0
  23. data/lib/uzuuzu/controller/view/crud/new.rhtml +48 -0
  24. data/lib/uzuuzu/controller/view/crud/show.rhtml +47 -0
  25. data/lib/uzuuzu/controller/view/error/404.tenjin +0 -0
  26. data/lib/uzuuzu/controller/view/initialize/step1.xhtml +30 -0
  27. data/lib/uzuuzu/controller/view/initialize/step2.xhtml +1 -0
  28. data/lib/uzuuzu/controller/view/initialize/step3.xhtml +0 -0
  29. data/lib/uzuuzu/controller/view/openid/index.xhtml +14 -0
  30. data/lib/uzuuzu/controller/view/page.xhtml +17 -0
  31. data/lib/uzuuzu/controller/view/user/entry.xhtml +13 -0
  32. data/lib/uzuuzu/fixture/layout.yaml +110 -0
  33. data/lib/uzuuzu/helper/controller.rb +135 -0
  34. data/lib/uzuuzu/helper/fixture.rb +9 -0
  35. data/lib/uzuuzu/helper/localize.rb +15 -0
  36. data/lib/uzuuzu/helper/renderer.rb +158 -0
  37. data/lib/uzuuzu/helper/route.rb +62 -0
  38. data/lib/uzuuzu/helper/uzuuzu_page.rb +61 -0
  39. data/lib/uzuuzu/helper/xhtml.rb +44 -0
  40. data/lib/uzuuzu/model/.DS_Store +0 -0
  41. data/lib/uzuuzu/model/remote_user.rb +70 -0
  42. data/lib/uzuuzu/uzuuzu-core.rb +10 -1
  43. data/lib/uzuuzu/wrapper/application.rb +282 -0
  44. data/lib/uzuuzu/wrapper/controller.rb +28 -80
  45. data/lib/uzuuzu/wrapper/datastore.rb +17 -0
  46. data/lib/uzuuzu/wrapper/environments.rb +129 -0
  47. data/lib/uzuuzu/wrapper/helper.rb +13 -0
  48. data/lib/uzuuzu/wrapper/lang/en.yaml +19 -0
  49. data/lib/uzuuzu/wrapper/lang/ja.yaml +19 -0
  50. data/lib/uzuuzu/wrapper/logger.rb +95 -21
  51. data/lib/uzuuzu/wrapper/object.rb +9 -0
  52. data/lib/uzuuzu/wrapper/request.rb +26 -0
  53. data/lib/uzuuzu/wrapper/response.rb +16 -0
  54. data/lib/uzuuzu/wrapper/uzuuzu.rb +26 -146
  55. data/uzuuzu-core.gemspec +71 -14
  56. metadata +104 -15
@@ -0,0 +1,62 @@
1
+ # coding: utf-8
2
+
3
+ module UzuUzu
4
+ module Helper
5
+ module Route
6
+ module RouteClass
7
+ def url_for(*args)
8
+ app = UzuUzu.current
9
+ route_string = UzuUzu::Request.current.env['SCRIPT_NAME']
10
+ app.controllers.each do |controller|
11
+ re = Regexp.compile("^#{controller.name}::")
12
+ if re =~ self.name
13
+ path = self.name.gsub(re, '').gsub(/Controller$/, '').to_const_path
14
+ route_string << "/#{path}" unless path == 'index'
15
+ break
16
+ end
17
+ end
18
+ if args[-1].kind_of?(Hash)
19
+ query = query_string(args.pop)
20
+ end
21
+ args.each do |arg|
22
+ route_string << "/#{arg}"
23
+ end
24
+
25
+ route_string << '/' if args.blank?
26
+ route_string << query unless query.blank?
27
+ route_string
28
+ end
29
+ alias :r :url_for
30
+ #
31
+ #
32
+ #
33
+ def query_string(query_options={})
34
+ query_string = []
35
+ query_options do |key, value|
36
+ query_string << "#{key}=#{value}"
37
+ end
38
+ return "" if query_string.blank?
39
+ "?#{query_string.join('&')}"
40
+ end
41
+ end
42
+
43
+ def self.included(clazz)
44
+ clazz.extend RouteClass
45
+ end
46
+
47
+ def url_for(*args)
48
+ route_string = @_route.clone
49
+ if args[-1].kind_of?(Hash)
50
+ query = query_string(args.pop)
51
+ end
52
+ args.each do |arg|
53
+ route_string << "/#{arg}"
54
+ end
55
+ route_string << '/' if args.blank?
56
+ route_string << query unless query.blank?
57
+ route_string
58
+ end
59
+ alias :r :url_for
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+
3
+ module UzuUzu
4
+ module Helper
5
+ #
6
+ #
7
+ #
8
+ module UzuUzuPage
9
+ #
10
+ #
11
+ #
12
+ def render_uzuuzu(resource, contents=nil)
13
+ @uzuuzu_resource = resource
14
+ @uzuuzu_header = render_contents(resource.header.contents)
15
+ @uzuuzu_footer = render_contents(resource.footer.contents)
16
+ @uzuuzu_left = render_contents(resource.left.contents)
17
+ @uzuuzu_right = render_contents(resource.right.contents)
18
+ @uzuuzu_contents = contents
19
+ @uzuuzu_contents ||= yield if block_given?
20
+ @uzuuzu_contents ||= render_contents(resource.page_body.contents) if resource.respond_to?(:page_body)
21
+ @uzuuzu_contents ||= ""
22
+ @uzuuzu_body = render_string(resource.layout.body, resource.layout.format)
23
+ if request.xhr?
24
+ return_string = @uzuuzu_body
25
+ else
26
+ return_string = render_file('./view/page.rhtml')
27
+ end
28
+ @uzuuzu_resource = @uzuuzu_header = @uzuuzu_footer = nil
29
+ @uzuuzu_left = @uzuuzu_right = @uzuuzu_contents = @uzuuzu_body = nil
30
+ return return_string
31
+ end # render_uzuuzu
32
+
33
+ def uzuuzu_csses(resource)
34
+ resource ||= self.info
35
+ csses = []
36
+ resource.csses.each do |css|
37
+ if css.url.nil?
38
+ csses << UzuUzu::CssController.r(css.id)
39
+ else
40
+ csses << css.url
41
+ end
42
+ end
43
+ csses
44
+ end # uzuuzu_csses
45
+
46
+ def uzuuzu_javascripts(resource)
47
+ resource ||= self.info
48
+ javascripts = []
49
+ resource.javascripts.each do |javascript|
50
+ if javascript.url.nil?
51
+ javascripts << UzuUzu::JavascriptController.r(javascript.id)
52
+ else
53
+ javascripts << javascript.url
54
+ end
55
+ end
56
+ javascripts
57
+ end # uzuuzu_javascripts
58
+
59
+ end # UzuUzu
60
+ end # Helper
61
+ end # UzuUzu
@@ -0,0 +1,44 @@
1
+ # coding: utf-8
2
+
3
+ module UzuUzu
4
+ module Helper
5
+ module XHtml
6
+ #
7
+ #
8
+ #
9
+ def css(name, media='screen')
10
+ if name =~ /^http/
11
+ "<link href=\"#{name}\" media=\"#{media}\" rel=\"stylesheet\" type=\"text/css\" />"
12
+ else
13
+ "<link href=\"/css/#{name}.css\" media=\"#{media}\" rel=\"stylesheet\" type=\"text/css\" />"
14
+ end
15
+ end
16
+
17
+ #
18
+ #
19
+ #
20
+ def css_for(*args)
21
+ args.map{|arg| css(*arg) }.join("\n")
22
+ end
23
+
24
+ #
25
+ #
26
+ #
27
+ def js(name)
28
+ if name =~ /^http/
29
+ "<script src=\"#{name}\" type=\"text/javascript\"></script>"
30
+ else
31
+ "<script src=\"/js/#{name}.js\" type=\"text/javascript\"></script>"
32
+ end
33
+ end
34
+
35
+ #
36
+ #
37
+ #
38
+ def js_for(*args)
39
+ args.map{|arg| js(*arg) }.join("\n")
40
+ end
41
+
42
+ end
43
+ end
44
+ end
Binary file
@@ -0,0 +1,70 @@
1
+ # coding: utf-8
2
+
3
+ module UzuUzu
4
+ class RemoteUser
5
+ attr_reader :id
6
+ attr_reader :user_id
7
+ attr_reader :ip
8
+ attr_reader :type
9
+ attr_reader :domain
10
+
11
+
12
+ def self.open_id
13
+ return nil
14
+ end
15
+
16
+ def self.oauth
17
+ return nil
18
+ end
19
+
20
+ def self.authenticate(request)
21
+
22
+ open_id = request[:open_id]
23
+ unless open_id.empty?
24
+ # TODO::open_id
25
+ return nil
26
+ end
27
+
28
+ oauth = request[:oauth]
29
+ unless oauth.empty?
30
+ # TODO::oauth
31
+ return nil
32
+ end
33
+
34
+ unless request.ssl?
35
+ return nil
36
+ end
37
+
38
+ user_id = request[:user_id]
39
+ password = request[:password]
40
+ user = User.authenticate(user_id, password)
41
+
42
+ if user.nil?
43
+ return nil
44
+ end
45
+ RemoteUser.new(user,request.ip)
46
+ end #self.authenticate
47
+
48
+ def initialize(user, ip)
49
+ @id = user.id
50
+ @user_id = user.user_id
51
+ @admin = user.admin
52
+ @domain = user.domain
53
+ @type = user.type
54
+ @ip = ip
55
+ end #new
56
+
57
+ def admin?
58
+ if @admin
59
+ true
60
+ end
61
+ end
62
+
63
+ def authorized?(request)
64
+ return false if request.cookies[:remenber_login.to_s].nil?
65
+ return false unless @ip == request.ip
66
+ return true
67
+ end #authorized?
68
+
69
+ end #RemoteUser
70
+ end #UzuUzu
@@ -1,7 +1,16 @@
1
1
 
2
+ require 'uzuuzu/wrapper/object'
2
3
  require 'uzuuzu/wrapper/uzuuzu'
4
+ require 'uzuuzu/wrapper/environments'
3
5
  require 'uzuuzu/wrapper/logger'
4
6
  require 'uzuuzu/wrapper/mailer'
5
7
  require 'uzuuzu/wrapper/memcache'
6
8
  require 'uzuuzu/wrapper/datastore'
7
- require 'uzuuzu/wrapper/controller'
9
+ require 'uzuuzu/wrapper/request'
10
+ require 'uzuuzu/wrapper/response'
11
+ require 'uzuuzu/wrapper/controller'
12
+ require 'uzuuzu/wrapper/helper'
13
+ require 'uzuuzu/wrapper/application'
14
+
15
+
16
+
@@ -0,0 +1,282 @@
1
+ # coding: utf-8
2
+
3
+ module UzuUzu
4
+ #
5
+ #
6
+ #
7
+ class Application
8
+
9
+ #
10
+ attr_accessor :name
11
+ #
12
+ attr_accessor :config_file
13
+ #
14
+ attr_accessor :environments
15
+ #
16
+ attr_accessor :controllers
17
+ #
18
+ attr_accessor :before_filters
19
+ #
20
+ attr_accessor :after_filters
21
+ #
22
+ attr_accessor :helpers
23
+ #
24
+ attr_accessor :views
25
+
26
+ def self.current
27
+ Thread.current[:application]
28
+ end
29
+
30
+ #
31
+ #
32
+ #
33
+ def initialize(options={})
34
+ Thread.current[:application] = self
35
+ options.each do |key, value|
36
+ case(key)
37
+ when :name, 'name'
38
+ @name = value
39
+ when :config, 'config'
40
+ @config_file = value
41
+ end
42
+ end if options.kind_of?(Hash)
43
+ @name ||= :uzuuzu
44
+ @environments = Environments.new(@config_file)
45
+ UzuUzu.apps[@name] = self
46
+ yield self if block_given?
47
+ end # initialize
48
+
49
+ def controllers
50
+ @controllers ||= [UzuUzu::Controller]
51
+ end
52
+
53
+ def before_filters
54
+ @before_filters ||= [UzuUzu::Controller.method(:before_all)]
55
+ end
56
+
57
+ def after_filters
58
+ @after_filters ||= [UzuUzu::Controller.method(:after_all)]
59
+ end
60
+
61
+ def helpers
62
+ @helpers ||= [
63
+ Rack::Utils,
64
+ UzuUzu::Helper::Controller,
65
+ UzuUzu::Helper::Renderer,
66
+ UzuUzu::Helper::Localize,
67
+ UzuUzu::Helper::Route,
68
+ UzuUzu::Helper::UzuUzuPage,
69
+ UzuUzu::Helper::XHtml
70
+ ]
71
+ end
72
+
73
+ def views
74
+ @views ||= ['./view']
75
+ end
76
+
77
+ #
78
+ #
79
+ #
80
+ def call(env)
81
+ Thread.current[:application] = self
82
+ request = UzuUzu::Request.new(env)
83
+ response = UzuUzu::Response.new
84
+ clazz = find_controller(env)
85
+ if clazz.blank?
86
+ return not_found(request, response)
87
+ end
88
+
89
+ is_send = false
90
+ action_return = nil
91
+ render = nil
92
+ clazz.each do |map|
93
+ controller_class = map[:clazz]
94
+ query = map[:query]
95
+ route = map[:route]
96
+ controller = controller_class.new
97
+ di_helpers(controller)
98
+
99
+ action, query = find_action(controller, query)
100
+ next if action.blank?
101
+ is_send = true
102
+ di_thread(request, response, controller, action, query, route)
103
+ di_instance(request, response, controller, action, query, route)
104
+ action_return = send_action(request, response, controller, action, query)
105
+ if response.body.blank?
106
+ render = controller.render(action)
107
+ end
108
+ break
109
+ end
110
+
111
+ unless is_send
112
+ return not_found(request, response)
113
+ end
114
+ if response.status == 200 and response.body.blank?
115
+ response.write render || action_return
116
+ end
117
+
118
+ response.finish
119
+ end # call
120
+
121
+ #
122
+ #
123
+ #
124
+ def find_controller(env)
125
+ classies = []
126
+ request_paths = env['PATH_INFO'].split('/')
127
+ request_paths.shift if request_paths[0].blank?
128
+
129
+ controllers.reverse.each do |c|
130
+ if c.instance_of?(Module) or c.instance_of?(Class)
131
+ controller_str = []
132
+ request_paths.each_with_index do |request_path, index|
133
+ next if request_path.blank?
134
+ controller_str << request_path.camel_case
135
+ c_str = controller_str.join('::')
136
+ next if c_str == 'Index'
137
+ route = "#{env['SCRIPT_NAME']}/#{request_paths[0..index].join('/')}"
138
+ query = request_paths[(index+1)..-1]
139
+ begin
140
+ if c.const_defined?(c_str)
141
+ classies << {:clazz => c.module_eval(c_str),
142
+ :route => route,
143
+ :query => query}
144
+ end
145
+ rescue NameError => e
146
+ begin
147
+ if c.const_defined?("#{c_str}Controller")
148
+ classies << {:clazz => c.module_eval("#{c_str}Controller"),
149
+ :route => route,
150
+ :query => query}
151
+ end
152
+ rescue NameError => e
153
+ end
154
+ end
155
+ end
156
+ if c.const_defined?('Index')
157
+ classies << {:clazz => c.module_eval("Index"),
158
+ :route => env['SCRIPT_NAME'],
159
+ :query => request_paths}
160
+ elsif c.const_defined?('IndexController')
161
+ classies << {:clazz => c.module_eval("Index"),
162
+ :route => env['SCRIPT_NAME'],
163
+ :query => request_paths}
164
+ end
165
+ else
166
+ UzuUzu.logger.warn "routing miss controllers only Module or Class : #{c}"
167
+ end
168
+ end
169
+ classies
170
+ end # find_controller
171
+
172
+ #
173
+ #
174
+ #
175
+ def di_helpers(controller)
176
+ helpers.each do |helper|
177
+ controller.class.send(:include, helper)
178
+ end
179
+ end # di_helpers
180
+
181
+ #
182
+ #
183
+ #
184
+ def di_instance(request, response, controller, action, query, route)
185
+ controller.instance_variable_set(:@_application, self)
186
+ controller.instance_variable_set(:@_request, request)
187
+ controller.instance_variable_set(:@_response, response)
188
+ controller.instance_variable_set(:@_action, action)
189
+ controller.instance_variable_set(:@_query, query)
190
+ controller.instance_variable_set(:@_route, route)
191
+ end # di_instance
192
+
193
+ def di_thread(request, response, controller, action, query, route)
194
+ current = Thread.current
195
+ current[:request] = request
196
+ current[:response] = response
197
+ current[:controller] = controller
198
+ current[:action] = action
199
+ current[:query] = query
200
+ current[:route] = route
201
+ end
202
+
203
+ def get_thread_by_di
204
+ current = Thread.current
205
+ [current[:request], current[:response], current[:controller], current[:action], current[:query], current[:route]]
206
+ end
207
+
208
+ #
209
+ #
210
+ #
211
+ def find_action(controller, query)
212
+ action = nil
213
+ query = query.map do |q|
214
+ q.sub(/\.\w+$/, '')
215
+ end
216
+ if query[0] and controller.respond_to?(query[0])
217
+ action = query.shift
218
+ end
219
+ if action.nil? and controller.respond_to?(:index)
220
+ action = 'index'
221
+ end
222
+
223
+ unless action.nil?
224
+ arity = controller.method(action).arity
225
+ unless (arity >= 0 and query.size == arity) or
226
+ (arity < 0 and query.size >= ((-1 * arity)-1))
227
+ if (not action == 'index') and controller.respond_to?(:index)
228
+ query.unshift(action)
229
+ action = 'index'
230
+ if controller.respond_to?(action)
231
+ arity = controller.method(action).arity
232
+ unless (arity >= 0 and query.size == arity) or
233
+ (arity < 0 and query.size >= ((-1 * arity)-1))
234
+ action = nil
235
+ end
236
+ else
237
+ action = nil
238
+ end
239
+ else
240
+ action = nil
241
+ end
242
+ end
243
+ end
244
+ [action, query]
245
+ end # find_action
246
+
247
+ #
248
+ #
249
+ #
250
+ def send_action(request, response, controller, action, query)
251
+ value = nil
252
+ catch(:finish) do
253
+ before_filters.each do |filter|
254
+ filter.call if filter.respond_to?(:call)
255
+ end
256
+ controller.send(:before, []) if controller.respond_to?(:before)
257
+ value = controller.send(action, *query)
258
+ controller.send(:after, []) if controller.respond_to?(:after)
259
+ after_filters.reverse.each do |filter|
260
+ filter.call if filter.respond_to?(:call)
261
+ end
262
+ end
263
+ value
264
+ end # send_action
265
+
266
+ def error(code, request, response)
267
+ UzuUzu.logger.debug "error : #{code}"
268
+ uri = "#{request.scheme}://#{request.host}"
269
+ if (request.scheme == 'https' and request.port != 443) or
270
+ (request.scheme == 'http' and request.port != 80)
271
+ uri << ":#{request.port}"
272
+ end
273
+ uri << "#{request.env["SCRIPT_NAME"]}/error/#{code}"
274
+ response.redirect(uri)
275
+ response.finish
276
+ end
277
+
278
+ def not_found(request, response)
279
+ error(404, request, response)
280
+ end
281
+ end # Application
282
+ end # UzuUzu