gokart 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/LICENSE +0 -0
  2. data/README.md +0 -0
  3. data/assets/Gemfile +24 -0
  4. data/assets/Guardfile +37 -0
  5. data/assets/Rakefile +5 -0
  6. data/assets/config.rb +24 -0
  7. data/assets/spec/javascripts/support/jasmine.yml +76 -0
  8. data/assets/spec/javascripts/support/jasmine_config.rb +23 -0
  9. data/assets/spec/javascripts/support/jasmine_runner.rb +32 -0
  10. data/assets/src/server/http_handler.go +139 -0
  11. data/assets/src/server/main.go +31 -0
  12. data/assets/src/server/my_test.go +13 -0
  13. data/assets/src/server/templates.go +42 -0
  14. data/assets/src/www/app/coffee/application.js.coffee +6 -0
  15. data/assets/src/www/app/coffee/helpers/properties.js.coffee +19 -0
  16. data/assets/src/www/app/coffee/libs/deferred.js.coffee +92 -0
  17. data/assets/src/www/app/coffee/libs/logger.js.coffee +40 -0
  18. data/assets/src/www/app/coffee/libs/mod_loader.js.coffee +44 -0
  19. data/assets/src/www/app/coffee/main.js.coffee +10 -0
  20. data/assets/src/www/app/partials/index.html +92 -0
  21. data/assets/src/www/app/sass/application.css.scss +136 -0
  22. data/assets/src/www/app/templates/application.gotmpl +2 -0
  23. data/assets/src/www/app/templates/base.gotmpl.erb +31 -0
  24. data/assets/src/www/app/templates/home.gotmpl +30 -0
  25. data/assets/src/www/spec/coffee/deferred-spec.coffee +202 -0
  26. data/assets/src/www/spec/coffee/mocks.coffee +137 -0
  27. data/assets/src/www/spec/coffee/mod_loader-spec.coffee +45 -0
  28. data/assets/src/www/spec/coffee/properties-spec.coffee +21 -0
  29. data/assets/tasks/app.rake +34 -0
  30. data/assets/tasks/jasmine.rake +8 -0
  31. data/assets/tasks/server.rake +58 -0
  32. data/assets/tasks/www.rake +162 -0
  33. data/bin/gokart +28 -0
  34. data/lib/gokart/base.rb +59 -0
  35. data/lib/gokart/environment.rb +39 -0
  36. data/lib/gokart/version.rb +3 -0
  37. data/lib/gokart.rb +8 -0
  38. metadata +253 -0
@@ -0,0 +1,92 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, height=device-height, user-scalable=no, initial-scale=1" />
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
6
+ <title>Narwhal Champion: A Reddit Story</title>
7
+ <!-- app CSS -->
8
+ <!--<link rel="stylesheet" href="stylesheets/vendor/jq.ui.css" type="text/css" />-->
9
+ <link rel="stylesheet" href="stylesheets/application.css" type="text/css" />
10
+
11
+ <!-- third party libs -->
12
+ <script type="text/javascript" src="javascripts/vendor/touch.js"></script>
13
+ <script type="text/javascript" src="javascripts/vendor/jq.mobi.min.js"></script>
14
+ <script type="text/javascript" src="javascripts/vendor/jq.web.min.js"></script>
15
+ <script type="text/javascript" src="javascripts/vendor/jq.ui.min.js"></script>
16
+
17
+ <script type="text/javascript" src="javascripts/vendor/phonegap-1.1.0.js"></script>
18
+ <script type="text/javascript" src="javascripts/vendor/ICanHaz.min.js"></script>
19
+
20
+ <!-- application files -->
21
+ <script type="text/javascript" src="javascripts/libs/mod_loader.js"></script>
22
+ <script type="text/javascript" src="javascripts/libs/deferred.js"></script>
23
+ <script type="text/javascript" src="javascripts/libs/3rdparty.js"></script>
24
+ <script type="text/javascript" src="javascripts/libs/logger.js"></script>
25
+ <script type="text/javascript" src="javascripts/helpers/properties.js"></script>
26
+ <script type="text/javascript" src="javascripts/models/comment.js"></script>
27
+ <script type="text/javascript" src="javascripts/models/post.js"></script>
28
+ <script type="text/javascript" src="javascripts/models/sub_reddit.js"></script>
29
+ <script type="text/javascript" src="javascripts/adapters/dummy_data.js"></script>
30
+ <script type="text/javascript" src="javascripts/adapters/reddit.js"></script>
31
+ <script type="text/javascript" src="javascripts/widgets/posts.js"></script>
32
+ <script type="text/javascript" src="javascripts/widgets/post_detail.js"></script>
33
+ <script type="text/javascript" src="javascripts/widgets/subreddits.js"></script>
34
+ <script type="text/javascript" src="javascripts/controllers/nav.js"></script>
35
+ <script type="text/javascript" src="javascripts/controllers/subreddit_posts.js"></script>
36
+ <script type="text/javascript" src="javascripts/controllers/app.js"></script>
37
+ <script type="text/javascript" src="javascripts/main.js"></script>
38
+
39
+ <!-- Templates -->
40
+ <script id="subReddits" type="text/html">
41
+ {{#subs}}
42
+ <li><a href="#subreddit-posts-{{id}}" id="{{id}}">{{name}}</a></li>
43
+ {{/subs}}
44
+ </script>
45
+
46
+ <script id="posts" type="text/html">
47
+ {{#posts}}
48
+ <li class="post-short {{nsfw}}">
49
+ <h3><a href="javascript:;" onclick="$.ui.loadContent('test-show-post',false,false,'slide')">{{title}}</a></h3>
50
+ <p class="post">
51
+ <span class="score">{{score}}</span> - <span class="num-comments">{{numComments}}</span> comments, to <span class="subreddit">{{subreddit}}</span>
52
+ </p>
53
+ </li>
54
+ {{/posts}}
55
+ </div>
56
+ </script>
57
+
58
+ <script id="error_inline" type="text/html">
59
+ <p class="error-message">{{error}}</p>
60
+ </script>
61
+
62
+ </head>
63
+ <body>
64
+ <div id="header">
65
+ <div class="title"><h2>Loading...</h2></div>
66
+ <div class="search-bar">
67
+ <form name="search" action="#search" method="get"><input type='text' name="search-text" value="Search"/></form>
68
+ </div>
69
+ <div class="search-button"><p>S</p></div>
70
+ </div>
71
+
72
+ <div id="navbar">
73
+ <div id="subreddit-wrapper">
74
+ <ul class="subreddits"></ul>
75
+ </div>
76
+ </div>
77
+
78
+ <div id="content">
79
+ <div id="subreddit-posts" class="panel" selected="true">
80
+ <div id="posts-wrapper">
81
+ <ul class="posts"></ul>
82
+ </div>
83
+ </div>
84
+ <div id="test-subreddit-posts" class="panel">
85
+ <p>Test showing moving to a different subreddit page</p>
86
+ </div>
87
+ <div id="test-show-post" class="panel">
88
+ <p>Test showing moving to view a post's content</p>
89
+ </div>
90
+ </div>
91
+ </body>
92
+ </html>
@@ -0,0 +1,136 @@
1
+ html, body {
2
+ width: 100%;
3
+ height: 100%;
4
+ }
5
+
6
+ html, body, div, h1, h2, h3, p, ul, li {
7
+ margin: 0;
8
+ padding: 0;
9
+ }
10
+
11
+ ul {
12
+ list-style-type: none;
13
+ }
14
+
15
+ h3 {font-size: 100%;}
16
+
17
+ $lightBlue: #3bbfce;
18
+ $warning: #f00;
19
+
20
+ * {
21
+ -webkit-user-select:none;
22
+ -webkit-box-sizing:border-box;
23
+ box-sizing:border-box;
24
+ }
25
+
26
+ body {
27
+ width: 100%;
28
+ height: 100%;
29
+ display: -webkit-box;
30
+ -webkit-box-orient: vertical;
31
+ }
32
+
33
+ .panel {
34
+ width: 100%;
35
+ }
36
+
37
+
38
+ /*********************
39
+ header bar
40
+ *********************/
41
+ #header {
42
+ display: -webkit-box;
43
+ height: 30px;
44
+ width: 100%;
45
+
46
+ color: $lightBlue;
47
+ background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(16,25,33,1)), to(rgba(14,23,32,1)), color-stop(.5, rgba(27,36,46,1)), color-stop(.5, rgba(14,23,32,1)));
48
+ -webkit-box-shadow:0px 0px 24px rgba(0,0,0,0.8); box-shadow:0px 0px 24px rgba(0,0,0,0.8);
49
+
50
+ -webkit-box-orient: horizontal;
51
+ -webkit-box-align: center;
52
+ -webkit-box-pack: justify;
53
+ }
54
+ #header .title {
55
+ -webkit-box-flex: 1;
56
+ text-align: center;
57
+ }
58
+ #header .search-bar {
59
+ display: none;
60
+ }
61
+ #header .serach-bar.shown {
62
+ display: -webkit-box;
63
+ -webkit-box-flex: 1;
64
+ width: 100%;
65
+ }
66
+ #header .search-button {
67
+ padding: 5px;
68
+ }
69
+
70
+
71
+ /*********************
72
+ Nav Bar
73
+ *********************/
74
+ #navbar {
75
+ width: 100%;
76
+ display:-webkit-box;
77
+ -webkit-box-orient: horizontal;
78
+ -webkit-box-align: center;
79
+ overflow: hidden;
80
+
81
+ z-index:1000;
82
+ position:relative;
83
+ }
84
+ #subreddit-wrapper {
85
+ height: 40px;
86
+ display: -webkit-box;
87
+ }
88
+ #subreddit-wrapper ul.subreddits {
89
+ display: -webkit-box;
90
+ -webkit-box-orient: horizontal;
91
+ -webkit-box-align: center;
92
+ padding-left: 0;
93
+ white-space: nowrap;
94
+ }
95
+ #subreddit-wrapper .subreddits li {
96
+ display:inline;
97
+ a {
98
+ margin-right: 5px;
99
+ padding: 0 5px;
100
+
101
+ }
102
+ }
103
+
104
+
105
+ /***************************
106
+ App Content for main page
107
+ ***************************/
108
+ #content{
109
+ z-index:180;
110
+ display:block;
111
+ position:relative;
112
+ } /* Accounts for positioning of the content area, which is everything below the header and above the navbar. */
113
+
114
+ .panel {
115
+ z-index:180;
116
+ width:100%;
117
+ height:100%;
118
+ display:none;
119
+ position:absolute; top:0px; left:-100%;
120
+ overflow:hidden;
121
+ }
122
+
123
+ #subreddit-posts {
124
+ display: -webkit-box;
125
+ }
126
+
127
+
128
+ /***************************
129
+ Formatting for Short posts
130
+ ***************************/
131
+ .posts .post-short {
132
+ display: bock;
133
+ }
134
+ .posts .post-short.nsfw {
135
+ background-color: $warning;
136
+ }
@@ -0,0 +1,2 @@
1
+ //= require base
2
+ //= require home
@@ -0,0 +1,31 @@
1
+ {{define "base.header"}}
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <title>{{.Title}}</title>
6
+ {{if .Debug}}{{template "base.header.assets.debug" .}}{{else}}{{template "base.header.assets" .}}{{end}}
7
+ </head>
8
+ <body>
9
+ {{end}}
10
+
11
+ {{define "base.header.assets"}}
12
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
13
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/application.js"></script>
14
+ <link rel="stylesheet" type="text/css" href="{{.RootURL}}/assets/css/application.css">
15
+ {{end}}
16
+
17
+ {{define "base.header.assets.debug"}}
18
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
19
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/libs/mod_loader.js"></script>
20
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/libs/deferred.js"></script>
21
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/libs/logger.js"></script>
22
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/helpers/properties.js"></script>
23
+ <script type="text/javascript" src="{{.RootURL}}/assets/js/main.js"></script>
24
+ <link rel="stylesheet" type="text/css" href="{{.RootURL}}/assets/css/application.css">
25
+ {{end}}
26
+
27
+
28
+ {{define "base.footer"}}
29
+ </body>
30
+ </html>
31
+ {{end}}
@@ -0,0 +1,30 @@
1
+ {{define "home.contents"}}
2
+ <h3>Go Kart</h3>
3
+ <p>Combination of tooks which will make developing webapps using go easier. The gokart gem by default combines SASS, Coffee Script, Rake, and Sprokets with Go to provide a great development environment. This environment supports test driven development (TDD) with ruby guard and jasmine.</p>
4
+ <p>There are no external dependancies other than Go and ruby (which I expect you already have...). All dependancies are installed via bundler after the project directory is created.</p>
5
+ <br />
6
+ <h4>Environment Structure</h4>
7
+ <p>The environment is split into the following sections:</p>
8
+ <ul>
9
+ <li><strong>bin/</strong> - This is where the application will run from once built, and where all the assets will be compiled to.</li>
10
+ <li><strong>bin/server/</strong> - Compiled Go http server.</li>
11
+ <li><strong>bin/assets/templates/</strong> - Compiled Go HTML templates</li>
12
+ <li><strong>bin/assets/www-min/</strong> - Compiled and minified CSS/JS/images using sprockets</li>
13
+ <li><strong>bin/assets/www-debug/</strong> - Compiled, but non-minified/concatonated CSS/JS source, images are here also</li>
14
+ <li><strong>lib/</strong> - Where any Go libraries your app depends on will be installed by running 'go get'. Note: You'll need to set the project into your GOPATH, I haven't figured out a good solution for this yet.</li>
15
+ <li><strong>spec/javascripts/</strong> - Where all of the compiled JS specs will be written to, and run from. Note: Currently these do not go through sprockets, but only the coffee-script compiler. So no preprocessing is available</li>
16
+ <li><strong>spec/javascripts/support</strong> - Configuration files for Jasmine. jasmin.yml contains the script specifiing the source files to load, and what order to load them in.</li>
17
+ <li><strong>src/server/</strong> - All of your Go code will go here following the normal Go 1.0 directory pattern</li>
18
+ <li><strong>src/www/app/</strong> - All of you Coffee script, sass, and Go Template are found here</li>
19
+ <li><strong>src/www/spec/</strong> - All coffee script spec files which will be compiled into js and run using jasmine.</li>
20
+ <li><strong>src/www/vendor/</strong> - js/css/image files for third party tools and libraries</li>
21
+ <li><strong>tasks/</strong> - Rake tasks to build, run, and test the application. There are sevearl tasks which you can run do 'rake --tasks' to see a complete list of them. 'rake app:test' to run test units, 'rake app:start' to build and run, use startdebug for a debug build. Note: when you do 'rake jasmine' or rake 'app:guard' you probably want to start these tasks in different tabs because they run until killed.</li>
22
+ </ul>
23
+
24
+ {{end}}
25
+
26
+ {{define "home"}}
27
+ {{template "base.header" .Common}}
28
+ {{template "home.contents" .Contents}}
29
+ {{template "base.footer"}}
30
+ {{end}}
@@ -0,0 +1,202 @@
1
+ describe 'Deferred Test', ->
2
+ Deferred = modLoader.require 'libs/deferred'
3
+
4
+ it 'should be able to create a deferred object, and get a promise from it', ->
5
+ df = Deferred.create()
6
+ expect(df).toBeDefined()
7
+
8
+ promise = df.promise()
9
+ expect(promise).toBeDefined()
10
+
11
+ it 'should be able to create a deferred which will resolve a promise, synchournously', ->
12
+ df = Deferred.create()
13
+ promise = df.promise()
14
+
15
+ wasFulfilled = false
16
+ promise.done ->
17
+ wasFulfilled = true
18
+
19
+ df.resolve()
20
+
21
+ waitsFor ->
22
+ return wasFulfilled
23
+ , 'promise to be fulfilled', 100
24
+
25
+ runs ->
26
+ expect(wasFulfilled).toBe(true)
27
+
28
+ it 'should be able to create a deferred which will reject a promise, synchournously', ->
29
+ df = Deferred.create()
30
+ promise = df.promise()
31
+
32
+ wasRejected = false
33
+ promise.fail ->
34
+ wasRejected = true
35
+
36
+ df.reject()
37
+
38
+ waitsFor ->
39
+ return wasRejected
40
+ , 'promise to be rejected', 100
41
+
42
+ runs ->
43
+ expect(wasRejected).toBe(true)
44
+
45
+ it 'should be able to resolve a promise before the promise is created, synchournously', ->
46
+ df = Deferred.create()
47
+ promise = df.promise()
48
+
49
+ df.resolve()
50
+
51
+ wasFulfilled = false
52
+ promise.done ->
53
+ wasFulfilled = true
54
+
55
+ waitsFor ->
56
+ return wasFulfilled
57
+ , 'promise to be fulfilled', 100
58
+
59
+ runs ->
60
+ expect(wasFulfilled).toBe(true)
61
+
62
+ it 'should be able to reject a promise before the promise is created, synchournously', ->
63
+ df = Deferred.create()
64
+ promise = df.promise()
65
+
66
+ df.reject()
67
+
68
+ wasRejected = false
69
+ promise.fail ->
70
+ wasRejected = true
71
+
72
+ waitsFor ->
73
+ return wasRejected
74
+ , 'promise to be rejected', 100
75
+
76
+ runs ->
77
+ expect(wasRejected).toBe(true)
78
+
79
+ it 'should be able to resolve a promise with data', ->
80
+ df = Deferred.create()
81
+ promise = df.promise()
82
+
83
+ df.resolve({myObj: true})
84
+
85
+ wasFulfilled = false
86
+ promise.done (obj)->
87
+ expect(obj.myObj).toBe(true)
88
+ wasFulfilled = true
89
+
90
+
91
+ waitsFor ->
92
+ return wasFulfilled
93
+ , 'promise to be fulfilled', 100
94
+
95
+ runs ->
96
+ expect(wasFulfilled).toBe(true)
97
+
98
+ it 'should be able to reject a promise with data', ->
99
+ df = Deferred.create()
100
+ promise = df.promise()
101
+
102
+ df.reject({myObj: true})
103
+
104
+ wasRejected = false
105
+ promise.fail (obj)->
106
+ expect(obj.myObj).toBe(true)
107
+ wasRejected = true
108
+
109
+
110
+ waitsFor ->
111
+ return wasRejected
112
+ , 'promise to be reject', 100
113
+
114
+ runs ->
115
+ expect(wasRejected).toBe(true)
116
+
117
+ it 'should be able to resolve a promise with multile datas', ->
118
+ df = Deferred.create()
119
+ promise = df.promise()
120
+
121
+ df.resolve({myObj: true}, {myObj2: true}, {myObj3: true})
122
+
123
+ wasFulfilled = false
124
+ promise.done (obj, obj2, obj3)->
125
+ expect(obj.myObj).toBe(true)
126
+ expect(obj2.myObj2).toBe(true)
127
+ expect(obj3.myObj3).toBe(true)
128
+ wasFulfilled = true
129
+
130
+
131
+ waitsFor ->
132
+ return wasFulfilled
133
+ , 'promise to be fulfilled', 100
134
+
135
+ runs ->
136
+ expect(wasFulfilled).toBe(true)
137
+
138
+ it 'should be able to reject a promise with multile datas', ->
139
+ df = Deferred.create()
140
+ promise = df.promise()
141
+
142
+ df.reject({myObj: true}, {myObj2: true}, {myObj3: true})
143
+
144
+ wasRejected = false
145
+ promise.fail (obj, obj2, obj3)->
146
+ expect(obj.myObj).toBe(true)
147
+ expect(obj2.myObj2).toBe(true)
148
+ expect(obj3.myObj3).toBe(true)
149
+ wasRejected = true
150
+
151
+
152
+ waitsFor ->
153
+ return wasRejected
154
+ , 'promise to be rejected', 100
155
+
156
+ runs ->
157
+ expect(wasRejected).toBe(true)
158
+
159
+
160
+ it 'should be able to resolve a promise with data, using the then', ->
161
+ df = Deferred.create()
162
+ promise = df.promise()
163
+
164
+ df.resolve({myObj: true})
165
+
166
+ wasFulfilled = false
167
+ promise.then (obj)->
168
+ expect(obj.myObj).toBe(true)
169
+ wasFulfilled = true
170
+ , (obj)->
171
+ expect('not to be called').toBe(true)
172
+ wasFulfilled = false
173
+
174
+ waitsFor ->
175
+ return wasFulfilled
176
+ , 'promise to be fulfilled', 100
177
+
178
+ runs ->
179
+ expect(wasFulfilled).toBe(true)
180
+
181
+
182
+ it 'should be able to reject a promise with data, using the then', ->
183
+ df = Deferred.create()
184
+ promise = df.promise()
185
+
186
+ df.reject({myObj: true})
187
+
188
+ wasRejected = false
189
+ promise.then (obj)->
190
+ expect('not to be called').toBe(true)
191
+ wasRejected = false
192
+ , (obj)->
193
+ expect(obj.myObj).toBe(true)
194
+ wasRejected = true
195
+
196
+ waitsFor ->
197
+ return wasRejected
198
+ , 'promise to be rejected', 100
199
+
200
+ runs ->
201
+ expect(wasRejected).toBe(true)
202
+
@@ -0,0 +1,137 @@
1
+
2
+ modLoader.define 'mocks', (require, exports)->
3
+
4
+ exports.ajax = jasmine.createSpy('AJAX Stub').andCallFake () ->
5
+ return
6
+
7
+ exports.model_subreddit = {
8
+ id:'fake id',
9
+ title:'fake title',
10
+ name:'fake name'
11
+ url: '/r/programming/'
12
+ }
13
+
14
+ exports.rsp_reddits = {
15
+ "kind":"Listing",
16
+ "data":{
17
+ "modhash":"yqpsudqtcv91b6a8e81dcce79d45fcaf82bfc6b147f7fab330",
18
+ "children":[
19
+ {
20
+ "kind":"t5",
21
+ "data":{
22
+ "display_name":"pics",
23
+ "name":"t5_2qh0u",
24
+ "title":"Pictures and Images",
25
+ "url":"/r/pics/",
26
+ "created":1201221069.0,
27
+ "created_utc":1201221069.0,
28
+ "over18":false,
29
+ "subscribers":1098672,
30
+ "id":"2qh0u",
31
+ "description":"A place to share interesting photographs and pictures. Feel free to post your own, but please **read the rules first** (see below), and note that we are *not a catch-all* for general images (of text, comics, etc.)\n\n\n#Announcement#\n*Oct 13th, 2011* - **We have a [new ruleset](http://www.reddit.com/r/pics/comments/lb24q/rpics_ruleset/)**, please read it carefully before submitting anything. \n\n#Rules#\n\n1. **No pictures of text.** *This includes images with superimposed text, such as [image macros](http://en.wikipedia.org/wiki/Image_macro) and comics, as well as screenshots, and (non-historical) handwritten text.*\n\n1. **No gore, porn or anything NSFW.** *This subreddit is strictly SFW, and there are better places for such content.*\n\n1. **No personal information.** *This includes anything hosted on Facebook's servers, as they can be traced to the original account holder. Stalking &amp; harassment will not be tolerated.*\n\n1. **No solicitation of votes or DAE posts.** \n\n1. **No non-author URLs in images.** *We only tolerate URLs in images if they serve to give credit to the original author.*\n\n**Please also read the full version of these rules [here](http://www.reddit.com/r/pics/comments/lb24q/rpics_ruleset/).**\n\n\nIf your submission appears to be banned but meets the above rules, [please send us a message](/message/compose?to=%23pics). Don't delete it as that makes the filter hate you! \n\n\nIf you come across any rule violations, please report the submission or [message the mods](http://www.reddit.com/message/compose?to=%23pics) and one of us will remove it!\n\n#Related subreddits#\n\n* **[misc](/r/misc/)**\n* **[gifs](/r/gifs/)**\n* **[f7u12](/r/fffffffuuuuuuuuuuuu/)**\n* **[Vertical](/r/Vertical)**\n* **[Demotivational](/r/Demotivational)**\n* **[Advice Animals](/r/AdviceAnimals)**\n* **[The SFWPorn Network](http://reddit.com/r/earthporn+villageporn+cityporn+spaceporn+waterporn+abandonedporn+animalporn+humanporn+botanicalporn+adrenalineporn+destructionporn+movieposterporn+albumartporn+machineporn+newsporn+geekporn+bookporn+mapporn+adporn+designporn+roomporn+militaryporn+historyporn+quotesporn+skyporn+fireporn+infrastructureporn)**\n* [Rage Novels](/r/ragenovels/)\n* [Rage Ops](/r/rageops)\n* [Advice Atheists](/r/AdviceAtheists)\n* [a6theism10](/r/aaaaaatheismmmmmmmmmm)\n* [Trolling Animals](/r/TrollingAnimals)\n* [/r/AnythingGoesPics](/r/AnythingGoesPics)\n* [/r/OriginalHub](/r/OriginalHub)\n* [/r/screenshots](/r/screenshots)\n* [/r/tradingfaces](/r/tradingfaces)\n* [/r/nostalgia](/r/nostalgia)\n* [/r/facepalm](/r/facepalm)\n* [/r/gamingpics](/r/gamingpics)\n* [/r/aww](/r/aww)\n* [/r/eCards](/r/eCards)\n* [/r/comics](/r/comics)\n* [/r/webcomics](/r/webcomics)\n* [/r/photography](/r/photography)\n* [/r/PictureChallenge](/r/PictureChallenge)\n* [/r/photocritique](/r/photocritique)\n* [/r/windowshots](/r/windowshots)\n* [/r/wallpaper](/r/wallpaper)\n* [/r/wallpapers](/r/wallpapers)\n* [/r/1000words](/r/1000words)\n* [/r/newreddits](/r/newreddits)\n\nAlso check out http://irc.reddit.com\n\n### [***20/10/11 New Ruleset***: Please report violations using the 'report' button.](http://www.reddit.com/r/pics/comments/lb24q/rpics_ruleset/)###"
32
+ }
33
+ },
34
+ {
35
+ "kind":"t5",
36
+ "data":{
37
+ "display_name":"funny",
38
+ "name":"t5_2qh33",
39
+ "title":"funny",
40
+ "url":"/r/funny/",
41
+ "created":1201242956.0,
42
+ "created_utc":1201242956.0,
43
+ "over18":false,
44
+ "subscribers":1111900,
45
+ "id":"2qh33",
46
+ "description":"***New Rule***: No posts with their sole purpose being to communicate with another redditor. [Example.](http://www.reddit.com/r/funny/comments/lq3uv/a_student_in_a_course_i_teach_is_constantly/) Sorry, you're going to have to use a different form of communication.\n\n---\n\n1. [**New r/Funny Rule**, click here to see.](http://www.reddit.com/r/funny/comments/lqgx7/new_rule_use_your_phone_or_something/)\n\n**Welcome to r/Funny:**\n\nYou may only post if you are funny. \n\nNo rage comics. Go to [/F7U12](http://www.reddit.com/r/fffffffuuuuuuuuuuuu) instead.\n\n**No Memes!** Go to [/AdviceAnimals](/r/adviceanimals) instead.\n\nRehosted webcomics will be removed. Please submit a link to the original comic's site and preferably an imgur link in the comments. [(*)](http://www.reddit.com/r/funny/comments/kqwwx/we_need_to_talk_about_rehosting_wecomics/)\n\nBefore you submit a screenshot of a reddit thread *here*, you might want to check out [r/BestOf](http://www.reddit.com/r/bestof). \n\nNeed more? Check out:\n\n* [humor](http://www.reddit.com/r/humor) for more in-depth stuff\n* [jokes](/r/jokes)\n* [comics](/r/comics)\n* [punny](/r/punny)\n* [Very Punny](/r/verypunny)\n* [lolcats](/r/lolcats)\n* [lol](/r/lol)\n* [TrollingAnimals](/r/TrollingAnimals)\n* [Rage Novels](/r/ragenovels/)\n* [Demotivational](http://www.reddit.com/r/Demotivational)\n* **[misc](/r/misc/)** for anything else\n\nStill need more? See Reddit's [best / worst](http://www.reddit.com/r/AskReddit/comments/8ft5j/tell_me_your_best_worst_joke_reddit/?sort=top) and [offensive](http://www.reddit.com/r/funny/comments/7rxyh/collection_of_totally_offensive_jokes_not_for_the/?sort=top) joke collections (warning: some of those jokes are offensive / nsfw!). \n\n\n------\n\nPlease DO NOT post [personal information](http://www.reddit.com/help/faq#Ispostingpersonalinformationok). This includes anything hosted on Facebook's servers, as they can be traced to the original account holder.\n\n----\n\nIf your submission appears to be banned, please don't just delete it as that makes the filter hate you! Instead please [send us a message](/message/compose?to=%23funny). We'll unban it and it should get better. please allow 10 minutes for the post to appear before messaging moderators\n\n----\n\nCSS - BritishEnglishPolice \u00a92011"
47
+ }
48
+ }
49
+ ],
50
+ "after":"t5_2qq5c",
51
+ "before":null
52
+ }
53
+ }
54
+
55
+ exports.rsp_posts = {
56
+ "kind":"Listing",
57
+ "data":{
58
+ "modhash":"s7069nuzol41d61f1b1ff780c40b025a4848c4b06c6ebaa061",
59
+ "children":[
60
+ {
61
+ "kind":"t3",
62
+ "data":{
63
+ "domain":"perlbuzz.com",
64
+ "media_embed":{
65
+
66
+ },
67
+ "levenshtein":null,
68
+ "subreddit":"programming",
69
+ "selftext_html":null,
70
+ "selftext":"",
71
+ "likes":null,
72
+ "saved":false,
73
+ "id":"ms13h",
74
+ "clicked":false,
75
+ "title":"Finding a lost dog's owner with Perl",
76
+ "media":null,
77
+ "score":426,
78
+ "over_18":false,
79
+ "hidden":false,
80
+ "thumbnail":"",
81
+ "subreddit_id":"t5_2fwo",
82
+ "author_flair_css_class":null,
83
+ "downs":222,
84
+ "is_self":false,
85
+ "permalink":"/r/programming/comments/ms13h/finding_a_lost_dogs_owner_with_perl/",
86
+ "name":"t3_ms13h",
87
+ "created":1322517472.0,
88
+ "url":"http://perlbuzz.com/2011/11/finding-a-lost-dogs-owner-with-perl-and-wwwmechanize.html",
89
+ "author_flair_text":null,
90
+ "author":"mpeters",
91
+ "created_utc":1322492272.0,
92
+ "num_comments":61,
93
+ "ups":648
94
+ }
95
+ },
96
+ {
97
+ "kind":"t3",
98
+ "data":{
99
+ "domain":"elegantcoding.com",
100
+ "media_embed":{
101
+
102
+ },
103
+ "levenshtein":null,
104
+ "subreddit":"programming",
105
+ "selftext_html":null,
106
+ "selftext":"",
107
+ "likes":null,
108
+ "saved":false,
109
+ "id":"msl7x",
110
+ "clicked":false,
111
+ "title":"Eleven equations every Computer Science geeks should know",
112
+ "media":null,
113
+ "score":76,
114
+ "over_18":false,
115
+ "hidden":false,
116
+ "thumbnail":"",
117
+ "subreddit_id":"t5_2fwo",
118
+ "author_flair_css_class":null,
119
+ "downs":41,
120
+ "is_self":false,
121
+ "permalink":"/r/programming/comments/msl7x/eleven_equations_every_computer_science_geeks/",
122
+ "name":"t3_msl7x",
123
+ "created":1322547476.0,
124
+ "url":"http://www.elegantcoding.com/2011/11/eleven-equations-true-computer-science.html",
125
+ "author_flair_text":null,
126
+ "author":"chandershivdasani",
127
+ "created_utc":1322522276.0,
128
+ "num_comments":34,
129
+ "ups":117
130
+ }
131
+ }
132
+ ],
133
+ "after":"t3_mqs0s",
134
+ "before":null
135
+ }
136
+ }
137
+ return