egalite 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.
Files changed (113) hide show
  1. data/.gitignore +17 -0
  2. data/README.md +91 -0
  3. data/auth/basic.rb +32 -0
  4. data/blank.rb +53 -0
  5. data/egalite.rb +742 -0
  6. data/errorconsole.rb +77 -0
  7. data/examples/simple/example.rb +39 -0
  8. data/examples/simple/pages/test.html +15 -0
  9. data/examples/simple_db/example_db.rb +103 -0
  10. data/examples/simple_db/pages/edit.html +6 -0
  11. data/helper.rb +251 -0
  12. data/keitai/keitai.rb +107 -0
  13. data/keitai/ketai.rb +11 -0
  14. data/keitai/rack/ketai/carrier/abstract.rb +131 -0
  15. data/keitai/rack/ketai/carrier/au.rb +78 -0
  16. data/keitai/rack/ketai/carrier/docomo.rb +80 -0
  17. data/keitai/rack/ketai/carrier/emoji/ausjisstrtoemojiid.rb +1391 -0
  18. data/keitai/rack/ketai/carrier/emoji/docomosjisstrtoemojiid.rb +759 -0
  19. data/keitai/rack/ketai/carrier/emoji/emojidata.rb +836 -0
  20. data/keitai/rack/ketai/carrier/emoji/softbankutf8strtoemojiid.rb +1119 -0
  21. data/keitai/rack/ketai/carrier/emoji/softbankwebcodetoutf8str.rb +499 -0
  22. data/keitai/rack/ketai/carrier/iphone.rb +8 -0
  23. data/keitai/rack/ketai/carrier/softbank.rb +82 -0
  24. data/keitai/rack/ketai/carrier.rb +17 -0
  25. data/keitai/rack/ketai/middleware.rb +24 -0
  26. data/m17n.rb +193 -0
  27. data/rack/auth/abstract/handler.rb +37 -0
  28. data/rack/auth/abstract/request.rb +37 -0
  29. data/rack/auth/basic.rb +58 -0
  30. data/rack/auth/digest/md5.rb +124 -0
  31. data/rack/auth/digest/nonce.rb +51 -0
  32. data/rack/auth/digest/params.rb +55 -0
  33. data/rack/auth/digest/request.rb +40 -0
  34. data/rack/builder.rb +80 -0
  35. data/rack/cascade.rb +41 -0
  36. data/rack/chunked.rb +49 -0
  37. data/rack/commonlogger.rb +49 -0
  38. data/rack/conditionalget.rb +47 -0
  39. data/rack/config.rb +15 -0
  40. data/rack/content_length.rb +29 -0
  41. data/rack/content_type.rb +23 -0
  42. data/rack/deflater.rb +96 -0
  43. data/rack/directory.rb +157 -0
  44. data/rack/etag.rb +32 -0
  45. data/rack/file.rb +92 -0
  46. data/rack/handler/cgi.rb +62 -0
  47. data/rack/handler/evented_mongrel.rb +8 -0
  48. data/rack/handler/fastcgi.rb +89 -0
  49. data/rack/handler/lsws.rb +63 -0
  50. data/rack/handler/mongrel.rb +90 -0
  51. data/rack/handler/scgi.rb +59 -0
  52. data/rack/handler/swiftiplied_mongrel.rb +8 -0
  53. data/rack/handler/thin.rb +18 -0
  54. data/rack/handler/webrick.rb +73 -0
  55. data/rack/handler.rb +88 -0
  56. data/rack/head.rb +19 -0
  57. data/rack/lint.rb +567 -0
  58. data/rack/lobster.rb +65 -0
  59. data/rack/lock.rb +16 -0
  60. data/rack/logger.rb +20 -0
  61. data/rack/methodoverride.rb +27 -0
  62. data/rack/mime.rb +208 -0
  63. data/rack/mock.rb +190 -0
  64. data/rack/nulllogger.rb +18 -0
  65. data/rack/recursive.rb +61 -0
  66. data/rack/reloader.rb +109 -0
  67. data/rack/request.rb +273 -0
  68. data/rack/response.rb +150 -0
  69. data/rack/rewindable_input.rb +103 -0
  70. data/rack/runtime.rb +27 -0
  71. data/rack/sendfile.rb +144 -0
  72. data/rack/server.rb +271 -0
  73. data/rack/session/abstract/id.rb +140 -0
  74. data/rack/session/cookie.rb +90 -0
  75. data/rack/session/memcache.rb +119 -0
  76. data/rack/session/pool.rb +100 -0
  77. data/rack/showexceptions.rb +349 -0
  78. data/rack/showstatus.rb +106 -0
  79. data/rack/static.rb +38 -0
  80. data/rack/urlmap.rb +55 -0
  81. data/rack/utils.rb +662 -0
  82. data/rack.rb +81 -0
  83. data/route.rb +231 -0
  84. data/sendmail.rb +222 -0
  85. data/sequel_helper.rb +20 -0
  86. data/session.rb +132 -0
  87. data/stringify_hash.rb +63 -0
  88. data/support.rb +35 -0
  89. data/template.rb +287 -0
  90. data/test/french.html +13 -0
  91. data/test/french_msg.html +3 -0
  92. data/test/m17n.txt +30 -0
  93. data/test/mobile.html +15 -0
  94. data/test/setup.rb +8 -0
  95. data/test/static/test.txt +1 -0
  96. data/test/template.html +58 -0
  97. data/test/template_inner.html +1 -0
  98. data/test/template_innerparam.html +1 -0
  99. data/test/test_auth.rb +43 -0
  100. data/test/test_blank.rb +44 -0
  101. data/test/test_csrf.rb +87 -0
  102. data/test/test_errorconsole.rb +91 -0
  103. data/test/test_handler.rb +155 -0
  104. data/test/test_helper.rb +296 -0
  105. data/test/test_keitai.rb +107 -0
  106. data/test/test_m17n.rb +129 -0
  107. data/test/test_route.rb +192 -0
  108. data/test/test_sendmail.rb +146 -0
  109. data/test/test_session.rb +83 -0
  110. data/test/test_stringify_hash.rb +67 -0
  111. data/test/test_template.rb +114 -0
  112. data/test.bat +2 -0
  113. metadata +240 -0
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/README.md ADDED
@@ -0,0 +1,91 @@
1
+ # Egalite
2
+
3
+ Egaliteは、Ruby用のウェブアプリケーションフレームワークです。自社用に使っているフレームワークですが、使う人の利便性などを考えてオープンソースにしてgemで公開しています。
4
+
5
+ ## 概要
6
+
7
+ いわゆるMVC構造のフレームワークです。O/RマッパーとしてはSequelを使うことを想定しています。モデルはSequelをそのまま使いますので、本ドキュメントでは言及しません。
8
+
9
+ ビューは独自のテンプレートエンジンを使用しており、HTMLからコードをなるべく廃するという思想で作っています。
10
+
11
+ ## コントローラーの基本
12
+
13
+ class FooController < Egalite::Controller
14
+ def bar(id)
15
+ "#{id}ですよ"
16
+ end
17
+ end
18
+
19
+ このようなアクションは/foo/bar/<id>のURLで呼び出され、引数としてidが引き渡されます。出力としては文字列がそのままtext/htmlのcontent-typeで出力されます。
20
+
21
+ ### デフォルトコントローラーとデフォルトアクション
22
+
23
+ class DefaultController < Egalite::Controller
24
+ def get
25
+ end
26
+ end
27
+
28
+ このアクションは他のコントローラーで引っかけられなかったすべてのアクセスを引き取ります。実際のURLパスはreq.pathというメソッドで取得できます。
29
+
30
+ ### コントローラーの戻り値
31
+
32
+ コントローラーは戻り値として、Hash, Array, Stringを返すことができます。
33
+
34
+ Stringを返した場合は、通常のHTMLとして出力します。
35
+
36
+ Arrayを返した場合は、Rackの標準的な出力形式として扱います。すなわち``[200, {"Content-Type" => "text/html"}, "hoge"]``のように、HTTPステータスコード、レスポンスヘッダ、出力文字列の格納された配列とみなします。
37
+
38
+ Hashを返した場合は、テンプレートエンジンにHashが引き渡され、テンプレートにある対応するプレースホルダにHashの内容が埋め込まれます。Hashの代わりにSequelのモデルインスタンスを渡すこともできます。
39
+
40
+ ### params
41
+
42
+ URL以外で引き渡されるパラメーター(クエリパラメータやPOSTパラメータ)はparamsというメソッド経由で参照することができます。paramsというメソッドはパラメーターの格納されたHashを返します。
43
+
44
+ class FooController < Egalite::Controller
45
+ def post(id)
46
+ "#{params[:hoge]}: #{id}"
47
+ end
48
+ end
49
+
50
+ このコントローラーが定義されている場合、/foo/524にhoge=piyoというパラメータでPOSTでアクセスした場合、出力として"piyo: 524"という文字列が出力されます。
51
+
52
+ ## コントローラーのより複雑な使い方
53
+
54
+ ### フック (filter)
55
+
56
+ class MainPages < Egalite::Controller
57
+ def before_filter
58
+ end
59
+ end
60
+
61
+ ### アクセス制御イディオム
62
+
63
+ ## ビューの基本
64
+
65
+ <html>
66
+ <body>
67
+ プレースホルダ: &=placeholder;
68
+
69
+ 配列の展開:
70
+ <group name='foo'>
71
+ </group>
72
+
73
+ if文:
74
+ <if name='bar'>
75
+ </if>
76
+
77
+ unless文:
78
+ <unless name='bar'>
79
+ </unless>
80
+
81
+ ネストしたHashもしくはメソッドへのアクセス: &=.hoge.piyo;
82
+
83
+ include文:
84
+ <include >
85
+
86
+ </body>
87
+ </html>
88
+
89
+ ### フォームへの自動埋め込み
90
+
91
+
data/auth/basic.rb ADDED
@@ -0,0 +1,32 @@
1
+
2
+ module Egalite
3
+ module Auth
4
+ class Basic
5
+ def self.authorize(req,realm)
6
+ auth = req.authorization
7
+ return unauthorized(realm) if auth.blank?
8
+ (method,credentials) = auth.split(' ', 2)
9
+ return bad_request if method.downcase != "basic"
10
+ (username,password) = credentials.unpack("m*").first.split(/:/,2)
11
+ return unauthorized(realm) unless yield(username,password)
12
+ true
13
+ end
14
+ def self.unauthorized(realm)
15
+ return [ 401,
16
+ { 'Content-Type' => 'text/plain',
17
+ 'Content-Length' => '0',
18
+ 'WWW-Authenticate' => 'Basic realm="%s"' % realm },
19
+ []
20
+ ]
21
+ end
22
+ def self.bad_request
23
+ return [ 400,
24
+ { 'Content-Type' => 'text/plain',
25
+ 'Content-Length' => '0' },
26
+ []
27
+ ]
28
+ end
29
+ end
30
+ end
31
+ end
32
+
data/blank.rb ADDED
@@ -0,0 +1,53 @@
1
+ # I stole it from ActiveSupport library of Ruby on Rails
2
+ # (MIT License)
3
+
4
+ class Object
5
+ # An object is blank if it's nil, empty, or a whitespace string.
6
+ # For example, "", " ", nil, [], and {} are blank.
7
+ #
8
+ # This simplifies
9
+ # if !address.nil? && !address.empty?
10
+ # to
11
+ # if !address.blank?
12
+ def blank?
13
+ respond_to?(:empty?) ? empty? : !self
14
+ end
15
+ end
16
+
17
+ class NilClass #:nodoc:
18
+ def blank?
19
+ true
20
+ end
21
+ end
22
+
23
+ class FalseClass #:nodoc:
24
+ def blank?
25
+ true
26
+ end
27
+ end
28
+
29
+ class TrueClass #:nodoc:
30
+ def blank?
31
+ false
32
+ end
33
+ end
34
+
35
+ class Array #:nodoc:
36
+ alias_method :blank?, :empty?
37
+ end
38
+
39
+ class Hash #:nodoc:
40
+ alias_method :blank?, :empty?
41
+ end
42
+
43
+ class String #:nodoc:
44
+ def blank?
45
+ self !~ /\S/
46
+ end
47
+ end
48
+
49
+ class Numeric #:nodoc:
50
+ def blank?
51
+ false
52
+ end
53
+ end