gocart 0.0.1 → 0.0.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.
Files changed (71) 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 +86 -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 +136 -0
  11. data/assets/src/server/main.go +31 -0
  12. data/assets/src/server/templates.go +42 -0
  13. data/assets/src/www/app/coffee/adapters/dummy_data.js.coffee +6 -0
  14. data/assets/src/www/app/coffee/adapters/reddit.js.coffee +294 -0
  15. data/assets/src/www/app/coffee/application.js.coffee +23 -0
  16. data/assets/src/www/app/coffee/controllers/app.js.coffee +69 -0
  17. data/assets/src/www/app/coffee/controllers/nav.js.coffee +55 -0
  18. data/assets/src/www/app/coffee/controllers/subreddit_posts.js.coffee +57 -0
  19. data/assets/src/www/app/coffee/helpers/event_manager.js.coffee +3 -0
  20. data/assets/src/www/app/coffee/helpers/properties.js.coffee +19 -0
  21. data/assets/src/www/app/coffee/helpers/storage.js.coffee +14 -0
  22. data/assets/src/www/app/coffee/libs/3rdparty.js.coffee +7 -0
  23. data/assets/src/www/app/coffee/libs/deferred.js.coffee +92 -0
  24. data/assets/src/www/app/coffee/libs/logger.js.coffee +40 -0
  25. data/assets/src/www/app/coffee/libs/mod_loader.js.coffee +44 -0
  26. data/assets/src/www/app/coffee/main.js.coffee +42 -0
  27. data/assets/src/www/app/coffee/models/comment.js.coffee +26 -0
  28. data/assets/src/www/app/coffee/models/post.js.coffee +27 -0
  29. data/assets/src/www/app/coffee/models/sub_reddit.js.coffee +18 -0
  30. data/assets/src/www/app/coffee/widgets/post_detail.js.coffee +2 -0
  31. data/assets/src/www/app/coffee/widgets/posts.js.coffee +45 -0
  32. data/assets/src/www/app/coffee/widgets/subreddit_detail.js.coffee +2 -0
  33. data/assets/src/www/app/coffee/widgets/subreddits.js.coffee +44 -0
  34. data/assets/src/www/app/images/test.png +0 -0
  35. data/assets/src/www/app/partials/index.html +92 -0
  36. data/assets/src/www/app/sass/application.css.scss +136 -0
  37. data/assets/src/www/app/templates/application.gotmpl +2 -0
  38. data/assets/src/www/app/templates/base.gotmpl.erb +27 -0
  39. data/assets/src/www/app/templates/home.gotmpl +9 -0
  40. data/assets/src/www/spec/coffee/deferred-spec.coffee +202 -0
  41. data/assets/src/www/spec/coffee/mocks.coffee +137 -0
  42. data/assets/src/www/spec/coffee/mod_loader-spec.coffee +45 -0
  43. data/assets/src/www/spec/coffee/properties-spec.coffee +21 -0
  44. data/assets/src/www/spec/coffee/reddit_adapter-spec.coffee +143 -0
  45. data/assets/src/www/vendor/css/jq.ui.css +630 -0
  46. data/assets/src/www/vendor/images/ajax-loader.png +0 -0
  47. data/assets/src/www/vendor/images/icons-18-black.png +0 -0
  48. data/assets/src/www/vendor/images/icons-18-white.png +0 -0
  49. data/assets/src/www/vendor/images/icons-36-black.png +0 -0
  50. data/assets/src/www/vendor/images/icons-36-white.png +0 -0
  51. data/assets/src/www/vendor/js/ICanHaz.min.js +10 -0
  52. data/assets/src/www/vendor/js/jq.mobi.min.js +20 -0
  53. data/assets/src/www/vendor/js/jq.ui.min.js +90 -0
  54. data/assets/src/www/vendor/js/jq.web.min.js +58 -0
  55. data/assets/src/www/vendor/js/phonegap-1.1.0.js +4577 -0
  56. data/assets/src/www/vendor/js/touch.js +103 -0
  57. data/assets/tasks/app.rake +34 -0
  58. data/assets/tasks/jasmine.rake +8 -0
  59. data/assets/tasks/server.rake +58 -0
  60. data/assets/tasks/www.rake +163 -0
  61. data/bin/gocart +25 -0
  62. data/lib/gocart.rb +5 -6
  63. data/lib/gocart/base.rb +28 -0
  64. data/lib/gocart/environment.rb +18 -0
  65. data/lib/gocart/version.rb +1 -1
  66. metadata +113 -41
  67. data/.gitignore +0 -4
  68. data/Gemfile +0 -4
  69. data/Rakefile +0 -1
  70. data/gocarg.go +0 -29
  71. data/gocart.gemspec +0 -38
@@ -0,0 +1,2 @@
1
+ modLoader.define 'app/widgets/subreddit_detail', (require, exports) ->
2
+ return
@@ -0,0 +1,44 @@
1
+ modLoader.define 'widgets/subreddits', (require, exports) ->
2
+ ich = require('libs/3rdparty').ich
3
+
4
+ class SubReddits
5
+ constructor:(options)->
6
+ @_subReddits = options.subReddits
7
+ @_controller = options.controller
8
+ return
9
+
10
+ appendTo: (toElem)->
11
+ toElem.append @_render()
12
+ @_addHandlers()
13
+ return
14
+
15
+ remove: ->
16
+ @_removeHandlers
17
+ return
18
+
19
+ _render: ->
20
+ items = for sub in @_subReddits.data
21
+ {
22
+ name: sub.url().replace(/\/r\/|\//g,'')
23
+ id: sub.id()
24
+ }
25
+
26
+ data =
27
+ subs: items
28
+
29
+ return ich.subReddits(data)
30
+
31
+ _addHandlers: ->
32
+ $('.subreddits a').bind 'click', (event)=>
33
+ @_controller.showSubRedditPosts(event.target.id)
34
+ return
35
+
36
+ return
37
+
38
+ _removeHandlers: ->
39
+ return
40
+
41
+ exports.create = (subReddits)->
42
+ return new SubReddits(subReddits);
43
+
44
+ return
File without changes
@@ -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,27 @@
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/main.js"></script>
20
+ <link rel="stylesheet" type="text/css" href="{{.RootURL}}/assets/css/application.css">
21
+ {{end}}
22
+
23
+
24
+ {{define "base.footer"}}
25
+ </body>
26
+ </html>
27
+ {{end}}
@@ -0,0 +1,9 @@
1
+ {{define "home.contents"}}
2
+ <h1>Registration is not open yet</h1>
3
+ {{end}}
4
+
5
+ {{define "home"}}
6
+ {{template "base.header" .Common}}
7
+ {{template "home.contents" .Contents}}
8
+ {{template "base.footer"}}
9
+ {{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
+