gin 1.1.1 → 1.1.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e20fe42824dc7458a51fe9ea96b09f99c679529a
4
+ data.tar.gz: f44971595636a3b44b0a5d0c8c53b29b85b10506
5
+ SHA512:
6
+ metadata.gz: bf9d2e7fd479e59041b0ff4da58526b5e6e9ea95d9b2ab93eb2a824f99a2bcf87894d030d8e2fc382e21961bf2b154309793ced6afca92881d209a5c672423b6
7
+ data.tar.gz: 6ce807b68799d40b56c41c3ca4fa4681e6271dcca623e3fbf22b47533492cd82def91f95139b6ed2cc93e9442f4e1ec94b854884be1e35668fbbb4d9d1a11dca
@@ -1,3 +1,11 @@
1
+ === 1.1.2 / 2013-07-19
2
+
3
+ * Minor Enhancements
4
+ * User the Ruby Logger instead of $stdout as the default logger
5
+
6
+ * Bugfixes
7
+ * Fixes to the RWLock which made reads blocking in some instances
8
+
1
9
  === 1.1.1 / 2013-07-11
2
10
 
3
11
  * Bugfixes
data/TODO.rdoc CHANGED
@@ -1,7 +1,4 @@
1
- - Extend router functionality to allow multiple %s per node.
2
-
3
1
  = Maybe
4
- - Custom environment names for dev, test, stage, and prod
5
2
  - Find a better default non-locking logger
6
3
  - Bundler-runtime-free
7
4
  - script/server equivalent
data/lib/gin.rb CHANGED
@@ -1,8 +1,9 @@
1
+ require 'logger'
1
2
  require 'rack'
2
3
  require 'tilt'
3
4
 
4
5
  class Gin
5
- VERSION = '1.1.1'
6
+ VERSION = '1.1.2'
6
7
 
7
8
  LIB_DIR = File.expand_path("..", __FILE__) #:nodoc:
8
9
  PUBLIC_DIR = File.expand_path("../../public/", __FILE__) #:nodoc:
@@ -52,7 +52,7 @@ class Gin::App
52
52
  @options[:environment] = ENV['RACK_ENV'] || ENV_DEV
53
53
  @options[:error_delegate] = Gin::Controller
54
54
  @options[:middleware] = []
55
- @options[:logger] = $stdout
55
+ @options[:logger] = Logger.new($stdout)
56
56
  @options[:router] = Gin::Router.new
57
57
  @options[:session_secret] = SESSION_SECRET
58
58
  @options[:protection] = false
@@ -47,7 +47,7 @@ class Gin::Config
47
47
 
48
48
  def initialize environment, opts={}
49
49
  @environment = environment
50
- @logger = opts[:logger] || $stdout
50
+ @logger = opts[:logger] || Logger.new($stdout)
51
51
  @ttl = opts[:ttl] || false
52
52
  @dir = opts[:dir] || "./config"
53
53
 
@@ -34,7 +34,7 @@ class Gin::RWLock
34
34
  class WriteTimeout < StandardError; end
35
35
 
36
36
  TIMEOUT_MSG = "Took too long to lock all config mutexes. \
37
- Try increasing the value of Config#write_timeout."
37
+ Try increasing the value of write_timeout."
38
38
 
39
39
  # The amount of time to wait for writer threads to get all the read locks.
40
40
  attr_accessor :write_timeout
@@ -45,30 +45,24 @@ Try increasing the value of Config#write_timeout."
45
45
  @write_timeout = write_timeout || 0.05
46
46
  @mutex_id = :"rwlock_#{self.object_id}"
47
47
  @mutex_owned_id = :"#{@mutex_id}_owned"
48
+ @rmutex_owned_id = :"#{@mutex_id}_r_owned"
48
49
  end
49
50
 
50
51
 
51
52
  def write_sync
52
53
  lock_mutexes = []
53
- relock_curr = false
54
54
  was_locked = Thread.current[@mutex_owned_id]
55
55
 
56
- curr_mutex = read_mutex
57
-
58
56
  write_mutex.lock unless was_locked
59
57
  Thread.current[@mutex_owned_id] = true
60
58
 
61
- # Protect against same-thread deadlocks
62
- if curr_mutex && curr_mutex.locked?
63
- relock_curr = curr_mutex.unlock rescue false
64
- end
65
-
66
59
  start = Time.now
67
60
 
68
61
  Thread.list.each do |t|
69
62
  mutex = t[@mutex_id]
70
- next if !mutex || !relock_curr && t == Thread.current
63
+ next if !mutex || t == Thread.current
71
64
  until mutex.try_lock
65
+ Thread.pass
72
66
  raise WriteTimeout, TIMEOUT_MSG if Time.now - start > @write_timeout
73
67
  end
74
68
  lock_mutexes << mutex
@@ -77,7 +71,6 @@ Try increasing the value of Config#write_timeout."
77
71
  yield
78
72
  ensure
79
73
  lock_mutexes.each(&:unlock)
80
- curr_mutex.try_lock if relock_curr
81
74
  unless was_locked
82
75
  Thread.current[@mutex_owned_id] = false
83
76
  write_mutex.unlock
@@ -86,11 +79,17 @@ Try increasing the value of Config#write_timeout."
86
79
 
87
80
 
88
81
  def read_sync
89
- was_locked = read_mutex.locked?
90
- read_mutex.lock unless was_locked
82
+ was_locked = Thread.current[@rmutex_owned_id]
83
+ unless was_locked
84
+ read_mutex.lock
85
+ Thread.current[@rmutex_owned_id] = true
86
+ end
91
87
  yield
92
88
  ensure
93
- read_mutex.unlock if was_locked
89
+ if !was_locked
90
+ Thread.current[@rmutex_owned_id] = false
91
+ read_mutex.unlock
92
+ end
94
93
  end
95
94
 
96
95
 
@@ -104,6 +103,10 @@ Try increasing the value of Config#write_timeout."
104
103
 
105
104
  def read_mutex
106
105
  return Thread.current[@mutex_id] if Thread.current[@mutex_id]
107
- @wmutex.synchronize{ Thread.current[@mutex_id] = Mutex.new }
106
+ if Thread.current[@mutex_owned_id]
107
+ Thread.current[@mutex_id] = Mutex.new
108
+ else
109
+ @wmutex.synchronize{ Thread.current[@mutex_id] = Mutex.new }
110
+ end
108
111
  end
109
112
  end
@@ -210,7 +210,7 @@ module Gin::Test::Assertions
210
210
 
211
211
 
212
212
  ##
213
- # Checks that a specific layout was use to render the response.
213
+ # Checks that a specific layout was used to render the response.
214
214
 
215
215
  def assert_layout layout, msg=nil
216
216
  path = @controller.template_path(layout, true)
@@ -314,11 +314,6 @@ Run the following command and try again: gem install #{gemname}"
314
314
  end
315
315
 
316
316
 
317
- def correct_302_redirect?
318
- self.class.correct_302_redirect?
319
- end
320
-
321
-
322
317
  ##
323
318
  # The App instance being used for the requests.
324
319
 
@@ -17,13 +17,18 @@ class CacheTest < Test::Unit::TestCase
17
17
 
18
18
  def test_write_thread_safe
19
19
  @cache[:num] = 0
20
+ @mutex = Mutex.new
21
+ @num = 0
22
+
20
23
  threads = []
21
- 10.times do
24
+ 30.times do
22
25
  threads << Thread.new{ @cache[:num] += 1 }
23
26
  end
24
- threads.each(&:join)
27
+ threads.each do |t|
28
+ t.join
29
+ end
25
30
 
26
- assert_equal 10, @cache[:num]
31
+ assert_equal 30, @cache[:num]
27
32
  end
28
33
 
29
34
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
5
- prerelease:
4
+ version: 1.1.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jeremie Castagna
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-11 00:00:00.000000000 Z
11
+ date: 2013-07-19 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rack-protection
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: tilt
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,23 +55,20 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rdoc
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
69
- version: '3.10'
61
+ version: '4.0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
77
- version: '3.10'
68
+ version: '4.0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: nokogiri
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: plist
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: bson
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - ~>
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - ~>
124
109
  - !ruby/object:Gem::Version
@@ -126,22 +111,20 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: hoe
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
133
- version: '3.5'
117
+ version: '3.6'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ~>
140
123
  - !ruby/object:Gem::Version
141
- version: '3.5'
142
- description: ! 'Gin is a small Ruby web framework, built on Rack, which borrows from
143
-
144
- Sinatra expressiveness, and targets larger applications.'
124
+ version: '3.6'
125
+ description: |-
126
+ Gin is a small Ruby web framework, built on Rack, which borrows from
127
+ Sinatra expressiveness, and targets larger applications.
145
128
  email:
146
129
  - yaksnrainbows@gmail.com
147
130
  executables:
@@ -211,6 +194,7 @@ files:
211
194
  - .gemtest
212
195
  homepage: http://yaks.me/gin
213
196
  licenses: []
197
+ metadata: {}
214
198
  post_install_message:
215
199
  rdoc_options:
216
200
  - --main
@@ -218,25 +202,20 @@ rdoc_options:
218
202
  require_paths:
219
203
  - lib
220
204
  required_ruby_version: !ruby/object:Gem::Requirement
221
- none: false
222
205
  requirements:
223
- - - ! '>='
206
+ - - '>='
224
207
  - !ruby/object:Gem::Version
225
208
  version: '0'
226
- segments:
227
- - 0
228
- hash: 3379788584365895606
229
209
  required_rubygems_version: !ruby/object:Gem::Requirement
230
- none: false
231
210
  requirements:
232
- - - ! '>='
211
+ - - '>='
233
212
  - !ruby/object:Gem::Version
234
213
  version: '0'
235
214
  requirements: []
236
215
  rubyforge_project: gin
237
- rubygems_version: 1.8.24
216
+ rubygems_version: 2.0.2
238
217
  signing_key:
239
- specification_version: 3
218
+ specification_version: 4
240
219
  summary: Gin is a small Ruby web framework, built on Rack, which borrows from Sinatra
241
220
  expressiveness, and targets larger applications.
242
221
  test_files: