karottenreibe-qwicky 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/HISTORY.txt +14 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.txt +112 -0
  4. data/bin/qwicky +543 -0
  5. data/qwicky.gemspec +44 -0
  6. metadata +106 -0
data/HISTORY.txt ADDED
@@ -0,0 +1,14 @@
1
+ 0.0.1
2
+ =====
3
+
4
+ * First implementation
5
+ * Support for simple wiki pages
6
+ * Support for markup:
7
+ - Markdown
8
+ - RDoc
9
+ - Textile
10
+ - Plain Text (*scary*)
11
+ * Sitemap
12
+ * Wiki links
13
+ * Custom stylesheets
14
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ /*---- DON'T PANIC License 1.1 -----------
2
+
3
+ Don't panic, this piece of software is
4
+ free, i.e. you can do with it whatever
5
+ you like, including, but not limited to:
6
+
7
+ * using it
8
+ * copying it
9
+ * (re)distributing it
10
+ * burning/burying/shredding it
11
+ * eating it
12
+ * using it to obtain world domination
13
+ * and ignoring it
14
+
15
+ Under the sole condition that you
16
+
17
+ * CONSIDER buying the author a strong
18
+ brownian motion producer, say a nice
19
+ hot cup of tea, should you ever meet
20
+ him in person.
21
+
22
+ ----------------------------------------*/
data/README.txt ADDED
@@ -0,0 +1,112 @@
1
+ Share and enjoy!
2
+ ================
3
+
4
+ Hi dear visitor, this is the README file of
5
+ **[Qwicky] [2]**, the REALLY quick wiki. (and
6
+ small as well!)
7
+
8
+ You are obviously reading this, so the README
9
+ has already fulfilled it's purpose. Feel free
10
+ to close this file now.
11
+
12
+ If, of course, you'd like to know how Qwicky
13
+ is to be operated, feel also free to read on!
14
+
15
+ Contributing
16
+ ------------
17
+
18
+ Got a patch? Found a bug? Need a feature?
19
+ Let me know!
20
+
21
+ karottenreibe _at_ gmail _dot_ com
22
+
23
+ Usage
24
+ -----
25
+
26
+ 1. Start it:
27
+
28
+ qwicky
29
+
30
+ 2. Open it in your browser
31
+
32
+ http://localhost:4567
33
+
34
+ 3. Set the page you want to be displayed when
35
+ starting Qwicky, set the Markup language
36
+ you want to use, press save.
37
+
38
+ 4. Enjoy! (and don't forget to share...)
39
+
40
+ BTW, did I mention that you can tell qwicky
41
+ where to put the wiki database and settings
42
+ file?
43
+
44
+ qwicky -- some/dir/to/put/the/files/in
45
+
46
+ Oh, and also try
47
+
48
+ qwicky --help
49
+
50
+ for additional options...
51
+
52
+ Markup
53
+ ------
54
+
55
+ There's only one catch to markup: If you want
56
+ something other than plain text and RDoc (which
57
+ is most probably already installed on your system),
58
+ you'll have to install the gems yourself.
59
+ This is to not introduce any unnecessary gems to
60
+ your system.
61
+
62
+ But DON'T PANIC, it's easy:
63
+
64
+ * For Markdown, you can do
65
+
66
+ gem install rdiscount
67
+
68
+ or any of the other nice Markdown libraries, e.g.
69
+ Maruku, peg-markdown etc.
70
+ I wouldn't recommend BlueCloth, unless you really
71
+ think you need that, see [this Blog post] [1].
72
+ (As you might have already guessed from the layout
73
+ of this document, I prefer Markdown. But it's your
74
+ choice.)
75
+
76
+ * For Textile, you can do
77
+
78
+ gem install redcloth
79
+
80
+ Qwicky will automatically pick out the right gem to
81
+ require.
82
+
83
+ Links
84
+ -----
85
+
86
+ To link to other wiki pages, use the old, familiar
87
+
88
+ [[other page]]
89
+ [[other page|title]]
90
+
91
+ syntax.
92
+
93
+ Styles
94
+ ------
95
+
96
+ If you don't like the looks of Qwicky -- no, of course
97
+ that's impossible... silly...
98
+
99
+ But in any case, if you create a file called _qwicky.sass_
100
+ in the directory where your database and settings are
101
+ stored, qwicky will automatically run it through
102
+ [Sass] [3] and apply it.
103
+
104
+ ****
105
+
106
+ [1]: http://tomayko.com/writings/ruby-markdown-libraries-real-cheap-for-you-two-for-price-of-one
107
+ "Post about why not to use BlueCloth"
108
+ [2]: http://github.com/karottenreibe/qwicky/
109
+ "Qwicky's Homepage/Git repo/Wiki/whatever :-)"
110
+ [3]: http://haml.hamptoncatlin.com/docs/rdoc/classes/Sass.html
111
+ "Documentation of Sass syntax"
112
+
data/bin/qwicky ADDED
@@ -0,0 +1,543 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'fileutils'
4
+ require 'sinatra'
5
+ require 'dm-core'
6
+ require 'dm-timestamps'
7
+ require 'dm-validations'
8
+ require 'dm-aggregates'
9
+ require 'haml'
10
+ require 'sass'
11
+ require 'base64'
12
+
13
+ set :run, true
14
+
15
+ # Read working dir. {{{1
16
+ idx = ARGV.index { |arg| arg == '--' }
17
+ DIR = File.expand_path(
18
+ if idx.nil? or ARGV[idx+1].nil?
19
+ Dir.pwd
20
+ else
21
+ ARGV[idx+1]
22
+ end
23
+ )
24
+
25
+ unless File.exist?(DIR) and File.directory?(DIR)
26
+ puts "No such directory: #{DIR}"
27
+ exit -1
28
+ end
29
+
30
+ # Database stuff. {{{1
31
+ class Page
32
+ include DataMapper::Resource
33
+
34
+ property :id, Serial
35
+ property :name, Text, :nullable => false
36
+ property :content, Text, :nullable => false
37
+ end
38
+
39
+ DataMapper::setup(:default, "sqlite3://#{DIR}/qwicky.db")
40
+ DataMapper::auto_upgrade!
41
+
42
+ # Markup stuff. {{{1
43
+ module Markup
44
+ # Base class. {{{2
45
+ class Markup
46
+ class << self
47
+ attr_reader :description, :link
48
+
49
+ def markups
50
+ @@markups
51
+ end
52
+
53
+ def [] type
54
+ @@markups ||= Hash.new
55
+ @@markups[type]
56
+ end
57
+
58
+ def type id, description, link = nil
59
+ @@markups ||= Hash.new
60
+ @@markups[id] = self
61
+ @description = description
62
+ @link = link
63
+ end
64
+ end
65
+
66
+ def description
67
+ self.class.description
68
+ end
69
+
70
+ def link
71
+ self.class.link
72
+ end
73
+
74
+ def format text
75
+ text
76
+ end
77
+ end
78
+
79
+ # Text. {{{2
80
+ class MText < Markup
81
+ type 'text', 'Simple text'
82
+
83
+ def format text
84
+ "<span style='white-space:pre'>#{text}</span>"
85
+ end
86
+ end
87
+
88
+ # Markdown. {{{2
89
+ class MMarkdown < Markup
90
+ type 'markdown', 'Markdown', 'http://daringfireball.net/projects/markdown/'
91
+
92
+ def initialize
93
+ unless Object.const_defined?(:Markdown)
94
+ begin
95
+ require 'rdiscount'
96
+ return
97
+ rescue LoadError => boom
98
+ end
99
+
100
+ begin
101
+ require 'peg_markdown'
102
+ return
103
+ rescue LoadError => boom
104
+ end
105
+
106
+ begin
107
+ require 'maruku'
108
+ Object.const_set(:Markdown, Maruku)
109
+ return
110
+ rescue LoadError => boom
111
+ end
112
+
113
+ begin
114
+ require 'bluecloth'
115
+ return
116
+ rescue LoadError => boom
117
+ puts "Looks like you don't have a Markdown interpreter installed!"
118
+ puts "Please get one, like"
119
+ puts "* RDiscount"
120
+ puts "* peg-markdown"
121
+ puts "* Maruku"
122
+ puts "* BlueCloth"
123
+ puts "Reverting to simple text markup"
124
+ throw :revert
125
+ end
126
+ end
127
+ end
128
+
129
+ def format text
130
+ Markdown.new(text).to_html
131
+ end
132
+ end
133
+
134
+ # Textile. {{{2
135
+ class MTextile < Markup
136
+ type 'textile', 'Textile', 'http://textism.com/tools/textile/'
137
+
138
+ def initialize
139
+ unless Object.const_defined?(:RedCloth)
140
+ begin
141
+ require 'redcloth'
142
+ rescue LoadError => boom
143
+ puts "Looks like you don't have RedCloth installed!"
144
+ puts "This is the gem needed to render Textile syntax"
145
+ puts "Reverting to simple text markup"
146
+ throw :revert
147
+ end
148
+ end
149
+ end
150
+
151
+ def format text
152
+ RedCloth.new(text).to_html
153
+ end
154
+ end
155
+
156
+ # RDoc. {{{2
157
+ class MRDoc < Markup
158
+ type 'rdoc', 'RDoc', 'http://rdoc.sourceforge.net/doc/index.html'
159
+
160
+ def initialize
161
+ unless Object.const_defined?(:SM)
162
+ begin
163
+ require 'rdoc/markup/simple_markup'
164
+ require 'rdoc/markup/simple_markup/to_html'
165
+ rescue LoadError => boom
166
+ puts "Looks like you don't have RDoc installed!"
167
+ puts "This is the gem needed to render RDoc syntax"
168
+ puts "Reverting to simple text markup"
169
+ throw :revert
170
+ end
171
+ end
172
+ end
173
+
174
+ def format text
175
+ SM::SimpleMarkup.new.convert(text, SM::ToHtml.new)
176
+ end
177
+ end
178
+ end
179
+
180
+ # App class. {{{1
181
+ class Qwicky
182
+ attr_accessor :conf, :markup
183
+
184
+ def initialize
185
+ FileUtils.touch("#{DIR}/qwicky.yml")
186
+
187
+ @conf = {
188
+ 'homepage' => '',
189
+ 'markup' => 'text',
190
+ }.merge(
191
+ open("#{DIR}/qwicky.yml") { |f|
192
+ YAML::load(f) || Hash.new
193
+ }
194
+ )
195
+
196
+ set_markup
197
+ end
198
+
199
+ def set_markup
200
+ catch :revert do
201
+ @markup = Markup::Markup[@conf['markup']].new
202
+ return
203
+ end
204
+
205
+ @markup = Markup::Markup['text'].new
206
+ end
207
+
208
+ def format text
209
+ markup.format(text).gsub %r{\[\[([^|\]]+)(\|([^\]]+))?\]\]} do |match|
210
+ page = $3 || $1
211
+ nexist = Page.first(:name => page).nil?
212
+ klass = nexist ? 'bad' : 'good'
213
+ title = nexist ? "Create page #{page}" : "Page #{page}"
214
+ link = '/' + page
215
+ "<a href=#{link.inspect} title=#{title.inspect} class='#{klass}'>#{$1}</a>"
216
+ end
217
+ end
218
+ end
219
+
220
+ APP = Qwicky.new
221
+
222
+ # Routes. {{{1
223
+ helpers do
224
+ def redirect_home
225
+ if APP.conf['homepage'].empty?
226
+ redirect "/..settings"
227
+ else
228
+ redirect "/#{APP.conf['homepage']}"
229
+ end
230
+ end
231
+
232
+ def markup text
233
+ APP.format(text)
234
+ end
235
+ end
236
+
237
+ before do
238
+ @editable = true
239
+ end
240
+
241
+ get '/' do
242
+ redirect_home
243
+ end
244
+
245
+ get '/..settings/?' do
246
+ @editable = false
247
+ @settings = APP.conf
248
+ @title = 'Settings'
249
+ @markups = Markup::Markup.markups
250
+ haml :settings
251
+ end
252
+
253
+ post '/..settings/?' do
254
+ APP.conf.merge!(params[:settings])
255
+ APP.set_markup
256
+ open("#{DIR}/qwicky.yml", 'w') { |f|
257
+ f.write(YAML::dump(APP.conf))
258
+ }
259
+
260
+ redirect_home
261
+ end
262
+
263
+ get '/..license/?' do
264
+ content_type 'text'
265
+ open('LICENSE').read
266
+ end
267
+
268
+ get '/..stylesheet.css' do
269
+ content_type 'text/css'
270
+ sass :stylesheet
271
+ end
272
+
273
+ get '/..user.stylesheet.css' do
274
+ content_type 'text/css'
275
+
276
+ if File.exist?("#{DIR}/qwicky.sass")
277
+ sass open("#{DIR}/qwicky.sass").read()
278
+ else
279
+ ''
280
+ end
281
+ end
282
+
283
+ get '/..favicon' do
284
+ send_data Base64::decode64(haml(:favicon, :layout => false)),
285
+ :filename => 'favicon.png',
286
+ :type => 'image/png',
287
+ :disposition => 'inline'
288
+ end
289
+
290
+ get '/..sitemap' do
291
+ @editable = false
292
+ @title = 'Sitemap'
293
+ @pages = Page.all.sort_by { |page| page.name }
294
+ haml :sitemap
295
+ end
296
+
297
+ get '/:page/?' do |page|
298
+ @page = Page.first(:name => page)
299
+ redirect "/#{page}/edit" if @page.nil?
300
+ @title = page
301
+ haml :page
302
+ end
303
+
304
+ get '/:page/edit/?' do |page|
305
+ @markup = APP.markup
306
+ @page = Page.first(:name => page) || Page.new(:name => page)
307
+ @title = "Editing #{page}"
308
+ haml :edit
309
+ end
310
+
311
+ post '/:page/?' do |page|
312
+ @page = Page.first(:name => page) || Page.new
313
+ @page.name = params[:name]
314
+ @page.content = params[:content]
315
+ @page.save
316
+
317
+ redirect "/#{page}"
318
+ end
319
+
320
+ delete '/:page/?' do |page|
321
+ page = Page.first(:name => page)
322
+ page.destroy unless page.nil?
323
+
324
+ redirect_home
325
+ end
326
+
327
+
328
+ # Templates. {{{1
329
+ __END__
330
+
331
+ @@edit
332
+ %form{ :action => "/#{@page.name}", :method => 'post', :id => 'edit-page' }
333
+ %label{ :for => 'name' } Name
334
+ %input{ :type => 'text', :name => 'name', :value => @page.name }
335
+ %br/
336
+ .markup
337
+ Markup:
338
+ - if @markup.link.nil?
339
+ = @markup.description
340
+ - else
341
+ %a{ :title => "#{@markup.description} homepage", :href => @markup.link, :onclick => 'return external(this)' }= @markup.description
342
+ %label{ :for => 'content' } Content
343
+ %br/
344
+ %textarea{ :name => 'content' }= @page.content
345
+ %br/
346
+ %input{ :type => 'submit', :value => 'Save!' }
347
+
348
+ %form{ :action => "/#{@page.name}", :method => 'post', :onsubmit => 'return confirm("Are you sure you want to delete this page?")' }
349
+ %input{ :type => 'hidden', :name => '_method', :value => 'delete' }
350
+ %input{ :type => 'submit', :value => 'Delete this page!' }
351
+
352
+
353
+ @@layout
354
+ !!!XML
355
+ !!! Strict
356
+ %html{html_attrs}
357
+
358
+ %head
359
+ %title
360
+ Qwicky! --
361
+ - unless @title.nil?
362
+ = @title
363
+ %link{ :rel => 'shortcut icon', :href => '/..favicon' , :type => 'image/png' }
364
+ %link{ :rel => 'stylesheet', :type => 'text/css', :href => "/..stylesheet.css" }
365
+ %link{ :rel => 'stylesheet', :type => 'text/css', :href => "/..user.stylesheet.css" }
366
+ :javascript
367
+ /*global window*/
368
+
369
+ function changePage() {
370
+ window.location.href = '/' + document.getElementById('location').value;
371
+ return false;
372
+ }
373
+
374
+ function external(link) {
375
+ window.open(link.href);
376
+ return false;
377
+ }
378
+
379
+ %body
380
+
381
+ #header
382
+ .right
383
+ %a{ :title => 'Go the the main page of this wiki', :href => '/' } Home
384
+ &#8226;
385
+ %a{ :title => 'View what pages this wiki has', :href => '/..sitemap' } Sitemap
386
+ &#8226;
387
+ %a{ :title => 'Adjust settings', :href => '/..settings' } Settings
388
+ - if @editable
389
+ %a.edit{ :title => 'Edit this wiki page', :href => "/#{@page.name}/edit" } Edit
390
+ %form{ :action => '/', :method => 'get', :onsubmit => 'return changePage()' }
391
+ %input#location{ :type => 'text', :name => 'location' }
392
+ %input{ :type => 'submit', :value => 'Go!' }
393
+
394
+ #main
395
+ = yield
396
+
397
+ #footer
398
+ .copyleft
399
+ (c) 2009 by
400
+ %a{ :title => "Visit karottenreibe's glorious homepage", :href => 'http://karottenreibe.heroku.com'} karottenreibe
401
+ (karottenreibe _at_ gmail _dot_ com)
402
+ %br/
403
+ Licensed under the
404
+ %a{ :title => 'The License of Qwicky', :href => '/..license' } DONT'T PANIC License 1.1
405
+ %br/
406
+ If you want to contribute, visit
407
+ %a{ :title => 'Here you can contribute to the project', :href => 'http://wiki.github.com/karottenreibe/qwicky/' } Qwicky's GitHub page
408
+ - if @editable
409
+ %a.edit{ :title => 'Edit this wiki page', :href => "/#{@page.name}/edit" } Edit
410
+
411
+
412
+ @@page
413
+ #page
414
+ %h1= @page.name
415
+ .content
416
+ = markup(@page.content)
417
+
418
+ @@settings
419
+ %form{ :action => "/..settings", :method => 'post', :id => 'settings' }
420
+ %label{ :for => 'settings[homepage]' } Homepage
421
+ %input{ :type => 'text', :name => 'settings[homepage]', :value => @settings['homepage'] }
422
+ %br/
423
+ %label{ :for => 'settings[markup]' } Markup engine
424
+ - @markups.each do |name,markup|
425
+ - if markup.link.nil?
426
+ %input{ :type => 'radio', :name => 'settings[markup]', :checked => (@settings['markup'] == name), :value => name }= markup.description
427
+ - else
428
+ %input{ :type => 'radio', :name => 'settings[markup]', :checked => (@settings['markup'] == name), :value => name }
429
+ %a{ :title => "#{markup.description} homepage", :href => markup.link, :onclick => 'return external(this)' }= markup.description
430
+ %br/
431
+ %input{ :type => 'submit', :value => 'Save!' }
432
+
433
+
434
+ @@sitemap
435
+ %ul#sitemap
436
+ - @pages.each do |page|
437
+ %li
438
+ %a{ :title => page.name, :href => "/#{page.name}" }= page.name
439
+ %a.edit{ :title => page.name, :href => "/#{page.name}/edit" } (edit)
440
+
441
+ @@stylesheet
442
+ !border = #eee
443
+ !emphasis = #f40
444
+ !background = #fff
445
+ !foreground = #000
446
+
447
+ body
448
+ :color= !foreground
449
+ :background-color= !background
450
+
451
+ a
452
+ :text-decoration none
453
+ :color= !emphasis
454
+ :border-bottom= 1px dotted !background
455
+
456
+ &:hover
457
+ :border-bottom= 1px dotted !emphasis
458
+
459
+ &.bad
460
+ :text-decoration line-through
461
+
462
+ form
463
+
464
+ input, textarea
465
+ :border= 1px solid !foreground
466
+ :background-color= !border
467
+
468
+ textarea
469
+ :width 400px
470
+ :height 400px
471
+
472
+ input[type=text]
473
+ :width 250px
474
+
475
+ label
476
+ :display inline-block
477
+ :width 145px
478
+ :font-family monospace
479
+ :padding-bottom 10px
480
+
481
+ #header
482
+ :text-align center
483
+ :border-bottom= 2px solid !border
484
+ :padding 5px
485
+
486
+ .right
487
+ :float right
488
+ a.edit
489
+ :float left
490
+
491
+ #main
492
+ :padding 20px
493
+
494
+ ul#sitemap
495
+ li
496
+ :display inline-block
497
+ :width 32%
498
+ :margin-bottom 10px
499
+
500
+ a.edit
501
+ :font-family monospace
502
+ :font-size 0.8em
503
+
504
+ form#edit-page
505
+ :padding-bottom 20px
506
+ :border-bottom= 2px solid !border
507
+ :margin-bottom 20px
508
+ :width 410px
509
+
510
+ .markup
511
+ :float right
512
+ :font-family monospace
513
+ :padding-right 10px
514
+
515
+ #footer
516
+ :border-top= 2px solid !border
517
+ :padding 5px
518
+
519
+ .copyleft
520
+ :font-family monospace
521
+ :float right
522
+
523
+
524
+ @@favicon
525
+ :plain
526
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A
527
+ /wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kGDxMdDihyXoMAAAAZdEVYdENv
528
+ bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADTUlEQVRYw+2XbWjNcRTHP+de7h7YxTSmPSgb
529
+ XkysDXmMJKwQIXtBeUySosneeUdJeSVKFKVkyJrkMXnh4YVlQ1oz8zRyryvTbMMe7vHi/3fv/vd/
530
+ 7/9/Z0XJefX//x7O73u+55zfOT9RVeUvioe/LP8B/AcwyHH283O0qQZpPA/BOgh3owoydAyMXYAW
531
+ rUPGLgCvL7GOL6/Q1iYE0HAvUlBmmZa4adgZgnOL0GA9GFuRkRNhSDb0fEdDz6C7HRFQBcpOIlM2
532
+ xT1f648j17cZ3950ZE+HMwMaqENOl6AqxuGeQbChFkZNjqIG9OJKtKkaEeDaZrThLFJ+044gI89g
533
+ TUCG5TnHgLYH4FQJIIioYXn5DaTP4REQqy7BqGITDvD6Flq91r7On2uABMjIdQYgVYsilINAdink
534
+ z0/oXll8zFxrWthYBW9u2xiIGJjhxMC7exB6alqOobhovXMI58yIhQR3Kq1DqcOjs04M6NPTpt/N
535
+ fwVyZ7umkebM6fsHgVq0u9O6xpNqMuDkgrd3+lhvUpo5wRWAZI63HqaGLqsbco1A9DsAkC9NdkUp
536
+ fvebJD3LCkhAWq268Oe5x0DsbSCS3E2m3lT74I82GwNJZYGNgSREtNe+z5cRk4qG5ZKW6QAgNTMO
537
+ irA7ghhrRYC0kTEs+dyLkWSX2BRpW4s7gK9x1uTMjE3OhC6NxkDhcgvtqkDgkTuAYJ3VWvHBiELr
538
+ WG9XEgxM3WlBKQI0X3EOwK4OaHtjHZxeYY+TefuhUpPoB+YdtM4+OekcgA8PW4hWTwoy/8AAGpIZ
539
+ e9FxSyOuEAGqyuLvbG2Gu/uiVROFLc/s6zqCcMgHBwW9sdM9DWXNZWR6hQlC4NU1OJoPL69He4Wr
540
+ W9HjE1E1q6bXB9tbkBEFdjc9PgHhbuPn0ZE4aZzoXdAeQG/tQhrPReq5hRkAbwq64gKMW4J44jdX
541
+ +v4BcmaW8T16KrLhYZIAfkm4x+gTutrgUwNUrzbALDyClO5IztGfGtD2D5A3F/EO7ieAWLmwDH1x
542
+ xWhW0rPQoTmILx2dtBEp3vIHuuJVNeDPN+LjWwgJ1cP7+8jXFn5H+g9ABNn+Eqbt7lfNSFxLBvI4
543
+ 7fmBBuug8yMML0Cyiv4wgH/hZfQTiUAxe3ePrOMAAAAASUVORK5CYII=
data/qwicky.gemspec ADDED
@@ -0,0 +1,44 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{qwicky}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Fabian Streitel"]
9
+ s.date = %q{2009-06-15}
10
+ s.description = %q{Qwicky is a REALLY small wiki implementation using Sinatra, DataMapper and SQLite3.}
11
+ s.email = %q{karottenreibe@gmail.com}
12
+ s.files = ["HISTORY.txt", "README.txt", "LICENSE.txt", "bin/qwicky", "qwicky.gemspec"]
13
+ s.has_rdoc = false
14
+ s.homepage = %q{http://github.com/karottenreibe/qwicky}
15
+ s.rubygems_version = %q{1.3.0}
16
+ s.summary = s.description
17
+ s.executables = %w{qwicky}
18
+
19
+ if s.respond_to? :specification_version then
20
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
21
+ s.specification_version = 2
22
+
23
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
24
+ s.add_runtime_dependency(%q<dm-core>)
25
+ s.add_runtime_dependency(%q<dm-aggregates>)
26
+ s.add_runtime_dependency(%q<dm-validations>)
27
+ s.add_runtime_dependency(%q<sinatra>)
28
+ s.add_runtime_dependency(%q<haml>)
29
+ else
30
+ s.add_dependency(%q<dm-core>)
31
+ s.add_dependency(%q<dm-aggregates>)
32
+ s.add_dependency(%q<dm-validations>)
33
+ s.add_dependency(%q<sinatra>)
34
+ s.add_dependency(%q<haml>)
35
+ end
36
+ else
37
+ s.add_dependency(%q<dm-core>)
38
+ s.add_dependency(%q<dm-aggregates>)
39
+ s.add_dependency(%q<dm-validations>)
40
+ s.add_dependency(%q<sinatra>)
41
+ s.add_dependency(%q<haml>)
42
+ end
43
+ end
44
+
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: karottenreibe-qwicky
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Fabian Streitel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-15 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: dm-core
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: dm-aggregates
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: dm-validations
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: sinatra
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: haml
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ description: Qwicky is a REALLY small wiki implementation using Sinatra, DataMapper and SQLite3.
66
+ email: karottenreibe@gmail.com
67
+ executables:
68
+ - qwicky
69
+ extensions: []
70
+
71
+ extra_rdoc_files: []
72
+
73
+ files:
74
+ - HISTORY.txt
75
+ - README.txt
76
+ - LICENSE.txt
77
+ - bin/qwicky
78
+ - qwicky.gemspec
79
+ has_rdoc: false
80
+ homepage: http://github.com/karottenreibe/qwicky
81
+ post_install_message:
82
+ rdoc_options: []
83
+
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ version:
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.2.0
102
+ signing_key:
103
+ specification_version: 2
104
+ summary: Qwicky is a REALLY small wiki implementation using Sinatra, DataMapper and SQLite3.
105
+ test_files: []
106
+