blogo 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +97 -0
- data/Rakefile +24 -0
- data/app/assets/images/blogo/background.png +0 -0
- data/app/assets/images/blogo/github-icon-active.png +0 -0
- data/app/assets/images/blogo/github-icon.png +0 -0
- data/app/assets/images/blogo/rss-icon-active.png +0 -0
- data/app/assets/images/blogo/rss-icon.png +0 -0
- data/app/assets/images/blogo/twitter-icon-active.png +0 -0
- data/app/assets/images/blogo/twitter-icon.png +0 -0
- data/app/assets/javascripts/blogo/admin/application.js +13 -0
- data/app/assets/javascripts/blogo/admin/ckeditor.js +2 -0
- data/app/assets/javascripts/blogo/admin/helpers/post_preview.js.coffee +41 -0
- data/app/assets/javascripts/blogo/admin/helpers/title_to_url.js.coffee +19 -0
- data/app/assets/javascripts/blogo/ckeditor/ckeditor_basepath.js.erb +6 -0
- data/app/assets/javascripts/blogo/ckeditor/config.js.erb +41 -0
- data/app/assets/stylesheets/blogo/admin.sass +105 -0
- data/app/assets/stylesheets/blogo/blog.sass +198 -0
- data/app/controllers/blogo/admin/base_controller.rb +19 -0
- data/app/controllers/blogo/admin/comments_controller.rb +7 -0
- data/app/controllers/blogo/admin/images_controller.rb +44 -0
- data/app/controllers/blogo/admin/posts_controller.rb +64 -0
- data/app/controllers/blogo/admin/sessions_controller.rb +24 -0
- data/app/controllers/blogo/application_controller.rb +2 -0
- data/app/controllers/blogo/posts_controller.rb +82 -0
- data/app/form_builders/blogo/form_builder.rb +17 -0
- data/app/helpers/blogo/admin/base_helper.rb +10 -0
- data/app/helpers/blogo/application_helper.rb +40 -0
- data/app/models/blogo/post.rb +59 -0
- data/app/models/blogo/tag.rb +10 -0
- data/app/models/blogo/tagging.rb +4 -0
- data/app/models/blogo/user.rb +9 -0
- data/app/services/blogo/base_post_service.rb +51 -0
- data/app/services/blogo/create_post_service.rb +27 -0
- data/app/services/blogo/destroy_post_service.rb +13 -0
- data/app/services/blogo/preview_post_service.rb +20 -0
- data/app/services/blogo/update_post_service.rb +24 -0
- data/app/views/blogo/admin/comments/index.html.erb +5 -0
- data/app/views/blogo/admin/images/create.erb +6 -0
- data/app/views/blogo/admin/posts/_form.html.erb +57 -0
- data/app/views/blogo/admin/posts/_post_li.html.erb +14 -0
- data/app/views/blogo/admin/posts/edit.html.erb +5 -0
- data/app/views/blogo/admin/posts/index.html.erb +18 -0
- data/app/views/blogo/admin/posts/new.html.erb +5 -0
- data/app/views/blogo/admin/sessions/new.html.erb +14 -0
- data/app/views/blogo/admin/shared/_nav_bar.html.erb +10 -0
- data/app/views/blogo/posts/_icons.html.erb +11 -0
- data/app/views/blogo/posts/_meta.html.erb +33 -0
- data/app/views/blogo/posts/_paginator.html.erb +20 -0
- data/app/views/blogo/posts/_post_header.html.erb +20 -0
- data/app/views/blogo/posts/_post_overview.html.erb +9 -0
- data/app/views/blogo/posts/feed.atom.builder +18 -0
- data/app/views/blogo/posts/index.html.erb +6 -0
- data/app/views/blogo/posts/show.html.erb +4 -0
- data/app/views/blogo/shared/_aside.html.erb +24 -0
- data/app/views/blogo/shared/_disqus_comments.html.erb +20 -0
- data/app/views/blogo/shared/_google_analytics.html.erb +16 -0
- data/app/views/blogo/shared/_post.html.erb +7 -0
- data/app/views/layouts/blogo/admin.html.erb +29 -0
- data/app/views/layouts/blogo/blog.html.erb +41 -0
- data/config/routes.rb +27 -0
- data/db/migrate/20140218134508_create_blogo_users.rb +15 -0
- data/db/migrate/20140218134512_create_blogo_tags.rb +13 -0
- data/db/migrate/20140218134550_create_blogo_posts.rb +29 -0
- data/db/migrate/20140218134620_create_blogo_taggings.rb +12 -0
- data/lib/blogo.rb +25 -0
- data/lib/blogo/config.rb +46 -0
- data/lib/blogo/engine.rb +20 -0
- data/lib/blogo/errors.rb +5 -0
- data/lib/blogo/paginator.rb +111 -0
- data/lib/blogo/renderer.rb +29 -0
- data/lib/blogo/renderer/base.rb +48 -0
- data/lib/blogo/renderer/html.rb +10 -0
- data/lib/blogo/renderer/markdown.rb +14 -0
- data/lib/blogo/version.rb +3 -0
- data/lib/tasks/blogo_tasks.rake +25 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/fakeobjects/images/spacer.gif +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/icons.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/icons_hidpi.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/image/images/noimage.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/link/images/anchor.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/magicline/images/hidpi/icon.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/plugins/magicline/images/icon.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/icons.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/icons_hidpi.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/arrow.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/close.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/hidpi/close.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/hidpi/lock-open.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/hidpi/lock.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/hidpi/refresh.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/lock-open.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/lock.png +0 -0
- data/vendor/assets/images/blogo/ckeditor/skins/moono/images/refresh.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/ckeditor.js +902 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/af.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ar.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/bg.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/bn.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/bs.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ca.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/cs.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/cy.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/da.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/de.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/el.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/en-au.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/en-ca.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/en-gb.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/en.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/eo.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/es.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/et.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/eu.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/fa.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/fi.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/fo.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/fr-ca.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/fr.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/gl.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/gu.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/he.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/hi.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/hr.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/hu.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/id.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/is.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/it.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ja.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ka.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/km.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ko.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ku.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/lt.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/lv.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/mk.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/mn.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ms.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/nb.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/nl.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/no.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/pl.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/pt-br.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/pt.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ro.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ru.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/si.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/sk.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/sl.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/sq.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/sr-latn.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/sr.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/sv.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/th.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/tr.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/ug.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/uk.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/vi.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/zh-cn.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/lang/zh.js +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +10 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +9 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +10 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +9 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +10 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/about/dialogs/about.js +7 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/clipboard/dialogs/paste.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/image/dialogs/image.js +43 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/link/dialogs/anchor.js +8 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/link/dialogs/link.js +37 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/link/images/anchor.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/pastefromword/filter/default.js +31 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/scayt/dialogs/options.js +20 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/ar.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/bg.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/ca.js +14 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/cs.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/cy.js +14 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/de.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/el.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/en.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/eo.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/es.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/et.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/fa.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/fi.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +10 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/fr.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/gl.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/he.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/hr.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/hu.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/id.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/it.js +14 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/ja.js +9 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/km.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/ku.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/lv.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/nb.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/nl.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/no.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/pl.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/pt.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/ru.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/si.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/sk.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/sl.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/sq.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/sv.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/th.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/tr.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/ug.js +13 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/uk.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/vi.js +14 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +9 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/lang/zh.js +12 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/specialchar/dialogs/specialchar.js +14 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/table/dialogs/table.js +21 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/tabletools/dialogs/tableCell.js +16 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wpmore/demo.html +67 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wpmore/images/more.gif +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wpmore/images/more_bug.gif +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wpmore/images/page.gif +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wpmore/plugin.js +179 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wsc/dialogs/ciframe.html +66 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wsc/dialogs/tmp.html +118 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wsc/dialogs/wsc.js +67 -0
- data/vendor/assets/javascripts/blogo/ckeditor/plugins/wsc/dialogs/wsc_ie.js +11 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/dialog.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/dialog_ie.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/dialog_ie7.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/dialog_ie8.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/dialog_iequirks.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/dialog_opera.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/editor.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/editor_gecko.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/editor_ie.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/editor_ie7.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/editor_ie8.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/editor_iequirks.css +5 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/icons.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/icons_hidpi.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/arrow.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/close.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/hidpi/close.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/hidpi/lock-open.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/hidpi/lock.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/hidpi/refresh.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/lock-open.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/lock.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/skins/moono/images/refresh.png +0 -0
- data/vendor/assets/javascripts/blogo/ckeditor/styles.js +111 -0
- data/vendor/assets/javascripts/blogo/modal.js +315 -0
- data/vendor/assets/javascripts/blogo/moment.js +6 -0
- data/vendor/assets/javascripts/blogo/pikaday.js +920 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/contents.css +123 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/plugins/scayt/dialogs/toolbar.css +71 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/dialog.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/dialog_ie.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/dialog_ie7.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/dialog_ie8.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/dialog_iequirks.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/dialog_opera.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/editor.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/editor_gecko.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/editor_ie.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/editor_ie7.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/editor_ie8.css +5 -0
- data/vendor/assets/stylesheets/blogo/ckeditor/skins/moono/editor_iequirks.css +5 -0
- data/vendor/assets/stylesheets/blogo/modal.scss +326 -0
- data/vendor/assets/stylesheets/blogo/pikaday.css +170 -0
- data/vendor/assets/stylesheets/blogo/pure-min.css +11 -0
- metadata +418 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Blogo</title>
|
5
|
+
<%= javascript_include_tag "blogo/admin/application" %>
|
6
|
+
|
7
|
+
<% if Blogo.config.use_ckeditor %>
|
8
|
+
<%= javascript_include_tag "blogo/admin/ckeditor" %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<%= stylesheet_link_tag "blogo/admin" %>
|
12
|
+
<%= csrf_meta_tags %>
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
<% if blogo_current_user %>
|
16
|
+
<div id="admin-menu">
|
17
|
+
<%= render "blogo/admin/shared/nav_bar" %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<div id="admin-container">
|
22
|
+
<% flash.each do |name, msg| %>
|
23
|
+
<%= content_tag :div, msg, id: "flash_#{name}", class: (name == :notice ? "alert alert-info" : "alert alert-error") %>
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
<%= yield %>
|
27
|
+
</div>
|
28
|
+
</body>
|
29
|
+
</html>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= @meta[:title] %></title>
|
5
|
+
<meta charset="UTF-8">
|
6
|
+
<%= render partial: 'blogo/posts/meta' %>
|
7
|
+
|
8
|
+
<%= csrf_meta_tags %>
|
9
|
+
<%= stylesheet_link_tag "blogo/blog" %>
|
10
|
+
|
11
|
+
<%= auto_discovery_link_tag :atom, feed_path %>
|
12
|
+
<%= render 'blogo/shared/google_analytics' %>
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
<div id="container">
|
16
|
+
<header class="blogo-header">
|
17
|
+
<div class='header-titles'>
|
18
|
+
<h1><%= link_to Blogo.config.site_title, root_path %></h1>
|
19
|
+
<h2><%= Blogo.config.site_subtitle %></h2>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class='header-icons'>
|
23
|
+
<%= render partial: 'blogo/posts/icons' %>
|
24
|
+
</div>
|
25
|
+
</header>
|
26
|
+
|
27
|
+
<div id="content">
|
28
|
+
<div class="pure-g-r">
|
29
|
+
<div class="pure-u-3-4">
|
30
|
+
<%= yield %>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div class="pure-u-1-4">
|
34
|
+
<%= render partial: 'blogo/shared/aside' %>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</body>
|
41
|
+
</html>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Blogo::Engine.routes.draw do
|
2
|
+
|
3
|
+
namespace :admin do
|
4
|
+
get "/" => "posts#index", as: "" # responds to admin_url and admin_path
|
5
|
+
get "logout" => "sessions#destroy"
|
6
|
+
get "login" => "sessions#new", as: 'login'
|
7
|
+
|
8
|
+
post '/posts/preview' => 'posts#preview', as: :post_preview
|
9
|
+
patch '/posts/preview' => 'posts#preview'
|
10
|
+
|
11
|
+
resources :sessions, only: %i(new create destroy)
|
12
|
+
resources :posts, except: %i(show)
|
13
|
+
resources :users
|
14
|
+
resources 'comments', only: %w(index)
|
15
|
+
resources 'images' , only: %w(create)
|
16
|
+
end
|
17
|
+
|
18
|
+
root to: "posts#index"
|
19
|
+
get '/page/:page' => 'posts#index', as: 'page'
|
20
|
+
get '/tag/:tag' => 'posts#index', as: 'tag'
|
21
|
+
get '/tag/:tag/page/:page' => 'posts#index', as: 'tag_page'
|
22
|
+
|
23
|
+
get '/feed' => 'posts#feed', as: 'feed', defaults: { format: 'atom' }
|
24
|
+
|
25
|
+
|
26
|
+
get ":permalink" => "posts#show", as: "post"
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateBlogoUsers < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
table_name = "#{Blogo.table_name_prefix}users"
|
4
|
+
|
5
|
+
create_table(table_name) do |t|
|
6
|
+
t.string :name , null: false
|
7
|
+
t.string :email , null: false
|
8
|
+
t.string :password_digest, null: false
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index table_name, :email, unique: true
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateBlogoTags < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
table_name = "#{Blogo.table_name_prefix}tags"
|
4
|
+
|
5
|
+
create_table(table_name) do |t|
|
6
|
+
t.string :name, null: false
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
|
11
|
+
add_index table_name, :name, unique: true
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class CreateBlogoPosts < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
table_name = "#{Blogo.table_name_prefix}posts"
|
4
|
+
|
5
|
+
create_table(table_name) do |t|
|
6
|
+
t.integer :user_id , null: false
|
7
|
+
t.string :permalink , null: false
|
8
|
+
t.string :title , null: false
|
9
|
+
t.boolean :published , null: false
|
10
|
+
t.datetime :published_at , null: false
|
11
|
+
|
12
|
+
t.string :markup_lang , null: false
|
13
|
+
t.text :raw_content , null: false
|
14
|
+
|
15
|
+
t.text :html_content , null: false
|
16
|
+
t.text :html_overiew , null: true
|
17
|
+
|
18
|
+
t.string :tags_string , null: true
|
19
|
+
t.string :meta_description , null: false
|
20
|
+
t.string :meta_image , null: true
|
21
|
+
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
|
25
|
+
add_index table_name, :user_id
|
26
|
+
add_index table_name, :permalink, unique: true
|
27
|
+
add_index table_name, :published_at
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateBlogoTaggings < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
table_name = "#{Blogo.table_name_prefix}taggings"
|
4
|
+
|
5
|
+
create_table(table_name) do |t|
|
6
|
+
t.integer :post_id, null: false
|
7
|
+
t.integer :tag_id , null: false
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index table_name, [:tag_id, :post_id], unique: true
|
11
|
+
end
|
12
|
+
end
|
data/lib/blogo.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'blogo/version'
|
2
|
+
require 'blogo/errors'
|
3
|
+
require 'blogo/engine'
|
4
|
+
require 'blogo/config'
|
5
|
+
|
6
|
+
require 'blogo/renderer'
|
7
|
+
require 'blogo/paginator'
|
8
|
+
|
9
|
+
|
10
|
+
module Blogo
|
11
|
+
mattr_accessor :config
|
12
|
+
self.config = Blogo::Config.new
|
13
|
+
|
14
|
+
# Table name prefix for tables.
|
15
|
+
#
|
16
|
+
# @return [String]
|
17
|
+
def self.table_name_prefix
|
18
|
+
config.table_name_prefix
|
19
|
+
end
|
20
|
+
|
21
|
+
# Configure the engine.
|
22
|
+
def self.configure
|
23
|
+
yield(config)
|
24
|
+
end
|
25
|
+
end
|
data/lib/blogo/config.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Blogo
|
2
|
+
class Config
|
3
|
+
attr_accessor :site_title
|
4
|
+
attr_accessor :site_subtitle
|
5
|
+
|
6
|
+
attr_accessor :table_name_prefix
|
7
|
+
|
8
|
+
attr_accessor :posts_per_page
|
9
|
+
attr_accessor :paginator_size
|
10
|
+
attr_accessor :recent_posts
|
11
|
+
|
12
|
+
attr_accessor :keywords
|
13
|
+
|
14
|
+
attr_accessor :disqus_shortname
|
15
|
+
attr_accessor :twitter_username
|
16
|
+
attr_accessor :github_username
|
17
|
+
attr_accessor :show_rss_icon
|
18
|
+
attr_accessor :google_analytics_id
|
19
|
+
|
20
|
+
attr_accessor :use_ckeditor
|
21
|
+
|
22
|
+
attr_reader :markup_lang
|
23
|
+
|
24
|
+
# Set default values.
|
25
|
+
def initialize
|
26
|
+
@site_title = 'Blogo'
|
27
|
+
@site_subtitle = 'Mountable blog engine for Ruby on Rails'
|
28
|
+
@table_name_prefix = 'blogo_'
|
29
|
+
@posts_per_page = 10
|
30
|
+
@paginator_size = 5
|
31
|
+
@recent_posts = 5
|
32
|
+
@disqus_shortname = nil
|
33
|
+
@google_analytics_id = nil
|
34
|
+
@use_ckeditor = true
|
35
|
+
@keywords = %w(blog)
|
36
|
+
@markup_lang = :html
|
37
|
+
@show_rss_icon = true
|
38
|
+
end
|
39
|
+
|
40
|
+
def markup_lang=(lang)
|
41
|
+
# Try to find a renderer for the format otherwise raise
|
42
|
+
Blogo::Renderer.get(lang.to_sym)
|
43
|
+
@format = lang.to_sym
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/blogo/engine.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Blogo
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
isolate_namespace Blogo
|
4
|
+
engine_name "blogo"
|
5
|
+
|
6
|
+
config.generators do |g|
|
7
|
+
g.fixture_replacement :factory_girl, :dir => 'spec/factories'
|
8
|
+
g.test_framework :rspec, :fixture => false
|
9
|
+
end
|
10
|
+
|
11
|
+
config.assets.precompile += %W(
|
12
|
+
blogo/*.js
|
13
|
+
blogo/*.css
|
14
|
+
blogo/*.png
|
15
|
+
blogo/*.gif
|
16
|
+
blogo/*.html
|
17
|
+
blogo/*.md
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
data/lib/blogo/errors.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
module Blogo
|
2
|
+
# Does main calculation for pagination.
|
3
|
+
#
|
4
|
+
# @example
|
5
|
+
# # Current page is 3
|
6
|
+
# paginator = Paginator.new(Post.all, page: 4, per_page: 3, size: 5)
|
7
|
+
#
|
8
|
+
# # Displays 5 pages, since size = 5
|
9
|
+
# paginator.pages # => [2, 3, 4, 5, 6]
|
10
|
+
#
|
11
|
+
# # Previous page <<
|
12
|
+
# paginator.prev_page # => 1
|
13
|
+
#
|
14
|
+
# # Next page >>
|
15
|
+
# paginator.prev_page # => 7
|
16
|
+
#
|
17
|
+
# # Get items for the current page
|
18
|
+
# paginator.items # => 3 posts
|
19
|
+
#
|
20
|
+
class Paginator
|
21
|
+
attr_reader :page, :per_page, :size
|
22
|
+
|
23
|
+
# :nodoc:
|
24
|
+
DEFAULT_PER_PAGE = 10
|
25
|
+
|
26
|
+
# :nodoc:
|
27
|
+
DEFAULT_PAGE = 1
|
28
|
+
|
29
|
+
# :nodoc:
|
30
|
+
DEFAULT_SIZE = 5
|
31
|
+
|
32
|
+
# @param relation [ActiveRecord::Realtion]
|
33
|
+
# @param opts [Hash]
|
34
|
+
# @option opts :per_page [Integer] number of items display on 1 page
|
35
|
+
# @option opts :page [Integer] current page number
|
36
|
+
# @option opts :size [Integer] number of pages displayed with paginator
|
37
|
+
def initialize(relation, opts = {})
|
38
|
+
@relation = relation
|
39
|
+
@per_page = (opts[:per_page] || DEFAULT_PER_PAGE).to_i
|
40
|
+
@page = (opts[:page] || DEFAULT_PAGE).to_i
|
41
|
+
@size = (opts[:size] || DEFAULT_SIZE).to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
# Fetch items for the current page.
|
45
|
+
#
|
46
|
+
# @return [Array<ActiveRecord::Base>]
|
47
|
+
def items
|
48
|
+
@items ||= begin
|
49
|
+
offset = @per_page * (@page - 1)
|
50
|
+
@relation.limit(@per_page).offset(offset)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Number of pages to display.
|
55
|
+
#
|
56
|
+
# @return [Array<Integer>]
|
57
|
+
def pages
|
58
|
+
@pages ||= begin
|
59
|
+
from = @page - (@size / 2).ceil
|
60
|
+
from = 1 if from < 1
|
61
|
+
upto = from + @size - 1
|
62
|
+
|
63
|
+
# Correct +from+ and +to+ if +to+ is more than number of pages
|
64
|
+
if upto > pages_count
|
65
|
+
from -= (upto - pages_count)
|
66
|
+
from = 1 if from < 1
|
67
|
+
upto = pages_count
|
68
|
+
end
|
69
|
+
|
70
|
+
(from..upto).to_a
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Previous page number. Is used for << link.
|
75
|
+
#
|
76
|
+
# @return [Integer, nil]
|
77
|
+
def prev_page
|
78
|
+
first_page = pages.first.to_i
|
79
|
+
first_page > 1 ? (first_page - 1) : nil
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
# Next page number. I used for >> link.
|
84
|
+
#
|
85
|
+
# @return [Integer, nil]
|
86
|
+
def next_page
|
87
|
+
if pages.any? && pages_count > pages.last
|
88
|
+
pages.last + 1
|
89
|
+
else
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
# Number all existing pages.
|
98
|
+
#
|
99
|
+
# @return [Integer]
|
100
|
+
def pages_count
|
101
|
+
@pages_count ||= (items_count / @per_page.to_f).ceil
|
102
|
+
end
|
103
|
+
|
104
|
+
# Number of all existing items.
|
105
|
+
#
|
106
|
+
# @return [Integer]
|
107
|
+
def items_count
|
108
|
+
@items_count ||= @relation.count
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'blogo/renderer/base'
|
2
|
+
require 'blogo/renderer/html'
|
3
|
+
require 'blogo/renderer/markdown'
|
4
|
+
|
5
|
+
module Blogo
|
6
|
+
module Renderer
|
7
|
+
|
8
|
+
# Maps format names to renderers.
|
9
|
+
RENDERERS = {
|
10
|
+
:markdown => Blogo::Renderer::Markdown,
|
11
|
+
:html => Blogo::Renderer::Html
|
12
|
+
}
|
13
|
+
|
14
|
+
# Find and initialize renderer for a particular markup format.
|
15
|
+
#
|
16
|
+
# @param format [Symbol, String]
|
17
|
+
#
|
18
|
+
# @return [Blogo::Renderer::Base]
|
19
|
+
def self.get(format)
|
20
|
+
if renderer_class = RENDERERS[format.to_sym]
|
21
|
+
renderer_class.load_dependencies!(format)
|
22
|
+
renderer_class.new
|
23
|
+
else
|
24
|
+
raise(Blogo::Error, "Can't find renderer #{format.inspect}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Blogo::Renderer
|
2
|
+
class Base
|
3
|
+
|
4
|
+
class << self
|
5
|
+
# @!attribute [rw] dependencies
|
6
|
+
# @return [Array<Hash>]
|
7
|
+
attr_accessor :dependencies
|
8
|
+
|
9
|
+
# Declare external gem dependencies for a render.
|
10
|
+
#
|
11
|
+
# @param dependency [Hash] hash with :gem and :require keys
|
12
|
+
#
|
13
|
+
# @return [void]
|
14
|
+
def add_dependency(dependency)
|
15
|
+
self.dependencies ||= []
|
16
|
+
self.dependencies << dependency
|
17
|
+
end
|
18
|
+
|
19
|
+
# Try to load dependencies, otherwise raise meaningful error.
|
20
|
+
#
|
21
|
+
# @param renderer_name [Symbol, String]
|
22
|
+
#
|
23
|
+
# @return [void]
|
24
|
+
def load_dependencies!(renderer_name)
|
25
|
+
return unless dependencies
|
26
|
+
|
27
|
+
dependencies.each do |dependency|
|
28
|
+
begin
|
29
|
+
require dependency[:require]
|
30
|
+
rescue LoadError
|
31
|
+
msg = "Please add `gem \"#{dependency[:gem]}\"` to the Gemfile " \
|
32
|
+
"to use Blogo with #{renderer_name.inspect} renderer"
|
33
|
+
raise LoadError, msg
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# @param raw_text [String]
|
41
|
+
#
|
42
|
+
# @return [String] html
|
43
|
+
def render(raw_text)
|
44
|
+
raise AbstractMethodCallError, __method__
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|