├── log └── .gitkeep ├── lib ├── tasks │ ├── .gitkeep │ └── optimize_images.rake ├── auth │ └── unauthorized_exception.rb ├── dummy_mixpanel.rb ├── templates │ └── haml │ │ └── scaffold │ │ └── _form.html.haml ├── wilson_score.rb └── log_before_timeout.rb ├── tmp └── pids │ └── .gitkeep ├── app ├── mailers │ ├── .gitkeep │ └── user_mailer.rb ├── models │ ├── .gitkeep │ └── streamer.rb ├── frontend │ ├── public │ │ ├── .gitkeep │ │ └── robots.txt │ ├── vendor │ │ └── .gitkeep │ ├── app │ │ ├── helpers │ │ │ ├── .gitkeep │ │ │ ├── repeat.js │ │ │ ├── pluralize.js │ │ │ └── format-time.js │ │ ├── models │ │ │ ├── .gitkeep │ │ │ ├── genre.js │ │ │ ├── media.js │ │ │ ├── producer.js │ │ │ ├── franchise.js │ │ │ ├── person.js │ │ │ ├── character.js │ │ │ ├── video.js │ │ │ ├── user-info.js │ │ │ ├── app.js │ │ │ ├── casting.js │ │ │ ├── pro-membership-plan.js │ │ │ ├── episode.js │ │ │ ├── full-manga.js │ │ │ ├── model.js │ │ │ └── partner-deal.js │ │ ├── routes │ │ │ ├── .gitkeep │ │ │ ├── apps.js │ │ │ ├── notifications.js │ │ │ ├── onboarding │ │ │ │ ├── index.js │ │ │ │ └── finish.js │ │ │ ├── search.js │ │ │ ├── apps │ │ │ │ └── mine.js │ │ │ ├── kotodama.js │ │ │ ├── loading.js │ │ │ ├── manga │ │ │ │ └── index.js │ │ │ ├── settings.js │ │ │ ├── anime │ │ │ │ └── quotes.js │ │ │ ├── sign-in.js │ │ │ ├── story │ │ │ │ └── permalink.js │ │ │ └── anime.js │ │ ├── views │ │ │ ├── .gitkeep │ │ │ └── file-upload.js │ │ ├── components │ │ │ ├── .gitkeep │ │ │ └── bootstrap-modal.js │ │ ├── controllers │ │ │ ├── .gitkeep │ │ │ ├── review.js │ │ │ ├── footer.js │ │ │ ├── user │ │ │ │ ├── followers.js │ │ │ │ └── following.js │ │ │ ├── episodes │ │ │ │ └── index.js │ │ │ ├── current-user.js │ │ │ ├── apps │ │ │ │ └── index.js │ │ │ ├── modals │ │ │ │ ├── edit-manga.js │ │ │ │ ├── site-update.js │ │ │ │ ├── youtube.js │ │ │ │ └── crop-cover.js │ │ │ ├── notifications.js │ │ │ ├── edits.js │ │ │ ├── onboarding │ │ │ │ └── finish.js │ │ │ ├── apps.js │ │ │ └── manga │ │ │ │ └── index.js │ │ ├── templates │ │ │ ├── components │ │ │ │ ├── .gitkeep │ │ │ │ ├── waifu-selector.hbs │ │ │ │ ├── bootstrap-tooltip.hbs │ │ │ │ ├── load-more.hbs │ │ │ │ ├── ad-unit.hbs │ │ │ │ ├── loading-indicator.hbs │ │ │ │ ├── bootstrap-modal.hbs │ │ │ │ ├── post-comment.hbs │ │ │ │ ├── truncate-text.hbs │ │ │ │ └── follow-button.hbs │ │ │ ├── radio.hbs │ │ │ ├── loading.hbs │ │ │ ├── anime │ │ │ │ ├── loading.hbs │ │ │ │ └── _infobar.hbs │ │ │ ├── user │ │ │ │ └── loading.hbs │ │ │ ├── header │ │ │ │ ├── search.hbs │ │ │ │ └── right-content.hbs │ │ │ ├── story │ │ │ │ └── deleted.hbs │ │ │ ├── modals │ │ │ │ ├── youtube.hbs │ │ │ │ └── site-update.hbs │ │ │ ├── manga │ │ │ │ ├── _characters.hbs │ │ │ │ └── _infobar.hbs │ │ │ └── notifications.hbs │ │ ├── styles │ │ │ └── app.css │ │ ├── adapters │ │ │ ├── application.js │ │ │ └── current-user.js │ │ ├── serializers │ │ │ └── application.js │ │ ├── mixins │ │ │ ├── has-current-user.js │ │ │ ├── modals │ │ │ │ └── controller.js │ │ │ └── model-current-user.js │ │ ├── initializers │ │ │ ├── message-bus.js │ │ │ └── preload.js │ │ ├── utils │ │ │ ├── computed │ │ │ │ └── property-equal.js │ │ │ ├── escape-html.js │ │ │ └── wilson-score.js │ │ └── transforms │ │ │ └── array.js │ ├── tests │ │ ├── unit │ │ │ ├── .gitkeep │ │ │ ├── helpers │ │ │ │ ├── avatar-test.js │ │ │ │ ├── repeat-test.js │ │ │ │ ├── stars-test.js │ │ │ │ ├── format-time-test.js │ │ │ │ ├── community-rating-test.js │ │ │ │ └── pluralize-test.js │ │ │ ├── utils │ │ │ │ ├── session-test.js │ │ │ │ ├── computed │ │ │ │ │ └── property-equal-test.js │ │ │ │ ├── escape-html-test.js │ │ │ │ ├── load-script-test.js │ │ │ │ ├── wilson-score-test.js │ │ │ │ └── set-title-test.js │ │ │ ├── views │ │ │ │ ├── story-test.js │ │ │ │ ├── file-upload-test.js │ │ │ │ ├── user │ │ │ │ │ ├── library-test.js │ │ │ │ │ └── manga-library-test.js │ │ │ │ └── modals │ │ │ │ │ └── crop-cover-test.js │ │ │ ├── routes │ │ │ │ ├── pro-test.js │ │ │ │ ├── apps-test.js │ │ │ │ ├── user-test.js │ │ │ │ ├── anime-test.js │ │ │ │ ├── edits-test.js │ │ │ │ ├── manga-test.js │ │ │ │ ├── search-test.js │ │ │ │ ├── kotodama-test.js │ │ │ │ ├── loading-test.js │ │ │ │ ├── settings-test.js │ │ │ │ ├── sign-in-test.js │ │ │ │ ├── apps │ │ │ │ │ ├── index-test.js │ │ │ │ │ └── mine-test.js │ │ │ │ ├── dashboard-test.js │ │ │ │ ├── user │ │ │ │ │ ├── index-test.js │ │ │ │ │ ├── library-test.js │ │ │ │ │ ├── reviews-test.js │ │ │ │ │ ├── followers-test.js │ │ │ │ │ ├── following-test.js │ │ │ │ │ └── manga-library-test.js │ │ │ │ ├── anime │ │ │ │ │ ├── index-test.js │ │ │ │ │ └── quotes-test.js │ │ │ │ ├── application-test.js │ │ │ │ ├── manga │ │ │ │ │ └── index-test.js │ │ │ │ ├── filter-anime-test.js │ │ │ │ ├── notifications-test.js │ │ │ │ ├── reviews │ │ │ │ │ ├── index-test.js │ │ │ │ │ └── show-test.js │ │ │ │ ├── episodes │ │ │ │ │ └── index-test.js │ │ │ │ ├── story │ │ │ │ │ └── permalink-test.js │ │ │ │ └── onboarding │ │ │ │ │ ├── index-test.js │ │ │ │ │ ├── finish-test.js │ │ │ │ │ ├── library-test.js │ │ │ │ │ └── categories-test.js │ │ │ ├── models │ │ │ │ ├── genre-test.js │ │ │ │ ├── media-test.js │ │ │ │ ├── model-test.js │ │ │ │ ├── quote-test.js │ │ │ │ ├── user-test.js │ │ │ │ ├── app-test.js │ │ │ │ ├── person-test.js │ │ │ │ ├── producer-test.js │ │ │ │ ├── user-info-test.js │ │ │ │ ├── character-test.js │ │ │ │ ├── anime-test.js │ │ │ │ ├── partner-deal-test.js │ │ │ │ ├── manga-test.js │ │ │ │ ├── video-test.js │ │ │ │ ├── library-entry-test.js │ │ │ │ ├── notification-test.js │ │ │ │ ├── casting-test.js │ │ │ │ ├── pro-membership-plan-test.js │ │ │ │ ├── story-test.js │ │ │ │ ├── current-user-test.js │ │ │ │ ├── franchise-test.js │ │ │ │ ├── substory-test.js │ │ │ │ ├── manga-library-entry-test.js │ │ │ │ ├── review-test.js │ │ │ │ └── episode-test.js │ │ │ ├── mixins │ │ │ │ ├── paginated-test.js │ │ │ │ ├── has-current-user-test.js │ │ │ │ ├── modals │ │ │ │ │ ├── controller-test.js │ │ │ │ │ └── versionable-test.js │ │ │ │ └── model-current-user-test.js │ │ │ ├── controllers │ │ │ │ ├── edits-test.js │ │ │ │ ├── pro-test.js │ │ │ │ ├── anime-test.js │ │ │ │ ├── manga-test.js │ │ │ │ ├── review-test.js │ │ │ │ ├── search-test.js │ │ │ │ ├── sign-in-test.js │ │ │ │ ├── sign-up-test.js │ │ │ │ ├── story-test.js │ │ │ │ ├── user-test.js │ │ │ │ ├── edit-item-test.js │ │ │ │ ├── footer-test.js │ │ │ │ ├── kotodama-test.js │ │ │ │ ├── apps │ │ │ │ │ ├── index-test.js │ │ │ │ │ └── mine-test.js │ │ │ │ ├── dashboard-test.js │ │ │ │ ├── franchises-test.js │ │ │ │ ├── settings-test.js │ │ │ │ ├── filter-anime-test.js │ │ │ │ ├── manga │ │ │ │ │ └── index-test.js │ │ │ │ ├── onboarding-test.js │ │ │ │ ├── user │ │ │ │ │ ├── library-test.js │ │ │ │ │ ├── followers-test.js │ │ │ │ │ ├── following-test.js │ │ │ │ │ └── manga-library-test.js │ │ │ │ ├── anime │ │ │ │ │ ├── index-test.js │ │ │ │ │ └── quotes-test.js │ │ │ │ ├── modals │ │ │ │ │ ├── youtube-test.js │ │ │ │ │ ├── crop-cover-test.js │ │ │ │ │ ├── edit-anime-test.js │ │ │ │ │ └── edit-manga-test.js │ │ │ │ ├── reviews │ │ │ │ │ ├── index-test.js │ │ │ │ │ └── show-test.js │ │ │ │ ├── apps-test.js │ │ │ │ └── quick-update-item-test.js │ │ │ ├── adapters │ │ │ │ ├── application-test.js │ │ │ │ └── current-user-test.js │ │ │ └── serializers │ │ │ │ └── application-test.js │ │ └── helpers │ │ │ └── resolver.js │ ├── .bowerrc │ ├── testem.json │ ├── .ember-cli │ └── .gitignore ├── views │ ├── settings │ │ └── index.haml │ ├── users │ │ ├── _dash.html.haml │ │ ├── forum_posts.html.haml │ │ ├── reviews.html.haml │ │ └── _follow_button.html.haml │ ├── reviews │ │ ├── edit.html.haml │ │ └── new.html.haml │ ├── lists │ │ └── index.html.haml │ ├── genres │ │ └── show.html.haml │ ├── kaminari │ │ ├── _gap.html.haml │ │ ├── _first_page.html.haml │ │ ├── _last_page.html.haml │ │ ├── _next_page.html.haml │ │ ├── _prev_page.html.haml │ │ └── _page.html.haml │ ├── quotes │ │ └── replace_votes.js.erb │ ├── shared │ │ └── _forum_widget.html.haml │ ├── home │ │ └── api.html.haml │ ├── devise │ │ └── mailer │ │ │ └── unlock_instructions.html.erb │ └── notifications │ │ └── index.html.haml ├── assets │ ├── images │ │ ├── h-logo.jpg │ │ ├── h-logo.png │ │ ├── hb-bg.jpg │ │ ├── jlist.png │ │ ├── logo.jpg │ │ ├── logo.png │ │ ├── ob-bg.jpg │ │ ├── rails.png │ │ ├── rec-bg.png │ │ ├── sprite.png │ │ ├── step-1.png │ │ ├── step-2.png │ │ ├── step-3.png │ │ ├── apps-bg.jpg │ │ ├── bg-fade.png │ │ ├── default.jpg │ │ ├── guest-bg.jpg │ │ ├── logo-new.jpg │ │ ├── logo@2x.png │ │ ├── mac-pro.png │ │ ├── sotm-oct.png │ │ ├── tsundere.jpg │ │ ├── tsundere.png │ │ ├── arrow_asc.png │ │ ├── arrow_desc.png │ │ ├── footer-logo.png │ │ ├── icons │ │ │ ├── rate.png │ │ │ ├── fb-logo.png │ │ │ ├── import.png │ │ │ ├── review.png │ │ │ ├── left-arrow.png │ │ │ ├── pro-banner.jpg │ │ │ ├── watchlist.png │ │ │ ├── input-arrow.png │ │ │ ├── right-arrow.png │ │ │ ├── vote-sprite.png │ │ │ ├── watch-sprite.png │ │ │ ├── negative-votes.png │ │ │ ├── positive-votes.png │ │ │ ├── rating │ │ │ │ ├── rating-1.png │ │ │ │ ├── rating-2.png │ │ │ │ ├── rating-3.png │ │ │ │ ├── rating-4.png │ │ │ │ ├── rating-5.png │ │ │ │ ├── rating-6.png │ │ │ │ ├── rating-7.png │ │ │ │ ├── rating-8.png │ │ │ │ ├── rating-9.png │ │ │ │ ├── rating-10.png │ │ │ │ ├── rating-15.png │ │ │ │ ├── rating-25.png │ │ │ │ ├── rating-35.png │ │ │ │ ├── rating-45.png │ │ │ │ ├── rating-55.png │ │ │ │ ├── rating-65.png │ │ │ │ ├── rating-75.png │ │ │ │ ├── rating-85.png │ │ │ │ └── rating-95.png │ │ │ ├── vote-sprite@2x.png │ │ │ ├── watch-sprite@2x.png │ │ │ ├── negative-votes@2x.png │ │ │ └── positive-votes@2x.png │ │ ├── logo-sprite.png │ │ ├── mal-connect.jpg │ │ ├── na-connect.jpg │ │ ├── no-images.png │ │ ├── pro-banner.jpg │ │ ├── community-sm.png │ │ ├── cover-overlay.png │ │ ├── cover-shadow.png │ │ ├── guest-banner.jpg │ │ ├── guest-screen.png │ │ ├── icheck-orange.png │ │ ├── no-images@2x.png │ │ ├── step-complete.png │ │ ├── community-link.png │ │ ├── default-avatar.jpg │ │ ├── emails │ │ │ ├── beta-logo.jpg │ │ │ ├── beta-button.jpg │ │ │ └── beta-tickets.jpg │ │ ├── icheck-orange@2x.png │ │ ├── onboarding-logo.jpg │ │ ├── processing-avatar.jpg │ │ ├── missing-anime-cover.jpg │ │ ├── no-negative-reviews.jpg │ │ ├── no-notifications-yet.png │ │ ├── no-positive-reviews.jpg │ │ ├── app-screens │ │ │ ├── hapu │ │ │ │ └── hapu-1.jpg │ │ │ ├── taiga │ │ │ │ └── taiga-1.jpg │ │ │ ├── anitro │ │ │ │ └── anitro-1.jpg │ │ │ ├── deadman │ │ │ │ ├── deadman-1.jpg │ │ │ │ └── deadman-2.jpg │ │ │ ├── hb-updater │ │ │ │ └── topkek.jpg │ │ │ ├── tenpenchii │ │ │ │ ├── tenpenchii-1.jpg │ │ │ │ └── tenpenchii-2.jpg │ │ │ ├── humminglist │ │ │ │ ├── humminglist-1.jpg │ │ │ │ └── humminglist-2.jpg │ │ │ └── anitro-mobile │ │ │ │ ├── anitro-mobile-1.jpg │ │ │ │ └── anitro-mobile-2.jpg │ │ ├── no-negative-reviews@2x.jpg │ │ └── no-positive-reviews@2x.jpg │ ├── javascripts │ │ └── old │ │ │ ├── templates │ │ │ └── search │ │ │ │ └── typeahead.hamlbars │ │ │ ├── anime.js │ │ │ ├── twitter.js │ │ │ └── googleplus.js │ ├── fonts │ │ ├── adelle_bold-webfont.eot │ │ ├── adelle_bold-webfont.ttf │ │ ├── adelle_reg-webfont.eot │ │ ├── adelle_reg-webfont.ttf │ │ ├── adelle_reg-webfont.woff │ │ ├── adelle_bold-webfont.woff │ │ ├── adelle_italic-webfont.eot │ │ ├── adelle_italic-webfont.ttf │ │ ├── adelle_italic-webfont.woff │ │ ├── klavikamedium-tf-webfont.eot │ │ ├── klavikamedium-tf-webfont.ttf │ │ ├── adelle_bolditalic-webfont.eot │ │ ├── adelle_bolditalic-webfont.ttf │ │ ├── adelle_bolditalic-webfont.woff │ │ ├── klavikamedium-tf-webfont.woff │ │ ├── klavikaregular-tf-webfont.eot │ │ ├── klavikaregular-tf-webfont.ttf │ │ └── klavikaregular-tf-webfont.woff │ └── stylesheets │ │ ├── vendor.css.scss │ │ └── partials │ │ ├── quote-page.css.scss │ │ ├── media-quotes.css.scss │ │ └── video-container.css.scss ├── api │ └── api.rb ├── serializers │ ├── genre_serializer.rb │ ├── producer_serializer.rb │ ├── pro_membership_plan_serializer.rb │ ├── person_serializer.rb │ ├── franchise_serializer.rb │ ├── character_serializer.rb │ ├── api │ │ └── v2 │ │ │ ├── episode_serializer.rb │ │ │ └── gallery_image_serializer.rb │ ├── casting_serializer.rb │ ├── episode_serializer.rb │ ├── user_info_serializer.rb │ ├── app_serializer.rb │ └── partner_deal_serializer.rb ├── controllers │ ├── lists_controller.rb │ ├── pro_membership_plans_controller.rb │ ├── user_infos_controller.rb │ ├── castings_controller.rb │ ├── settings_controller.rb │ ├── franchises_controller.rb │ ├── users │ │ ├── sessions_controller.rb │ │ └── omniauth_callbacks_controller.rb │ └── characters_controller.rb └── workers │ ├── version_worker.rb │ ├── user_sync_worker.rb │ ├── my_anime_list_scrape_worker.rb │ ├── substory_reaper_worker.rb │ └── my_anime_list_import_apply_worker.rb ├── test ├── models │ ├── .gitkeep │ └── streamer_test.rb ├── integration │ └── .gitkeep ├── fixtures │ ├── partner_codes.yml │ ├── blank_png.response │ ├── large_image.response │ ├── small_image.response │ ├── xml_cleaner │ │ └── invalid_chars.xml │ ├── streamers.yml │ └── follows.yml ├── mailers │ ├── previews │ │ └── pro_mailer_preview.rb │ └── pro_mailer_test.rb ├── controllers │ └── chats_controller_test.rb ├── fixture_helper.rb └── lib │ └── xml_cleaner_test.rb ├── vendor └── assets │ ├── javascripts │ └── .gitkeep │ └── stylesheets │ └── .gitkeep ├── config ├── initializers │ ├── devise_async.rb │ ├── token.rb │ ├── dropbox_api.rb │ ├── ember.rb │ ├── redis.rb │ ├── stripe.rb │ ├── mime_types.rb │ ├── sidekiq.rb │ ├── kibana.rb │ ├── message_bus.rb │ └── backtrace_silencers.rb ├── skylight.yml ├── boot.rb ├── sidekiq.yml ├── environment.rb ├── locales │ ├── en.yml │ └── doorkeeper.en.yml └── database.yml ├── public ├── 2013 │ └── assets │ │ ├── favicon.ico │ │ ├── images │ │ ├── aot.jpg │ │ ├── dpt.jpg │ │ ├── klk.jpg │ │ ├── ore.jpg │ │ ├── stg.jpg │ │ ├── aot-2.jpg │ │ ├── aot-3.jpg │ │ ├── aot-4.jpg │ │ ├── aot-5.jpg │ │ ├── dpt-2.jpg │ │ ├── dpt2.jpg │ │ ├── free.jpg │ │ ├── free2.jpg │ │ ├── hikki.jpg │ │ ├── kuro.jpg │ │ ├── neko.jpg │ │ ├── wata.jpg │ │ ├── chamber.jpg │ │ ├── emiyusa.jpg │ │ ├── hb-logo.png │ │ ├── kirara.jpg │ │ ├── kurisu.jpg │ │ ├── mikasa.jpg │ │ ├── new-year.jpg │ │ ├── oreimo.jpg │ │ ├── potato.jpg │ │ ├── watamote.jpg │ │ ├── aot-title.png │ │ ├── gargantia.jpg │ │ ├── kill-la-kill.jpg │ │ ├── posters │ │ │ ├── aot2.jpg │ │ │ ├── free.png │ │ │ ├── gjbu.jpg │ │ │ ├── is-2.png │ │ │ ├── magi.png │ │ │ ├── maoyu.jpg │ │ │ ├── amnesia.jpg │ │ │ ├── berserk.jpg │ │ │ ├── gintama.jpg │ │ │ ├── haganai.jpg │ │ │ ├── hetalia.jpg │ │ │ ├── kuroko.png │ │ │ ├── madoka.jpg │ │ │ ├── nagiasu.jpg │ │ │ ├── noucome.png │ │ │ ├── oreimo.jpg │ │ │ ├── railgun.jpg │ │ │ ├── romanze.jpg │ │ │ ├── romcom.jpg │ │ │ ├── sasami.jpg │ │ │ ├── sunday.jpg │ │ │ ├── aot-ilse.jpg │ │ │ ├── blood-lad.jpg │ │ │ ├── coppelion.png │ │ │ ├── gargantia.jpg │ │ │ ├── gatchaman.png │ │ │ ├── hataraku.jpg │ │ │ ├── monogatari.jpg │ │ │ ├── oreshura.jpg │ │ │ ├── sket-dance.jpg │ │ │ ├── valvrave-2.jpg │ │ │ ├── valvrave.jpg │ │ │ ├── watamote.jpg │ │ │ ├── yuyushiki.jpg │ │ │ ├── chihayafuru.jpg │ │ │ ├── danganronpa.jpg │ │ │ ├── date-a-live.jpg │ │ │ ├── golden-time.png │ │ │ ├── hentai-ouji.jpg │ │ │ ├── kill-la-kill.jpg │ │ │ ├── kotoura-san.jpg │ │ │ ├── kyousougiga.jpg │ │ │ ├── log-horizon.png │ │ │ ├── silver-spoon.jpg │ │ │ ├── steins-gate.png │ │ │ ├── attack-on-titan.png │ │ │ ├── devil-survivor.png │ │ │ ├── diamond-no-ace.jpg │ │ │ ├── garden-of-words.png │ │ │ ├── hajime-no-ippo.jpg │ │ │ ├── hanasaku-iroha.jpg │ │ │ ├── highschool-ne.jpg │ │ │ ├── kiniro-mosaic.jpg │ │ │ ├── majestic-prince.png │ │ │ ├── nekomonogatari.png │ │ │ ├── oreimo-specials.jpg │ │ │ ├── tamako-market.jpg │ │ │ ├── yowamushi-pedal.jpg │ │ │ ├── kyoukai-no-kanata.jpg │ │ │ ├── problem-children.jpg │ │ │ ├── servant-x-service.jpg │ │ │ ├── strike-the-blood.png │ │ │ ├── little-witch-academia.jpg │ │ │ ├── the-world-god-only-knows.png │ │ │ └── unbreakable-machine-doll.png │ │ ├── social-thumb.jpg │ │ ├── year-banner.jpg │ │ └── kuriyama-bucket.jpg │ │ ├── fonts │ │ ├── ionicons.eot │ │ ├── ionicons.ttf │ │ ├── ionicons.woff │ │ ├── klavikamedium-tf-webfont.eot │ │ ├── klavikamedium-tf-webfont.ttf │ │ ├── klavikamedium-tf-webfont.woff │ │ ├── klavikaregular-tf-webfont.eot │ │ ├── klavikaregular-tf-webfont.ttf │ │ └── klavikaregular-tf-webfont.woff │ │ └── apple-touch-icon.png ├── google72c117786c605e48.html ├── default.png ├── favicon.ico ├── loaderio-70eaf436ec11344e12431310c6ef8987.txt ├── chat_beep.m4a ├── chat_beep.ogg ├── footer-logo.png ├── default_avatar.jpg ├── default_cover.png ├── onboarding-moe.png ├── images │ ├── pro-header.png │ ├── tiny-logo.jpg │ ├── amazon-purchase.png │ ├── pro-back-madoka.jpg │ ├── email-logo-header.jpg │ ├── vegeta-pro-cancel.jpg │ └── email-bannertext-img.png ├── onboarding-moe-bg.png └── robots.txt ├── db ├── migrate │ ├── 20140628184936_delete_consuming_table.rb │ ├── 20140630031803_rename_type_on_manga.rb │ ├── 20140707100609_remove_neon_alley.rb │ ├── 20141116071336_index_anime_on_user_count.rb │ ├── 20141207232105_add_comment_to_versions.rb │ ├── 20140626200713_add_type_to_manga.rb │ ├── 20141121171716_add_created_at_index_to_stories.rb │ ├── 20141219002102_add_pro_expires_at_to_users.rb │ ├── 20141017210309_change_manga_notes_type.rb │ ├── 20141210212700_remove_jp_title_column_from_episodes.rb │ ├── 20141221065230_add_stripe_customer_id_to_users.rb │ ├── 20140617152640_add_rating_to_consuming.rb │ ├── 20140902015226_add_last_backup_to_users.rb │ ├── 20141119211556_add_total_votes_to_stories.rb │ ├── 20141222013645_add_default_to_valid_countries.rb │ ├── 20140714111212_add_video_to_episode.rb │ ├── 20140628102257_user_count_should_be_an_integer.rb │ ├── 20140820213008_remove_broken_unique_constraint_on_videos.rb │ ├── 20141220111220_remove_null_constraint_from_partner_codes.rb │ ├── 20140707110148_remove_dumb_english_anime_titles_field_from_user.rb │ ├── 20140916053901_remove_substory_type_old_from_substories.rb │ ├── 20140627051435_rename_more_stuff_on_manga_library_entry.rb │ ├── 20140714072239_create_streamers.rb │ ├── 20140901082201_add_dropbox_token_to_users.rb │ ├── 20141206143111_remove_beta_invites_table.rb │ ├── 20141220090229_add_subscription_columns_to_users.rb │ ├── 20140707102503_remove_forem_from_user.rb │ ├── 20141117044111_add_edit_fields_to_user.rb │ ├── 20141119061218_add_slug_to_characters.rb │ ├── 20140616040317_synopsis_should_not_be_null.rb │ ├── 20140629091741_add_notes_and_imported_to_manga_library_entry.rb │ ├── 20140813001044_tweak_streamer_video_columns.rb │ ├── 20140627050628_rename_stuff_on_manga_library_entry.rb │ └── 20141116204731_create_apps_table.rb └── seeds.rb ├── config.ru ├── Procfile ├── .editorconfig ├── Rakefile ├── script └── rails └── Guardfile /log/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/tasks/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tmp/pids/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/mailers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/models/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/models/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/public/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/integration/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/helpers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/models/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/routes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/views/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/settings/index.haml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/users/_dash.html.haml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/components/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vendor/assets/stylesheets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/frontend/app/templates/radio.hbs: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /app/frontend/app/templates/loading.hbs: -------------------------------------------------------------------------------- 1 | {{outlet}} 2 | -------------------------------------------------------------------------------- /app/views/reviews/edit.html.haml: -------------------------------------------------------------------------------- 1 | = render "form" 2 | -------------------------------------------------------------------------------- /app/views/reviews/new.html.haml: -------------------------------------------------------------------------------- 1 | = render "form" 2 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/waifu-selector.hbs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/views/lists/index.html.haml: -------------------------------------------------------------------------------- 1 | All of a user's lists. 2 | -------------------------------------------------------------------------------- /app/frontend/app/templates/anime/loading.hbs: -------------------------------------------------------------------------------- 1 | {{loading-indicator}} 2 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/bootstrap-tooltip.hbs: -------------------------------------------------------------------------------- 1 | {{yield}} 2 | -------------------------------------------------------------------------------- /config/initializers/devise_async.rb: -------------------------------------------------------------------------------- 1 | Devise::Async.backend = :sidekiq 2 | -------------------------------------------------------------------------------- /app/frontend/app/styles/app.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | margin: 20px; 3 | } 4 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/load-more.hbs: -------------------------------------------------------------------------------- 1 | {{loading-indicator}} 2 | -------------------------------------------------------------------------------- /app/frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # http://www.robotstxt.org 2 | User-agent: * 3 | -------------------------------------------------------------------------------- /app/frontend/app/templates/user/loading.hbs: -------------------------------------------------------------------------------- 1 | {{loading-indicator classNames="light"}} 2 | -------------------------------------------------------------------------------- /public/google72c117786c605e48.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google72c117786c605e48.html -------------------------------------------------------------------------------- /test/fixtures/partner_codes.yml: -------------------------------------------------------------------------------- 1 | one: 2 | partner_deal: one 3 | code: abcdefg 4 | -------------------------------------------------------------------------------- /public/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/default.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/favicon.ico -------------------------------------------------------------------------------- /public/loaderio-70eaf436ec11344e12431310c6ef8987.txt: -------------------------------------------------------------------------------- 1 | loaderio-70eaf436ec11344e12431310c6ef8987 -------------------------------------------------------------------------------- /app/frontend/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components", 3 | "analytics": false 4 | } 5 | -------------------------------------------------------------------------------- /config/initializers/token.rb: -------------------------------------------------------------------------------- 1 | Hummingbird::Application.config.jwt_secret = ENV['JWT_SECRET'] 2 | -------------------------------------------------------------------------------- /public/chat_beep.m4a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/chat_beep.m4a -------------------------------------------------------------------------------- /public/chat_beep.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/chat_beep.ogg -------------------------------------------------------------------------------- /app/frontend/app/templates/components/ad-unit.hbs: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/views/genres/show.html.haml: -------------------------------------------------------------------------------- 1 | %h1= title "#{@genre.name} Anime" 2 | 3 | = render "anime/index" 4 | -------------------------------------------------------------------------------- /config/skylight.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # The Skylight ID for the application. 3 | application: Z4gOibF0diDF 4 | -------------------------------------------------------------------------------- /public/footer-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/footer-logo.png -------------------------------------------------------------------------------- /app/views/kaminari/_gap.html.haml: -------------------------------------------------------------------------------- 1 | %li.disabled 2 | = link_to raw(t 'views.pagination.truncate'), '#' 3 | -------------------------------------------------------------------------------- /public/default_avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/default_avatar.jpg -------------------------------------------------------------------------------- /public/default_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/default_cover.png -------------------------------------------------------------------------------- /public/onboarding-moe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/onboarding-moe.png -------------------------------------------------------------------------------- /app/assets/images/h-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/h-logo.jpg -------------------------------------------------------------------------------- /app/assets/images/h-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/h-logo.png -------------------------------------------------------------------------------- /app/assets/images/hb-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/hb-bg.jpg -------------------------------------------------------------------------------- /app/assets/images/jlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/jlist.png -------------------------------------------------------------------------------- /app/assets/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/logo.jpg -------------------------------------------------------------------------------- /app/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/logo.png -------------------------------------------------------------------------------- /app/assets/images/ob-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/ob-bg.jpg -------------------------------------------------------------------------------- /app/assets/images/rails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/rails.png -------------------------------------------------------------------------------- /app/assets/images/rec-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/rec-bg.png -------------------------------------------------------------------------------- /app/assets/images/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/sprite.png -------------------------------------------------------------------------------- /app/assets/images/step-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/step-1.png -------------------------------------------------------------------------------- /app/assets/images/step-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/step-2.png -------------------------------------------------------------------------------- /app/assets/images/step-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/step-3.png -------------------------------------------------------------------------------- /public/images/pro-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/pro-header.png -------------------------------------------------------------------------------- /public/images/tiny-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/tiny-logo.jpg -------------------------------------------------------------------------------- /public/onboarding-moe-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/onboarding-moe-bg.png -------------------------------------------------------------------------------- /app/assets/images/apps-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/apps-bg.jpg -------------------------------------------------------------------------------- /app/assets/images/bg-fade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/bg-fade.png -------------------------------------------------------------------------------- /app/assets/images/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/default.jpg -------------------------------------------------------------------------------- /app/assets/images/guest-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/guest-bg.jpg -------------------------------------------------------------------------------- /app/assets/images/logo-new.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/logo-new.jpg -------------------------------------------------------------------------------- /app/assets/images/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/logo@2x.png -------------------------------------------------------------------------------- /app/assets/images/mac-pro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/mac-pro.png -------------------------------------------------------------------------------- /app/assets/images/sotm-oct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/sotm-oct.png -------------------------------------------------------------------------------- /app/assets/images/tsundere.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/tsundere.jpg -------------------------------------------------------------------------------- /app/assets/images/tsundere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/tsundere.png -------------------------------------------------------------------------------- /app/frontend/app/routes/apps.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /lib/auth/unauthorized_exception.rb: -------------------------------------------------------------------------------- 1 | module Auth 2 | class UnauthorizedException < StandardError 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /public/2013/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/favicon.ico -------------------------------------------------------------------------------- /app/assets/images/arrow_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/arrow_asc.png -------------------------------------------------------------------------------- /app/assets/images/arrow_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/arrow_desc.png -------------------------------------------------------------------------------- /app/assets/images/footer-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/footer-logo.png -------------------------------------------------------------------------------- /app/assets/images/icons/rate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rate.png -------------------------------------------------------------------------------- /app/assets/images/logo-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/logo-sprite.png -------------------------------------------------------------------------------- /app/assets/images/mal-connect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/mal-connect.jpg -------------------------------------------------------------------------------- /app/assets/images/na-connect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/na-connect.jpg -------------------------------------------------------------------------------- /app/assets/images/no-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-images.png -------------------------------------------------------------------------------- /app/assets/images/pro-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/pro-banner.jpg -------------------------------------------------------------------------------- /app/assets/javascripts/old/templates/search/typeahead.hamlbars: -------------------------------------------------------------------------------- 1 | %p(onclick="window.location.href='{{url}}'") {{value}} 2 | -------------------------------------------------------------------------------- /lib/dummy_mixpanel.rb: -------------------------------------------------------------------------------- 1 | class DummyMixpanel 2 | def method_missing(m, *args, &block) 3 | true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /public/2013/assets/images/aot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/aot.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/dpt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/dpt.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/klk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/klk.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/ore.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/ore.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/stg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/stg.jpg -------------------------------------------------------------------------------- /public/images/amazon-purchase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/amazon-purchase.png -------------------------------------------------------------------------------- /public/images/pro-back-madoka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/pro-back-madoka.jpg -------------------------------------------------------------------------------- /test/fixtures/blank_png.response: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/test/fixtures/blank_png.response -------------------------------------------------------------------------------- /app/assets/images/community-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/community-sm.png -------------------------------------------------------------------------------- /app/assets/images/cover-overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/cover-overlay.png -------------------------------------------------------------------------------- /app/assets/images/cover-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/cover-shadow.png -------------------------------------------------------------------------------- /app/assets/images/guest-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/guest-banner.jpg -------------------------------------------------------------------------------- /app/assets/images/guest-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/guest-screen.png -------------------------------------------------------------------------------- /app/assets/images/icheck-orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icheck-orange.png -------------------------------------------------------------------------------- /app/assets/images/icons/fb-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/fb-logo.png -------------------------------------------------------------------------------- /app/assets/images/icons/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/import.png -------------------------------------------------------------------------------- /app/assets/images/icons/review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/review.png -------------------------------------------------------------------------------- /app/assets/images/no-images@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-images@2x.png -------------------------------------------------------------------------------- /app/assets/images/step-complete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/step-complete.png -------------------------------------------------------------------------------- /public/2013/assets/images/aot-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/aot-2.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/aot-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/aot-3.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/aot-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/aot-4.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/aot-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/aot-5.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/dpt-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/dpt-2.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/dpt2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/dpt2.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/free.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/free.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/free2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/free2.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/hikki.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/hikki.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/kuro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/kuro.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/neko.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/neko.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/wata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/wata.jpg -------------------------------------------------------------------------------- /public/images/email-logo-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/email-logo-header.jpg -------------------------------------------------------------------------------- /public/images/vegeta-pro-cancel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/vegeta-pro-cancel.jpg -------------------------------------------------------------------------------- /test/fixtures/large_image.response: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/test/fixtures/large_image.response -------------------------------------------------------------------------------- /test/fixtures/small_image.response: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/test/fixtures/small_image.response -------------------------------------------------------------------------------- /app/assets/images/community-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/community-link.png -------------------------------------------------------------------------------- /app/assets/images/default-avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/default-avatar.jpg -------------------------------------------------------------------------------- /app/assets/images/emails/beta-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/emails/beta-logo.jpg -------------------------------------------------------------------------------- /app/assets/images/icheck-orange@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icheck-orange@2x.png -------------------------------------------------------------------------------- /app/assets/images/icons/left-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/left-arrow.png -------------------------------------------------------------------------------- /app/assets/images/icons/pro-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/pro-banner.jpg -------------------------------------------------------------------------------- /app/assets/images/icons/watchlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/watchlist.png -------------------------------------------------------------------------------- /app/assets/images/onboarding-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/onboarding-logo.jpg -------------------------------------------------------------------------------- /public/2013/assets/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/ionicons.eot -------------------------------------------------------------------------------- /public/2013/assets/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/ionicons.ttf -------------------------------------------------------------------------------- /public/2013/assets/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/ionicons.woff -------------------------------------------------------------------------------- /public/2013/assets/images/chamber.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/chamber.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/emiyusa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/emiyusa.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/hb-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/hb-logo.png -------------------------------------------------------------------------------- /public/2013/assets/images/kirara.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/kirara.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/kurisu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/kurisu.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/mikasa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/mikasa.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/new-year.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/new-year.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/oreimo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/oreimo.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/potato.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/potato.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/watamote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/watamote.jpg -------------------------------------------------------------------------------- /public/images/email-bannertext-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/images/email-bannertext-img.png -------------------------------------------------------------------------------- /app/api/api.rb: -------------------------------------------------------------------------------- 1 | class API < Grape::API 2 | prefix 'api' 3 | format :json 4 | mount API_v1 5 | end 6 | 7 | module Api 8 | end 9 | -------------------------------------------------------------------------------- /app/assets/fonts/adelle_bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_bold-webfont.eot -------------------------------------------------------------------------------- /app/assets/fonts/adelle_bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_bold-webfont.ttf -------------------------------------------------------------------------------- /app/assets/fonts/adelle_reg-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_reg-webfont.eot -------------------------------------------------------------------------------- /app/assets/fonts/adelle_reg-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_reg-webfont.ttf -------------------------------------------------------------------------------- /app/assets/fonts/adelle_reg-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_reg-webfont.woff -------------------------------------------------------------------------------- /app/assets/images/emails/beta-button.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/emails/beta-button.jpg -------------------------------------------------------------------------------- /app/assets/images/icons/input-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/input-arrow.png -------------------------------------------------------------------------------- /app/assets/images/icons/right-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/right-arrow.png -------------------------------------------------------------------------------- /app/assets/images/icons/vote-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/vote-sprite.png -------------------------------------------------------------------------------- /app/assets/images/icons/watch-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/watch-sprite.png -------------------------------------------------------------------------------- /app/assets/images/processing-avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/processing-avatar.jpg -------------------------------------------------------------------------------- /app/frontend/app/adapters/application.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.ActiveModelAdapter.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /public/2013/assets/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/apple-touch-icon.png -------------------------------------------------------------------------------- /public/2013/assets/images/aot-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/aot-title.png -------------------------------------------------------------------------------- /public/2013/assets/images/gargantia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/gargantia.jpg -------------------------------------------------------------------------------- /app/assets/fonts/adelle_bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_bold-webfont.woff -------------------------------------------------------------------------------- /app/assets/fonts/adelle_italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_italic-webfont.eot -------------------------------------------------------------------------------- /app/assets/fonts/adelle_italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_italic-webfont.ttf -------------------------------------------------------------------------------- /app/assets/fonts/adelle_italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_italic-webfont.woff -------------------------------------------------------------------------------- /app/assets/images/emails/beta-tickets.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/emails/beta-tickets.jpg -------------------------------------------------------------------------------- /app/assets/images/icons/negative-votes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/negative-votes.png -------------------------------------------------------------------------------- /app/assets/images/icons/positive-votes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/positive-votes.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-1.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-2.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-3.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-4.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-5.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-6.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-7.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-8.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-9.png -------------------------------------------------------------------------------- /app/assets/images/icons/vote-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/vote-sprite@2x.png -------------------------------------------------------------------------------- /app/assets/images/icons/watch-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/watch-sprite@2x.png -------------------------------------------------------------------------------- /app/assets/images/missing-anime-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/missing-anime-cover.jpg -------------------------------------------------------------------------------- /app/assets/images/no-negative-reviews.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-negative-reviews.jpg -------------------------------------------------------------------------------- /app/assets/images/no-notifications-yet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-notifications-yet.png -------------------------------------------------------------------------------- /app/assets/images/no-positive-reviews.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-positive-reviews.jpg -------------------------------------------------------------------------------- /app/frontend/app/serializers/application.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.ActiveModelSerializer.extend({ 4 | }); 5 | -------------------------------------------------------------------------------- /public/2013/assets/images/kill-la-kill.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/kill-la-kill.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/aot2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/aot2.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/free.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/free.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/gjbu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/gjbu.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/is-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/is-2.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/magi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/magi.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/maoyu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/maoyu.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/social-thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/social-thumb.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/year-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/year-banner.jpg -------------------------------------------------------------------------------- /test/fixtures/xml_cleaner/invalid_chars.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/test/fixtures/xml_cleaner/invalid_chars.xml -------------------------------------------------------------------------------- /app/assets/fonts/klavikamedium-tf-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/klavikamedium-tf-webfont.eot -------------------------------------------------------------------------------- /app/assets/fonts/klavikamedium-tf-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/klavikamedium-tf-webfont.ttf -------------------------------------------------------------------------------- /app/assets/images/app-screens/hapu/hapu-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/hapu/hapu-1.jpg -------------------------------------------------------------------------------- /app/assets/images/icons/negative-votes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/negative-votes@2x.png -------------------------------------------------------------------------------- /app/assets/images/icons/positive-votes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/positive-votes@2x.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-10.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-15.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-25.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-35.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-45.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-55.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-65.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-75.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-85.png -------------------------------------------------------------------------------- /app/assets/images/icons/rating/rating-95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/icons/rating/rating-95.png -------------------------------------------------------------------------------- /app/assets/images/no-negative-reviews@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-negative-reviews@2x.jpg -------------------------------------------------------------------------------- /app/assets/images/no-positive-reviews@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/no-positive-reviews@2x.jpg -------------------------------------------------------------------------------- /app/frontend/app/models/genre.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | name: DS.attr('string') 5 | }); 6 | -------------------------------------------------------------------------------- /app/frontend/app/models/media.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | updatedAt: DS.attr('date') 5 | }); 6 | -------------------------------------------------------------------------------- /app/frontend/app/models/producer.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | name: DS.attr('string') 5 | }); 6 | -------------------------------------------------------------------------------- /app/views/kaminari/_first_page.html.haml: -------------------------------------------------------------------------------- 1 | %li 2 | = link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote 3 | -------------------------------------------------------------------------------- /app/views/kaminari/_last_page.html.haml: -------------------------------------------------------------------------------- 1 | %li 2 | = link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, {:remote => remote} 3 | -------------------------------------------------------------------------------- /public/2013/assets/images/kuriyama-bucket.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/kuriyama-bucket.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/amnesia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/amnesia.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/berserk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/berserk.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/gintama.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/gintama.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/haganai.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/haganai.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/hetalia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/hetalia.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/kuroko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/kuroko.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/madoka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/madoka.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/nagiasu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/nagiasu.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/noucome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/noucome.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/oreimo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/oreimo.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/railgun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/railgun.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/romanze.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/romanze.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/romcom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/romcom.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/sasami.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/sasami.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/sunday.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/sunday.jpg -------------------------------------------------------------------------------- /app/assets/fonts/adelle_bolditalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_bolditalic-webfont.eot -------------------------------------------------------------------------------- /app/assets/fonts/adelle_bolditalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_bolditalic-webfont.ttf -------------------------------------------------------------------------------- /app/assets/fonts/adelle_bolditalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/adelle_bolditalic-webfont.woff -------------------------------------------------------------------------------- /app/assets/fonts/klavikamedium-tf-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/klavikamedium-tf-webfont.woff -------------------------------------------------------------------------------- /app/assets/fonts/klavikaregular-tf-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/klavikaregular-tf-webfont.eot -------------------------------------------------------------------------------- /app/assets/fonts/klavikaregular-tf-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/klavikaregular-tf-webfont.ttf -------------------------------------------------------------------------------- /app/assets/fonts/klavikaregular-tf-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/fonts/klavikaregular-tf-webfont.woff -------------------------------------------------------------------------------- /app/assets/images/app-screens/taiga/taiga-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/taiga/taiga-1.jpg -------------------------------------------------------------------------------- /app/frontend/app/models/franchise.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | anime: DS.hasMany('anime') 5 | }); 6 | -------------------------------------------------------------------------------- /public/2013/assets/images/posters/aot-ilse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/aot-ilse.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/blood-lad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/blood-lad.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/coppelion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/coppelion.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/gargantia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/gargantia.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/gatchaman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/gatchaman.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/hataraku.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/hataraku.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/monogatari.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/monogatari.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/oreshura.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/oreshura.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/sket-dance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/sket-dance.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/valvrave-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/valvrave-2.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/valvrave.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/valvrave.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/watamote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/watamote.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/yuyushiki.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/yuyushiki.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/anitro/anitro-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/anitro/anitro-1.jpg -------------------------------------------------------------------------------- /app/views/quotes/replace_votes.js.erb: -------------------------------------------------------------------------------- 1 | $(".quote_<%= @quote.id %>_votes").replaceWith('<%= j render(partial: 'quotes/votes', locals: {quote: @quote}) %>'); 2 | -------------------------------------------------------------------------------- /public/2013/assets/images/posters/chihayafuru.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/chihayafuru.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/danganronpa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/danganronpa.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/date-a-live.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/date-a-live.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/golden-time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/golden-time.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/hentai-ouji.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/hentai-ouji.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/kill-la-kill.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/kill-la-kill.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/kotoura-san.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/kotoura-san.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/kyousougiga.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/kyousougiga.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/log-horizon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/log-horizon.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/silver-spoon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/silver-spoon.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/steins-gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/steins-gate.png -------------------------------------------------------------------------------- /app/assets/images/app-screens/deadman/deadman-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/deadman/deadman-1.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/deadman/deadman-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/deadman/deadman-2.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/hb-updater/topkek.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/hb-updater/topkek.jpg -------------------------------------------------------------------------------- /app/views/kaminari/_next_page.html.haml: -------------------------------------------------------------------------------- 1 | %li 2 | = link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote 3 | -------------------------------------------------------------------------------- /public/2013/assets/fonts/klavikamedium-tf-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/klavikamedium-tf-webfont.eot -------------------------------------------------------------------------------- /public/2013/assets/fonts/klavikamedium-tf-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/klavikamedium-tf-webfont.ttf -------------------------------------------------------------------------------- /public/2013/assets/images/posters/attack-on-titan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/attack-on-titan.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/devil-survivor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/devil-survivor.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/diamond-no-ace.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/diamond-no-ace.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/garden-of-words.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/garden-of-words.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/hajime-no-ippo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/hajime-no-ippo.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/hanasaku-iroha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/hanasaku-iroha.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/highschool-ne.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/highschool-ne.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/kiniro-mosaic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/kiniro-mosaic.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/majestic-prince.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/majestic-prince.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/nekomonogatari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/nekomonogatari.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/oreimo-specials.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/oreimo-specials.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/tamako-market.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/tamako-market.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/yowamushi-pedal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/yowamushi-pedal.jpg -------------------------------------------------------------------------------- /app/assets/stylesheets/vendor.css.scss: -------------------------------------------------------------------------------- 1 | //= require messenger/messenger 2 | //= require messenger/messenger-theme-flat 3 | //= require jcrop 4 | //= require pace 5 | -------------------------------------------------------------------------------- /app/frontend/app/templates/header/search.hbs: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/views/kaminari/_prev_page.html.haml: -------------------------------------------------------------------------------- 1 | %li 2 | = link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote 3 | -------------------------------------------------------------------------------- /public/2013/assets/fonts/klavikamedium-tf-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/klavikamedium-tf-webfont.woff -------------------------------------------------------------------------------- /public/2013/assets/fonts/klavikaregular-tf-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/klavikaregular-tf-webfont.eot -------------------------------------------------------------------------------- /public/2013/assets/fonts/klavikaregular-tf-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/klavikaregular-tf-webfont.ttf -------------------------------------------------------------------------------- /public/2013/assets/fonts/klavikaregular-tf-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/fonts/klavikaregular-tf-webfont.woff -------------------------------------------------------------------------------- /public/2013/assets/images/posters/kyoukai-no-kanata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/kyoukai-no-kanata.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/problem-children.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/problem-children.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/servant-x-service.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/servant-x-service.jpg -------------------------------------------------------------------------------- /public/2013/assets/images/posters/strike-the-blood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/strike-the-blood.png -------------------------------------------------------------------------------- /app/assets/images/app-screens/tenpenchii/tenpenchii-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/tenpenchii/tenpenchii-1.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/tenpenchii/tenpenchii-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/tenpenchii/tenpenchii-2.jpg -------------------------------------------------------------------------------- /app/serializers/genre_serializer.rb: -------------------------------------------------------------------------------- 1 | class GenreSerializer < ActiveModel::Serializer 2 | attributes :id, :name 3 | 4 | def id 5 | object.slug 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /app/assets/images/app-screens/humminglist/humminglist-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/humminglist/humminglist-1.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/humminglist/humminglist-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/humminglist/humminglist-2.jpg -------------------------------------------------------------------------------- /app/frontend/app/models/person.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | name: DS.attr('string'), 5 | image: DS.attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/serializers/producer_serializer.rb: -------------------------------------------------------------------------------- 1 | class ProducerSerializer < ActiveModel::Serializer 2 | attributes :id, :name 3 | 4 | def id 5 | object.slug 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /db/migrate/20140628184936_delete_consuming_table.rb: -------------------------------------------------------------------------------- 1 | class DeleteConsumingTable < ActiveRecord::Migration 2 | def change 3 | drop_table :consumings 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /public/2013/assets/images/posters/little-witch-academia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/little-witch-academia.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/anitro-mobile/anitro-mobile-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/anitro-mobile/anitro-mobile-1.jpg -------------------------------------------------------------------------------- /app/assets/images/app-screens/anitro-mobile/anitro-mobile-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/app/assets/images/app-screens/anitro-mobile/anitro-mobile-2.jpg -------------------------------------------------------------------------------- /app/frontend/app/controllers/review.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ObjectController.extend({ 4 | positive: Ember.computed.gt('rating', 2.5) 5 | }); 6 | -------------------------------------------------------------------------------- /app/frontend/app/models/character.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | name: DS.attr('string'), 5 | image: DS.attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/serializers/pro_membership_plan_serializer.rb: -------------------------------------------------------------------------------- 1 | class ProMembershipPlanSerializer < ActiveModel::Serializer 2 | attributes :id, :name, :amount, :duration, :recurring 3 | end 4 | -------------------------------------------------------------------------------- /public/2013/assets/images/posters/the-world-god-only-knows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/the-world-god-only-knows.png -------------------------------------------------------------------------------- /public/2013/assets/images/posters/unbreakable-machine-doll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iheanyi/hummingbird/master/public/2013/assets/images/posters/unbreakable-machine-doll.png -------------------------------------------------------------------------------- /test/mailers/previews/pro_mailer_preview.rb: -------------------------------------------------------------------------------- 1 | # Preview all emails at http://localhost:3000/rails/mailers/pro_mailer 2 | class ProMailerPreview < ActionMailer::Preview 3 | 4 | end 5 | -------------------------------------------------------------------------------- /test/mailers/pro_mailer_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class ProMailerTest < ActionMailer::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /app/frontend/app/models/video.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | embed: DS.attr('string'), 5 | episode: DS.belongsTo('episode') 6 | }); 7 | -------------------------------------------------------------------------------- /config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Hummingbird::Application 5 | -------------------------------------------------------------------------------- /db/migrate/20140630031803_rename_type_on_manga.rb: -------------------------------------------------------------------------------- 1 | class RenameTypeOnManga < ActiveRecord::Migration 2 | def change 3 | rename_column :manga, :type, :manga_type 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20140707100609_remove_neon_alley.rb: -------------------------------------------------------------------------------- 1 | class RemoveNeonAlley < ActiveRecord::Migration 2 | def change 3 | remove_column :users, :neon_alley_integration 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20141116071336_index_anime_on_user_count.rb: -------------------------------------------------------------------------------- 1 | class IndexAnimeOnUserCount < ActiveRecord::Migration 2 | def change 3 | add_index :anime, :user_count 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/assets/javascripts/old/anime.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | return $("form.autosubmit select.autosubmit").change(function() { 3 | return $("form.autosubmit").submit(); 4 | }); 5 | }); 6 | -------------------------------------------------------------------------------- /app/controllers/lists_controller.rb: -------------------------------------------------------------------------------- 1 | class ListsController < ApplicationController 2 | def index 3 | end 4 | 5 | def new 6 | end 7 | 8 | def show 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /app/controllers/pro_membership_plans_controller.rb: -------------------------------------------------------------------------------- 1 | class ProMembershipPlansController < ApplicationController 2 | def index 3 | render json: ProMembershipPlan.all 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /config/initializers/dropbox_api.rb: -------------------------------------------------------------------------------- 1 | Dropbox::API::Config.app_key = ENV['DROPBOX_KEY'] 2 | Dropbox::API::Config.app_secret = ENV['DROPBOX_SECRET'] 3 | Dropbox::API::Config.mode = 'sandbox' 4 | -------------------------------------------------------------------------------- /config/initializers/ember.rb: -------------------------------------------------------------------------------- 1 | EmberCLI.configure do |c| 2 | c.app :frontend 3 | c.build_timeout = 15 4 | end 5 | 6 | if ENV['EMBERCLI_COMPILE'] == "1" 7 | EmberCLI.compile! 8 | end 9 | -------------------------------------------------------------------------------- /db/migrate/20141207232105_add_comment_to_versions.rb: -------------------------------------------------------------------------------- 1 | class AddCommentToVersions < ActiveRecord::Migration 2 | def change 3 | add_column :versions, :comment, :string 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | unicorn: bundle exec unicorn -c config/unicorn.conf.rb 2 | sidekiq: bundle exec sidekiq -q default -q mailer -q paperclip -q storyfanout 3 | guard: bundle exec guard start -i 4 | -------------------------------------------------------------------------------- /db/migrate/20140626200713_add_type_to_manga.rb: -------------------------------------------------------------------------------- 1 | class AddTypeToManga < ActiveRecord::Migration 2 | def change 3 | add_column :manga, :type, :string, :default => "Manga" 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20141121171716_add_created_at_index_to_stories.rb: -------------------------------------------------------------------------------- 1 | class AddCreatedAtIndexToStories < ActiveRecord::Migration 2 | def change 3 | add_index :stories, :created_at 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/frontend/app/adapters/current-user.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.ActiveModelAdapter.extend({ 4 | pathForType: function() { 5 | return 'users'; 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /app/serializers/person_serializer.rb: -------------------------------------------------------------------------------- 1 | class PersonSerializer < ActiveModel::Serializer 2 | attributes :id, :name, :image 3 | 4 | def image 5 | object.image.url(:thumb_small) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /test/controllers/chats_controller_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class ChatsControllerTest < ActionController::TestCase 4 | # test "the truth" do 5 | # assert true 6 | # end 7 | end 8 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/footer.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import HasCurrentUser from '../mixins/has-current-user'; 3 | 4 | export default Ember.Controller.extend(HasCurrentUser, { 5 | }); 6 | -------------------------------------------------------------------------------- /app/frontend/app/routes/notifications.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | model: function() { 5 | return this.store.find('notification'); 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/loading-indicator.hbs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 | -------------------------------------------------------------------------------- /app/serializers/franchise_serializer.rb: -------------------------------------------------------------------------------- 1 | class FranchiseSerializer < ActiveModel::Serializer 2 | embed :ids, include: true 3 | 4 | attributes :id 5 | 6 | has_many :anime, embed_key: :slug 7 | end 8 | -------------------------------------------------------------------------------- /app/views/kaminari/_page.html.haml: -------------------------------------------------------------------------------- 1 | %li{class: "#{'current' if page.current?}"} 2 | = link_to page, page.current? ? '#' : url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} 3 | -------------------------------------------------------------------------------- /db/migrate/20141219002102_add_pro_expires_at_to_users.rb: -------------------------------------------------------------------------------- 1 | class AddProExpiresAtToUsers < ActiveRecord::Migration 2 | def change 3 | add_column :users, :pro_expires_at, :timestamp 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig file 2 | # http://editorconfig.org/ 3 | 4 | root = true 5 | 6 | [*] 7 | end_of_line = lf 8 | insert_final_newline = true 9 | indent_style = space 10 | indent_size = 2 11 | -------------------------------------------------------------------------------- /app/frontend/app/templates/story/deleted.hbs: -------------------------------------------------------------------------------- 1 |
2 | {{#if isDirty}} 3 | Deleting... 4 | {{else}} 5 | Deleted. 6 | {{/if}} 7 |
8 | -------------------------------------------------------------------------------- /app/serializers/character_serializer.rb: -------------------------------------------------------------------------------- 1 | class CharacterSerializer < ActiveModel::Serializer 2 | attributes :id, :name, :image 3 | 4 | def image 5 | object.image.url(:thumb_small) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/user/followers.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ArrayController.extend({ 4 | needs: "user", 5 | user: Ember.computed.alias('controllers.user') 6 | }); 7 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/user/following.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ArrayController.extend({ 4 | needs: "user", 5 | user: Ember.computed.alias('controllers.user') 6 | }); 7 | -------------------------------------------------------------------------------- /app/frontend/app/routes/onboarding/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | beforeModel: function() { 5 | this.transitionTo('onboarding.start'); 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /app/frontend/app/routes/search.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | queryParams: { 5 | query: { replace: true }, 6 | filter: { replace: true } 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /db/migrate/20141017210309_change_manga_notes_type.rb: -------------------------------------------------------------------------------- 1 | class ChangeMangaNotesType < ActiveRecord::Migration 2 | def change 3 | 4 | change_column(:manga_library_entries, :notes, :text) 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /db/migrate/20141210212700_remove_jp_title_column_from_episodes.rb: -------------------------------------------------------------------------------- 1 | class RemoveJpTitleColumnFromEpisodes < ActiveRecord::Migration 2 | def change 3 | remove_column :episodes, :jp_title, :text 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20141221065230_add_stripe_customer_id_to_users.rb: -------------------------------------------------------------------------------- 1 | class AddStripeCustomerIdToUsers < ActiveRecord::Migration 2 | def change 3 | add_column :users, :stripe_customer_id, :string 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/controllers/user_infos_controller.rb: -------------------------------------------------------------------------------- 1 | class UserInfosController < ApplicationController 2 | def show 3 | user = User.find(params[:id]) 4 | render json: user, serializer: UserInfoSerializer 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/episodes/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ArrayController.extend({ 4 | needs: ['anime'], 5 | anime: Ember.computed.alias('controllers.anime') 6 | }); 7 | -------------------------------------------------------------------------------- /app/serializers/api/v2/episode_serializer.rb: -------------------------------------------------------------------------------- 1 | module Api::V2 2 | class EpisodeSerializer < Serializer 3 | title :episode 4 | 5 | fields :title, :synopsis, :airdate, :number, :season_number 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /app/serializers/casting_serializer.rb: -------------------------------------------------------------------------------- 1 | class CastingSerializer < ActiveModel::Serializer 2 | embed :ids, include: true 3 | 4 | attributes :id, :role, :language 5 | has_one :person 6 | has_one :character 7 | end 8 | -------------------------------------------------------------------------------- /config/initializers/redis.rb: -------------------------------------------------------------------------------- 1 | def get_new_redis_pool 2 | ConnectionPool.new(size: 10, timeout: 5) do 3 | Redis.new(driver: :hiredis, host: ENV['REDIS_HOST']) 4 | end 5 | end 6 | 7 | $redis = get_new_redis_pool 8 | -------------------------------------------------------------------------------- /test/fixture_helper.rb: -------------------------------------------------------------------------------- 1 | def read_fixture(name, erb=true) 2 | filename = File.realpath(File.join('./fixtures/', name), __dir__) 3 | content = open(filename).read 4 | erb ? ERB.new(content).result : content 5 | end 6 | -------------------------------------------------------------------------------- /app/frontend/app/mixins/has-current-user.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Mixin.create({ 4 | needs: ['current-user'], 5 | currentUser: Ember.computed.alias('controllers.current-user') 6 | }); 7 | -------------------------------------------------------------------------------- /app/frontend/app/mixins/modals/controller.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Mixin.create({ 4 | actions: { close: function () { 5 | return this.send('closeModal'); 6 | } 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /db/migrate/20140617152640_add_rating_to_consuming.rb: -------------------------------------------------------------------------------- 1 | class AddRatingToConsuming < ActiveRecord::Migration 2 | def change 3 | add_column :consumings, :rating, :decimal, :precision => 2, :scale => 1 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20140902015226_add_last_backup_to_users.rb: -------------------------------------------------------------------------------- 1 | class AddLastBackupToUsers < ActiveRecord::Migration 2 | def change 3 | change_table :users do |t| 4 | t.timestamp :last_backup 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /db/migrate/20141119211556_add_total_votes_to_stories.rb: -------------------------------------------------------------------------------- 1 | class AddTotalVotesToStories < ActiveRecord::Migration 2 | def change 3 | add_column :stories, :total_votes, :integer, null: false, default: 0 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20141222013645_add_default_to_valid_countries.rb: -------------------------------------------------------------------------------- 1 | class AddDefaultToValidCountries < ActiveRecord::Migration 2 | def change 3 | change_column_default :partner_deals, :valid_countries, [] 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/frontend/app/routes/apps/mine.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | model: function() { 5 | return this.store.find('app', {creator: this.get('currentUser.id')}); 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /app/workers/version_worker.rb: -------------------------------------------------------------------------------- 1 | class VersionWorker 2 | include Sidekiq::Worker 3 | 4 | def perform(version_id) 5 | version = Version.find(version_id) 6 | version.item.update_from_pending(version) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /config/boot.rb: -------------------------------------------------------------------------------- 1 | require 'rubygems' 2 | 3 | # Set up gems listed in the Gemfile. 4 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 5 | 6 | require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) 7 | -------------------------------------------------------------------------------- /config/initializers/stripe.rb: -------------------------------------------------------------------------------- 1 | Rails.configuration.stripe = { 2 | publishable_key: ENV['STRIPE_PUBLISHABLE_KEY'], 3 | secret_key: ENV['STRIPE_SECRET_KEY'] 4 | } 5 | 6 | Stripe.api_key = Rails.configuration.stripe[:secret_key] 7 | -------------------------------------------------------------------------------- /db/migrate/20140714111212_add_video_to_episode.rb: -------------------------------------------------------------------------------- 1 | class AddVideoToEpisode < ActiveRecord::Migration 2 | def change 3 | add_column :episodes, :synopsis, :text 4 | add_attachment :episodes, :thumbnail 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/controllers/castings_controller.rb: -------------------------------------------------------------------------------- 1 | class CastingsController < ApplicationController 2 | def index 3 | anime = Anime.find(params[:anime_id]) 4 | render json: anime.castings.includes(:character, :person) 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/frontend/app/models/user-info.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | lifeSpentOnAnime: DS.attr('number'), 5 | animeWatched: DS.attr('number'), 6 | topGenres: DS.attr('array') 7 | }); 8 | -------------------------------------------------------------------------------- /db/migrate/20140628102257_user_count_should_be_an_integer.rb: -------------------------------------------------------------------------------- 1 | class UserCountShouldBeAnInteger < ActiveRecord::Migration 2 | def change 3 | change_column :anime, :user_count, :integer, default: 0, null: false 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20140820213008_remove_broken_unique_constraint_on_videos.rb: -------------------------------------------------------------------------------- 1 | class RemoveBrokenUniqueConstraintOnVideos < ActiveRecord::Migration 2 | def change 3 | remove_index :videos, [:episode_id, :streamer_id] 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20141220111220_remove_null_constraint_from_partner_codes.rb: -------------------------------------------------------------------------------- 1 | class RemoveNullConstraintFromPartnerCodes < ActiveRecord::Migration 2 | def change 3 | change_column_null :partner_codes, :user_id, true 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/assets/stylesheets/partials/quote-page.css.scss: -------------------------------------------------------------------------------- 1 | .quote-container { 2 | margin: 10px 0; 3 | padding: 15px; 4 | background: #fff; 5 | border-radius: 3px; 6 | 7 | .quote-input { 8 | margin: 10px 0; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/frontend/app/components/bootstrap-modal.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Component.extend({ 4 | actions: { 5 | close: function() { 6 | return this.sendAction(); 7 | } 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /app/frontend/app/models/app.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | key: DS.attr('string'), 5 | secret: DS.attr('string'), 6 | name: DS.attr('string'), 7 | creator: DS.belongsTo('user') 8 | }); 9 | -------------------------------------------------------------------------------- /app/frontend/testem.json: -------------------------------------------------------------------------------- 1 | { 2 | "framework": "qunit", 3 | "test_page": "tests/index.html", 4 | "launch_in_ci": [ 5 | "PhantomJS" 6 | ], 7 | "launch_in_dev": [ 8 | "PhantomJS", 9 | "Chrome" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /config/sidekiq.yml: -------------------------------------------------------------------------------- 1 | --- 2 | production: 3 | :concurrency: 15 4 | :pidfile: /var/hummingbird/tmp/pids/sidekiq.pid 5 | :queues: 6 | - [default, 1] 7 | - [storyfanout, 1] 8 | - [mailer, 1] 9 | - [paperclip, 1] 10 | -------------------------------------------------------------------------------- /db/migrate/20140707110148_remove_dumb_english_anime_titles_field_from_user.rb: -------------------------------------------------------------------------------- 1 | class RemoveDumbEnglishAnimeTitlesFieldFromUser < ActiveRecord::Migration 2 | def change 3 | remove_column :users, :english_anime_titles 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20140916053901_remove_substory_type_old_from_substories.rb: -------------------------------------------------------------------------------- 1 | class RemoveSubstoryTypeOldFromSubstories < ActiveRecord::Migration 2 | def change 3 | remove_column :substories, :substory_type_old, :string 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file 2 | # 3 | # To ban all spiders from the entire site uncomment the next two lines: 4 | # User-Agent: * 5 | # Disallow: / 6 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/current-user.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ObjectController.extend({ 4 | isSignedIn: function() { 5 | return this.get('content') !== null; 6 | }.property('@content') 7 | }); 8 | -------------------------------------------------------------------------------- /app/frontend/app/initializers/message-bus.js: -------------------------------------------------------------------------------- 1 | /* global MessageBus */ 2 | 3 | export function initialize() { 4 | MessageBus.start(); 5 | } 6 | 7 | export default { 8 | name: 'message-bus', 9 | initialize: initialize 10 | }; 11 | -------------------------------------------------------------------------------- /app/workers/user_sync_worker.rb: -------------------------------------------------------------------------------- 1 | class UserSyncWorker 2 | include Sidekiq::Worker 3 | 4 | def perform(user_id) 5 | open("http://forums.hummingbird.me/sync?secret=#{ENV['FORUM_SYNC_SECRET']}&user_id=#{user_id}").read 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /app/frontend/app/helpers/repeat.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export function repeat(count, options) { 4 | while (count--) { 5 | options.fn(this); 6 | } 7 | } 8 | 9 | Ember.Handlebars.registerHelper('repeat', repeat); 10 | -------------------------------------------------------------------------------- /config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the rails application 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the rails application 5 | Hummingbird::Application.initialize! 6 | 7 | require 'bleak_house' if ENV['BLEAK_HOUSE'] 8 | -------------------------------------------------------------------------------- /db/migrate/20140627051435_rename_more_stuff_on_manga_library_entry.rb: -------------------------------------------------------------------------------- 1 | class RenameMoreStuffOnMangaLibraryEntry < ActiveRecord::Migration 2 | def change 3 | rename_column :manga_library_entries, :rereading_count, :reread_count 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /test/fixtures/streamers.yml: -------------------------------------------------------------------------------- 1 | # == Schema Information 2 | # 3 | # Table name: streamers 4 | # 5 | # id :integer not null, primary key 6 | # site_name :string(255) not null 7 | # 8 | 9 | hulu: 10 | site_name: Hulu 11 | -------------------------------------------------------------------------------- /app/frontend/app/utils/computed/property-equal.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default function computedPropertyEqual(p1, p2) { 4 | return Ember.computed(p1, p2, function() { 5 | return this.get(p1) === this.get(p2); 6 | }); 7 | } 8 | -------------------------------------------------------------------------------- /config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | # Mime::Type.register_alias "text/html", :iphone 6 | -------------------------------------------------------------------------------- /db/migrate/20140714072239_create_streamers.rb: -------------------------------------------------------------------------------- 1 | class CreateStreamers < ActiveRecord::Migration 2 | def change 3 | create_table :streamers do |t| 4 | t.string :site_name, null: false 5 | t.string :oembed_uri 6 | end 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /app/frontend/app/helpers/pluralize.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export function pluralize(number, singular, plural) { 4 | return number + " " + (number === 1 ? singular : plural); 5 | } 6 | 7 | Ember.Handlebars.helper('pluralize', pluralize); 8 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/helpers/avatar-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | avatar 3 | } from 'frontend/helpers/avatar'; 4 | 5 | module('AvatarHelper'); 6 | 7 | // Replace this with your real tests. 8 | test('it works', function() { 9 | ok(true); 10 | }); 11 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/helpers/repeat-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | repeat 3 | } from 'frontend/helpers/repeat'; 4 | 5 | module('RepeatHelper'); 6 | 7 | // Replace this with your real tests. 8 | test('it works', function() { 9 | ok(true); 10 | }); 11 | -------------------------------------------------------------------------------- /app/models/streamer.rb: -------------------------------------------------------------------------------- 1 | # == Schema Information 2 | # 3 | # Table name: streamers 4 | # 5 | # id :integer not null, primary key 6 | # site_name :string(255) not null 7 | # 8 | 9 | class Streamer < ActiveRecord::Base 10 | end 11 | -------------------------------------------------------------------------------- /app/assets/javascripts/old/twitter.js: -------------------------------------------------------------------------------- 1 | !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); -------------------------------------------------------------------------------- /app/frontend/app/helpers/format-time.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | /* global moment */ 3 | 4 | export function formatTime(time, format) { 5 | return moment(time).format(format); 6 | } 7 | 8 | export default Ember.Handlebars.makeBoundHelper(formatTime); 9 | -------------------------------------------------------------------------------- /app/frontend/app/models/casting.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | role: DS.attr('string'), 5 | language: DS.attr('string'), 6 | character: DS.belongsTo('character'), 7 | person: DS.belongsTo('person') 8 | }); 9 | -------------------------------------------------------------------------------- /app/frontend/app/models/pro-membership-plan.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | name: DS.attr('string'), 5 | amount: DS.attr('number'), 6 | duration: DS.attr('number'), 7 | recurring: DS.attr('boolean') 8 | }); 9 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/utils/session-test.js: -------------------------------------------------------------------------------- 1 | import session from 'frontend/utils/session'; 2 | 3 | module('session'); 4 | 5 | // Replace this with your real tests. 6 | test('it works', function() { 7 | var result = session; 8 | ok(result); 9 | }); 10 | -------------------------------------------------------------------------------- /app/workers/my_anime_list_scrape_worker.rb: -------------------------------------------------------------------------------- 1 | class MyAnimeListScrapeWorker 2 | include Sidekiq::Worker 3 | 4 | def perform(type, id) 5 | db = type.camelize.constantize 6 | db.create_or_update_from_hash(MALImport.new(type, id).to_h) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /app/workers/substory_reaper_worker.rb: -------------------------------------------------------------------------------- 1 | class SubstoryReaperWorker 2 | include Sidekiq::Worker 3 | 4 | def perform(story_id) 5 | Substory.where(story_id: story_id).find_each do |substory| 6 | substory.destroy! 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /db/migrate/20140901082201_add_dropbox_token_to_users.rb: -------------------------------------------------------------------------------- 1 | class AddDropboxTokenToUsers < ActiveRecord::Migration 2 | def change 3 | change_table :users do |t| 4 | t.string :dropbox_token 5 | t.string :dropbox_secret 6 | end 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /db/migrate/20141206143111_remove_beta_invites_table.rb: -------------------------------------------------------------------------------- 1 | class RemoveBetaInvitesTable < ActiveRecord::Migration 2 | def up 3 | drop_table :beta_invites 4 | end 5 | 6 | def down 7 | raise ActiveRecord::IrreversibleMigration 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/apps/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | mobileApps: Ember.computed.filterBy('model', 'form', 'Mobile'), 5 | desktopApps: Ember.computed.filterBy('model', 'form', 'Desktop') 6 | }); 7 | -------------------------------------------------------------------------------- /app/frontend/app/templates/modals/youtube.hbs: -------------------------------------------------------------------------------- 1 | {{#bootstrap-modal action="close"}} 2 | 5 | {{/bootstrap-modal}} 6 | -------------------------------------------------------------------------------- /app/serializers/api/v2/gallery_image_serializer.rb: -------------------------------------------------------------------------------- 1 | module Api::V2 2 | class GalleryImageSerializer < Serializer 3 | title :gallery_image 4 | 5 | field(:thumb) {|i| i.image.url(:thumb) } 6 | field(:original) {|i| i.image.url(:original) } 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /config/initializers/sidekiq.rb: -------------------------------------------------------------------------------- 1 | Sidekiq.configure_server do |config| 2 | config.redis = { :url => "tcp://#{ENV['REDIS_HOST']}:6379/1" } 3 | end 4 | 5 | Sidekiq.configure_client do |config| 6 | config.redis = { :url => "tcp://#{ENV['REDIS_HOST']}:6379/1" } 7 | end 8 | -------------------------------------------------------------------------------- /config/initializers/kibana.rb: -------------------------------------------------------------------------------- 1 | Kibana.configure do |config| 2 | config.elasticsearch_host = ENV['ELASTICSEARCH_HOST'] 3 | config.elasticsearch_port = 9200 4 | config.kibana_default_route = '/dashboard/file/logstash.json' 5 | config.kibana_index = 'kibana-int' 6 | end 7 | -------------------------------------------------------------------------------- /db/migrate/20141220090229_add_subscription_columns_to_users.rb: -------------------------------------------------------------------------------- 1 | class AddSubscriptionColumnsToUsers < ActiveRecord::Migration 2 | def change 3 | add_column :users, :stripe_token, :string 4 | add_column :users, :pro_membership_plan_id, :integer 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/utils/computed/property-equal-test.js: -------------------------------------------------------------------------------- 1 | import propertyEqual from 'frontend/utils/computed/property-equal'; 2 | 3 | module('computedPropertyEqual'); 4 | 5 | // Replace this with your real tests. 6 | test('it works', function() { 7 | ok(true); 8 | }); 9 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/utils/escape-html-test.js: -------------------------------------------------------------------------------- 1 | import escapeHtml from 'frontend/utils/escape-html'; 2 | 3 | module('escapeHtml'); 4 | 5 | test('escapes HTML', function() { 6 | equal(escapeHtml('

Test!&"/

'), '<p>Test!&"/</p>'); 7 | }); 8 | -------------------------------------------------------------------------------- /db/migrate/20140707102503_remove_forem_from_user.rb: -------------------------------------------------------------------------------- 1 | class RemoveForemFromUser < ActiveRecord::Migration 2 | def change 3 | remove_column :users, :forem_admin 4 | remove_column :users, :forem_state 5 | remove_column :users, :forem_auto_subscribe 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /db/migrate/20141117044111_add_edit_fields_to_user.rb: -------------------------------------------------------------------------------- 1 | class AddEditFieldsToUser < ActiveRecord::Migration 2 | def change 3 | add_column :users, :approved_edit_count, :integer, default: 0 4 | add_column :users, :rejected_edit_count, :integer, default: 0 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /db/migrate/20141119061218_add_slug_to_characters.rb: -------------------------------------------------------------------------------- 1 | class AddSlugToCharacters < ActiveRecord::Migration 2 | def change 3 | change_table :characters do |t| 4 | # TODO: switch this to non-null, add unique index 5 | t.string :slug 6 | end 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /app/frontend/app/routes/kotodama.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ajax from 'ic-ajax'; 3 | 4 | export default Ember.Route.extend({ 5 | model: function() { 6 | return ajax({ 7 | url: '/kotodama/stats', 8 | type: 'GET' 9 | }); 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/helpers/stars-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | stars 3 | } from 'frontend/helpers/stars'; 4 | 5 | module('StarsHelper'); 6 | 7 | // Replace this with your real tests. 8 | test('it works', function() { 9 | var result = stars(42); 10 | ok(result); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/utils/load-script-test.js: -------------------------------------------------------------------------------- 1 | import loadScript from 'frontend/utils/load-script'; 2 | 3 | module('loadScript'); 4 | 5 | // Replace this with your real tests. 6 | test('it works', function() { 7 | var result = loadScript(); 8 | ok(result); 9 | }); 10 | -------------------------------------------------------------------------------- /lib/tasks/optimize_images.rake: -------------------------------------------------------------------------------- 1 | require 'image_optim' 2 | 3 | desc "Optimize all images in the public folder" 4 | task :image_optim do |t| 5 | system "bundle exec image_optim --no-pngout -r -v app/assets/" 6 | system "bundle exec image_optim --no-pngout -r -v public/" 7 | end 8 | -------------------------------------------------------------------------------- /app/frontend/app/models/episode.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | anime: DS.belongsTo('anime'), 5 | title: DS.attr('string'), 6 | thumbnail: DS.attr('string'), 7 | number: DS.attr('number'), 8 | videos: DS.hasMany('video') 9 | }); 10 | -------------------------------------------------------------------------------- /db/migrate/20140616040317_synopsis_should_not_be_null.rb: -------------------------------------------------------------------------------- 1 | class SynopsisShouldNotBeNull < ActiveRecord::Migration 2 | def change 3 | change_column :anime, :synopsis, :text, null: false, default: "" 4 | change_column :manga, :synopsis, :text, null: false, default: "" 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/modals/edit-manga.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModalMixin from '../../mixins/modals/controller'; 3 | import VersionableMixin from '../../mixins/modals/versionable'; 4 | 5 | export default Ember.ObjectController.extend(ModalMixin, VersionableMixin, { 6 | }); 7 | -------------------------------------------------------------------------------- /app/frontend/app/templates/header/right-content.hbs: -------------------------------------------------------------------------------- 1 | {{partial "header/search"}} 2 | {{#if currentUser.isSignedIn}} 3 | {{partial "header/notifications"}} 4 | {{partial "header/avatar"}} 5 | {{else}} 6 |
  • 7 | {{#link-to 'sign-in'}} Sign in{{/link-to}} 8 |
  • 9 | {{/if}} 10 | -------------------------------------------------------------------------------- /app/assets/javascripts/old/googleplus.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; 3 | po.src = 'https://apis.google.com/js/plusone.js'; 4 | var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); 5 | })(); -------------------------------------------------------------------------------- /app/serializers/episode_serializer.rb: -------------------------------------------------------------------------------- 1 | class EpisodeSerializer < ActiveModel::Serializer 2 | embed :ids 3 | 4 | attributes :id, 5 | :number, 6 | :title, 7 | :thumbnail, 8 | :synopsis 9 | 10 | has_one :anime, embed_key: :slug 11 | end 12 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env rake 2 | # Add your own tasks in files placed in lib/tasks ending in .rake, 3 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 4 | 5 | require File.expand_path('../config/application', __FILE__) 6 | 7 | Hummingbird::Application.load_tasks 8 | -------------------------------------------------------------------------------- /app/frontend/app/mixins/model-current-user.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Mixin.create({ 4 | currentUser: function() { 5 | // HACK! since we can't inject current-user into models. 6 | return this.container.lookup('controller:current-user'); 7 | }.property() 8 | }); 9 | -------------------------------------------------------------------------------- /app/frontend/app/routes/loading.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | /* global Pace */ 3 | 4 | export default Ember.Route.extend({ 5 | startPace: function() { 6 | Pace.restart(); 7 | }.on('activate'), 8 | 9 | stopPace: function() { 10 | Pace.stop(); 11 | }.on('deactivate') 12 | }); 13 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/views/story-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('view:story', 'StoryView'); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function() { 10 | var view = this.subject(); 11 | ok(view); 12 | }); 13 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/helpers/format-time-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | formatTime 3 | } from 'frontend/helpers/format-time'; 4 | 5 | module('FormatTimeHelper'); 6 | 7 | test('it works', function() { 8 | var result = formatTime(new Date(1994, 1, 18), "YYYY-MM-DD"); 9 | equal(result, '1994-02-18'); 10 | }); 11 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/modals/site-update.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModalMixin from '../../mixins/modals/controller'; 3 | 4 | export default Ember.Controller.extend(ModalMixin, { 5 | actions: { 6 | refresh: function() { 7 | window.location.reload(); 8 | } 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/bootstrap-modal.hbs: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/views/file-upload-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('view:file-upload', 'FileUploadView'); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function() { 10 | var view = this.subject(); 11 | ok(view); 12 | }); 13 | -------------------------------------------------------------------------------- /app/assets/stylesheets/partials/media-quotes.css.scss: -------------------------------------------------------------------------------- 1 | .favorited-by { 2 | color: #888; 3 | font-size: 14px; 4 | } 5 | 6 | .report-quote { 7 | float: right; 8 | font-size: 14px; 9 | 10 | a { 11 | color: red; 12 | opacity: .3; 13 | &:hover { 14 | opacity: 1; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/post-comment.hbs: -------------------------------------------------------------------------------- 1 |
    2 | {{textarea class="status-form" placeholder="Write something..." rows="1" valueBinding="newPost"}} 3 |
    4 | 7 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/truncate-text.hbs: -------------------------------------------------------------------------------- 1 | {{truncatedText}} 2 | 3 | {{#if isTruncated}} 4 | 5 | {{#if expanded}} 6 | show less 7 | {{else}} 8 | show more 9 | {{/if}} 10 | 11 | {{/if}} 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/views/user/library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('view:user/library', 'UserLibraryView'); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function() { 10 | var view = this.subject(); 11 | ok(view); 12 | }); 13 | -------------------------------------------------------------------------------- /script/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. 3 | 4 | APP_PATH = File.expand_path('../../config/application', __FILE__) 5 | require File.expand_path('../../config/boot', __FILE__) 6 | require 'rails/commands' 7 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/notifications.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ArrayController.extend({ 4 | init: function(){ 5 | this.set('content', this.store.find('notification')); 6 | this._super(); 7 | }, 8 | 9 | sortProperties: ['createdAt'], 10 | sortAscending: false 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/app/models/full-manga.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | import Manga from '../models/manga'; 3 | 4 | export default Manga.extend({ 5 | coverImage: DS.attr('string'), 6 | coverImageTopOffset: DS.attr('number'), 7 | featuredCastings: DS.hasMany('casting'), 8 | pendingEdits: DS.attr('number') 9 | }); 10 | -------------------------------------------------------------------------------- /app/frontend/app/templates/manga/_characters.hbs: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /app/views/shared/_forum_widget.html.haml: -------------------------------------------------------------------------------- 1 | :css 2 | .sotm img {max-width: 90%;} 3 | 4 | .large-12.columns.no-padding.forum-block.rounded-panel.hide-for-small 5 | %ul.sotm{:style => "text-align: center; padding-top: 15px;"} 6 | = link_to "https://hummingbird.me/2013/" do 7 | = image_tag "http://i.imgur.com/C36CvjG.jpg" 8 | -------------------------------------------------------------------------------- /app/controllers/settings_controller.rb: -------------------------------------------------------------------------------- 1 | class SettingsController < ApplicationController 2 | before_action :authenticate_user! 3 | 4 | def index 5 | render layout: 'redesign' 6 | end 7 | 8 | def resend_confirmation 9 | current_user.resend_confirmation_instructions 10 | render json: true 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/helpers/community-rating-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | communityRating 3 | } from 'frontend/helpers/community-rating'; 4 | 5 | module('CommunityRatingHelper'); 6 | 7 | // Replace this with your real tests. 8 | test('it works', function() { 9 | var result = communityRating(42); 10 | ok(result); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/views/modals/crop-cover-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('view:modals/crop-cover', 'ModalsCropCoverView'); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function() { 10 | var view = this.subject(); 11 | ok(view); 12 | }); 13 | -------------------------------------------------------------------------------- /db/migrate/20140629091741_add_notes_and_imported_to_manga_library_entry.rb: -------------------------------------------------------------------------------- 1 | class AddNotesAndImportedToMangaLibraryEntry < ActiveRecord::Migration 2 | def change 3 | add_column :manga_library_entries, :notes, :string 4 | add_column :manga_library_entries, :imported, :boolean, :default => false, :null => false 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /app/frontend/tests/helpers/resolver.js: -------------------------------------------------------------------------------- 1 | import Resolver from 'ember/resolver'; 2 | import config from '../../config/environment'; 3 | 4 | var resolver = Resolver.create(); 5 | 6 | resolver.namespace = { 7 | modulePrefix: config.modulePrefix, 8 | podModulePrefix: config.podModulePrefix 9 | }; 10 | 11 | export default resolver; 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/views/user/manga-library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('view:user/manga-library', 'UserMangaLibraryView'); 7 | 8 | // Replace this with your real tests. 9 | test('it exists', function() { 10 | var view = this.subject(); 11 | ok(view); 12 | }); 13 | -------------------------------------------------------------------------------- /test/lib/xml_cleaner_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | require_dependency 'xml_cleaner' 3 | 4 | class XMLCleanerTest < ActiveSupport::TestCase 5 | test "cleans xml with illegal characters" do 6 | xml = File.read('test/fixtures/xml_cleaner/invalid_chars.xml') 7 | assert(XMLCleaner.clean(xml).length > 0) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /app/frontend/.ember-cli: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | Ember CLI sends analytics information by default. The data is completely 4 | anonymous, but there are times when you might want to disable this behavior. 5 | 6 | Setting `disableAnalytics` to true will prevent any data from being sent. 7 | */ 8 | "disableAnalytics": false 9 | } 10 | -------------------------------------------------------------------------------- /app/serializers/user_info_serializer.rb: -------------------------------------------------------------------------------- 1 | class UserInfoSerializer < ActiveModel::Serializer 2 | attributes :id, :life_spent_on_anime, :anime_watched, :top_genres 3 | 4 | def anime_watched 5 | object.library_entries.where(status: "Completed").count 6 | end 7 | 8 | def top_genres 9 | object.top_genres 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/views/home/api.html.haml: -------------------------------------------------------------------------------- 1 | .row 2 | .small-10.columns.small-centered 3 | .panel 4 | %h1.center= title "API Documentation (WIP)" 5 | %hr 6 | 7 | .alert-box 8 | Note: This document is still a work in progress. 9 | 10 | %h3 Introduction 11 | %h3 Authentication 12 | %h3 Library Updates 13 | -------------------------------------------------------------------------------- /app/frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | 7 | # dependencies 8 | /node_modules 9 | /bower_components 10 | 11 | # misc 12 | /.sass-cache 13 | /connect.lock 14 | /coverage/* 15 | /libpeerconnection.log 16 | npm-debug.log 17 | testem.log 18 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/edits.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ArrayController.extend({ 4 | removeReviewed: function() { 5 | this.get('content').filterBy('isDeleted').forEach(function(item) { 6 | this.removeAt(this.indexOf(item)); 7 | }.bind(this)); 8 | }.observes('@each.isDeleted') 9 | }); 10 | -------------------------------------------------------------------------------- /db/migrate/20140813001044_tweak_streamer_video_columns.rb: -------------------------------------------------------------------------------- 1 | class TweakStreamerVideoColumns < ActiveRecord::Migration 2 | def change 3 | change_table :videos do |t| 4 | t.string :sub_lang 5 | t.string :dub_lang 6 | end 7 | change_table :streamers do |t| 8 | t.remove :oembed_uri 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/controllers/franchises_controller.rb: -------------------------------------------------------------------------------- 1 | class FranchisesController < ApplicationController 2 | def index 3 | franchises = Franchise.where(id: params[:ids]).includes(anime: :genres) 4 | render json: franchises 5 | end 6 | 7 | def show 8 | franchise = Franchise.find(params[:id]) 9 | render json: franchise 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/frontend/app/templates/notifications.hbs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 |
      5 | {{#each}} 6 | {{partial "notification"}} 7 | {{/each}} 8 |
    9 |
    10 |
    11 |
    12 | -------------------------------------------------------------------------------- /app/frontend/app/utils/escape-html.js: -------------------------------------------------------------------------------- 1 | var entityMap = { 2 | "&": "&", 3 | "<": "<", 4 | ">": ">", 5 | '"': '"', 6 | "'": ''', 7 | "/": '/' 8 | }; 9 | 10 | export default function escapeHtml(string) { 11 | return String(string).replace(/[&<>"'\/]/g, function(s) { 12 | return entityMap[s]; 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/utils/wilson-score-test.js: -------------------------------------------------------------------------------- 1 | import wilsonScore from 'frontend/utils/wilson-score'; 2 | 3 | module('wilsonScore'); 4 | 5 | // Replace this with your real tests. 6 | test('it works', function() { 7 | equal(wilsonScore(0, 0), 0); 8 | equal(wilsonScore(0, 100), 0); 9 | ok(wilsonScore(100000, 100000) > 0.99); 10 | }); 11 | -------------------------------------------------------------------------------- /app/views/devise/mailer/unlock_instructions.html.erb: -------------------------------------------------------------------------------- 1 |

    Hello <%= @resource.email %>!

    2 | 3 |

    Your account has been locked due to an excessive number of unsuccessful sign in attempts.

    4 | 5 |

    Click the link below to unlock your account:

    6 | 7 |

    <%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @token) %>

    8 | -------------------------------------------------------------------------------- /config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Sample localization file for English. Add more files in this directory for other locales. 2 | # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. 3 | 4 | en: 5 | hello: "Hello world" 6 | admin: 7 | actions: 8 | invite: 9 | bulk_link: "Invite selected users" 10 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/modals/youtube.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModalMixin from '../../mixins/modals/controller'; 3 | 4 | export default Ember.ObjectController.extend(ModalMixin, { 5 | youtubeEmbedURL: function () { 6 | return "https://www.youtube.com/embed/" + this.get('youtubeVideoId'); 7 | }.property('youtubeVideoId') 8 | }); 9 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/onboarding/finish.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import HasCurrentUser from '../../mixins/has-current-user'; 3 | 4 | export default Ember.Controller.extend(HasCurrentUser, { 5 | userList: function (){ 6 | return this.store.find('user', { 7 | to_follow: true 8 | }); 9 | }.property('loading') 10 | }); 11 | -------------------------------------------------------------------------------- /app/views/notifications/index.html.haml: -------------------------------------------------------------------------------- 1 | .notifications 2 | .row 3 | .small-12.large-6.large-centered.columns.rounded-panel 4 | %h1= title (pluralize @unseen_notification_count, 'New Notification') 5 | %ul 6 | - if @notifications.length == 0 7 | %li.nothing-here 8 | - else 9 | = render @notifications 10 | -------------------------------------------------------------------------------- /app/views/users/forum_posts.html.haml: -------------------------------------------------------------------------------- 1 | = render "dash" 2 | 3 | .anime-discover 4 | .row.content-body 5 | .title.large-12-columns 6 | %h3 #{@user.name}'s Recent Forum Posts 7 | 8 | .panel{:style => "padding: 20px"} 9 | %h4 Coming soon! 10 | 11 | .row 12 | .large-12.columns.pagination-centered 13 | = paginate @posts 14 | -------------------------------------------------------------------------------- /lib/templates/haml/scaffold/_form.html.haml: -------------------------------------------------------------------------------- 1 | = simple_form_for(@<%= singular_table_name %>) do |f| 2 | = f.error_notification 3 | 4 | .form-inputs 5 | <%- attributes.each do |attribute| -%> 6 | = f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %> 7 | <%- end -%> 8 | 9 | .form-actions 10 | = f.button :submit 11 | -------------------------------------------------------------------------------- /lib/wilson_score.rb: -------------------------------------------------------------------------------- 1 | class WilsonScore 2 | def self.lower_bound(pos, n) 3 | return 0 if n == 0 4 | 5 | # z=1.96 corresponds to confidence=0.95 6 | # z=2.17 corresponds to confidence=0.97 7 | z = 1.96 8 | 9 | phat = 1.0*pos/n 10 | (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/controllers/users/sessions_controller.rb: -------------------------------------------------------------------------------- 1 | class Users::SessionsController < Devise::SessionsController 2 | def new 3 | session["user_return_to"] = params[:return_to] || request.referer 4 | self.resource = resource_class.new(sign_in_params) 5 | clean_up_passwords(resource) 6 | respond_with(resource, serialize_options(resource)) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /config/locales/doorkeeper.en.yml: -------------------------------------------------------------------------------- 1 | # Sample localization file for English. Add more files in this directory for other locales. 2 | # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. 3 | 4 | en: 5 | hello: "Hello world" 6 | admin: 7 | actions: 8 | invite: 9 | bulk_link: "Invite selected users" 10 | -------------------------------------------------------------------------------- /app/frontend/app/models/model.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Temporary hack to get polymorphic relations working with different base 3 | * classes. 4 | * 5 | * Will no longer be needed once this PR lands in Ember Data: 6 | * https://github.com/emberjs/data/pull/2586 7 | * 8 | */ 9 | 10 | import DS from 'ember-data'; 11 | 12 | export default DS.Model.extend({ 13 | }); 14 | -------------------------------------------------------------------------------- /app/frontend/app/routes/manga/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import setTitle from '../../utils/set-title'; 3 | 4 | export default Ember.Route.extend({ 5 | model: function() { 6 | return this.modelFor('manga'); 7 | }, 8 | 9 | afterModel: function(resolvedModel) { 10 | return setTitle(resolvedModel.get('romajiTitle')); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /app/frontend/app/templates/components/follow-button.hbs: -------------------------------------------------------------------------------- 1 | {{#unless isOwnButton}} 2 | {{#if user.isFollowed}} 3 | Unfollow 4 | {{else}} 5 | Follow 6 | {{/if}} 7 | {{/unless}} 8 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/pro-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:pro', 'ProRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/mailers/user_mailer.rb: -------------------------------------------------------------------------------- 1 | class UserMailer < ActionMailer::Base 2 | default from: "josh@hummingbird.me" 3 | 4 | def newsletter(user_id) 5 | @user = User.find user_id 6 | if @user.subscribed_to_newsletter? 7 | @subject = "Guess What! Hummingbird is open source!" 8 | mail(to: @user.email, subject: @subject) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/views/users/reviews.html.haml: -------------------------------------------------------------------------------- 1 | = render "dash" 2 | 3 | .anime-discover.user-reviews 4 | .row.content-body 5 | .title.large-12-columns 6 | %h3 Recent Reviews 7 | 8 | = render partial: "reviews/review_summary", collection: @reviews, as: :review 9 | 10 | .row 11 | .large-12.columns.pagination-centered 12 | = paginate(@reviews) 13 | -------------------------------------------------------------------------------- /test/fixtures/follows.yml: -------------------------------------------------------------------------------- 1 | # == Schema Information 2 | # 3 | # Table name: follows 4 | # 5 | # id :integer not null, primary key 6 | # followed_id :integer 7 | # follower_id :integer 8 | # created_at :datetime not null 9 | # updated_at :datetime not null 10 | # 11 | 12 | one: 13 | followed: josh 14 | follower: vikhyat 15 | -------------------------------------------------------------------------------- /test/models/streamer_test.rb: -------------------------------------------------------------------------------- 1 | # == Schema Information 2 | # 3 | # Table name: streamers 4 | # 5 | # id :integer not null, primary key 6 | # site_name :string(255) not null 7 | # 8 | 9 | require 'test_helper' 10 | 11 | class StreamerTest < ActiveSupport::TestCase 12 | # test "the truth" do 13 | # assert true 14 | # end 15 | end 16 | -------------------------------------------------------------------------------- /app/controllers/characters_controller.rb: -------------------------------------------------------------------------------- 1 | class CharactersController < ApplicationController 2 | def show 3 | character = Character.find params[:id] 4 | respond_to do |format| 5 | format.json { render json: character } 6 | format.html { 7 | preload_to_ember! character 8 | render_ember 9 | } 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/helpers/pluralize-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | pluralize 3 | } from 'frontend/helpers/pluralize'; 4 | 5 | module('PluralizeHelper'); 6 | 7 | test('it works', function() { 8 | equal(pluralize(1, 'duck', 'ducks'), '1 duck'); 9 | equal(pluralize(0, 'duck', 'ducks'), '0 ducks'); 10 | equal(pluralize(42, 'duck', 'ducks'), '42 ducks'); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/apps-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:apps', 'AppsRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user', 'UserRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /db/seeds.rb: -------------------------------------------------------------------------------- 1 | # This file should contain all the record creation needed to seed the database with its default values. 2 | # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). 3 | # 4 | # Examples: 5 | # 6 | # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }]) 7 | # Mayor.create(name: 'Emanuel', city: cities.first) 8 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/anime-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:anime', 'AnimeRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/edits-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:edits', 'EditsRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/manga-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:manga', 'MangaRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/search-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:search', 'SearchRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/kotodama-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:kotodama', 'KotodamaRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/loading-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:loading', 'LoadingRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/settings-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:settings', 'SettingsRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/sign-in-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:sign-in', 'SignInRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /db/migrate/20140627050628_rename_stuff_on_manga_library_entry.rb: -------------------------------------------------------------------------------- 1 | class RenameStuffOnMangaLibraryEntry < ActiveRecord::Migration 2 | def change 3 | rename_column :manga_library_entries, :chapters_readed, :chapters_read 4 | rename_column :manga_library_entries, :volumes_readed, :volumes_read 5 | rename_column :manga_library_entries, :last_readed, :last_read 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /Guardfile: -------------------------------------------------------------------------------- 1 | guard 'livereload' do 2 | #watch(%r{app/assets/.+\.(hbs|emblem)$}) 3 | #watch(%r{app/views/.+\.(erb|haml|slim)$}) 4 | #watch(%r{app/helpers/.+\.rb}) 5 | #watch(%r{public/.+\.(css|js|html)}) 6 | #watch(%r{config/locales/.+\.yml}) 7 | 8 | # Rails Assets Pipeline 9 | watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html))).*}) { |m| "/assets/#{m[3]}" } 10 | end 11 | -------------------------------------------------------------------------------- /app/frontend/app/transforms/array.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Transform.extend({ 4 | deserialize: function(serialized) { 5 | return serialized; 6 | }, 7 | 8 | serialize: function(deserialized) { 9 | if (deserialized instanceof Array) { 10 | return deserialized; 11 | } else { 12 | return []; 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/apps/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:apps/index', 'AppsIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/apps/mine-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:apps/mine', 'AppsMineRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/dashboard-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:dashboard', 'DashboardRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user/index', 'UserIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/views/users/_follow_button.html.haml: -------------------------------------------------------------------------------- 1 | - if user_signed_in? and user != current_user 2 | .large-12.columns 3 | - if user.followers.include? current_user 4 | .button.secondary= link_to "Unfollow", user_follow_path(user), class: "follow-button", method: :post 5 | - else 6 | .button= link_to "Follow", user_follow_path(user), class: "follow-button", method: :post 7 | 8 | -------------------------------------------------------------------------------- /app/workers/my_anime_list_import_apply_worker.rb: -------------------------------------------------------------------------------- 1 | class MyAnimeListImportApplyWorker 2 | include Sidekiq::Worker 3 | 4 | def perform(user_id, xml) 5 | user = User.find(user_id) 6 | malimport = MyAnimeListImport.new(user, xml) 7 | malimport.apply! 8 | user.recompute_life_spent_on_anime! 9 | user.update_column :mal_import_in_progress, false 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /app/frontend/app/initializers/preload.js: -------------------------------------------------------------------------------- 1 | export function initialize(container) { 2 | if (window.preloadData) { 3 | var store = container.lookup('store:main'); 4 | window.preloadData.forEach(function(item) { 5 | store.pushPayload(item); 6 | }); 7 | } 8 | } 9 | 10 | export default { 11 | name: 'preload', 12 | after: 'store', 13 | initialize: initialize 14 | }; 15 | -------------------------------------------------------------------------------- /app/frontend/app/routes/settings.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import setTitle from '../utils/set-title'; 3 | 4 | export default Ember.Route.extend({ 5 | afterModel: function() { 6 | return setTitle('Settings'); 7 | }, 8 | 9 | actions: { 10 | willTransition: function() { 11 | this.controller.send('clean'); 12 | return true; 13 | }, 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/genre-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('genre', 'Genre', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/media-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('media', 'Media', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/model-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('model', 'Model', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/quote-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('quote', 'Quote', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/user-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('user', 'User', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/anime/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:anime/index', 'AnimeIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/application-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:application', 'ApplicationRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/manga/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:manga/index', 'MangaIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/serializers/app_serializer.rb: -------------------------------------------------------------------------------- 1 | class AppSerializer < ActiveModel::Serializer 2 | embed :ids 3 | 4 | attributes :id, :key, :secret, :name 5 | has_one :creator, embed_key: :name 6 | 7 | # Only show secret+key if the scope is the creator 8 | def include_secret? 9 | scope == object.creator if scope 10 | end 11 | alias_method :include_key?, :include_secret? 12 | end 13 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/modals/crop-cover.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModalMixin from '../../mixins/modals/controller'; 3 | 4 | export default Ember.ObjectController.extend(ModalMixin, { 5 | actions: { 6 | upload: function () { 7 | this.send("uploadCover", this.get('model.croppedImage')); 8 | return this.send("closeModal"); 9 | } 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/app/templates/modals/site-update.hbs: -------------------------------------------------------------------------------- 1 | {{#bootstrap-modal action="close"}} 2 | 7 | {{/bootstrap-modal}} 8 | 9 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/mixins/paginated-test.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import PaginatedMixin from 'frontend/mixins/paginated'; 3 | 4 | module('PaginatedMixin'); 5 | 6 | // Replace this with your real tests. 7 | test('it works', function() { 8 | var PaginatedObject = Ember.Object.extend(PaginatedMixin); 9 | var subject = PaginatedObject.create(); 10 | ok(subject); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/app-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('app', 'App', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:user'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/person-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('person', 'Person', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/anime/quotes-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:anime/quotes', 'AnimeQuotesRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/filter-anime-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:filter-anime', 'FilterAnimeRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/notifications-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:notifications', 'NotificationsRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/reviews/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:reviews/index', 'ReviewsIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/reviews/show-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:reviews/show', 'ReviewsShowRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user/library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user/library', 'UserLibraryRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user/reviews-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user/reviews', 'UserReviewsRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/producer-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('producer', 'Producer', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/user-info-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('user-info', 'UserInfo', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/episodes/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:episodes/index', 'EpisodesIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/story/permalink-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:story/permalink', 'StoryPermalinkRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user/followers-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user/followers', 'UserFollowersRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user/following-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user/following', 'UserFollowingRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/app/routes/onboarding/finish.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | setupController: function(controller) { 5 | controller.set('loading', true); 6 | 7 | Ember.$.getJSON('/users/to_follow').then(function(payload) { 8 | controller.store.pushPayload(payload); 9 | controller.set('loading', false); 10 | }); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /app/frontend/app/templates/manga/_infobar.hbs: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /app/frontend/app/views/file-upload.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.TextField.extend({ 4 | type: 'file', 5 | attributeBindings: ['name'], 6 | classNames: ['hidden'], 7 | 8 | change: function(evt) { 9 | var input = evt.target; 10 | if (input.files && input.files[0]) { 11 | return this.sendAction('action', input.files[0]); 12 | } 13 | } 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/character-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('character', 'Character', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/onboarding/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:onboarding/index', 'OnboardingIndexRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/anime-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('anime', 'Anime', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:library-entry'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/partner-deal-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('partner-deal', 'PartnerDeal', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/onboarding/finish-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:onboarding/finish', 'OnboardingFinishRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/onboarding/library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:onboarding/library', 'OnboardingLibraryRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/user/manga-library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:user/manga-library', 'UserMangaLibraryRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/assets/stylesheets/partials/video-container.css.scss: -------------------------------------------------------------------------------- 1 | .video-container { 2 | position: relative; 3 | padding-bottom: 56.25%; 4 | padding-top: 30px; height: 0; overflow: hidden; 5 | margin-top: 10px; 6 | } 7 | 8 | .video-container iframe, 9 | .video-container object, 10 | .video-container embed { 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | width: 100%; 15 | height: 100%; 16 | } 17 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/apps.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import HasCurrentUser from '../mixins/has-current-user'; 3 | 4 | export default Ember.Controller.extend(HasCurrentUser, { 5 | needs: ['application'], 6 | 7 | isIndex: function() { 8 | return this.get('controllers.application.currentRouteName') === "apps.index"; 9 | }.property('controllers.application.currentRouteName'), 10 | }); 11 | -------------------------------------------------------------------------------- /app/frontend/app/utils/wilson-score.js: -------------------------------------------------------------------------------- 1 | export default function wilsonScore(pos, n) { 2 | if (n === 0) { 3 | return 0; 4 | } 5 | 6 | //z=1.96 corresponds to confidence=0.95 7 | //z=2.17 corresponds to confidence=0.97 8 | var z = 1.96; 9 | var phat = 1.0 * pos / n; 10 | 11 | return (phat + z * z / (2 * n) - z * Math.sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n); 12 | } 13 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/manga-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('manga', 'Manga', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:manga-library-entry'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/video-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('video', 'Video', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:anime', 'model:episode'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/routes/onboarding/categories-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('route:onboarding/categories', 'OnboardingCategoriesRoute', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var route = this.subject(); 13 | ok(route); 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/utils/set-title-test.js: -------------------------------------------------------------------------------- 1 | import setTitle from 'frontend/utils/set-title'; 2 | 3 | module('setTitle'); 4 | 5 | // Replace this with your real tests. 6 | test('it works', function() { 7 | setTitle(); 8 | equal(document.title, 'Hummingbird'); 9 | setTitle(""); 10 | equal(document.title, 'Hummingbird'); 11 | setTitle("Test"); 12 | equal(document.title, 'Test | Hummingbird'); 13 | }); 14 | -------------------------------------------------------------------------------- /app/frontend/app/templates/anime/_infobar.hbs: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/library-entry-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('library-entry', 'LibraryEntry', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:anime'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/notification-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('notification', 'Notification', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:model'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/controllers/users/omniauth_callbacks_controller.rb: -------------------------------------------------------------------------------- 1 | class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 2 | def facebook 3 | @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) 4 | sign_in @user 5 | 6 | if @user.created_at < 2.minutes.ago 7 | redirect_to "/" 8 | else 9 | redirect_to "/?signup_tour=true" 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/casting-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('casting', 'Casting', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:person', 'model:character'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/pro-membership-plan-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('pro-membership-plan', 'ProMembershipPlan', { 7 | // Specify the other units that are required for this test. 8 | needs: [] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/serializers/partner_deal_serializer.rb: -------------------------------------------------------------------------------- 1 | class PartnerDealSerializer < ActiveModel::Serializer 2 | attributes :id, :partner_name, :partner_logo, :deal_title, :deal_url, 3 | :deal_description, :redemption_info, :recurring, :has_codes, :code 4 | 5 | def has_codes 6 | object.codes.unclaimed.count > 0 7 | end 8 | 9 | def code 10 | scope && object.codes.where(user: scope).last.try(:code) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /config/initializers/message_bus.rb: -------------------------------------------------------------------------------- 1 | MessageBus.long_polling_enabled = true 2 | MessageBus.long_polling_interval = 16000 3 | 4 | MessageBus.redis_config = { 5 | host: ENV['REDIS_HOST'] 6 | } 7 | 8 | MessageBus.user_id_lookup do |env| 9 | token = Rack::Request.new(env).cookies["token"] 10 | 11 | if token 12 | t = Token.new(token) 13 | t.valid? ? t.user.try(:id) : nil 14 | else 15 | nil 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /app/frontend/app/controllers/manga/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.ObjectController.extend({ 4 | activeTab: "Genres", 5 | 6 | showGenres: Ember.computed.equal('activeTab', 'Genres'), 7 | showCharacters: Ember.computed.equal('activeTab', 'Characters'), 8 | 9 | actions: { 10 | switchTo: function (newTab) { 11 | return this.set('activeTab', newTab); 12 | } 13 | } 14 | }); 15 | -------------------------------------------------------------------------------- /app/frontend/app/routes/anime/quotes.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | model: function(){ 5 | var anime = this.modelFor('anime'); 6 | return this.store.find('quote', {anime_id: anime.get('id')}); 7 | }, 8 | 9 | setupController: function(controller, model) { 10 | controller.set('anime', this.modelFor('anime')); 11 | controller.set('model', model); 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/mixins/has-current-user-test.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import HasCurrentUserMixin from 'frontend/mixins/has-current-user'; 3 | 4 | module('HasCurrentUserMixin'); 5 | 6 | // Replace this with your real tests. 7 | test('it works', function() { 8 | var HasCurrentUserObject = Ember.Object.extend(HasCurrentUserMixin); 9 | var subject = HasCurrentUserObject.create(); 10 | ok(subject); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/story-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('story', 'Story', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:user', 'model:media', 'model:substory'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/edits-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:edits', 'EditsController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/pro-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:pro', 'ProController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/current-user-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('current-user', 'CurrentUser', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:pro-membership-plan'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/franchise-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('franchise', 'Franchise', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:anime', 'model:library-entry'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/substory-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('substory', 'Substory', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:user', 'model:story', 'model:media'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/adapters/application-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('adapter:application', 'ApplicationAdapter', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['serializer:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var adapter = this.subject(); 14 | ok(adapter); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/adapters/current-user-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('adapter:current-user', 'CurrentUserAdapter', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['serializer:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var adapter = this.subject(); 14 | ok(adapter); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/anime-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:anime', 'AnimeController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/manga-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:manga', 'MangaController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/review-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:review', 'ReviewController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/search-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:search', 'SearchController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/sign-in-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:sign-in', 'SignInController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/sign-up-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:sign-up', 'SignUpController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/story-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:story', 'StoryController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/user-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:user', 'UserController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/mixins/modals/controller-test.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModalsControllerMixin from 'frontend/mixins/modals/controller'; 3 | 4 | module('ModalsControllerMixin'); 5 | 6 | // Replace this with your real tests. 7 | test('it works', function() { 8 | var ModalsControllerObject = Ember.Object.extend(ModalsControllerMixin); 9 | var subject = ModalsControllerObject.create(); 10 | ok(subject); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/mixins/model-current-user-test.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModelCurrentUserMixin from 'frontend/mixins/model-current-user'; 3 | 4 | module('ModelCurrentUserMixin'); 5 | 6 | // Replace this with your real tests. 7 | test('it works', function() { 8 | var ModelCurrentUserObject = Ember.Object.extend(ModelCurrentUserMixin); 9 | var subject = ModelCurrentUserObject.create(); 10 | ok(subject); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/manga-library-entry-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('manga-library-entry', 'MangaLibraryEntry', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:manga'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/review-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('review', 'Review', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:user', 'model:anime', 'model:library-entry'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/app/routes/sign-in.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | beforeModel: function() { 5 | if (this.get('currentUser.isSignedIn')) { 6 | this.transitionTo('dashboard'); 7 | } 8 | }, 9 | 10 | setupController: function(controller) { 11 | controller.set('username', ''); 12 | controller.set('password', ''); 13 | controller.set('errorMessage', ''); 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/app/routes/story/permalink.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | controllerName: "story", 5 | 6 | model: function(params) { 7 | return this.store.find('story', params.id); 8 | }, 9 | 10 | setupController: function(controller, model) { 11 | controller.set('model', model); 12 | controller.set('isExpanded', true); 13 | controller.send('toggleShowAll'); 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/edit-item-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:edit-item', 'EditItemController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/footer-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:footer', 'FooterController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/kotodama-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:kotodama', 'KotodamaController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/mixins/modals/versionable-test.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import ModalsVersionableMixin from 'frontend/mixins/modals/versionable'; 3 | 4 | module('ModalsVersionableMixin'); 5 | 6 | // Replace this with your real tests. 7 | test('it works', function() { 8 | var ModalsVersionableObject = Ember.Object.extend(ModalsVersionableMixin); 9 | var subject = ModalsVersionableObject.create(); 10 | ok(subject); 11 | }); 12 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/models/episode-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleForModel, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleForModel('episode', 'Episode', { 7 | // Specify the other units that are required for this test. 8 | needs: ['model:anime', 'model:library-entry', 'model:video'] 9 | }); 10 | 11 | test('it exists', function() { 12 | var model = this.subject(); 13 | // var store = this.store(); 14 | ok(!!model); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/app/models/partner-deal.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.Model.extend({ 4 | partnerName: DS.attr('string'), 5 | partnerLogo: DS.attr('string'), 6 | dealTitle: DS.attr('string'), 7 | dealUrl: DS.attr('string'), 8 | dealDescription: DS.attr('string'), 9 | redemptionInfo: DS.attr('string'), 10 | recurring: DS.attr('boolean'), 11 | hasCodes: DS.attr('boolean'), 12 | code: DS.attr('string') 13 | }); 14 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/apps/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:apps/index', 'AppsIndexController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/dashboard-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:dashboard', 'DashboardController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/franchises-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:franchises', 'FranchisesController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/settings-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:settings', 'SettingsController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /db/migrate/20141116204731_create_apps_table.rb: -------------------------------------------------------------------------------- 1 | class CreateAppsTable < ActiveRecord::Migration 2 | def change 3 | create_table :apps do |t| 4 | t.references :creator, null: false 5 | t.string :key, null: false 6 | t.string :secret, null: false 7 | t.string :name, null: false 8 | 9 | t.index :key, unique: true 10 | t.index :name, unique: true 11 | t.index :creator_id 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/apps/mine-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:apps/mine', 'AppsMineController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/filter-anime-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:filter-anime', 'FilterAnimeController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/manga/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:manga/index', 'MangaIndexController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/onboarding-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:onboarding', 'OnboardingController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:application'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/user/library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:user/library', 'UserLibraryController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/serializers/application-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('serializer:application', 'ApplicationSerializer', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['serializer:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var serializer = this.subject(); 14 | ok(serializer); 15 | }); 16 | -------------------------------------------------------------------------------- /config/database.yml: -------------------------------------------------------------------------------- 1 | development: 2 | adapter: postgresql 3 | database: hummingbird_development 4 | host: localhost 5 | 6 | test: 7 | adapter: postgresql 8 | database: hummingbird_test 9 | host: localhost 10 | 11 | production: 12 | adapter: postgresql 13 | database: hummingbird_production 14 | username: hummingbird 15 | password: <%= ENV['POSTGRES_PASS'] %> 16 | host: <%= ENV['POSTGRES_HOST'] %> 17 | port: 5432 18 | pool: 50 19 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/anime/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:anime/index', 'AnimeIndexController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/anime/quotes-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:anime/quotes', 'AnimeQuotesController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/modals/youtube-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:modals/youtube', 'ModalsYoutubeController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/reviews/index-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:reviews/index', 'ReviewsIndexController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:anime'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/reviews/show-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:reviews/show', 'ReviewsShowController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/user/followers-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:user/followers', 'UserFollowersController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/user/following-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:user/following', 'UserFollowingController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/apps-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:apps', 'AppsController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:application', 'controller:current-user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /lib/log_before_timeout.rb: -------------------------------------------------------------------------------- 1 | class LogBeforeTimeout 2 | def initialize(app) 3 | @app = app 4 | end 5 | 6 | def call(env) 7 | thr = Thread.new do 8 | sleep(17) 9 | 10 | path = env["PATH_INFO"] 11 | qs = env["QUERY_STRING"] and path = "#{path}?#{qs}" 12 | Rails.logger.warn "#{path} I’m about to timeout bringing down my unicorn worker too :(" 13 | end 14 | @app.call(env) 15 | ensure 16 | thr.exit 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /app/frontend/app/routes/anime.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | model: function(params) { 5 | return this.store.find('full-anime', params.id); 6 | }, 7 | 8 | actions: { 9 | toggleQuoteFavorite: function(quote) { 10 | quote.set('isFavorite', !quote.get('isFavorite')); 11 | return quote.save().then(Ember.K, function() { 12 | return quote.rollback(); 13 | }); 14 | } 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/modals/crop-cover-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:modals/crop-cover', 'ModalsCropCoverController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/modals/edit-anime-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:modals/edit-anime', 'ModalsEditAnimeController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/modals/edit-manga-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:modals/edit-manga', 'ModalsEditMangaController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/quick-update-item-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:quick-update-item', 'QuickUpdateItemController', { 7 | // Specify the other units that are required for this test. 8 | // needs: ['controller:foo'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | -------------------------------------------------------------------------------- /app/frontend/tests/unit/controllers/user/manga-library-test.js: -------------------------------------------------------------------------------- 1 | import { 2 | moduleFor, 3 | test 4 | } from 'ember-qunit'; 5 | 6 | moduleFor('controller:user/manga-library', 'UserMangaLibraryController', { 7 | // Specify the other units that are required for this test. 8 | needs: ['controller:user'] 9 | }); 10 | 11 | // Replace this with your real tests. 12 | test('it exists', function() { 13 | var controller = this.subject(); 14 | ok(controller); 15 | }); 16 | --------------------------------------------------------------------------------