corkboard 0.1.0

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 (41) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +44 -0
  3. data/Rakefile +29 -0
  4. data/app/assets/images/corkboard/image.png +0 -0
  5. data/app/assets/javascripts/corkboard.js.erb +45 -0
  6. data/app/assets/javascripts/corkboard/app/board.js +86 -0
  7. data/app/assets/javascripts/corkboard/base.js +9 -0
  8. data/app/assets/javascripts/corkboard/lib/publisher.js +53 -0
  9. data/app/assets/javascripts/corkboard/lib/weighted_randomizer.js +41 -0
  10. data/app/assets/stylesheets/corkboard/application.css +88 -0
  11. data/app/assets/stylesheets/corkboard/responsive.css +93 -0
  12. data/app/controllers/corkboard/application_controller.rb +15 -0
  13. data/app/controllers/corkboard/authorizations_controller.rb +65 -0
  14. data/app/controllers/corkboard/board_controller.rb +10 -0
  15. data/app/controllers/corkboard/posts_controller.rb +72 -0
  16. data/app/helpers/corkboard/application_helper.rb +72 -0
  17. data/app/models/corkboard/authorization.rb +13 -0
  18. data/app/models/corkboard/post.rb +19 -0
  19. data/app/models/corkboard/subscription.rb +34 -0
  20. data/app/views/corkboard/authorizations/index.html.erb +32 -0
  21. data/app/views/corkboard/board/_filters.html.erb +15 -0
  22. data/app/views/corkboard/board/_posts.html.erb +10 -0
  23. data/app/views/corkboard/board/show.html.erb +4 -0
  24. data/app/views/layouts/corkboard/application.html.erb +14 -0
  25. data/config/routes.rb +29 -0
  26. data/db/migrate/01_create_corkboard_authorizations.rb +17 -0
  27. data/lib/corkboard.rb +191 -0
  28. data/lib/corkboard/client.rb +51 -0
  29. data/lib/corkboard/clients/instagram.rb +26 -0
  30. data/lib/corkboard/engine.rb +27 -0
  31. data/lib/corkboard/provider.rb +21 -0
  32. data/lib/corkboard/providers/instagram.rb +29 -0
  33. data/lib/corkboard/publishers/mock.rb +14 -0
  34. data/lib/corkboard/publishers/pusher.rb +31 -0
  35. data/lib/corkboard/service/config.rb +12 -0
  36. data/lib/corkboard/version.rb +3 -0
  37. data/lib/generators/corkboard/install_generator.rb +16 -0
  38. data/lib/generators/corkboard/templates/README +14 -0
  39. data/lib/generators/corkboard/templates/initializer.rb +45 -0
  40. data/lib/tasks/corkboard_tasks.rake +4 -0
  41. metadata +412 -0
@@ -0,0 +1,51 @@
1
+ module Corkboard
2
+ # Client is ...
3
+ module Client
4
+ extend ActiveSupport::Concern
5
+
6
+ included do |base|
7
+ base.extend(ActiveModel::Naming)
8
+ end
9
+
10
+ def strategy
11
+ raise NotImplementedError
12
+ end
13
+
14
+ def callback_url
15
+ [full_host, script_name, "/posts/#{strategy}/callback", query_string].join
16
+ end
17
+
18
+ def preload
19
+ raise NotImplementedError
20
+ end
21
+
22
+ def recent
23
+ raise NotImplementedError
24
+ end
25
+
26
+ def subscribe(*)
27
+ raise NotImplementedError
28
+ end
29
+
30
+ def subscribe_callback
31
+ callback_url
32
+ end
33
+
34
+ private
35
+
36
+ def full_host
37
+ # TODO...
38
+ OmniAuth.config.full_host
39
+ end
40
+
41
+ def script_name
42
+ # TODO...
43
+ ''
44
+ end
45
+
46
+ def query_string
47
+ # TODO...
48
+ ''
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ require 'instagram'
2
+
3
+ module Corkboard
4
+ module Clients
5
+ class Instagram < ::Instagram::Client
6
+ include Corkboard::Client
7
+
8
+ def strategy
9
+ :instagram
10
+ end
11
+
12
+ def preload
13
+ user_media_feed(:count => 100)
14
+ end
15
+
16
+ def recent
17
+ user_media_feed(:count => 10)
18
+ end
19
+
20
+ def subscribe(*args)
21
+ options = args.extract_options!
22
+ create_subscription(*(args + [subscribe_callback] + [options]))
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ require 'omniauth'
2
+
3
+ module Corkboard
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Corkboard
6
+
7
+ initializer 'corkboard.providers' do |app|
8
+ app.config.middleware.use(Builder, self) do
9
+ Corkboard.services.each do |service|
10
+ # TODO: handle absence of `.settings` for OmniAuth strategies.
11
+ # TODO: handle absence of `.settings` for Corkboard providers (unconfigured).
12
+ klass = Corkboard.provider_for(service)
13
+ provider(*([klass] + klass.setup(Corkboard.service_configs[service])))
14
+ end
15
+ end
16
+ end
17
+
18
+ class Builder < OmniAuth::Builder
19
+ attr_accessor :config
20
+
21
+ def initialize(app, config, &block)
22
+ @config = config
23
+ super(app, &block)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module Corkboard
2
+ # Providers are the heart of Corkboard's aggregation of content.
3
+ # Each provider defined must include this module.
4
+ module Provider
5
+ extend ActiveSupport::Concern
6
+
7
+ included do |base|
8
+ base.extend(ActiveModel::Naming)
9
+ end
10
+
11
+ module ClassMethods
12
+ def service
13
+ @service ||= self.model_name.element.intern
14
+ end
15
+ end
16
+
17
+ def service
18
+ @service ||= self.class.service
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ require 'instagram'
2
+ require 'omniauth-instagram'
3
+
4
+ module Corkboard
5
+ module Providers
6
+ class Instagram < OmniAuth::Strategies::Instagram
7
+ include Corkboard::Provider
8
+
9
+ class << self
10
+ def setup(config)
11
+ settings = config.args.first
12
+
13
+ ::Instagram.configure do |c|
14
+ c.client_id = settings[:client_key]
15
+ c.client_secret = settings[:client_secret]
16
+ end
17
+
18
+ [settings[:client_key], settings[:client_secret], { :scope => 'relationships' }]
19
+ end
20
+
21
+ def client(options = {})
22
+ # NOTE: we want a new one each time in order to stay trim, and in
23
+ # case of any config changes... via a call to `#setup`.
24
+ Corkboard::Clients::Instagram.new(options)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ module Corkboard
2
+ module Publishers
3
+ class Mock
4
+ def initialize(*)
5
+ # no-op
6
+ end
7
+
8
+ # TODO: store in memory
9
+ def publish!(entry)
10
+ # no-op (for now)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ require 'pusher'
2
+
3
+ module Corkboard
4
+ module Publishers
5
+ class Pusher
6
+ attr_reader :credentials
7
+
8
+ def initialize(credentials)
9
+ @credentials = credentials
10
+ configure
11
+ end
12
+
13
+ def publish!(entry)
14
+ ::Pusher['corkboard'].trigger!('posts/new', {
15
+ :eid => entry.eid,
16
+ :image => entry.images.low_resolution.url,
17
+ :caption => (entry.caption ? entry.caption.text : ''),
18
+ :tags => entry.tags
19
+ })
20
+ end
21
+
22
+ private
23
+
24
+ def configure
25
+ ::Pusher.app_id = credentials[:client_app]
26
+ ::Pusher.key = credentials[:client_key]
27
+ ::Pusher.secret = credentials[:client_secret]
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ module Corkboard
2
+ module Service
3
+ class Config
4
+ attr_reader :provider, :args
5
+
6
+ def initialize(provider, args)
7
+ @provider = provider
8
+ @args = args
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module Corkboard
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,16 @@
1
+ module Corkboard
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../templates", __FILE__)
5
+ desc "Installs Corkboard."
6
+
7
+ def install_initializer
8
+ template "initializer.rb", "config/initializers/corkboard.rb"
9
+ end
10
+
11
+ def show_readme
12
+ readme "README" if behavior == :invoke
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ ===============================================================================
2
+
3
+ Thanks for installing Corkboard!
4
+
5
+ Please perform the following steps to complete Corkboard setup:
6
+
7
+ * Run the database migration(s):
8
+
9
+ rake corkboard:install:migrations
10
+ rake db:migrate
11
+
12
+ * Configure Corkboard in the `config/initializers/corkboard.rb` initializer.
13
+
14
+ ===============================================================================
@@ -0,0 +1,45 @@
1
+ # Use this hook to configure Corkboard.
2
+ Corkboard.setup do |config|
3
+ # OmniAuth and Redis configuration.
4
+ # ---------------------------------------------------------------------------
5
+ OmniAuth.config.full_host = 'http://www.example.com'
6
+ config.redis = Redis.connect(:url => ENV['REDIS_URL'])
7
+
8
+ # Authentication: who can see what.
9
+ # ---------------------------------------------------------------------------
10
+ config.authentication({
11
+ :admin => :authenticate_admin!, # use `false` to disable auth.
12
+ :board => :authenticate_user! # use `false` to disable auth.
13
+ })
14
+
15
+ # Interests: the hashtags to look for and filter by.
16
+ # ---------------------------------------------------------------------------
17
+ config.interests({
18
+ :scope => [:hashtag],
19
+ :filters => [:other_hashtag]
20
+ })
21
+
22
+ # Presentation: display stuff.
23
+ # ---------------------------------------------------------------------------
24
+ config.presentation({
25
+ :title => 'Example title',
26
+ :description => 'Example description',
27
+ :framework => :bootstrap,
28
+ :weights => { :s => 10, :m => 3, :l => 1 }
29
+ })
30
+
31
+ # Publishers: send to the browser.
32
+ # ---------------------------------------------------------------------------
33
+ config.publisher(:pusher, {
34
+ :client_app => ENV['PUSHER_APP'],
35
+ :client_key => ENV['PUSHER_KEY'],
36
+ :client_secret => ENV['PUSHER_SECRET']
37
+ })
38
+
39
+ # Services: pull from social networks.
40
+ # ---------------------------------------------------------------------------
41
+ config.service(:instagram, {
42
+ :client_key => ENV['INSTAGRAM_KEY'],
43
+ :client_secret => ENV['INSTAGRAM_SECRET']
44
+ })
45
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :corkboard do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,412 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: corkboard
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Corey Innis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: jquery-rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: redis
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: weighted_randomizer
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: pusher
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: instagram
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: omniauth
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: omniauth-oauth2
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: omniauth-instagram
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: rspec-rails
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: capybara
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: capybara-webkit
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: ffaker
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: jasmine
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: jasminerice
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ - !ruby/object:Gem::Dependency
255
+ name: jasminerice-runner
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - ! '>='
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ type: :development
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ! '>='
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ - !ruby/object:Gem::Dependency
271
+ name: mock_redis
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - ! '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ - !ruby/object:Gem::Dependency
287
+ name: sqlite3
288
+ requirement: !ruby/object:Gem::Requirement
289
+ none: false
290
+ requirements:
291
+ - - ! '>='
292
+ - !ruby/object:Gem::Version
293
+ version: '0'
294
+ type: :development
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
297
+ none: false
298
+ requirements:
299
+ - - ! '>='
300
+ - !ruby/object:Gem::Version
301
+ version: '0'
302
+ - !ruby/object:Gem::Dependency
303
+ name: yard
304
+ requirement: !ruby/object:Gem::Requirement
305
+ none: false
306
+ requirements:
307
+ - - ! '>='
308
+ - !ruby/object:Gem::Version
309
+ version: '0'
310
+ type: :development
311
+ prerelease: false
312
+ version_requirements: !ruby/object:Gem::Requirement
313
+ none: false
314
+ requirements:
315
+ - - ! '>='
316
+ - !ruby/object:Gem::Version
317
+ version: '0'
318
+ - !ruby/object:Gem::Dependency
319
+ name: yard-rails
320
+ requirement: !ruby/object:Gem::Requirement
321
+ none: false
322
+ requirements:
323
+ - - ! '>='
324
+ - !ruby/object:Gem::Version
325
+ version: '0'
326
+ type: :development
327
+ prerelease: false
328
+ version_requirements: !ruby/object:Gem::Requirement
329
+ none: false
330
+ requirements:
331
+ - - ! '>='
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ description: Dashboard composed of social network posts.
335
+ email:
336
+ - corey@coolerator.net
337
+ executables: []
338
+ extensions: []
339
+ extra_rdoc_files: []
340
+ files:
341
+ - app/assets/images/corkboard/image.png
342
+ - app/assets/javascripts/corkboard/app/board.js
343
+ - app/assets/javascripts/corkboard/base.js
344
+ - app/assets/javascripts/corkboard/lib/publisher.js
345
+ - app/assets/javascripts/corkboard/lib/weighted_randomizer.js
346
+ - app/assets/javascripts/corkboard.js.erb
347
+ - app/assets/stylesheets/corkboard/application.css
348
+ - app/assets/stylesheets/corkboard/responsive.css
349
+ - app/controllers/corkboard/application_controller.rb
350
+ - app/controllers/corkboard/authorizations_controller.rb
351
+ - app/controllers/corkboard/board_controller.rb
352
+ - app/controllers/corkboard/posts_controller.rb
353
+ - app/helpers/corkboard/application_helper.rb
354
+ - app/models/corkboard/authorization.rb
355
+ - app/models/corkboard/post.rb
356
+ - app/models/corkboard/subscription.rb
357
+ - app/views/corkboard/authorizations/index.html.erb
358
+ - app/views/corkboard/board/_filters.html.erb
359
+ - app/views/corkboard/board/_posts.html.erb
360
+ - app/views/corkboard/board/show.html.erb
361
+ - app/views/layouts/corkboard/application.html.erb
362
+ - config/routes.rb
363
+ - db/migrate/01_create_corkboard_authorizations.rb
364
+ - lib/corkboard/client.rb
365
+ - lib/corkboard/clients/instagram.rb
366
+ - lib/corkboard/engine.rb
367
+ - lib/corkboard/provider.rb
368
+ - lib/corkboard/providers/instagram.rb
369
+ - lib/corkboard/publishers/mock.rb
370
+ - lib/corkboard/publishers/pusher.rb
371
+ - lib/corkboard/service/config.rb
372
+ - lib/corkboard/version.rb
373
+ - lib/corkboard.rb
374
+ - lib/generators/corkboard/install_generator.rb
375
+ - lib/generators/corkboard/templates/initializer.rb
376
+ - lib/generators/corkboard/templates/README
377
+ - lib/tasks/corkboard_tasks.rake
378
+ - MIT-LICENSE
379
+ - Rakefile
380
+ - README.md
381
+ homepage: https://github.com/fullandby/corkboard
382
+ licenses: []
383
+ post_install_message:
384
+ rdoc_options: []
385
+ require_paths:
386
+ - lib
387
+ required_ruby_version: !ruby/object:Gem::Requirement
388
+ none: false
389
+ requirements:
390
+ - - ! '>='
391
+ - !ruby/object:Gem::Version
392
+ version: '0'
393
+ segments:
394
+ - 0
395
+ hash: 2025356313284725202
396
+ required_rubygems_version: !ruby/object:Gem::Requirement
397
+ none: false
398
+ requirements:
399
+ - - ! '>='
400
+ - !ruby/object:Gem::Version
401
+ version: '0'
402
+ segments:
403
+ - 0
404
+ hash: 2025356313284725202
405
+ requirements: []
406
+ rubyforge_project:
407
+ rubygems_version: 1.8.24
408
+ signing_key:
409
+ specification_version: 3
410
+ summary: Dashboard composed of social network posts.
411
+ test_files: []
412
+ has_rdoc: