radiospiel-app 0.1.0 → 0.1.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.
data/Gemfile CHANGED
@@ -14,6 +14,12 @@ gem "htmlentities"
14
14
  group :development do
15
15
  gem "bundler"
16
16
  gem "jeweler"
17
+
18
+ # vcr stuff: this needs psych or else will crash
19
+ gem "vcr"
20
+ gem "webmock"
21
+ gem "psych"
22
+
17
23
  gem 'simplecov', :require => false
18
24
  gem "ruby-debug19"
19
25
  end
data/Gemfile.lock CHANGED
@@ -1,8 +1,10 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ addressable (2.2.7)
4
5
  archive-tar-minitar (0.5.2)
5
6
  columnize (0.3.6)
7
+ crack (0.3.1)
6
8
  git (1.2.5)
7
9
  htmlentities (4.3.1)
8
10
  jeweler (1.8.3)
@@ -18,6 +20,7 @@ GEM
18
20
  sqlite3
19
21
  multi_json (1.2.0)
20
22
  pg (0.13.2)
23
+ psych (1.3.1)
21
24
  rake (0.9.2.2)
22
25
  rdoc (3.12)
23
26
  json (~> 1.4)
@@ -37,6 +40,10 @@ GEM
37
40
  simplecov-html (~> 0.5.3)
38
41
  simplecov-html (0.5.3)
39
42
  sqlite3 (1.3.5)
43
+ vcr (2.0.1)
44
+ webmock (1.8.5)
45
+ addressable (>= 2.2.7)
46
+ crack (>= 0.1.7)
40
47
 
41
48
  PLATFORMS
42
49
  ruby
@@ -47,7 +54,10 @@ DEPENDENCIES
47
54
  jeweler
48
55
  micro_sql
49
56
  pg
57
+ psych
50
58
  redis
51
59
  ruby-debug19
52
60
  simplecov
53
61
  sqlite3
62
+ vcr
63
+ webmock
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/app.tmproj CHANGED
@@ -12,9 +12,7 @@
12
12
  <key>name</key>
13
13
  <string>app</string>
14
14
  <key>regexFolderFilter</key>
15
- <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
16
- <key>selected</key>
17
- <true/>
15
+ <string>!.*/(\.[^/]*|CVS|_darcs|coverage|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
18
16
  <key>sourceDirectory</key>
19
17
  <string></string>
20
18
  </dict>
data/lib/app.rb CHANGED
@@ -7,3 +7,7 @@ end
7
7
  Dir.glob("#{File.dirname(__FILE__)}/app/*.rb").sort.each do |file|
8
8
  load file
9
9
  end
10
+
11
+ Dir.glob("#{File.dirname(__FILE__)}/extensions/*.rb").sort.each do |file|
12
+ load file
13
+ end
@@ -48,3 +48,12 @@ class String
48
48
  end
49
49
  end
50
50
 
51
+ class String
52
+ def starts_with?(other)
53
+ length >= other.length && self[0, other.length] == other
54
+ end
55
+
56
+ def ends_with?(other)
57
+ length >= other.length && self[length - other.length .. -1] == other
58
+ end
59
+ end
@@ -11,12 +11,28 @@ module Http
11
11
  # the default expiration time for get requests.
12
12
  attr :max_age
13
13
 
14
- def get(url, max_age = HTTP.max_age)
15
- LOGGER.benchmark("[GET] #{url}", :minimum => 20) do
16
- Cache.cached(url, max_age) do
17
- uri = URI(url)
18
- Net::HTTP.get(uri)
19
- end
14
+ def get(url, max_age = self.max_age)
15
+ App.logger.benchmark("[GET] #{url}", :minimum => 20) do
16
+ App.cached(url, max_age) do get_(url) end
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def get_(uri_str, limit = 10)
23
+ raise 'too many redirections' if limit == 0
24
+
25
+ response = Net::HTTP.get_response(URI(uri_str))
26
+
27
+ case response
28
+ when Net::HTTPSuccess then
29
+ response.body
30
+ when Net::HTTPRedirection then
31
+ location = response['location']
32
+ App.logger.debug "redirected to #{location}"
33
+ get_(location, limit - 1)
34
+ else
35
+ response.value
20
36
  end
21
37
  end
22
38
  end
@@ -0,0 +1,110 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "radiospiel-app"
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["radiospiel"]
12
+ s.date = "2012-04-03"
13
+ s.description = "Some basics that your application could benefit from."
14
+ s.email = "eno@open-lab.org"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "app.gemspec",
28
+ "app.tmproj",
29
+ "config/app.yml",
30
+ "lib/app.rb",
31
+ "lib/app/app.rb",
32
+ "lib/app/app/cache.rb",
33
+ "lib/app/app/config.rb",
34
+ "lib/app/app/logger.rb",
35
+ "lib/app/app/root.rb",
36
+ "lib/core-extensions/benchmark-logger.rb",
37
+ "lib/core-extensions/cgi_ext.rb",
38
+ "lib/core-extensions/object_ext.rb",
39
+ "lib/core-extensions/string_ext.rb",
40
+ "lib/core-extensions/string_without_accents.rb",
41
+ "lib/core-extensions/tls.rb",
42
+ "lib/core-extensions/uids.rb",
43
+ "lib/extensions/http.rb",
44
+ "lib/extensions/zz_geocoder.rb",
45
+ "radiospiel-app.gemspec",
46
+ "script/watchr",
47
+ "test/app_test.rb",
48
+ "test/cache_test.rb",
49
+ "test/cgi_ext_test.rb",
50
+ "test/config.yml",
51
+ "test/config_test.rb",
52
+ "test/fixtures-vcr/http_test.yml",
53
+ "test/helper.rb",
54
+ "test/http_test.rb",
55
+ "test/string_ext_test.rb",
56
+ "test/tls_test.rb",
57
+ "test/uid_test.rb"
58
+ ]
59
+ s.homepage = "http://github.com/radiospiel/app"
60
+ s.licenses = ["MIT"]
61
+ s.require_paths = ["lib"]
62
+ s.rubygems_version = "1.8.17"
63
+ s.summary = "Application base code"
64
+
65
+ if s.respond_to? :specification_version then
66
+ s.specification_version = 3
67
+
68
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
69
+ s.add_runtime_dependency(%q<pg>, [">= 0"])
70
+ s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
71
+ s.add_runtime_dependency(%q<redis>, [">= 0"])
72
+ s.add_runtime_dependency(%q<micro_sql>, [">= 0"])
73
+ s.add_runtime_dependency(%q<htmlentities>, [">= 0"])
74
+ s.add_development_dependency(%q<bundler>, [">= 0"])
75
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
76
+ s.add_development_dependency(%q<vcr>, [">= 0"])
77
+ s.add_development_dependency(%q<webmock>, [">= 0"])
78
+ s.add_development_dependency(%q<psych>, [">= 0"])
79
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
80
+ s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
81
+ else
82
+ s.add_dependency(%q<pg>, [">= 0"])
83
+ s.add_dependency(%q<sqlite3>, [">= 0"])
84
+ s.add_dependency(%q<redis>, [">= 0"])
85
+ s.add_dependency(%q<micro_sql>, [">= 0"])
86
+ s.add_dependency(%q<htmlentities>, [">= 0"])
87
+ s.add_dependency(%q<bundler>, [">= 0"])
88
+ s.add_dependency(%q<jeweler>, [">= 0"])
89
+ s.add_dependency(%q<vcr>, [">= 0"])
90
+ s.add_dependency(%q<webmock>, [">= 0"])
91
+ s.add_dependency(%q<psych>, [">= 0"])
92
+ s.add_dependency(%q<simplecov>, [">= 0"])
93
+ s.add_dependency(%q<ruby-debug19>, [">= 0"])
94
+ end
95
+ else
96
+ s.add_dependency(%q<pg>, [">= 0"])
97
+ s.add_dependency(%q<sqlite3>, [">= 0"])
98
+ s.add_dependency(%q<redis>, [">= 0"])
99
+ s.add_dependency(%q<micro_sql>, [">= 0"])
100
+ s.add_dependency(%q<htmlentities>, [">= 0"])
101
+ s.add_dependency(%q<bundler>, [">= 0"])
102
+ s.add_dependency(%q<jeweler>, [">= 0"])
103
+ s.add_dependency(%q<vcr>, [">= 0"])
104
+ s.add_dependency(%q<webmock>, [">= 0"])
105
+ s.add_dependency(%q<psych>, [">= 0"])
106
+ s.add_dependency(%q<simplecov>, [">= 0"])
107
+ s.add_dependency(%q<ruby-debug19>, [">= 0"])
108
+ end
109
+ end
110
+
data/test/cache_test.rb CHANGED
@@ -2,27 +2,14 @@ require 'helper'
2
2
 
3
3
  class CacheTest < Test::Unit::TestCase
4
4
  def test_caching
5
- unless App::Cache.store
6
- App.logger.warn "No cache configed. Skipping cache tests"
7
- return
8
- end
9
-
10
5
  App::Cache.clear
11
6
 
12
7
  done = 0
13
- r = App.cached("six") do
14
- done += 1
15
- 2 * 3
16
- end
17
8
 
18
- assert_equal(6, r)
9
+ r = App.cached("six") { done += 1; 2 * 3 }
10
+ assert_equal([1, 6], [done, r])
19
11
 
20
- r = App.cached("six") do
21
- done += 1
22
- 2 * 3
23
- end
24
-
25
- assert_equal(1, done)
26
- assert_equal(6, r)
12
+ r = App.cached("six") { done += 1; 2 * 3 }
13
+ assert_equal([1, 6], [done, r])
27
14
  end
28
15
  end
@@ -0,0 +1,389 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://google.de/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - ! '*/*'
12
+ user-agent:
13
+ - Ruby
14
+ response:
15
+ status:
16
+ code: 301
17
+ message: Moved Permanently
18
+ headers:
19
+ !binary "bG9jYXRpb24=":
20
+ - !binary |-
21
+ aHR0cDovL3d3dy5nb29nbGUuZGUv
22
+ !binary "Y29udGVudC10eXBl":
23
+ - !binary |-
24
+ dGV4dC9odG1sOyBjaGFyc2V0PVVURi04
25
+ !binary "ZGF0ZQ==":
26
+ - !binary |-
27
+ VHVlLCAwMyBBcHIgMjAxMiAxMToxMTowNiBHTVQ=
28
+ !binary "ZXhwaXJlcw==":
29
+ - !binary |-
30
+ VGh1LCAwMyBNYXkgMjAxMiAxMToxMTowNiBHTVQ=
31
+ !binary "Y2FjaGUtY29udHJvbA==":
32
+ - !binary |-
33
+ cHVibGljLCBtYXgtYWdlPTI1OTIwMDA=
34
+ !binary "c2VydmVy":
35
+ - !binary |-
36
+ Z3dz
37
+ !binary "Y29udGVudC1sZW5ndGg=":
38
+ - !binary |-
39
+ MjE4
40
+ !binary "eC14c3MtcHJvdGVjdGlvbg==":
41
+ - !binary |-
42
+ MTsgbW9kZT1ibG9jaw==
43
+ !binary "eC1mcmFtZS1vcHRpb25z":
44
+ - !binary |-
45
+ U0FNRU9SSUdJTg==
46
+ body:
47
+ encoding: US-ASCII
48
+ string: ! "<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n<TITLE>301
49
+ Moved</TITLE></HEAD><BODY>\n<H1>301 Moved</H1>\nThe document has moved\n<A
50
+ HREF=\"http://www.google.de/\">here</A>.\r\n</BODY></HTML>\r\n"
51
+ http_version: '1.1'
52
+ recorded_at: Tue, 03 Apr 2012 11:11:06 GMT
53
+ - request:
54
+ method: get
55
+ uri: http://www.google.de/
56
+ body:
57
+ encoding: US-ASCII
58
+ string: ''
59
+ headers:
60
+ accept:
61
+ - ! '*/*'
62
+ user-agent:
63
+ - Ruby
64
+ response:
65
+ status:
66
+ code: 200
67
+ message: OK
68
+ headers:
69
+ !binary "ZGF0ZQ==":
70
+ - !binary |-
71
+ VHVlLCAwMyBBcHIgMjAxMiAxMToxMTowNyBHTVQ=
72
+ !binary "ZXhwaXJlcw==":
73
+ - !binary |-
74
+ LTE=
75
+ !binary "Y2FjaGUtY29udHJvbA==":
76
+ - !binary |-
77
+ cHJpdmF0ZSwgbWF4LWFnZT0w
78
+ !binary "Y29udGVudC10eXBl":
79
+ - !binary |-
80
+ dGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTE=
81
+ !binary "c2V0LWNvb2tpZQ==":
82
+ - !binary |-
83
+ UFJFRj1JRD0wODQ1ZWFlMzMzOGQwZmI5OkZGPTA6VE09MTMzMzQ1MTQ2NzpM
84
+ TT0xMzMzNDUxNDY3OlM9cEtDQ0liOVZmSmM5SnY1ZzsgZXhwaXJlcz1UaHUs
85
+ IDAzLUFwci0yMDE0IDExOjExOjA3IEdNVDsgcGF0aD0vOyBkb21haW49Lmdv
86
+ b2dsZS5kZQ==
87
+ - !binary |-
88
+ TklEPTU4PVFZd05pTUlUbDMyQVdaMTRwQzNQdVhfeVZSczZEMU9NLVl2dkUt
89
+ WDd5QnNjeXR2aU9XeFlCU3hlQ19GbHZxbm5uYS1qLVh1aVdyS0tUU2plQnVU
90
+ cmhfU1NzSE94QVc2MmJtbV9sSWVuWnFlY05wUmRQd2xkYVJWaHNfTUhSbW9n
91
+ OyBleHBpcmVzPVdlZCwgMDMtT2N0LTIwMTIgMTE6MTE6MDcgR01UOyBwYXRo
92
+ PS87IGRvbWFpbj0uZ29vZ2xlLmRlOyBIdHRwT25seQ==
93
+ !binary "cDNw":
94
+ - !binary |-
95
+ Q1A9IlRoaXMgaXMgbm90IGEgUDNQIHBvbGljeSEgU2VlIGh0dHA6Ly93d3cu
96
+ Z29vZ2xlLmNvbS9zdXBwb3J0L2FjY291bnRzL2Jpbi9hbnN3ZXIucHk/aGw9
97
+ ZW4mYW5zd2VyPTE1MTY1NyBmb3IgbW9yZSBpbmZvLiI=
98
+ !binary "c2VydmVy":
99
+ - !binary |-
100
+ Z3dz
101
+ !binary "eC14c3MtcHJvdGVjdGlvbg==":
102
+ - !binary |-
103
+ MTsgbW9kZT1ibG9jaw==
104
+ !binary "eC1mcmFtZS1vcHRpb25z":
105
+ - !binary |-
106
+ U0FNRU9SSUdJTg==
107
+ !binary "dHJhbnNmZXItZW5jb2Rpbmc=":
108
+ - !binary |-
109
+ Y2h1bmtlZA==
110
+ body:
111
+ encoding: ASCII-8BIT
112
+ string: !binary |-
113
+ PCFkb2N0eXBlIGh0bWw+PGh0bWwgaXRlbXNjb3BlIGl0ZW10eXBlPSJodHRw
114
+ Oi8vc2NoZW1hLm9yZy9XZWJQYWdlIj48aGVhZD48bWV0YSBodHRwLWVxdWl2
115
+ PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1J
116
+ U08tODg1OS0xIj48bWV0YSBpdGVtcHJvcD0iaW1hZ2UiIGNvbnRlbnQ9Ii9p
117
+ bWFnZXMvZ29vZ2xlX2Zhdmljb25fMTI4LnBuZyI+PHRpdGxlPkdvb2dsZTwv
118
+ dGl0bGU+PHNjcmlwdD53aW5kb3cuZ29vZ2xlPXtrRUk6Ink5cDZUOXo3QVlI
119
+ MnNnYWU3ZkNrQ0EiLGdldEVJOmZ1bmN0aW9uKGEpe3ZhciBiO3doaWxlKGEm
120
+ JiEoYS5nZXRBdHRyaWJ1dGUmJihiPWEuZ2V0QXR0cmlidXRlKCJlaWQiKSkp
121
+ KWE9YS5wYXJlbnROb2RlO3JldHVybiBifHxnb29nbGUua0VJfSxodHRwczpm
122
+ dW5jdGlvbigpe3JldHVybiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w9PSJo
123
+ dHRwczoifSxrRVhQSToiMzY2ODMsMzY4ODgsMzY5MzQsMzc1MDEsMzc1NzMs
124
+ Mzc2NDYsMzc2NzUsMzc2ODIsMzc4NTgsMzc5NTIsMzc5OTQsMzgxMDgiLGtD
125
+ U0k6e2U6IjM2NjgzLDM2ODg4LDM2OTM0LDM3NTAxLDM3NTczLDM3NjQ2LDM3
126
+ Njc1LDM3NjgyLDM3ODU4LDM3OTUyLDM3OTk0LDM4MTA4IixlaToieTlwNlQ5
127
+ ejdBWUgyc2dhZTdmQ2tDQSJ9LGF1dGh1c2VyOjAsCm1sOmZ1bmN0aW9uKCl7
128
+ fSxrSEw6ImRlIix0aW1lOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5n
129
+ ZXRUaW1lKCl9LGxvZzpmdW5jdGlvbihhLGIsYyxlKXt2YXIgZD1uZXcgSW1h
130
+ Z2UsaD1nb29nbGUsaT1oLmxjLGY9aC5saSxqPSIiO2Qub25lcnJvcj0oZC5v
131
+ bmxvYWQ9KGQub25hYm9ydD1mdW5jdGlvbigpe2RlbGV0ZSBpW2ZdfSkpO2lb
132
+ Zl09ZDtpZighYyYmYi5zZWFyY2goIiZlaT0iKT09LTEpaj0iJmVpPSIrZ29v
133
+ Z2xlLmdldEVJKGUpO3ZhciBnPWN8fCIvZ2VuXzIwND9hdHlwPWkmY3Q9Iith
134
+ KyImY2FkPSIrYitqKyImeng9Iitnb29nbGUudGltZSgpOwp2YXIgaz0vXmh0
135
+ dHA6L2k7aWYoay50ZXN0KGcpJiZnb29nbGUuaHR0cHMoKSl7Z29vZ2xlLm1s
136
+ KG5ldyBFcnJvcigiR0xNTSIpLGZhbHNlLHtzcmM6Z30pO2RlbGV0ZSBpW2Zd
137
+ O3JldHVybn1kLnNyYz1nO2gubGk9ZisxfSxsYzpbXSxsaTowLFRvb2xiZWx0
138
+ Ont9LHk6e30seDpmdW5jdGlvbihhLGIpe2dvb2dsZS55W2EuaWRdPVthLGJd
139
+ O3JldHVybiBmYWxzZX19Owp3aW5kb3cuZ29vZ2xlLnNuPSJ3ZWJocCI7d2lu
140
+ ZG93Lmdvb2dsZS50aW1lcnM9e307d2luZG93Lmdvb2dsZS5zdGFydFRpY2s9
141
+ ZnVuY3Rpb24oYSxiKXt3aW5kb3cuZ29vZ2xlLnRpbWVyc1thXT17dDp7c3Rh
142
+ cnQ6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LGJmcjohKCFiKX19O3dpbmRvdy5n
143
+ b29nbGUudGljaz1mdW5jdGlvbihhLGIsYyl7aWYoIXdpbmRvdy5nb29nbGUu
144
+ dGltZXJzW2FdKWdvb2dsZS5zdGFydFRpY2soYSk7d2luZG93Lmdvb2dsZS50
145
+ aW1lcnNbYV0udFtiXT1jfHwobmV3IERhdGUpLmdldFRpbWUoKX07Z29vZ2xl
146
+ LnN0YXJ0VGljaygibG9hZCIsdHJ1ZSk7dHJ5e31jYXRjaCh1KXt9CnZhciBf
147
+ Z2p3bD1sb2NhdGlvbjtmdW5jdGlvbiBfZ2p1Yygpe3ZhciBlPV9nandsLmhy
148
+ ZWYuaW5kZXhPZigiIyIpO2lmKGU+PTApe3ZhciBhPV9nandsLmhyZWYuc3Vi
149
+ c3RyaW5nKGUpO2lmKGEuaW5kZXhPZigiJnE9Iik+MHx8YS5pbmRleE9mKCIj
150
+ cT0iKT49MCl7YT1hLnN1YnN0cmluZygxKTtpZihhLmluZGV4T2YoIiMiKT09
151
+ LTEpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7KXt2YXIgZD1jO2lmKGEuY2hh
152
+ ckF0KGQpPT0iJiIpKytkO3ZhciBiPWEuaW5kZXhPZigiJiIsZCk7aWYoYj09
153
+ LTEpYj1hLmxlbmd0aDt2YXIgZj1hLnN1YnN0cmluZyhkLGIpO2lmKGYuaW5k
154
+ ZXhPZigiZnA9Iik9PTApe2E9YS5zdWJzdHJpbmcoMCxjKSthLnN1YnN0cmlu
155
+ ZyhiLGEubGVuZ3RoKTtiPWN9ZWxzZSBpZihmPT0iY2FkPWgiKXJldHVybiAw
156
+ O2M9Yn1fZ2p3bC5ocmVmPSIvc2VhcmNoPyIrYSsiJmNhZD1oIjtyZXR1cm4g
157
+ MX19fXJldHVybiAwfWZ1bmN0aW9uIF9nanAoKXshKHdpbmRvdy5fZ2p3bC5o
158
+ YXNoJiYKd2luZG93Ll9nanVjKCkpJiZzZXRUaW1lb3V0KF9nanAsNTAwKX07
159
+ CndpbmRvdy5fZ2pwICYmIF9nanAoKTwvc2NyaXB0PjxzdHlsZT4jZ2Jhciwj
160
+ Z3VzZXJ7Zm9udC1zaXplOjEzcHg7cGFkZGluZy10b3A6MXB4ICFpbXBvcnRh
161
+ bnQ7fSNnYmFye2hlaWdodDoyMnB4fSNndXNlcntwYWRkaW5nLWJvdHRvbTo3
162
+ cHggIWltcG9ydGFudDt0ZXh0LWFsaWduOnJpZ2h0fS5nYmgsLmdiZHtib3Jk
163
+ ZXItdG9wOjFweCBzb2xpZCAjYzlkN2YxO2ZvbnQtc2l6ZToxcHh9LmdiaHto
164
+ ZWlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjRweDt3aWR0aDoxMDAl
165
+ fUBtZWRpYSBhbGx7LmdiMXtoZWlnaHQ6MjJweDttYXJnaW4tcmlnaHQ6LjVl
166
+ bTt2ZXJ0aWNhbC1hbGlnbjp0b3B9I2diYXJ7ZmxvYXQ6bGVmdH19YS5nYjEs
167
+ YS5nYjR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSAhaW1wb3J0YW50fWEu
168
+ Z2IxLGEuZ2I0e2NvbG9yOiMwMGMgIWltcG9ydGFudH08L3N0eWxlPjxzdHls
169
+ ZSBpZD1nc3R5bGU+Ym9keXttYXJnaW46MDtvdmVyZmxvdy15OnNjcm9sbH0j
170
+ Z29ne3BhZGRpbmc6M3B4IDhweCAwfXRke2xpbmUtaGVpZ2h0Oi44ZW19Lmdh
171
+ Y19tIHRke2xpbmUtaGVpZ2h0OjE3cHh9Zm9ybXttYXJnaW4tYm90dG9tOjIw
172
+ cHh9Ym9keSx0ZCxhLHAsLmh7Zm9udC1mYW1pbHk6YXJpYWwsc2Fucy1zZXJp
173
+ Zn0uaHtjb2xvcjojMzZjO2ZvbnQtc2l6ZToyMHB4fS5xe2NvbG9yOiMwMGN9
174
+ LnRzIHRke3BhZGRpbmc6MH0udHN7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNl
175
+ fWVte2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHlsZTpub3JtYWx9LmxzdHto
176
+ ZWlnaHQ6MjVweDt3aWR0aDo0OTZweH0uZ3NmaSwubHN0e2ZvbnQ6MThweCBh
177
+ cmlhbCxzYW5zLXNlcmlmfS5nc2Zze2ZvbnQ6MTdweCBhcmlhbCxzYW5zLXNl
178
+ cmlmfS5kc3tkaXNwbGF5Oi1tb3otaW5saW5lLWJveDtkaXNwbGF5OmlubGlu
179
+ ZS1ibG9jazttYXJnaW46M3B4IDAgNHB4O21hcmdpbi1sZWZ0OjRweH1pbnB1
180
+ dHtmb250LWZhbWlseTppbmhlcml0fWEuZ2IxLGEuZ2IyLGEuZ2IzLGEuZ2I0
181
+ e2NvbG9yOiMxMWMgIWltcG9ydGFudH1ib2R5e2JhY2tncm91bmQ6I2ZmZjtj
182
+ b2xvcjpibGFja31he2NvbG9yOiMxMWM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9
183
+ YTpob3ZlcixhOmFjdGl2ZXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5m
184
+ bCBhe2NvbG9yOiMzNmN9YTp2aXNpdGVke2NvbG9yOiM1NTFhOGJ9YS5nYjEs
185
+ YS5nYjR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hLmdiMzpob3Zlcnt0
186
+ ZXh0LWRlY29yYXRpb246bm9uZX0jZ2hlYWQgYS5nYjI6aG92ZXJ7Y29sb3I6
187
+ I2ZmZiFpbXBvcnRhbnR9LnNibGN7cGFkZGluZy10b3A6NXB4fS5zYmxjIGF7
188
+ ZGlzcGxheTpibG9jazttYXJnaW46MnB4IDA7bWFyZ2luLWxlZnQ6MTNweDtm
189
+ b250LXNpemU6MTFweDt9LmxzYmJ7YmFja2dyb3VuZDojZWVlO2JvcmRlcjpz
190
+ b2xpZCAxcHg7Ym9yZGVyLWNvbG9yOiNjY2MgIzk5OSAjOTk5ICNjY2M7aGVp
191
+ Z2h0OjMwcHg7ZGlzcGxheTpibG9ja30uZnRsLCNmbGwgYXtkaXNwbGF5Omlu
192
+ bGluZS1ibG9jazttYXJnaW46MCAxMnB4fS5sc2J7YmFja2dyb3VuZDp1cmwo
193
+ L2ltYWdlcy9zcnByL25hdl9sb2dvODAucG5nKSAwIC0yNThweCByZXBlYXQt
194
+ eDtib3JkZXI6bm9uZTtjb2xvcjojMDAwO2N1cnNvcjpwb2ludGVyO2hlaWdo
195
+ dDozMHB4O21hcmdpbjowO291dGxpbmU6MDtmb250OjE1cHggYXJpYWwsc2Fu
196
+ cy1zZXJpZjt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmxzYjphY3RpdmV7YmFja2dy
197
+ b3VuZDojY2NjfS5sc3Q6Zm9jdXN7b3V0bGluZTpub25lfSNhZGRsYW5nIGF7
198
+ cGFkZGluZzowIDNweH0uZ2FjX3YgZGl2e2Rpc3BsYXk6bm9uZX0uZ2FjX3Yg
199
+ LmdhY192MiwuZ2FjX2J0e2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fXRhYmxl
200
+ Lmdzc2JfY3t6LWluZGV4Ojk4NiAgfS5uYmNse2JhY2tncm91bmQ6dXJsKC9p
201
+ bWFnZXMvc3Jwci9uYXZfbG9nbzgwLnBuZykgbm8tcmVwZWF0IDtoZWlnaHQ6
202
+ cHg7d2lkdGg6cHh9PC9zdHlsZT48c2NyaXB0PihmdW5jdGlvbigpewp2YXIg
203
+ aD0wLGksaj1wYXJzZUludCgiMSIpO2Z1bmN0aW9uIF9tbFRva2VuKGEsZCxl
204
+ LGIpe2lmKGo8MCl7aWYod2luZG93LmNvbnNvbGUpd2luZG93LmNvbnNvbGUu
205
+ bG9nKCJqY2F0Y2hlciBleGNlcHRpb246ICIsYSwiIERhdGE6ICIsZSk7aWYo
206
+ aj09LTIpdGhyb3cgYTtyZXR1cm4gbnVsbH1pZighYXx8IWEubWVzc2FnZXx8
207
+ YS5tZXNzYWdlPT0iRXJyb3IgbG9hZGluZyBzY3JpcHQiKXJldHVybiBudWxs
208
+ O2lmKCFrKCkmJiFiKXJldHVybiBudWxsO2grKztpZihkKWk9YSYmYS5tZXNz
209
+ YWdlO3ZhciBjPWwoYSwiL2dlbl8yMDQ/YXR5cD1pIixlfHx7fSksZj1nb29n
210
+ bGUuX2FlbShhLGMpO2lmKCFiKWdvb2dsZS5sb2coMCwwLGYpO3JldHVybiBm
211
+ fWdvb2dsZS5tbD1fbWxUb2tlbjtmdW5jdGlvbiBrKCl7cmV0dXJuIGg8MX1m
212
+ dW5jdGlvbiBsKGEsZCxlKXt2YXIgYj1lbmNvZGVVUklDb21wb25lbnQsYz1b
213
+ ZCwiJmVpPSIsYihnb29nbGUua0VJKSwiJmpleHBpZD0iLApiKGdvb2dsZS5r
214
+ RVhQSSksIiZzcmNwZz0iLGIoImhwIiksIiZqc3I9IixiKCIxIiksIiZidmVy
215
+ PSIsYigiMjMyIildO2Zvcih2YXIgZiBpbiBlKXtjLnB1c2goIiYiKTtjLnB1
216
+ c2goYihmKSk7Yy5wdXNoKCI9Iik7Yy5wdXNoKGIoZVtmXSkpfWMucHVzaCgi
217
+ JmVtc2c9Iik7Yy5wdXNoKGIoYS5uYW1lKyI6ICIrYS5tZXNzYWdlKSk7dmFy
218
+ IGc9Yy5qb2luKCIiKTtpZihnb29nbGUuX2l0bChnKSlnPWcuc3Vic3RyKDAs
219
+ MjAwMCk7cmV0dXJuIGd9Z29vZ2xlLl9pdGw9ZnVuY3Rpb24oYSl7cmV0dXJu
220
+ IGEubGVuZ3RoPj0yMDAwfTtnb29nbGUuX2FlbT1mdW5jdGlvbihhLGQpe3Jl
221
+ dHVybiBkfTtmdW5jdGlvbiBfb25FcnJvclRva2VuKGEpe2lmKGkhPT1hKWdv
222
+ b2dsZS5tbChuZXcgRXJyb3IoYSksZmFsc2UpO2k9bnVsbDtpZighaygpKXdp
223
+ bmRvdy5vbmVycm9yPW51bGx9d2luZG93Lm9uZXJyb3I9X29uRXJyb3JUb2tl
224
+ bjsKfSkoKTsKd2luZG93LnJ3dD1mdW5jdGlvbihhLGYsZyxsLG0saCxjLG4s
225
+ aSl7dHJ5e2lmKGE9PT13aW5kb3cpe2E9d2luZG93LmV2ZW50LnNyY0VsZW1l
226
+ bnQ7d2hpbGUoYSl7aWYoYS5ocmVmKWJyZWFrO2E9YS5wYXJlbnROb2RlfX12
227
+ YXIgYj1lbmNvZGVVUklDb21wb25lbnR8fGVzY2FwZSxkO2Q9YS5nZXRBdHRy
228
+ aWJ1dGUoImhyZWYiKTtpZihjJiZjLnN1YnN0cmluZygwLDYpIT0iJnNpZzI9
229
+ IiljPSImc2lnMj0iK2M7dmFyIG89WyIvdXJsP3NhPXQiLCIiLCImY2Q9Iixi
230
+ KG0pLGk/IiZhdXRodXNlcj0iK2IoaSk6IiIsZ29vZ2xlLmomJmdvb2dsZS5q
231
+ LnBmPyImc3FpPTIiOiIiLCImdmVkPSIsYihuKSwiJnVybD0iLGIoZCkucmVw
232
+ bGFjZSgvXCsvZywiJTJCIiksIiZlaT0iLCJ5OXA2VDl6N0FZSDJzZ2FlN2ZD
233
+ a0NBIixoPyImdXNnPSIraDoiIixjXS5qb2luKCIiKTthLmhyZWY9bzthLm9u
234
+ bW91c2Vkb3duPSIifWNhdGNoKHApe31yZXR1cm4gdHJ1ZX07Cjwvc2NyaXB0
235
+ PjwvaGVhZD48Ym9keSBiZ2NvbG9yPSNmZmZmZmYgdGV4dD0jMDAwMDAwIGxp
236
+ bms9IzAwMDBjYyB2bGluaz0jNTUxYThiIGFsaW5rPSNmZjAwMDAgb25sb2Fk
237
+ PSJkb2N1bWVudC5mJiZkb2N1bWVudC5mLnEuZm9jdXMoKTtkb2N1bWVudC5n
238
+ YnFmJiZkb2N1bWVudC5nYnFmLnEuZm9jdXMoKTtpZihkb2N1bWVudC5pbWFn
239
+ ZXMpbmV3IEltYWdlKCkuc3JjPScvaW1hZ2VzL3NycHIvbmF2X2xvZ284MC5w
240
+ bmcnIiA+PHRleHRhcmVhIGlkPWNzaSBzdHlsZT1kaXNwbGF5Om5vbmU+PC90
241
+ ZXh0YXJlYT48ZGl2IGlkPW1uZ2I+PGRpdiBpZD1nYmFyPjxub2JyPjxiIGNs
242
+ YXNzPWdiMT5TdWNoZTwvYj4gPGEgY2xhc3M9Z2IxIGhyZWY9Imh0dHA6Ly93
243
+ d3cuZ29vZ2xlLmRlL2ltZ2hwP2hsPWRlJnRhYj13aSI+QmlsZGVyPC9hPiA8
244
+ YSBjbGFzcz1nYjEgaHJlZj0iaHR0cDovL3ZpZGVvLmdvb2dsZS5kZS8/aGw9
245
+ ZGUmdGFiPXd2Ij5WaWRlb3M8L2E+IDxhIGNsYXNzPWdiMSBocmVmPSJodHRw
246
+ Oi8vbWFwcy5nb29nbGUuZGUvbWFwcz9obD1kZSZ0YWI9d2wiPk1hcHM8L2E+
247
+ IDxhIGNsYXNzPWdiMSBocmVmPSJodHRwOi8vbmV3cy5nb29nbGUuZGUvbndz
248
+ aHA/aGw9ZGUmdGFiPXduIj5OZXdzPC9hPiA8YSBjbGFzcz1nYjEgaHJlZj0i
249
+ aHR0cDovL3d3dy5nb29nbGUuZGUvc2hvcHBpbmc/aGw9ZGUmdGFiPXdmIj5T
250
+ aG9wcGluZzwvYT4gPGEgY2xhc3M9Z2IxIGhyZWY9Imh0dHBzOi8vbWFpbC5n
251
+ b29nbGUuY29tL21haWwvP3RhYj13bSI+TWFpbDwvYT4gPGEgY2xhc3M9Z2Ix
252
+ IHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZSIgaHJlZj0iaHR0cDovL3d3
253
+ dy5nb29nbGUuZGUvaW50bC9kZS9vcHRpb25zLyI+PHU+TWVocjwvdT4gJnJh
254
+ cXVvOzwvYT48L25vYnI+PC9kaXY+PGRpdiBpZD1ndXNlciB3aWR0aD0xMDAl
255
+ Pjxub2JyPjxzcGFuIGlkPWdibiBjbGFzcz1nYmk+PC9zcGFuPjxzcGFuIGlk
256
+ PWdiZiBjbGFzcz1nYmY+PC9zcGFuPjxzcGFuIGlkPWdiZT48YSAgaHJlZj0i
257
+ L3VybD9zYT1wJnByZWY9aWcmcHZhbD0zJnE9aHR0cDovL3d3dy5nb29nbGUu
258
+ ZGUvaWclM0ZobCUzRGRlJTI2c291cmNlJTNEaWdsayZ1c2c9QUZRakNORmpm
259
+ UGF2UlBCSnJPS0pTM01CMnV6aHBmTjZ6dyIgY2xhc3M9Z2I0PmlHb29nbGU8
260
+ L2E+IHwgPC9zcGFuPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmRlL2hp
261
+ c3Rvcnkvb3B0b3V0P2hsPWRlIiBjbGFzcz1nYjQ+V2VicHJvdG9rb2xsPC9h
262
+ PiB8IDxhICBocmVmPSIvcHJlZmVyZW5jZXM/aGw9ZGUiIGNsYXNzPWdiND5F
263
+ aW5zdGVsbHVuZ2VuPC9hPiB8IDxhIGlkPWdiXzcwIGhyZWY9Imh0dHBzOi8v
264
+ YWNjb3VudHMuZ29vZ2xlLmNvbS9TZXJ2aWNlTG9naW4/aGw9ZGUmY29udGlu
265
+ dWU9aHR0cDovL3d3dy5nb29nbGUuZGUvIiBjbGFzcz1nYjQ+QW5tZWxkZW48
266
+ L2E+PC9ub2JyPjwvZGl2PjxkaXYgY2xhc3M9Z2JoIHN0eWxlPWxlZnQ6MD48
267
+ L2Rpdj48ZGl2IGNsYXNzPWdiaCBzdHlsZT1yaWdodDowPjwvZGl2PjwvZGl2
268
+ PjxjZW50ZXI+PGJyIGNsZWFyPWFsbCBpZD1sZ3BkPjxkaXYgaWQ9bGdhPjxk
269
+ aXYgc3R5bGU9InBhZGRpbmc6MjhweCAwIDNweCI+PGRpdiBhbGlnbj1sZWZ0
270
+ IHN0eWxlPSJiYWNrZ3JvdW5kOnVybCgvaW1hZ2VzL3NycHIvbG9nbzF3LnBu
271
+ Zykgbm8tcmVwZWF0O2hlaWdodDoxMTBweDt3aWR0aDoyNzZweCIgdGl0bGU9
272
+ Ikdvb2dsZSIgaWQ9aHBsb2dvIG9ubG9hZD0id2luZG93LmxvbCYmbG9sKCki
273
+ PjxkaXYgbm93cmFwIHN0eWxlPSJjb2xvcjojNzc3O2ZvbnQtc2l6ZToxNnB4
274
+ O2ZvbnQtd2VpZ2h0OmJvbGQ7bGVmdDoyMTRweDtwb3NpdGlvbjpyZWxhdGl2
275
+ ZTt0b3A6NzBweCI+RGV1dHNjaGxhbmQ8L2Rpdj48L2Rpdj48L2Rpdj48YnI+
276
+ PC9kaXY+PGZvcm0gYWN0aW9uPSIvc2VhcmNoIiBuYW1lPWY+PHRhYmxlIGNl
277
+ bGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD48dHIgdmFsaWduPXRvcD48dGQg
278
+ d2lkdGg9MjUlPiZuYnNwOzwvdGQ+PHRkIGFsaWduPWNlbnRlciBub3dyYXA+
279
+ PGlucHV0IG5hbWU9aGwgdHlwZT1oaWRkZW4gdmFsdWU9ZGU+PGlucHV0IG5h
280
+ bWU9c291cmNlIHR5cGU9aGlkZGVuIHZhbHVlPWhwPjxpbnB1dCB0eXBlPWhp
281
+ ZGRlbiBuYW1lPWllIHZhbHVlPSJJU08tODg1OS0xIj48ZGl2IGNsYXNzPWRz
282
+ IHN0eWxlPSJoZWlnaHQ6MzJweDttYXJnaW46NHB4IDAiPjxpbnB1dCBhdXRv
283
+ Y29tcGxldGU9b2ZmIG1heGxlbmd0aD0yMDQ4IG5hbWU9cSBjbGFzcz0ibHN0
284
+ IiB0aXRsZT0iR29vZ2xlLVN1Y2hlIiB2YWx1ZT0iIiBzaXplPTU3IHN0eWxl
285
+ PSJjb2xvcjojMDAwO21hcmdpbjowO3BhZGRpbmc6NXB4IDhweCAwIDZweDt2
286
+ ZXJ0aWNhbC1hbGlnbjp0b3AiPjwvZGl2PjxiciBzdHlsZT0ibGluZS1oZWln
287
+ aHQ6MCI+PHNwYW4gY2xhc3M9ZHMgPjxzcGFuIGNsYXNzPWxzYmI+PGlucHV0
288
+ IG5hbWU9YnRuRyB0eXBlPXN1Ym1pdCB2YWx1ZT0iR29vZ2xlLVN1Y2hlIiBj
289
+ bGFzcz1sc2I+PC9zcGFuPjwvc3Bhbj48c3BhbiBjbGFzcz1kcz48c3BhbiBj
290
+ bGFzcz1sc2JiPjxpbnB1dCBuYW1lPWJ0bkkgdHlwZT1zdWJtaXQgY2xhc3M9
291
+ bHNiIHZhbHVlPSJBdWYgZ3V0IEds/GNrISI+PC9zcGFuPjwvc3Bhbj48L3Rk
292
+ Pjx0ZCBub3dyYXAgd2lkdGg9MjUlIGFsaWduPWxlZnQgY2xhc3M9ImZsIHNi
293
+ bGMiPjxhIGhyZWY9Ii9hZHZhbmNlZF9zZWFyY2g/aGw9ZGUiPkVyd2VpdGVy
294
+ dGUgU3VjaGU8L2E+PGEgaHJlZj0iL2xhbmd1YWdlX3Rvb2xzP2hsPWRlIj5T
295
+ cHJhY2hvcHRpb25lbjwvYT48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlw
296
+ ZT1oaWRkZW4gaWQ9Z2J2IG5hbWU9Z2J2IHZhbHVlPSIxIj48L2Zvcm0+PGRp
297
+ diBzdHlsZT0iZm9udC1zaXplOjgzJTttaW4taGVpZ2h0OjMuNWVtIj48YnI+
298
+ PC9kaXY+PHNwYW4gaWQ9Zm9vdGVyPjxjZW50ZXIgaWQ9ZmN0cj48ZGl2IHN0
299
+ eWxlPSJmb250LXNpemU6MTBwdCI+PGRpdiBpZD1mbGwgc3R5bGU9Im1hcmdp
300
+ bjoxOXB4IGF1dG87dGV4dC1hbGlnbjpjZW50ZXIiPjxhIGhyZWY9Ii9pbnRs
301
+ L2RlL2Fkcy8iPldlcmJlbiBtaXQgR29vZ2xlPC9hPjxhIGhyZWY9Ii9zZXJ2
302
+ aWNlcy8iPlVudGVybmVobWVuc2FuZ2Vib3RlPC9hPjxhIGhyZWY9Ii9pbnRs
303
+ L2RlL2Fib3V0Lmh0bWwiPtxiZXIgR29vZ2xlPC9hPjxhIGhyZWY9Imh0dHA6
304
+ Ly93d3cuZ29vZ2xlLmNvbS9uY3IiIGNsYXNzPSJnbCBub2JyIj5Hb29nbGUu
305
+ Y29tIGluIEVuZ2xpc2g8L2E+PC9kaXY+PC9kaXY+PHAgc3R5bGU9ImNvbG9y
306
+ OiM3Njc2NzY7Zm9udC1zaXplOjhwdCI+JmNvcHk7IDIwMTIgLSA8YSBocmVm
307
+ PSIvaW50bC9kZS9wb2xpY2llcy8iPkRhdGVuc2NodXR6ZXJrbORydW5nICYg
308
+ TnV0enVuZ3NiZWRpbmd1bmdlbjwvYT48L3A+PC9jZW50ZXI+PC9zcGFuPiA8
309
+ L2NlbnRlcj48ZGl2IGlkPXhqc2Q+PC9kaXY+PGRpdiBpZD14anNpPjxzY3Jp
310
+ cHQ+aWYoZ29vZ2xlLnkpZ29vZ2xlLnkuZmlyc3Q9W107Z29vZ2xlLnJlZ2lz
311
+ dGVyPWdvb2dsZS5yZWdpc3Rlcnx8ZnVuY3Rpb24oaSxsKXtnb29nbGUueS5m
312
+ aXJzdC5wdXNoKGZ1bmN0aW9uKCl7Z29vZ2xlLnJlZ2lzdGVyKGksbCk7fSk7
313
+ fTtnb29nbGUuZGxqPWZ1bmN0aW9uKGIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1
314
+ bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0
315
+ Iik7YS5zcmM9Yjtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieGpzZCIpLmFw
316
+ cGVuZENoaWxkKGEpfSwwKX07CmlmKGdvb2dsZS55KWdvb2dsZS55LmZpcnN0
317
+ PVtdO2lmKCFnb29nbGUueGpzKXtnb29nbGUuZHN0cj1bXTtnb29nbGUucmVp
318
+ bj1bXTtpZihnb29nbGUudGltZXJzJiZnb29nbGUudGltZXJzLmxvYWQudCl7
319
+ Z29vZ2xlLnRpbWVycy5sb2FkLnQueGpzbHM9bmV3IERhdGUoKS5nZXRUaW1l
320
+ KCk7fWdvb2dsZS5kbGooJy9leHRlcm5fanMvZi9DZ0prWlJJQ1pHVWdBQ3N3
321
+ UlRnQUxDc3dXamdBTENzd0RqZ0FMQ3N3RnpnQUxDc3dQRGdBTENzd1VUZ0FM
322
+ Q3N3Q2pnQW1nSUNhR1VzS3pDWUFUZ0FMQ3N3RmpnQUxDc3dHVGdCTENzd1FU
323
+ Z0FMQ3N3VFRnQUxDc3dUamdBTENzd1ZEZ0FMQ3N3YVRnQUxDc3drQUU0QUN3
324
+ ck1KSUJPQUFzS3pEVkFUZ0FMQ3N3MkFFNEFDd3JNQmc0QUN3ck1DWTRBQ3lB
325
+ QWxDUUFuQS9RNFY5Q2JwN2Z1by5qcycpO2dvb2dsZS54anM9MX1nb29nbGUu
326
+ bmVlZ2c9MTtnb29nbGUubWM9W107Z29vZ2xlLm1jPWdvb2dsZS5tYy5jb25j
327
+ YXQoW1s2OSx7fV0sWzE0LHt9XSxbNjAse31dLFsyMyx7fV0sWzgxLHt9XSxb
328
+ MTAseyJjbGllbnQiOiJocCIsImRoIjp0cnVlLCJkcyI6IiIsImV4cCI6ImZy
329
+ Z2JsZCIsImZsIjp0cnVlLCJob3N0IjoiZ29vZ2xlLmRlIiwianNvbnAiOnRy
330
+ dWUsIm1zZ3MiOnsibGNreSI6IkF1ZiBndXQgR2z8Y2shIiwibG1sIjoiV2Vp
331
+ dGVyZSBJbmZvcm1hdGlvbmVuIiwicHNyYyI6IkRpZXNlIFN1Y2hhbmZyYWdl
332
+ IHd1cmRlIGF1cyBJaHJlbSBcdTAwM0NhIGhyZWY9XCIvaGlzdG9yeVwiXHUw
333
+ MDNFV2VicHJvdG9rb2xsXHUwMDNDL2FcdTAwM0UgZW50ZmVybnQuIiwicHNy
334
+ bCI6IkVudGZlcm5lbiIsInNyY2giOiJHb29nbGUtU3VjaGUifSwib3ZyIjp7
335
+ ImZtIjoxLCJsbSI6MSwicGYiOjEsInN3IjoxfSwicHEiOiIiLCJzY2QiOjEw
336
+ LCJzY2UiOjV9XSxbMTUyLHt9XSxbNjUse31dLFsyMTMseyJwYmVyciI6Ilx1
337
+ MDAzQ2ZvbnQgY29sb3I9cmVkXHUwMDNFRmVobGVyOlx1MDAzQy9mb250XHUw
338
+ MDNFIERlciBTZXJ2ZXIga29ubnRlIElocmUgQW5mb3JkZXJ1bmcgbmljaHQg
339
+ YXVzZvxocmVuLiBWZXJzdWNoZW4gU2llIGVzIGluIDMwIFNla3VuZGVuIG5v
340
+ Y2ggZWlubWFsLiJ9XSxbNzgse31dLFsyNSx7ImciOjgsImsiOmZhbHNlLCJt
341
+ Ijp7ImFwcCI6dHJ1ZSwiYmtzIjp0cnVlLCJibGciOnRydWUsImRzYyI6dHJ1
342
+ ZSwiZXZuIjp0cnVlLCJmaW4iOnRydWUsImZsbSI6dHJ1ZSwiZnJtIjp0cnVl
343
+ LCJpc2NoIjp0cnVlLCJrbGciOnRydWUsIm1ibCI6dHJ1ZSwibndzIjp0cnVl
344
+ LCJwbGNzIjp0cnVlLCJwcGwiOnRydWUsInByYyI6dHJ1ZSwicHRzIjp0cnVl
345
+ LCJyY3AiOnRydWUsInNob3AiOnRydWUsInZpZCI6dHJ1ZX0sInQiOm51bGx9
346
+ XSxbMjE2LHt9XSxbMTA1LHt9XSxbMjIseyJkYiI6ZmFsc2UsIm1fZXJyb3Jz
347
+ Ijp7IjMyIjoiRXMgZ2lidCBsZWlkZXIga2VpbmUgd2VpdGVyZW4gRXJnZWJu
348
+ aXNzZS4iLCJkZWZhdWx0IjoiXHUwMDNDZm9udCBjb2xvcj1yZWRcdTAwM0VG
349
+ ZWhsZXI6XHUwMDNDL2ZvbnRcdTAwM0UgRGVyIFNlcnZlciBrb25udGUgSWhy
350
+ ZSBBbmZvcmRlcnVuZyBuaWNodCBhdXNm/GhyZW4uIFZlcnN1Y2hlbiBTaWUg
351
+ ZXMgaW4gMzAgU2VrdW5kZW4gbm9jaCBlaW5tYWwuIn0sIm1fdGlwIjoiS2xp
352
+ Y2tlbiBTaWUgaGllciwgdW0gd2VpdGVyZSBJbmZvcm1hdGlvbmVuIHp1IGVy
353
+ aGFsdGVuLiIsIm5scG0iOiItMTUzcHggLTg0cHgiLCJubHBwIjoiLTE1M3B4
354
+ IC03MHB4IiwidXRwIjpmYWxzZX1dLFs3Nyx7fV0sWzE0Nix7fV0sWzE0NCx7
355
+ fV0sWzg0LHsidHRfa2Z0Ijp0cnVlfV0sWzI0LHt9XSxbMzgse31dXSk7Z29v
356
+ Z2xlLnkuZmlyc3QucHVzaChmdW5jdGlvbigpe2lmKGdvb2dsZS5tZWQpe2dv
357
+ b2dsZS5tZWQoJ2luaXQnKTtnb29nbGUuaW5pdEhpc3RvcnkoKTtnb29nbGUu
358
+ bWVkKCdoaXN0b3J5Jyk7fWdvb2dsZS5IaXN0b3J5JiZnb29nbGUuSGlzdG9y
359
+ eS5pbml0aWFsaXplKCcvJyl9KTtpZihnb29nbGUuaiYmZ29vZ2xlLmouZW4m
360
+ Jmdvb2dsZS5qLnhpKXt3aW5kb3cuc2V0VGltZW91dChnb29nbGUuai54aSww
361
+ KTt9PC9zY3JpcHQ+PC9kaXY+PHNjcmlwdD4oZnVuY3Rpb24oKXsKdmFyIGIs
362
+ ZCxlLGY7ZnVuY3Rpb24gZyhhLGMpe2lmKGEucmVtb3ZlRXZlbnRMaXN0ZW5l
363
+ cil7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixjLGZhbHNlKTthLnJl
364
+ bW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLGZhbHNlKX1lbHNle2EuZGV0
365
+ YWNoRXZlbnQoIm9ubG9hZCIsYyk7YS5kZXRhY2hFdmVudCgib25lcnJvciIs
366
+ Yyl9fWZ1bmN0aW9uIGgoYSl7Zj0obmV3IERhdGUpLmdldFRpbWUoKTsrK2Q7
367
+ YT1hfHx3aW5kb3cuZXZlbnQ7dmFyIGM9YS50YXJnZXR8fGEuc3JjRWxlbWVu
368
+ dDtnKGMsaCl9dmFyIGk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
369
+ ImltZyIpO2I9aS5sZW5ndGg7ZD0wO2Zvcih2YXIgaj0wLGs7ajxiOysrail7
370
+ az1pW2pdO2lmKGsuY29tcGxldGV8fHR5cGVvZiBrLnNyYyE9InN0cmluZyJ8
371
+ fCFrLnNyYykrK2Q7ZWxzZSBpZihrLmFkZEV2ZW50TGlzdGVuZXIpe2suYWRk
372
+ RXZlbnRMaXN0ZW5lcigibG9hZCIsaCxmYWxzZSk7ay5hZGRFdmVudExpc3Rl
373
+ bmVyKCJlcnJvciIsCmgsZmFsc2UpfWVsc2V7ay5hdHRhY2hFdmVudCgib25s
374
+ b2FkIixoKTtrLmF0dGFjaEV2ZW50KCJvbmVycm9yIixoKX19ZT1iLWQ7ZnVu
375
+ Y3Rpb24gbCgpe2lmKCFnb29nbGUudGltZXJzLmxvYWQudClyZXR1cm47Z29v
376
+ Z2xlLnRpbWVycy5sb2FkLnQub2w9KG5ldyBEYXRlKS5nZXRUaW1lKCk7Z29v
377
+ Z2xlLnRpbWVycy5sb2FkLnQuaW1sPWY7Z29vZ2xlLmtDU0kuaW1jPWQ7Z29v
378
+ Z2xlLmtDU0kuaW1uPWI7Z29vZ2xlLmtDU0kuaW1wPWU7aWYoZ29vZ2xlLnN0
379
+ dCE9PXVuZGVmaW5lZClnb29nbGUua0NTSS5zdHQ9Z29vZ2xlLnN0dDtnb29n
380
+ bGUudGltZXJzLmxvYWQudC54anMmJmdvb2dsZS5yZXBvcnQmJmdvb2dsZS5y
381
+ ZXBvcnQoZ29vZ2xlLnRpbWVycy5sb2FkLGdvb2dsZS5rQ1NJKX1pZih3aW5k
382
+ b3cuYWRkRXZlbnRMaXN0ZW5lcil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
383
+ bG9hZCIsCmwsZmFsc2UpO2Vsc2UgaWYod2luZG93LmF0dGFjaEV2ZW50KXdp
384
+ bmRvdy5hdHRhY2hFdmVudCgib25sb2FkIixsKTtnb29nbGUudGltZXJzLmxv
385
+ YWQudC5wcnQ9KGY9KG5ldyBEYXRlKS5nZXRUaW1lKCkpOwp9KSgpOwo8L3Nj
386
+ cmlwdD4=
387
+ http_version: '1.1'
388
+ recorded_at: Tue, 03 Apr 2012 11:11:07 GMT
389
+ recorded_with: VCR 2.0.1
data/test/http_test.rb ADDED
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ require 'helper'
4
+ require 'vcr'
5
+
6
+ VCR.configure do |c|
7
+ c.cassette_library_dir = "#{File.dirname(__FILE__)}/fixtures-vcr"
8
+ c.hook_into :webmock
9
+ end
10
+
11
+ class HttpTest < Test::Unit::TestCase
12
+ def test_get
13
+ VCR.use_cassette('http_test') do
14
+ google = Http.get("http://google.de")
15
+ assert google.starts_with?("<!doctype html>")
16
+ end
17
+ end
18
+ end
@@ -12,4 +12,15 @@ class StringExtTest < Test::Unit::TestCase
12
12
  assert_equal("actual", "actual".sortkey)
13
13
  assert_equal("schreck003012", "der schreck 3/12".sortkey)
14
14
  end
15
+
16
+ def test_starts_ends_with
17
+ s = "foo bar baz"
18
+ assert s.starts_with?("foo")
19
+ assert !s.starts_with?("baz")
20
+ assert !s.ends_with?("foo")
21
+ assert s.ends_with?("baz")
22
+
23
+ assert s.starts_with?("")
24
+ assert s.ends_with?("")
25
+ end
15
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radiospiel-app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-03 00:00:00.000000000Z
12
+ date: 2012-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg
16
- requirement: &70231006859040 !ruby/object:Gem::Requirement
16
+ requirement: &70271405711240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70231006859040
24
+ version_requirements: *70271405711240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3
27
- requirement: &70231006858260 !ruby/object:Gem::Requirement
27
+ requirement: &70271405698820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70231006858260
35
+ version_requirements: *70271405698820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: redis
38
- requirement: &70231006857520 !ruby/object:Gem::Requirement
38
+ requirement: &70271405698060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70231006857520
46
+ version_requirements: *70271405698060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: micro_sql
49
- requirement: &70231006854220 !ruby/object:Gem::Requirement
49
+ requirement: &70271405697360 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70231006854220
57
+ version_requirements: *70271405697360
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: htmlentities
60
- requirement: &70231006853600 !ruby/object:Gem::Requirement
60
+ requirement: &70271405696380 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70231006853600
68
+ version_requirements: *70271405696380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &70231006852760 !ruby/object:Gem::Requirement
71
+ requirement: &70271405695800 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70231006852760
79
+ version_requirements: *70271405695800
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &70231006851660 !ruby/object:Gem::Requirement
82
+ requirement: &70271405695240 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,43 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70231006851660
90
+ version_requirements: *70271405695240
91
+ - !ruby/object:Gem::Dependency
92
+ name: vcr
93
+ requirement: &70271405694400 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70271405694400
102
+ - !ruby/object:Gem::Dependency
103
+ name: webmock
104
+ requirement: &70271405693540 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70271405693540
113
+ - !ruby/object:Gem::Dependency
114
+ name: psych
115
+ requirement: &70271405692440 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70271405692440
91
124
  - !ruby/object:Gem::Dependency
92
125
  name: simplecov
93
- requirement: &70231006830480 !ruby/object:Gem::Requirement
126
+ requirement: &70271405691160 !ruby/object:Gem::Requirement
94
127
  none: false
95
128
  requirements:
96
129
  - - ! '>='
@@ -98,10 +131,10 @@ dependencies:
98
131
  version: '0'
99
132
  type: :development
100
133
  prerelease: false
101
- version_requirements: *70231006830480
134
+ version_requirements: *70271405691160
102
135
  - !ruby/object:Gem::Dependency
103
136
  name: ruby-debug19
104
- requirement: &70231006829160 !ruby/object:Gem::Requirement
137
+ requirement: &70271405685820 !ruby/object:Gem::Requirement
105
138
  none: false
106
139
  requirements:
107
140
  - - ! '>='
@@ -109,7 +142,7 @@ dependencies:
109
142
  version: '0'
110
143
  type: :development
111
144
  prerelease: false
112
- version_requirements: *70231006829160
145
+ version_requirements: *70271405685820
113
146
  description: Some basics that your application could benefit from.
114
147
  email: eno@open-lab.org
115
148
  executables: []
@@ -143,13 +176,16 @@ files:
143
176
  - lib/core-extensions/uids.rb
144
177
  - lib/extensions/http.rb
145
178
  - lib/extensions/zz_geocoder.rb
179
+ - radiospiel-app.gemspec
146
180
  - script/watchr
147
181
  - test/app_test.rb
148
182
  - test/cache_test.rb
149
183
  - test/cgi_ext_test.rb
150
184
  - test/config.yml
151
185
  - test/config_test.rb
186
+ - test/fixtures-vcr/http_test.yml
152
187
  - test/helper.rb
188
+ - test/http_test.rb
153
189
  - test/string_ext_test.rb
154
190
  - test/tls_test.rb
155
191
  - test/uid_test.rb
@@ -168,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
204
  version: '0'
169
205
  segments:
170
206
  - 0
171
- hash: -159245804892419013
207
+ hash: -1719039008368843771
172
208
  required_rubygems_version: !ruby/object:Gem::Requirement
173
209
  none: false
174
210
  requirements: