sinatra 1.4.3 → 1.4.4

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.

Potentially problematic release.


This version of sinatra might be problematic. Click here for more details.

@@ -70,7 +70,7 @@ is el tudod érni:
70
70
  end
71
71
  ```
72
72
 
73
- Az útvonalmintákban szerepelhetnek joker paraméterek is, melyeket a
73
+ Az útvonalmintákban szerepelhetnek joker paraméterek is, melyeket a
74
74
  `params[:splat]` tömbön keresztül tudunk elérni.
75
75
 
76
76
  ```ruby
@@ -134,7 +134,7 @@ itt is lehetőség nyílik egyéb könyvtár használatára:
134
134
  set :views, File.dirname(__FILE__) + '/templates'
135
135
 
136
136
  Nagyon fontos észben tartani, hogy a sablononkra mindig szimbólumokkal
137
- hivatkozunk, még akkor is, ha egyéb (ebben az esetben a
137
+ hivatkozunk, még akkor is, ha egyéb (ebben az esetben a
138
138
  :'subdir/template') könyvtárban tároljuk őket. A renderelő
139
139
  metódusok minden, nekik közvetlenül átadott karakterláncot megjelenítenek.
140
140
 
@@ -286,13 +286,13 @@ végére begépeljük őket:
286
286
 
287
287
  Megjegyzés: azok a fájlon belüli sablonok, amelyek az alkalmazás fájl végére
288
288
  kerülnek és függnek a sinatra könyvtártól, automatikusan betöltődnek.
289
- Ha ugyanezt más alkalmazásfájlban is szeretnéd megtenni, hívd meg
289
+ Ha ugyanezt más alkalmazásfájlban is szeretnéd megtenni, hívd meg
290
290
  a <tt>use_in_file_templates!</tt> metódust az adott fájlban.
291
291
 
292
292
  ### Kulcsszavas sablonok
293
293
 
294
- Sablonokat végül a felsőszintű <tt>template</tt> metódussal is
295
- definiálhatunk:
294
+ Sablonokat végül a felsőszintű <tt>template</tt> metódussal is
295
+ definiálhatunk:
296
296
 
297
297
  ```ruby
298
298
  template :layout do
@@ -383,7 +383,7 @@ Vagy állítsd be a HTTP státuszt és a törzset is egyszerre ...
383
383
 
384
384
  ## Passzolás
385
385
 
386
- Az útvonalak továbbadhatják a végrehajtást egy másik útvonalnak
386
+ Az útvonalak továbbadhatják a végrehajtást egy másik útvonalnak
387
387
  a `pass` függvényhívással:
388
388
 
389
389
  ```ruby
@@ -432,7 +432,7 @@ Csak akkor fusson le, ha a környezet <tt>:production</tt> vagy <tt>:test</tt>:
432
432
 
433
433
  A hibakezelők ugyanabban a kontextusban futnak le, mint az útvonalak és
434
434
  előszűrők, ezért számukra is elérhetőek mindazok a könyvtárak, amelyek
435
- az utóbbiak rendelkezésére is állnak; így például a `haml`,
435
+ az utóbbiak rendelkezésére is állnak; így például a `haml`,
436
436
  az `erb`, a `halt` stb.
437
437
 
438
438
  ### Nem található
@@ -495,10 +495,10 @@ bevezetéséhez:
495
495
  ## Rack Middleware
496
496
 
497
497
  A Sinatra egy Ruby keretrendszerek számára kifejlesztett egyszerű és szabványos
498
- interfészre, a [Rack](http://rack.rubyforge.org/) -re épül. A Rack fejlesztői
498
+ interfészre, a [Rack](http://rack.rubyforge.org/) -re épül. A Rack fejlesztői
499
499
  szempontból egyik legérdekesebb jellemzője, hogy támogatja az úgynevezett
500
500
  "middleware" elnevezésű komponenseket, amelyek beékelődnek a szerver és az
501
- alkalmazás közé, így képesek megfigyelni és/vagy módosítani a HTTP
501
+ alkalmazás közé, így képesek megfigyelni és/vagy módosítani a HTTP
502
502
  kéréseket és válaszokat. Segítségükkel különféle, egységesen működő
503
503
  funkciókat építhetünk be rendszerünkbe.
504
504
 
@@ -517,10 +517,10 @@ A Sinatra keretrendszerben gyerekjáték a Rack middleware-ek behúzása a
517
517
  end
518
518
  ```
519
519
 
520
- A `use` metódus szemantikája megegyezik a
520
+ A `use` metódus szemantikája megegyezik a
521
521
  [Rack::Builder](http://rack.rubyforge.org/doc/classes/Rack/Builder.html) DSL-ben
522
522
  használt +use+ metóduséval (az említett DSL-t leginkább rackup állományokban
523
- használják). Hogy egy példát említsünk, a `use` metódus elfogad
523
+ használják). Hogy egy példát említsünk, a `use` metódus elfogad
524
524
  változókat és blokkokat egyaránt, akár kombinálva is ezeket:
525
525
 
526
526
  ```ruby
@@ -530,7 +530,7 @@ változókat és blokkokat egyaránt, akár kombinálva is ezeket:
530
530
  ```
531
531
 
532
532
  A Rack terjesztéssel egy csomó alap middleware komponens is érkezik,
533
- amelyekkel a naplózás, URL útvonalak megadása, autentikáció és
533
+ amelyekkel a naplózás, URL útvonalak megadása, autentikáció és
534
534
  munkamenet-kezelés könnyen megvalósítható. A Sinatra ezek közül elég
535
535
  sokat automatikusan felhasznál a beállításoktól függően, így ezek
536
536
  explicit betöltésével (+use+) nem kell bajlódnod.
@@ -619,7 +619,7 @@ alkalmazás átalakítható Sinatra::Base alapú komponensekké két lépésben:
619
619
  a Sinatra::Base osztály gyermekosztályaiban kell megadni.
620
620
 
621
621
  A `Sinatra::Base` osztály igazából egy üres lap: a legtöbb funkció
622
- alapból ki van kapcsolva, beleértve a beépített szervert is. A
622
+ alapból ki van kapcsolva, beleértve a beépített szervert is. A
623
623
  beállításokkal és az egyes kapcsolók hatásával az
624
624
  [Options and Configuration](http://sinatra.github.com/configuration.html) lap
625
625
  foglalkozik.
@@ -653,7 +653,7 @@ Az alábbi kapcsolókat ismeri fel a rendszer:
653
653
 
654
654
  Ha a Sinatra legfrissebb, fejlesztői változatát szeretnéd használni,
655
655
  készíts egy helyi másolatot és indítsd az alkalmazásodat úgy,
656
- hogy a `sinatra/lib` könyvtár elérhető legyen a
656
+ hogy a `sinatra/lib` könyvtár elérhető legyen a
657
657
  `LOAD_PATH`-on:
658
658
 
659
659
  ```
@@ -23,21 +23,39 @@ gemをインストールして動かしてみる。
23
23
  Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンがペアになっています。
24
24
  ルートはブロックに結び付けられています。
25
25
 
26
- get '/' do
27
- .. 何か見せる ..
28
- end
26
+ ``` ruby
27
+ get '/' do
28
+ .. 何か見せる ..
29
+ end
29
30
 
30
- post '/' do
31
- .. 何か生成する ..
32
- end
31
+ post '/' do
32
+ .. 何か生成する ..
33
+ end
33
34
 
34
- put '/' do
35
- .. 何か更新する ..
36
- end
35
+ put '/' do
36
+ .. 何か更新する ..
37
+ end
37
38
 
38
- delete '/' do
39
- .. 何か削除する ..
40
- end
39
+ patch '/' do
40
+ .. 何か修正する ..
41
+ end
42
+
43
+ delete '/' do
44
+ .. 何か削除する ..
45
+ end
46
+
47
+ options '/' do
48
+ .. 何か満たす ..
49
+ end
50
+
51
+ link '/' do
52
+ .. 何かリンクを張る ..
53
+ end
54
+
55
+ unlink '/' do
56
+ .. 何かアンリンクする ..
57
+ end
58
+ ```
41
59
 
42
60
  ルートは定義された順番にマッチします。
43
61
  リクエストに最初にマッチしたルートが呼び出されます。
@@ -45,48 +63,74 @@ Sinatraでは、ルートはHTTPメソッドとURLマッチングパターンが
45
63
  ルートのパターンは名前付きパラメータを含むことができ、
46
64
  `params`ハッシュで取得できます。
47
65
 
48
- get '/hello/:name' do
49
- # matches "GET /hello/foo" and "GET /hello/bar"
50
- # params[:name] is 'foo' or 'bar'
51
- "Hello #{params[:name]}!"
52
- end
66
+ ``` ruby
67
+ get '/hello/:name' do
68
+ # "GET /hello/foo" "GET /hello/bar" にマッチ
69
+ # params[:name] は 'foo' か 'bar'
70
+ "Hello #{params[:name]}!"
71
+ end
72
+ ```
53
73
 
54
74
  また、ブロックパラメータで名前付きパラメータにアクセスすることもできます。
55
75
 
56
- get '/hello/:name' do |n|
57
- "Hello #{n}!"
58
- end
76
+ ``` ruby
77
+ get '/hello/:name' do |n|
78
+ # "GET /hello/foo" と "GET /hello/bar" にマッチ
79
+ # params[:name] は 'foo' か 'bar'
80
+ # n が params[:name] を保持
81
+ "Hello #{n}!"
82
+ end
83
+ ```
59
84
 
60
85
  ルートパターンはsplat(またはワイルドカード)を含むこともでき、
61
86
  `params[:splat]` で取得できます。
62
87
 
63
- get '/say/*/to/*' do
64
- # matches /say/hello/to/world
65
- params[:splat] # => ["hello", "world"]
66
- end
88
+ ``` ruby
89
+ get '/say/*/to/*' do
90
+ # /say/hello/to/world にマッチ
91
+ params[:splat] # => ["hello", "world"]
92
+ end
67
93
 
68
- get '/download/*.*' do
69
- # matches /download/path/to/file.xml
70
- params[:splat] # => ["path/to/file", "xml"]
71
- end
94
+ get '/download/*.*' do
95
+ # /download/path/to/file.xml にマッチ
96
+ params[:splat] # => ["path/to/file", "xml"]
97
+ end
98
+ ```
72
99
 
73
100
  ブロックパラーメータを使用した場合:
74
101
 
75
- get '/download/*.*' do |path, ext|
76
- [path, ext] # => ["path/to/file", "xml"]
77
- end
102
+ ``` ruby
103
+ get '/download/*.*' do |path, ext|
104
+ [path, ext] # => ["path/to/file", "xml"]
105
+ end
106
+ ```
78
107
 
79
- 正規表現を使ったルート:
108
+ 正規表現を使用した場合:
80
109
 
81
- get %r{/hello/([\w]+)} do
82
- "Hello, #{params[:captures].first}!"
83
- end
110
+ ``` ruby
111
+ get %r{/hello/([\w]+)} do
112
+ "Hello, #{params[:captures].first}!"
113
+ end
114
+ ```
84
115
 
85
116
  ブロックパラーメータを使用した場合:
86
117
 
87
- get %r{/hello/([\w]+)} do |c|
88
- "Hello, #{c}!"
89
- end
118
+ ``` ruby
119
+ get %r{/hello/([\w]+)} do |c|
120
+ "Hello, #{c}!"
121
+ end
122
+ ```
123
+
124
+ オプショナルパラメーターを使用した場合:
125
+
126
+ ``` ruby
127
+ get '/posts.?:format?' do
128
+ # "GET /posts" と "GET /posts.json", "GET /posts.xml" の拡張子などにマッチ
129
+ end
130
+ ```
131
+
132
+ ところで、ディレクトリトラバーサル保護機能を無効にしないと(下記参照)、
133
+ ルートにマッチする前にリクエストパスが修正される可能性があります。
90
134
 
91
135
  ### 条件
92
136
 
@@ -121,7 +121,7 @@ get '/posts.?:format?' do
121
121
  end
122
122
  ```
123
123
 
124
- 한편, 경로 탐색 공격 방지(path traversal attack protection, 아래 참조)를 비활성화시키지 않았다면,
124
+ 한편, 경로 탐색 공격 방지(path traversal attack protection, 아래 참조)를 비활성화시키지 않았다면,
125
125
  요청 경로는 라우터와 매칭되기 이전에 수정될 수 있다.
126
126
 
127
127
  ### 조건(Conditions)
@@ -222,17 +222,17 @@ get('/') { Stream.new }
222
222
  ```ruby
223
223
  class AllButPattern
224
224
  Match = Struct.new(:captures)
225
-
225
+
226
226
  def initialize(except)
227
227
  @except = except
228
228
  @captures = Match.new([])
229
229
  end
230
-
230
+
231
231
  def match(str)
232
232
  @captures unless @except === str
233
233
  end
234
234
  end
235
-
235
+
236
236
  def all_but(pattern)
237
237
  AllButPattern.new(pattern)
238
238
  end
@@ -341,7 +341,7 @@ render 메서드에서 전달된 옵션값들은 `set`을 통해 설정한 옵
341
341
  <dd>템플릿을 로드할 뷰 폴더. 기본값은 <tt>settings.views</tt>.</dd>
342
342
 
343
343
  <dt>layout</dt>
344
- <dd>레이아웃을 사용할지 여부 (<tt>true</tt> 또는 <tt>false</tt>), 만약 이 값이 심볼일 경우,
344
+ <dd>레이아웃을 사용할지 여부 (<tt>true</tt> 또는 <tt>false</tt>), 만약 이 값이 심볼일 경우,
345
345
  사용할 템플릿을 지정. 예제: <tt>erb :index, :layout => !request.xhr?</tt>
346
346
  </dd>
347
347
 
@@ -367,7 +367,7 @@ set :views, settings.root + '/templates'
367
367
  ```
368
368
 
369
369
  꼭 알아야 할 중요한 점 한 가지는 템플릿은 언제나 심볼로 참조된다는 것이며,
370
- 템플릿이 하위 디렉터리에 위치한 경우라도 마찬가지임(그럴 경우에는 `:'subdir/template'`을 사용).
370
+ 템플릿이 하위 디렉터리에 위치한 경우라도 마찬가지임(그럴 경우에는 `:'subdir/template'`을 사용).
371
371
  반드시 심볼이어야 하는 이유는, 만약 그렇게 하지 않으면 렌더링 메서드가 전달된 문자열을 직접 렌더하려 할 것이기 때문임.
372
372
 
373
373
  ### 가능한 템플릿 언어들(Available Template Languages)
@@ -545,7 +545,7 @@ Liquid 템플릿에서는 루비 메서드(`yield` 제외)를 호출할 수 없
545
545
  </tr>
546
546
  </table>
547
547
 
548
- 마크다운에서는 메서드 호출 뿐 아니라 locals 전달도 안됨.
548
+ 마크다운에서는 메서드 호출 뿐 아니라 locals 전달도 안됨.
549
549
  따라서 일반적으로는 다른 렌더링 엔진과 함께 사용하게 될 것임:
550
550
 
551
551
  ```ruby
@@ -801,7 +801,7 @@ end
801
801
  Templates are evaluated within the same context as route handlers. Instance
802
802
  variables set in route handlers are directly accessible by templates:
803
803
  템플릿은 라우터 핸들러와 같은 맥락(context)에서 평가된다.
804
- 라우터 핸들러에서 설정한 인스턴스 변수들은 템플릿에서 접근 가능하다:
804
+ 라우터 핸들러에서 설정한 인스턴스 변수들은 템플릿에서 접근 가능하다:
805
805
 
806
806
  ```ruby
807
807
  get '/:id' do
@@ -810,7 +810,7 @@ get '/:id' do
810
810
  end
811
811
  ```
812
812
 
813
- 또는, 명시적으로 로컬 변수의 해시를 지정:
813
+ 또는, 명시적으로 로컬 변수의 해시를 지정:
814
814
 
815
815
  ```ruby
816
816
  get '/:id' do
@@ -900,7 +900,7 @@ get '/' do
900
900
  end
901
901
  ```
902
902
 
903
- `./views/index.myat` 를 렌더함.
903
+ `./views/index.myat` 를 렌더함.
904
904
  Tilt에 대한 더 자세한 내용은 https://github.com/rtomayko/tilt 참조.
905
905
 
906
906
  ## 필터(Filters)
@@ -989,7 +989,7 @@ helpers FooUtils, BarUtils
989
989
 
990
990
  ### 세션(Sessions) 사용하기
991
991
 
992
- 세션은 요청 동안에 상태를 유지하기 위해 사용한다.
992
+ 세션은 요청 동안에 상태를 유지하기 위해 사용한다.
993
993
  세션이 활성화되면, 사용자 세션 당 session 해시 하나씩을 갖게 된다:
994
994
 
995
995
  ```ruby
@@ -1007,7 +1007,7 @@ end
1007
1007
  `enable :sessions`은 실은 모든 데이터를 쿠키 속에 저장함에 유의하자.
1008
1008
  항상 이렇게 하고 싶지 않을 수도 있을 것이다(예를 들어, 많은 양의 데이터를 저장하게 되면 트래픽이 높아진다).
1009
1009
  이 때는 여러 가지 랙 세션 미들웨어(Rack session middleware)를 사용할 수 있을 것이다:
1010
- 이렇게 할 경우라면, `enable :sessions`을 호출하지 *말고*,
1010
+ 이렇게 할 경우라면, `enable :sessions`을 호출하지 *말고*,
1011
1011
  대신 여러분이 선택한 미들웨어를 다른 모든 미들웨어들처럼 포함시키면 된다:
1012
1012
 
1013
1013
  ```ruby
@@ -1022,7 +1022,7 @@ get '/:value' do
1022
1022
  end
1023
1023
  ```
1024
1024
 
1025
- 보안을 위해서, 쿠키 속의 세션 데이터는 세션 시크릿(secret)으로 사인(sign)된다.
1025
+ 보안을 위해서, 쿠키 속의 세션 데이터는 세션 시크릿(secret)으로 사인(sign)된다.
1026
1026
  Sinatra는 여러분을 위해 무작위 시크릿을 생성한다.
1027
1027
  그렇지만, 이 시크릿은 여러분 애플리케이션 시작 시마다 변경될 수 있기 때문에,
1028
1028
  여러분은 여러분 애플리케이션의 모든 인스턴스들이 공유할 시크릿을 직접 만들고 싶을 수도 있다:
@@ -1112,7 +1112,7 @@ end
1112
1112
  위 예제의 경우, `"bar"`를 헬퍼로 옮겨 `/foo`와 `/bar` 모두에서 사용하도록 함으로써
1113
1113
  테스팅을 쉽게 하고 성능을 높일 수 있을 것이다.
1114
1114
 
1115
- 만약 그 요청이 사본이 아닌 바로 그 동일 인스턴스로 보내지도록 하고 싶다면,
1115
+ 만약 그 요청이 사본이 아닌 바로 그 동일 인스턴스로 보내지도록 하고 싶다면,
1116
1116
  `call` 대신 `call!`을 사용하면 된다.
1117
1117
 
1118
1118
  `call`에 대한 더 자세한 내용은 Rack 명세를 참고하면 된다.
@@ -1168,16 +1168,16 @@ out << "- dary!\n"
1168
1168
  end
1169
1169
  ```
1170
1170
 
1171
- 이렇게 하면 스트리밍 API나
1171
+ 이렇게 하면 스트리밍 API나
1172
1172
  [서버 발송 이벤트Server Sent Events](http://dev.w3.org/html5/eventsource/)를 구현할 수 있게 해 주며,
1173
1173
  [WebSockets](http://en.wikipedia.org/wiki/WebSocket)을 위한 기반으로 사용될 수 있다.
1174
- 또한 이 방법은 일부 콘텐츠가 느린 자원에 의존하는 경우에
1174
+ 또한 이 방법은 일부 콘텐츠가 느린 자원에 의존하는 경우에
1175
1175
  스로풋(throughtput)을 높이기 위해 사용될 수도 있다.
1176
1176
 
1177
1177
  스트리밍 동작, 특히 동시 요청의 수는 애플리케이션을 서빙하는 웹서버에 크게 의존적이다.
1178
1178
  어떤 서버, 예컨대 WEBRick 같은 경우는 아예 스트리밍을 지원조차 하지 못할 것이다.
1179
1179
  만약 서버가 스트리밍을 지원하지 않는다면, 본문은 `stream` 으로 전달된 블록이 수행을 마친 후에 한꺼번에 반환될 것이다.
1180
- 스트리밍은 Shotgun에서는 작동하지 않는다.
1180
+ 스트리밍은 Shotgun에서는 작동하지 않는다.
1181
1181
 
1182
1182
  만약 선택적 매개변수 `keep_open`이 설정되어 있다면, 스트림 객체에서 `close`를 호출하지 않을 것이고,
1183
1183
  따라서 여러분은 나중에 실행 흐름 상의 어느 시점에서 스트림을 닫을 수 있다.
@@ -1203,7 +1203,7 @@ end
1203
1203
  ### 로깅(Logging)
1204
1204
 
1205
1205
  In the request scope, the `logger` helper exposes a `Logger` instance:
1206
- 요청 스코프(request scope) 내에서, `Logger`의 인스턴스인 `logger` 헬퍼를 사용할 수 있다:
1206
+ 요청 스코프(request scope) 내에서, `Logger`의 인스턴스인 `logger` 헬퍼를 사용할 수 있다:
1207
1207
 
1208
1208
  ```ruby
1209
1209
  get '/' do
@@ -1318,7 +1318,7 @@ end
1318
1318
 
1319
1319
  ### 캐시 컨트롤(Cache Control)
1320
1320
 
1321
- 헤더를 정확하게 설정하는 것은 적절한 HTTP 캐싱의 기본이다.
1321
+ 헤더를 정확하게 설정하는 것은 적절한 HTTP 캐싱의 기본이다.
1322
1322
 
1323
1323
  Cache-Control 헤더를 다음과 같이 간단하게 설정할 수 있다:
1324
1324
 
@@ -1385,7 +1385,7 @@ end
1385
1385
  정적 파일에 `Cache-Control` 헤더 정보를 추가하려면 `:static_cache_control` 설정(아래 참조)을 사용하라:
1386
1386
 
1387
1387
  RFC 2616에 따르면 If-Match 또는 If-None-Match 헤더가 `*`로 설정된 경우 요청한 리소스(resource)가 이미 존재하느냐 여부에 따라 다르게 취급해야 한다고 되어 있다.
1388
- Sinatra는 (get 처럼) 안전하거나 (put 처럼) 멱등인 요청에 대한 리소스는 이미 존재한다고 가정하며,
1388
+ Sinatra는 (get 처럼) 안전하거나 (put 처럼) 멱등인 요청에 대한 리소스는 이미 존재한다고 가정하며,
1389
1389
  반면 다른 리소스(예를 들면 post 요청 같은)의 경우는 새 리소스로 취급한다.
1390
1390
  이런 설정은 `:new_resource` 옵션으로 전달하여 변경할 수 있다:
1391
1391
 
@@ -1447,7 +1447,7 @@ Rack 핸들러가 지원할 경우, Ruby 프로세스로부터의 스트리밍
1447
1447
 
1448
1448
  ### 요청 객체에 접근하기(Accessing the Request Object)
1449
1449
 
1450
- 인입되는 요청 객에는 요청 레벨(필터, 라우터, 오류 핸들러)에서 `request` 메서드를 통해 접근 가능하다:
1450
+ 인입되는 요청 객에는 요청 레벨(필터, 라우터, 오류 핸들러)에서 `request` 메서드를 통해 접근 가능하다:
1451
1451
 
1452
1452
  ```ruby
1453
1453
  # http://example.com/example 상에서 실행 중인 앱
@@ -1504,7 +1504,7 @@ end
1504
1504
 
1505
1505
  ### 첨부(Attachments)
1506
1506
 
1507
- `attachment` 헬퍼를 사용하여 브라우저에게 응답이 브라우저에 표시되는 게 아니라
1507
+ `attachment` 헬퍼를 사용하여 브라우저에게 응답이 브라우저에 표시되는 게 아니라
1508
1508
  디스크에 저장되어야 함을 알릴 수 있다:
1509
1509
 
1510
1510
  ```ruby
@@ -1536,7 +1536,7 @@ end
1536
1536
  ```
1537
1537
 
1538
1538
  이 메서드는 내부적으로 `expires` 나 `last_modified` 같은 곳에서 사용된다.
1539
- 따라서 여러분은 애플리케이션에서 `time_for`를 오버라이딩하여
1539
+ 따라서 여러분은 애플리케이션에서 `time_for`를 오버라이딩하여
1540
1540
  이들 메서드의 동작을 쉽게 확장할 수 있다:
1541
1541
 
1542
1542
  ```ruby
@@ -1613,16 +1613,16 @@ end
1613
1613
  configure do
1614
1614
  # 옵션 하나 설정
1615
1615
  set :option, 'value'
1616
-
1616
+
1617
1617
  # 여러 옵션 설정
1618
1618
  set :a => 1, :b => 2
1619
-
1619
+
1620
1620
  # `set :option, true`와 동일
1621
1621
  enable :option
1622
-
1622
+
1623
1623
  # `set :option, false`와 동일
1624
1624
  disable :option
1625
-
1625
+
1626
1626
  # 블록으로 동적인 설정을 할 수도 있음
1627
1627
  set(:css_dir) { File.join(views, 'css') }
1628
1628
  end
@@ -1660,8 +1660,8 @@ end
1660
1660
 
1661
1661
  ### 공격 방어 설정하기(Configuring attack protection)
1662
1662
 
1663
- Sinatra는 [Rack::Protection](https://github.com/rkh/rack-protection#readme)을 사용하여
1664
- 일반적인, 일어날 수 있는 공격에 대비한다.
1663
+ Sinatra는 [Rack::Protection](https://github.com/rkh/rack-protection#readme)을 사용하여
1664
+ 일반적인, 일어날 수 있는 공격에 대비한다.
1665
1665
  이 부분은 간단하게 비활성시킬 수 있다(성능 향상 효과를 가져올 것이다):
1666
1666
 
1667
1667
  ```ruby
@@ -1762,7 +1762,7 @@ set :protection, :except => [:path_traversal, :session_hijacking]
1762
1762
  개발 모드에서는 활성됨.</dd>
1763
1763
 
1764
1764
  <dt>root</dt>
1765
- <dd>프로젝트 루트 디렉터리 경로.
1765
+ <dd>프로젝트 루트 디렉터리 경로.
1766
1766
  설정이 없으면 <tt>app_file</tt> 설정으로부터 유추됨.</dd>
1767
1767
 
1768
1768
  <dt>raise_errors</dt>
@@ -1832,7 +1832,7 @@ ruby my_app.rb -e [ENVIRONMENT]
1832
1832
 
1833
1833
  ## 예외 처리(Error Handling)
1834
1834
 
1835
- 예외 핸들러는 라우터 및 사전 필터와 동일한 맥락에서 실행된다.
1835
+ 예외 핸들러는 라우터 및 사전 필터와 동일한 맥락에서 실행된다.
1836
1836
  이 말인즉, 이들이 제공하는 모든 것들을 사용할 수 있다는 말이다. 예를 들면 `haml`,
1837
1837
  `erb`, `halt`, 등등.
1838
1838
 
@@ -1900,7 +1900,7 @@ error 400..510 do
1900
1900
  end
1901
1901
  ```
1902
1902
 
1903
- Sinatra는 개발 환경에서 동작할 경우에
1903
+ Sinatra는 개발 환경에서 동작할 경우에
1904
1904
  특별한 `not_found` 와 `error` 핸들러를 설치한다.
1905
1905
 
1906
1906
  ## Rack 미들웨어(Rack Middleware)
@@ -1940,7 +1940,7 @@ Rack은 로깅, 디버깅, URL 라우팅, 인증, 그리고 세센 핸들링을
1940
1940
  Sinatra는 설정에 기반하여 이들 컴포넌트들 중 많은 것들을 자동으로 사용하며,
1941
1941
  따라서 여러분은 일반적으로는 `use`를 명시적으로 사용할 필요가 없을 것이다.
1942
1942
 
1943
- 유용한 미들웨어들은
1943
+ 유용한 미들웨어들은
1944
1944
  [rack](https://github.com/rack/rack/tree/master/lib/rack),
1945
1945
  [rack-contrib](https://github.com/rack/rack-contrib#readme),
1946
1946
  [CodeRack](http://coderack.org/) 또는
@@ -1959,21 +1959,21 @@ require 'rack/test'
1959
1959
 
1960
1960
  class MyAppTest < Test::Unit::TestCase
1961
1961
  include Rack::Test::Methods
1962
-
1962
+
1963
1963
  def app
1964
1964
  Sinatra::Application
1965
1965
  end
1966
-
1966
+
1967
1967
  def test_my_default
1968
1968
  get '/'
1969
1969
  assert_equal 'Hello World!', last_response.body
1970
1970
  end
1971
-
1971
+
1972
1972
  def test_with_params
1973
1973
  get '/meet', :name => 'Frank'
1974
1974
  assert_equal 'Hello Frank!', last_response.body
1975
1975
  end
1976
-
1976
+
1977
1977
  def test_with_rack_env
1978
1978
  get '/', {}, 'HTTP_USER_AGENT' => 'Songbird'
1979
1979
  assert_equal "You're using Songbird!", last_response.body
@@ -1986,7 +1986,7 @@ end
1986
1986
  톱레벨에서 앱을 정의하는 것은 마이크로 앱(micro-app) 수준에서는 잘 동작하지만,
1987
1987
  Rack 미들웨어나, Rails 메탈(metal) 또는 서버 컴포넌트를 갖는 간단한 라이브러리, 또는 더 나아가
1988
1988
  Sinatra 익스텐션(extension) 같은 재사용 가능한 컴포넌트들을 구축할 경우에는 심각한 약점을 가진다.
1989
- 톱레벨은 마이크로 앱 스타일의 설정을 가정한다(즉, 하나의 단일 애플리케이션 파일과
1989
+ 톱레벨은 마이크로 앱 스타일의 설정을 가정한다(즉, 하나의 단일 애플리케이션 파일과
1990
1990
  `./public` 및 `./views` 디렉터리, 로깅, 예외 상세 페이지 등등).
1991
1991
  이게 바로 `Sinatra::Base`가 필요한 부분이다:
1992
1992
 
@@ -1996,7 +1996,7 @@ require 'sinatra/base'
1996
1996
  class MyApp < Sinatra::Base
1997
1997
  set :sessions, true
1998
1998
  set :foo, 'bar'
1999
-
1999
+
2000
2000
  get '/' do
2001
2001
  'Hello world!'
2002
2002
  end
@@ -2068,7 +2068,7 @@ end
2068
2068
 
2069
2069
  ### 모듈 애플리케이션(Modular Application) 제공하기
2070
2070
 
2071
- 모듈 앱을 시작하는 두 가지 일반적인 옵션이 있는데,
2071
+ 모듈 앱을 시작하는 두 가지 일반적인 옵션이 있는데,
2072
2072
  공격적으로 `run!`으로 시작하거나:
2073
2073
 
2074
2074
  ```ruby
@@ -2139,7 +2139,7 @@ Good signs you probably want to use a `config.ru`:
2139
2139
 
2140
2140
  Sinatra에서 다른 Rack 미들웨어를 사용할 수 있을 뿐 아니라,
2141
2141
  모든 Sinatra 애플리케이션은 순차로 어떠한 Rack 종착점 앞에 미들웨어로 추가될 수 있다.
2142
- 이 종착점은 다른 Sinatra 애플리케이션이 될 수도 있고,
2142
+ 이 종착점은 다른 Sinatra 애플리케이션이 될 수도 있고,
2143
2143
  또는 Rack 기반의 어떠한 애플리케이션(Rails/Ramaze/Camping/...)이라도 가능하다:
2144
2144
 
2145
2145
  ```ruby
@@ -2147,9 +2147,9 @@ require 'sinatra/base'
2147
2147
 
2148
2148
  class LoginScreen < Sinatra::Base
2149
2149
  enable :sessions
2150
-
2150
+
2151
2151
  get('/login') { haml :login }
2152
-
2152
+
2153
2153
  post('/login') do
2154
2154
  if params[:name] == 'admin' && params[:password] == 'admin'
2155
2155
  session['user_name'] = params[:name]
@@ -2162,13 +2162,13 @@ end
2162
2162
  class MyApp < Sinatra::Base
2163
2163
  # 미들웨어는 사전 필터보다 앞서 실행됨
2164
2164
  use LoginScreen
2165
-
2165
+
2166
2166
  before do
2167
2167
  unless session['user_name']
2168
2168
  halt "접근 거부됨, <a href='/login'>로그인</a> 하세요."
2169
2169
  end
2170
2170
  end
2171
-
2171
+
2172
2172
  get('/') { "Hello #{session['user_name']}." }
2173
2173
  end
2174
2174
  ```
@@ -2226,7 +2226,7 @@ run RailsProject::Application
2226
2226
 
2227
2227
  모든 Sinatra 애플리케이션은 `Sinatra::Base`의 서브클래스에 대응된다.
2228
2228
  만약 톱레벨 DSL (`require 'sinatra'`)을 사용한다면,
2229
- 이 클래스는 `Sinatra::Application`이며, 그렇지 않을 경우라면 여러분이 명시적으로 생성한
2229
+ 이 클래스는 `Sinatra::Application`이며, 그렇지 않을 경우라면 여러분이 명시적으로 생성한
2230
2230
  그 서브클래스가 된다. 클래스 레벨에서는 `get` 이나 `before` 같은 메서드들을 가지나,
2231
2231
  `request` 객체나 `session` 에는 접근할 수 없다. 왜냐면 모든 요청에 대해
2232
2232
  애플리케이션 클래스는 오직 하나이기 때문이다.
@@ -2261,7 +2261,7 @@ end
2261
2261
  ### 요청/인스턴스 범위
2262
2262
 
2263
2263
  매 요청마다, 애플리케이션 클래스의 새 인스턴스가 생성되고 모든 핸들러 블록은 그 범위 내에서 실행된다.
2264
- 이 범위 내에서 여러분은 `request` 와 `session` 객체에 접근하거나
2264
+ 이 범위 내에서 여러분은 `request` 와 `session` 객체에 접근하거나
2265
2265
  `erb` 나 `haml` 같은 렌더링 메서드를 호출할 수 있다.
2266
2266
  요청 범위 내에서 애플리케이션 범위는 `settings` 헬퍼를 통해 접근 가능하다:
2267
2267
 
@@ -2271,12 +2271,12 @@ class MyApp < Sinatra::Base
2271
2271
  get '/define_route/:name' do
2272
2272
  # '/define_route/:name'의 요청 범위
2273
2273
  @value = 42
2274
-
2274
+
2275
2275
  settings.get("/#{params[:name]}") do
2276
2276
  # "/#{params[:name]}"의 요청 범위
2277
2277
  @value # => nil (동일한 요청이 아님)
2278
2278
  end
2279
-
2279
+
2280
2280
  "라우터가 정의됨!"
2281
2281
  end
2282
2282
  end
@@ -2293,7 +2293,7 @@ end
2293
2293
 
2294
2294
  위임 범위(delegation scope)는 메서드를 단순히 클래스 범위로 보낸다(forward).
2295
2295
  그렇지만, 100% 클래스 범위처럼 움직이진 않는데, 왜냐면 클래스 바인딩을 갖지 않기 때문이다.
2296
- 오직 명시적으로 위임(delegation) 표시된 메서드들만 사용 가능하며
2296
+ 오직 명시적으로 위임(delegation) 표시된 메서드들만 사용 가능하며
2297
2297
  또한 클래스 범위와 변수/상태를 공유하지 않는다 (유의: `self`가 다르다).
2298
2298
  `Sinatra::Delegator.delegate :method_name`을 호출하여 메서드 위임을 명시적으로 추가할 수 있다.
2299
2299
 
@@ -2302,7 +2302,7 @@ end
2302
2302
  * 톱레벨 바인딩, `require "sinatra"`를 한 경우
2303
2303
  * `Sinatra::Delegator` 믹스인으로 확장된 객체
2304
2304
 
2305
- 직접 코드를 살펴보길 바란다:
2305
+ 직접 코드를 살펴보길 바란다:
2306
2306
  [Sinatra::Delegator 믹스인](https://github.com/sinatra/sinatra/blob/ca06364/lib/sinatra/base.rb#L1609-1633)
2307
2307
  코드는 [메인 객체를 확장한 것](https://github.com/sinatra/sinatra/blob/ca06364/lib/sinatra/main.rb#L28-30)이다.
2308
2308
 
@@ -2331,7 +2331,7 @@ ruby myapp.rb [-h] [-x] [-e ENVIRONMENT] [-p PORT] [-o HOST] [-s HANDLER]
2331
2331
 
2332
2332
  <dl>
2333
2333
  <dt> Ruby 1.8.7 </dt>
2334
- <dd>1.8.7은 완전하게 지원되지만, 꼭 그래야할 특별한 이유가 없다면,
2334
+ <dd>1.8.7은 완전하게 지원되지만, 꼭 그래야할 특별한 이유가 없다면,
2335
2335
  1.9.2로 업그레이드하거나 또는 JRuby나 Rubinius로 전환할 것을 권장한다.
2336
2336
  1.8.7에 대한 지원은 Sinatra 2.0과 Ruby 2.0 이전에는 중단되지 않을 것이다.
2337
2337
  또한 그때도, 우리는 계속 지원할 것이다.
@@ -2349,7 +2349,7 @@ Ruby 1.9.4/2.0 릴리스까지는 적어도 지원을 계속할 것이며,
2349
2349
  </dd>
2350
2350
  <dt> Ruby 1.9.3 </dt>
2351
2351
  <dd>1.9.3은 완전하게 지원된다. 그렇지만 프로덕션에서의 사용은
2352
- 보다 상위의 패치 레벨이 릴리스될 때까지 기다리길 권장한다(현재는 p0).
2352
+ 보다 상위의 패치 레벨이 릴리스될 때까지 기다리길 권장한다(현재는 p0).
2353
2353
  이전 버전에서 1.9.3으로 전환할 경우 모든 세션이 무효화된다는 점을 유의하라.
2354
2354
 
2355
2355
  </dd>
@@ -2369,7 +2369,7 @@ JRuby의 C 확장 지원은 아직 실험 단계이며, RDiscount, Redcarpet 및
2369
2369
 
2370
2370
  또한 우리는 새로 나오는 루비 버전을 주시한다.
2371
2371
 
2372
- 다음 루비 구현체들은 공식적으로 지원하지 않지만
2372
+ 다음 루비 구현체들은 공식적으로 지원하지 않지만
2373
2373
  여전히 Sinatra를 실행할 수 있는 것으로 알려져 있다:
2374
2374
 
2375
2375
  * JRuby와 Rubinius 예전 버전
@@ -2381,17 +2381,17 @@ JRuby의 C 확장 지원은 아직 실험 단계이며, RDiscount, Redcarpet 및
2381
2381
  지원되는 플랫폼에서는 그러지 않을 경우, 우리의 문제가 아니라 그쪽의 문제로 간주한다는 뜻이다.
2382
2382
 
2383
2383
  또한 우리는 CI를 ruby-head (곧 나올 2.0.0) 과 1.9.4 브랜치에 맞춰 실행하지만,
2384
- 계속해서 변하고 있기 때문에 아무 것도 보장할 수는 없다.
2384
+ 계속해서 변하고 있기 때문에 아무 것도 보장할 수는 없다.
2385
2385
  1.9.4p0와 2.0.0p0가 지원되길 기대한다.
2386
2386
 
2387
2387
  Sinatra는 선택한 루비 구현체가 지원하는 어떠한 운영체제에서도 작동해야 한다.
2388
2388
 
2389
- 현재 Cardinal, SmallRuby, BlueRuby 또는 1.8.7 이전의 루비 버전에서는
2389
+ 현재 Cardinal, SmallRuby, BlueRuby 또는 1.8.7 이전의 루비 버전에서는
2390
2390
  Sinatra를 실행할 수 없을 것이다.
2391
2391
 
2392
2392
  ## 최신(The Bleeding Edge)
2393
2393
 
2394
- Sinatra의 가장 최근 코드를 사용하고자 한다면,
2394
+ Sinatra의 가장 최근 코드를 사용하고자 한다면,
2395
2395
  여러분 애플리케이션을 마스터 브랜치에 맞춰 실행하면 되지만, 덜 안정적일 것임에 분명하다.
2396
2396
 
2397
2397
  또한 우리는 가끔 사전배포(prerelease) 젬을 푸시하기 때문에, 다음과 같이 할 수 있다
@@ -2404,7 +2404,7 @@ gem install sinatra --pre
2404
2404
 
2405
2405
  ### Bundler를 사용하여
2406
2406
 
2407
- 여러분 애플리케이션을 최신 Sinatra로 실행하고자 한다면,
2407
+ 여러분 애플리케이션을 최신 Sinatra로 실행하고자 한다면,
2408
2408
  [Bundler](http://gembundler.com/)를 사용할 것을 권장한다.
2409
2409
 
2410
2410
  우선, 아직 설치하지 않았다면 bundler를 설치한다:
@@ -2425,7 +2425,7 @@ gem 'activerecord', '~> 3.0' # 아마도 ActiveRecord 3.x도 필요할 것
2425
2425
  ```
2426
2426
 
2427
2427
  이 속에 애플리케이션의 모든 의존관계를 나열해야 함에 유의하자.
2428
- 그렇지만, Sinatra가 직접적인 의존관계에 있는 것들 (Rack과 Tilt)은
2428
+ 그렇지만, Sinatra가 직접적인 의존관계에 있는 것들 (Rack과 Tilt)은
2429
2429
  Bundler가 자동으로 추출하여 추가할 것이다.
2430
2430
 
2431
2431
  이제 여러분은 다음과 같이 앱을 실행할 수 있다:
@@ -2481,7 +2481,7 @@ SemVer 및 SemVerTag 둘 다 해당된.
2481
2481
  * [이슈 트래커](http://github.com/sinatra/sinatra/issues)
2482
2482
  * [트위터](http://twitter.com/sinatra)
2483
2483
  * [Mailing List](http://groups.google.com/group/sinatrarb/topics)
2484
- * [IRC: #sinatra](irc://chat.freenode.net/#sinatra) http://freenode.net
2484
+ * [IRC: #sinatra](irc://chat.freenode.net/#sinatra) http://freenode.net
2485
2485
  * [Sinatra Book](http://sinatra-book.gittr.com) Cookbook 튜토리얼
2486
2486
  * [Sinatra Recipes](http://recipes.sinatrarb.com/) 커뮤니티가 만드는 레시피
2487
2487
  * http://rubydoc.info에 있는 [최종 릴리스](http://rubydoc.info/gems/sinatra)