gossiper 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/application.js +13 -0
  3. data/app/assets/javascripts/bootstrap.js +4 -0
  4. data/app/assets/javascripts/gossiper/application.js +2 -0
  5. data/app/assets/javascripts/gossiper/notifications.js +2 -0
  6. data/app/assets/stylesheets/application.css +7 -0
  7. data/app/assets/stylesheets/bootstrap_and_overrides.css.less +30 -0
  8. data/app/assets/stylesheets/gossiper/application.css +1 -0
  9. data/app/assets/stylesheets/gossiper/notifications.css +4 -0
  10. data/app/controllers/gossiper/application_controller.rb +18 -0
  11. data/app/controllers/gossiper/notifications_controller.rb +28 -0
  12. data/app/helpers/gossiper/notifications_helper.rb +4 -0
  13. data/app/views/gossiper/notifications/dummy_notification_notification.html.erb +0 -0
  14. data/app/views/gossiper/notifications/index.html.erb +40 -0
  15. data/app/views/gossiper/notifications/show.html.erb +31 -0
  16. data/app/views/kaminari/_first_page.html.erb +3 -0
  17. data/app/views/kaminari/_gap.html.erb +3 -0
  18. data/app/views/kaminari/_last_page.html.erb +3 -0
  19. data/app/views/kaminari/_next_page.html.erb +3 -0
  20. data/app/views/kaminari/_page.html.erb +3 -0
  21. data/app/views/kaminari/_paginator.html.erb +17 -0
  22. data/app/views/kaminari/_prev_page.html.erb +3 -0
  23. data/app/views/kaminari/gossiper/_first_page.html.erb +3 -0
  24. data/app/views/kaminari/gossiper/_gap.html.erb +3 -0
  25. data/app/views/kaminari/gossiper/_last_page.html.erb +3 -0
  26. data/app/views/kaminari/gossiper/_next_page.html.erb +3 -0
  27. data/app/views/kaminari/gossiper/_page.html.erb +3 -0
  28. data/app/views/kaminari/gossiper/_paginator.html.erb +17 -0
  29. data/app/views/kaminari/gossiper/_prev_page.html.erb +3 -0
  30. data/app/views/layouts/gossiper/application.html.erb +36 -12
  31. data/config/locales/en.bootstrap.yml +18 -0
  32. data/config/routes.rb +7 -0
  33. data/lib/generators/gossiper/install/install_generator.rb +2 -2
  34. data/lib/generators/gossiper/install/templates/initializer.rb +24 -6
  35. data/lib/generators/gossiper/install/templates/locale.en.yml +11 -0
  36. data/lib/generators/gossiper/notification_type/USAGE +3 -1
  37. data/lib/generators/gossiper/notification_type/notification_type_generator.rb +9 -0
  38. data/lib/generators/gossiper/notification_type/templates/notification_type_template.rb +18 -0
  39. data/lib/gossiper/configuration.rb +6 -2
  40. data/lib/gossiper/email_config.rb +11 -8
  41. data/lib/gossiper/mailer.rb +6 -1
  42. data/lib/gossiper/notification_decorator.rb +70 -0
  43. data/lib/gossiper/version.rb +1 -1
  44. data/lib/gossiper.rb +2 -1
  45. metadata +80 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3cee602077f8193490a6c88820bfb282bc91e4d
4
- data.tar.gz: f8880ec0eba28ba87c3b813632868918170c250b
3
+ metadata.gz: e3716407ac00419742e5e27b7ca519d8c917db74
4
+ data.tar.gz: aef5ae17de79516eb899b82e511b3f2968638dff
5
5
  SHA512:
6
- metadata.gz: 597cc48ab2c7454143814fe67b1c83ac9b8d63ce0c8a99c2ff70cf468391e747c8cfbac106d42508c1cdae4d81493df2cc5f41250267503a65000c0fc8e0d32e
7
- data.tar.gz: a5c247cb2bcc91f797fd1776088e98baf30a84065156e3ce5f7bed32cae3bec5c7356021927582f07b9a5bd3cd83cefa5bc8fa1887bc8a7e994a42db1b7c9922
6
+ metadata.gz: 5c8a47020bd298bc4c7839b8697d73165d393084a4c948378a21f2d2139584484b53899372acbaacbb1c359eca762bf4a2f6a322ab7186d54f78f0f00ab735b0
7
+ data.tar.gz: 194baa36496e0d7cd375ba98f687c3410a413654de0ff1b78507c52a6796225819a52aa5b126f6588d2e946dda43d5c08acbe275f5c13eabbe496094a215728c
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,4 @@
1
+ jQuery(function() {
2
+ $("a[rel~=popover], .has-popover").popover();
3
+ $("a[rel~=tooltip], .has-tooltip").tooltip();
4
+ });
@@ -11,3 +11,5 @@
11
11
  // about supported directives.
12
12
  //
13
13
  //= require_tree .
14
+ //= require jquery
15
+ //= require jquery_ujs
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,7 @@
1
+ /*
2
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
5
+ *= require_self
6
+ *= require_tree .
7
+ */
@@ -0,0 +1,30 @@
1
+ @import "twitter/bootstrap/bootstrap";
2
+ @import "twitter/bootstrap/responsive";
3
+
4
+ // Set the correct sprite paths
5
+ @iconSpritePath: image-url("twitter/bootstrap/glyphicons-halflings.png");
6
+ @iconWhiteSpritePath: image-url("twitter/bootstrap/glyphicons-halflings-white.png");
7
+
8
+ // Set the Font Awesome (Font Awesome is default. You can disable by commenting below lines)
9
+ @fontAwesomeEotPath: asset-url("fontawesome-webfont.eot");
10
+ @fontAwesomeEotPath_iefix: asset-url("fontawesome-webfont.eot?#iefix");
11
+ @fontAwesomeWoffPath: asset-url("fontawesome-webfont.woff");
12
+ @fontAwesomeTtfPath: asset-url("fontawesome-webfont.ttf");
13
+ @fontAwesomeSvgPath: asset-url("fontawesome-webfont.svg#fontawesomeregular");
14
+
15
+ // Font Awesome
16
+ @import "fontawesome/font-awesome";
17
+
18
+ // Glyphicons
19
+ //@import "twitter/bootstrap/sprites.less";
20
+
21
+ // Your custom LESS stylesheets goes here
22
+ //
23
+ // Since bootstrap was imported above you have access to its mixins which
24
+ // you may use and inherit here
25
+ //
26
+ // If you'd like to override bootstrap's own variables, you can do so here as well
27
+ // See http://twitter.github.com/bootstrap/customize.html#variables for their names and documentation
28
+ //
29
+ // Example:
30
+ // @linkColor: #ff0000;
@@ -10,4 +10,5 @@
10
10
  *
11
11
  *= require_self
12
12
  *= require_tree .
13
+ *= require bootstrap_and_overrides
13
14
  */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -1,4 +1,22 @@
1
1
  module Gossiper
2
2
  class ApplicationController < ActionController::Base
3
+
4
+ if respond_to?(:before_action)
5
+ before_action :gossiper_authorization
6
+ else
7
+ before_filter :gossiper_authorization
8
+ end
9
+
10
+ def gossiper_authorization
11
+ instance_eval(&Gossiper.configuration.authorize_with)
12
+ end
13
+
14
+ def page
15
+ params[:page].presence || 1
16
+ end
17
+
18
+ def per_page
19
+ params[:per_page].presence || 25
20
+ end
3
21
  end
4
22
  end
@@ -0,0 +1,28 @@
1
+ require_dependency "gossiper/application_controller"
2
+
3
+ module Gossiper
4
+ class NotificationsController < ApplicationController
5
+ respond_to :html
6
+
7
+ def index
8
+ @notifications = Notification.order('id desc').page(page).per(per_page)
9
+ respond_with(@notifications)
10
+ end
11
+
12
+ def show
13
+ respond_with(notification)
14
+ end
15
+
16
+ def deliver
17
+ notification.deliver!
18
+ respond_with(notification) do |format|
19
+ format.html { redirect_to :notifications, notice: t('.delivered') }
20
+ end
21
+ end
22
+
23
+ private
24
+ def notification
25
+ @notification ||= Notification.find(params[:id])
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ module Gossiper
2
+ module NotificationsHelper
3
+ end
4
+ end
@@ -0,0 +1,40 @@
1
+ <h1><%= Gossiper::Notification.model_name.human.pluralize %></h1>
2
+
3
+ <% if notice.present? %>
4
+ <div class="alert alert-success"><%= notice %></div>
5
+ <% end %>
6
+
7
+ <table class="table table-striped table-bordered">
8
+ <tr>
9
+ <th><%= t('.kind') %></th>
10
+ <th><%= t('.email') %></th>
11
+ <th><%= t('.delivered_at') %></th>
12
+ <th><%= t('.status') %></th>
13
+ <th><%= t('.read') %></th>
14
+ <th><%= t('.actions') %></th>
15
+ </tr>
16
+ <% @notifications.each do |notification| %>
17
+ <% decorator = Gossiper::NotificationDecorator.new(notification) %>
18
+ <tr>
19
+ <td><%= decorator.kind %></td>
20
+ <td><%= decorator.user.email %></td>
21
+ <td><%= decorator.delivered_at %></td>
22
+ <td><%= decorator.status %></td>
23
+ <td><%= decorator.read? %></td>
24
+ <td class="actions">
25
+ <%= link_to(
26
+ t('.deliver', default: 'Deliver'),
27
+ deliver_notification_path(notification),
28
+ data: {
29
+ confirm: t('.confirm_delivery', default: t('gossiper.notifications.confirm_delivery')),
30
+ method: :post,
31
+ },
32
+ class: 'btn pull-right'
33
+ ) %>
34
+ <%= link_to(t('.show', default: t('gossiper.notifications.show')), notification, class: 'btn pull-right') %>
35
+ </td>
36
+ </tr>
37
+ <% end %>
38
+ </table>
39
+
40
+ <%= paginate(@notifications, theme: :gossiper) %>
@@ -0,0 +1,31 @@
1
+ <% decorator = Gossiper::NotificationDecorator.new(@notification) %>
2
+
3
+ <h1><%= Gossiper::Notification.model_name.human.pluralize %></h1>
4
+
5
+ <table class="table table-striped table-bordered">
6
+ <% %w(kind subject to user_class user_id delivered_at status read created_at updated_at).each do |attribute| %>
7
+ <tr>
8
+ <th class="title"><%= Gossiper::Notification.human_attribute_name(attribute) rescue t(".#{attribute}") %></th>
9
+ <td><%= decorator.send(attribute) %></td>
10
+ </tr>
11
+ <% end %>
12
+
13
+ <tr>
14
+ <th class="title"><%= Gossiper::Notification.human_attribute_name('email_body') rescue t("email_body") %></th>
15
+ <td><pre><%= decorator.email_object %></pre></td>
16
+ </tr>
17
+
18
+ </table>
19
+
20
+ <div class="form-actions">
21
+ <%= link_to(
22
+ t('.deliver', default: 'Deliver'),
23
+ deliver_notification_path(@notification),
24
+ data: {
25
+ confirm: t('.confirm_delivery', default: t('gossiper.notifications.confirm_delivery')),
26
+ method: :post,
27
+ },
28
+ class: 'btn pull-right'
29
+ ) %>
30
+ <%= link_to(t('.back', default: t('gossiper.notifications.back')), :notifications, class: "btn pull-right") %>
31
+ </div>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class="disabled">
2
+ <%= link_to raw(t 'views.pagination.truncate'), '#' %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, {:remote => remote} %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class="<%= 'active' if page.current? %>">
2
+ <%= link_to page, page.current? ? '#' : url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
3
+ </li>
@@ -0,0 +1,17 @@
1
+ <%= paginator.render do -%>
2
+ <div class="pagination">
3
+ <ul>
4
+ <%= first_page_tag unless current_page.first? %>
5
+ <%= prev_page_tag unless current_page.first? %>
6
+ <% each_page do |page| -%>
7
+ <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
8
+ <%= page_tag page %>
9
+ <% elsif !page.was_truncated? -%>
10
+ <%= gap_tag %>
11
+ <% end -%>
12
+ <% end -%>
13
+ <%= next_page_tag unless current_page.last? %>
14
+ <%= last_page_tag unless current_page.last? %>
15
+ </ul>
16
+ </div>
17
+ <% end -%>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class="disabled">
2
+ <%= link_to raw(t 'views.pagination.truncate'), '#' %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, {:remote => remote} %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class="<%= 'active' if page.current? %>">
2
+ <%= link_to page, page.current? ? '#' : url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
3
+ </li>
@@ -0,0 +1,17 @@
1
+ <%= paginator.render do -%>
2
+ <div class="pagination">
3
+ <ul>
4
+ <%= first_page_tag unless current_page.first? %>
5
+ <%= prev_page_tag unless current_page.first? %>
6
+ <% each_page do |page| -%>
7
+ <% if page.left_outer? || page.right_outer? || page.inside_window? -%>
8
+ <%= page_tag page %>
9
+ <% elsif !page.was_truncated? -%>
10
+ <%= gap_tag %>
11
+ <% end -%>
12
+ <% end -%>
13
+ <%= next_page_tag unless current_page.last? %>
14
+ <%= last_page_tag unless current_page.last? %>
15
+ </ul>
16
+ </div>
17
+ <% end -%>
@@ -0,0 +1,3 @@
1
+ <li>
2
+ <%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote %>
3
+ </li>
@@ -1,14 +1,38 @@
1
1
  <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Gossiper</title>
5
- <%= stylesheet_link_tag "gossiper/application", media: "all" %>
6
- <%= javascript_include_tag "gossiper/application" %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title><%= content_for?(:title) ? yield(:title) : "Gossiper" %></title>
8
+ <%= csrf_meta_tags %>
9
+
10
+ <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
11
+ <!--[if lt IE 9]>
12
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js" type="text/javascript"></script>
13
+ <![endif]-->
14
+
15
+ <%= stylesheet_link_tag "gossiper/application", :media => "all" %>
16
+
17
+ <%= javascript_include_tag "gossiper/application" %>
18
+ </head>
19
+ <body>
20
+
21
+ <div class="container-fluid">
22
+ <div class="row-fluid">
23
+ <div class="span12">
24
+ <%# <%= bootstrap_flash %>
25
+ <%= yield %>
26
+ </div>
27
+ </div><!--/row-->
28
+
29
+ <footer class="footer">
30
+ <div class="pull-right">
31
+ Powered by <a href="https://github.com/mjacobus/gossiper">Gossiper <%= Gossiper::VERSION %></a>
32
+ </div>
33
+ </footer>
34
+
35
+ </div> <!-- /container -->
36
+
37
+ </body>
14
38
  </html>
@@ -0,0 +1,18 @@
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
+ helpers:
6
+ actions: "Actions"
7
+ links:
8
+ back: "Back"
9
+ cancel: "Cancel"
10
+ confirm: "Are you sure?"
11
+ destroy: "Delete"
12
+ new: "New"
13
+ edit: "Edit"
14
+ titles:
15
+ edit: "Edit %{model}"
16
+ save: "Save %{model}"
17
+ new: "New %{model}"
18
+ delete: "Delete %{model}"
data/config/routes.rb CHANGED
@@ -1,2 +1,9 @@
1
1
  Gossiper::Engine.routes.draw do
2
+ root to: 'notifications#index'
3
+
4
+ resources :notifications do
5
+ member do
6
+ post :deliver
7
+ end
8
+ end
2
9
  end
@@ -2,10 +2,10 @@ class Gossiper::InstallGenerator < Rails::Generators::Base
2
2
  source_root File.expand_path('../templates', __FILE__)
3
3
 
4
4
  def copy_initializer
5
- template "initializer.rb", "config/initializer/gossiper.rb"
5
+ template "initializer.rb", "config/initializers/gossiper.rb"
6
6
  end
7
7
 
8
8
  def copy_locale
9
- template "locale.en.yml", "config/locale/gossiper.en.yml"
9
+ template "locale.en.yml", "config/locales/gossiper.en.yml"
10
10
  end
11
11
  end
@@ -1,22 +1,40 @@
1
1
  <%- test_folder = defined?(RSpec) ? 'rspec' : 'test' -%>
2
2
  Gossiper.configure do |config|
3
3
  # Change the default user class
4
- configure.default_user_class = 'User'
4
+ config.default_notification_user_class = 'User'
5
5
 
6
6
  # change the default class of the configurations
7
- config.default_notification_base_class = 'Gossiper::EmailConfig'
7
+ config.default_notification_config_class = 'Gossiper::EmailConfig'
8
+
9
+ # email the email sender
10
+ config.default_from = 'from@example.com'
11
+
12
+ # The list of emails to send copies to
13
+ # config.default_cc = ['user@example.com']
14
+
15
+ # The list of emails to send hidden copies to
16
+ # config.default_bcc = ['user@example.com']
8
17
 
9
18
  # change the path where the notifications should be placed
10
- config.notification_root_folder = Rails.root.join('app/models')
19
+ config.notifications_root_folder = Rails.root.join('app/models')
20
+
21
+ # the notifications templates
22
+ config.notifications_template_folder = Rails.root.join("app/views")
11
23
 
12
24
  # the notifications test folder
13
- config.notification_test_folder = Rails.root.join("<%= test_folder %>", "models")
25
+ config.notifications_test_folder = Rails.root.join("<%= test_folder %>", "models")
14
26
 
15
- config.authorize_with do |controller|
27
+ # The process to be run before a controller action is executed
28
+ # Can also implemented in the application controller
29
+ # by ovewriting the ApplicationController::gossiper_authorization
30
+ #
31
+ # See: Gossiper::ApplicationController#gossiper_authorization
32
+ #
33
+ config.authorize_with do
16
34
  # Example:
17
35
 
18
36
  # unless current_user.is_admin?
19
- # redirect_to root_path, notice: 'Get out!'
37
+ # redirect_to root_path, notice: 'Get outta here!'
20
38
  # end
21
39
  end
22
40
  end
@@ -1,6 +1,17 @@
1
1
  en:
2
+ "true": Yes
3
+ "false": No
2
4
  gossiper:
3
5
  notifications:
6
+ status:
7
+ delivered: Delivered
8
+ pending: Pending
9
+ deliver:
10
+ delivered: Your message has successfully been sent
11
+ show: View
12
+ back: Back
13
+ confirm_delivery: Are you sure you want to deliver this notification?
4
14
  # Example
5
15
  user_welcome:
6
16
  subject: Welcome!
17
+ title: User Registration
@@ -5,4 +5,6 @@ Example:
5
5
  rails generate notification_type user_welcome
6
6
 
7
7
  This will create:
8
- app/models/notifications/user_welcome_notification
8
+ app/models/notifications/user_welcome_notification.rb
9
+ app/views/notifications/user_welcome_notification.html.erb
10
+ spec/models/notifications/user_welcome_notification_spec.rb
@@ -20,4 +20,13 @@ class Gossiper::NotificationTypeGenerator < Rails::Generators::NamedBase
20
20
  "#{singular_name}_notification_#{test_sufix}.rb"
21
21
  )
22
22
  end
23
+
24
+ def create_template
25
+ template 'notification_type_template.rb', File.join(
26
+ Gossiper.configuration.notifications_template_folder.to_s,
27
+ 'notifications',
28
+ class_path,
29
+ "#{singular_name}_notification.html.erb"
30
+ )
31
+ end
23
32
  end
@@ -0,0 +1,18 @@
1
+ <!--
2
+ # @notification.class #=> Gossiper::NotificationDecorator
3
+ # @notification.subject
4
+ # @notification.email
5
+ # @notification.read?
6
+ # @notification.delivered_at?
7
+
8
+
9
+ # Also, if you want to assign other vars here, just edit the
10
+ # <%= File.join(Gossiper.configuration.notifications_root_folder.to_s, 'notifications', class_path, "#{singular_name}_notification.rb") %>
11
+ # and override the
12
+ # def instance_variables
13
+ # { some_var: 'some_value' }
14
+ # end
15
+
16
+ # and the value will be assign to the @some_var instance variable
17
+ -->
18
+ <p>Write your email here</p>
@@ -13,10 +13,14 @@ module Gossiper
13
13
  end
14
14
  end
15
15
 
16
- attribute :default_notification_user_class
17
- attribute :default_notification_config_class
18
16
  attribute :notifications_root_folder
19
17
  attribute :notifications_test_folder
18
+ attribute :notifications_template_folder
19
+ attribute :default_notification_user_class
20
+ attribute :default_notification_config_class
21
+ attribute :default_from
22
+ attribute :default_cc
23
+ attribute :default_bcc
20
24
 
21
25
  def authorize_with(&block)
22
26
  if block_given?
@@ -7,6 +7,10 @@ module Gossiper
7
7
  @user = notification.user
8
8
  end
9
9
 
10
+ def from
11
+ config.default_from
12
+ end
13
+
10
14
  def to
11
15
  if user.respond_to?(:name)
12
16
  ["#{user.name} <#{user.email}>"]
@@ -15,18 +19,12 @@ module Gossiper
15
19
  end
16
20
  end
17
21
 
18
- # TODO: Make configuration for default bcc
19
22
  def bcc
20
- []
21
- end
22
-
23
- # TODO: Make configuration for default from
24
- def from
23
+ config.default_bcc
25
24
  end
26
25
 
27
- # TODO: Make configuration for default cc
28
26
  def cc
29
- []
27
+ config.default_cc
30
28
  end
31
29
 
32
30
  def template_name
@@ -48,5 +46,10 @@ module Gossiper
48
46
  def instance_variables
49
47
  {}
50
48
  end
49
+
50
+ private
51
+ def config
52
+ Gossiper.configuration
53
+ end
51
54
  end
52
55
  end
@@ -8,11 +8,14 @@ module Gossiper
8
8
  attachments[filename] = file
9
9
  end
10
10
 
11
+ @notification = NotificationDecorator.new(notification)
12
+
11
13
  config.instance_variables.each do |name, value|
12
14
  instance_variable_set("@#{name}", value)
13
15
  end
14
16
 
15
17
  mail(
18
+ from: config.from,
16
19
  to: config.to,
17
20
  cc: config.cc,
18
21
  bcc: config.bcc,
@@ -27,8 +30,10 @@ module Gossiper
27
30
  klass = "Notifications::#{notification.kind.classify}Notification"
28
31
  klass.constantize.new(notification)
29
32
  rescue NameError
30
- Gossiper::EmailConfig.new(notification)
33
+ klass = Gossiper.configuration.default_notification_config_class
34
+ klass.constantize.new(notification)
31
35
  end
36
+
32
37
  end
33
38
  end
34
39
  end
@@ -0,0 +1,70 @@
1
+ module Gossiper
2
+ class NotificationDecorator
3
+
4
+ attr_reader :notification
5
+
6
+ def initialize(notification)
7
+ @notification = notification
8
+ end
9
+
10
+ def method_missing(method, *args, &block)
11
+ notification.send(method, *args, &block)
12
+ end
13
+
14
+ def respond_to?(method)
15
+ notification.respond_to?(method)
16
+ end
17
+
18
+ def kind
19
+ t("gossiper.notifications.#{notification.kind}.title",
20
+ default: notification.kind.titleize
21
+ )
22
+ end
23
+
24
+ def subject
25
+ t("gossiper.notifications.#{notification.kind}.subject",
26
+ default: kind
27
+ )
28
+ end
29
+
30
+ def status
31
+ t("gossiper.notifications.status.#{notification.status}")
32
+ end
33
+
34
+ def read?
35
+ t(notification.read?.to_s)
36
+ end
37
+
38
+ def email
39
+ notification.user.email
40
+ end
41
+ alias_method :to, :email
42
+
43
+ def delivered_at
44
+ decorate_date(notification.delivered_at)
45
+ end
46
+
47
+ def created_at
48
+ decorate_date(notification.created_at)
49
+ end
50
+
51
+ def updated_at
52
+ decorate_date(notification.updated_at)
53
+ end
54
+
55
+ def email_object
56
+ @email_object ||= Mailer.mail_for(notification)
57
+ end
58
+
59
+ private
60
+
61
+ def t(*args)
62
+ I18n.t(*args)
63
+ end
64
+
65
+ def decorate_date(date)
66
+ I18n.l(date, format: :short) if date
67
+ end
68
+
69
+ end
70
+ end
@@ -1,3 +1,3 @@
1
1
  module Gossiper
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/gossiper.rb CHANGED
@@ -2,6 +2,7 @@ require "gossiper/engine"
2
2
  require "gossiper/email_config"
3
3
  require "gossiper/mailer"
4
4
  require "gossiper/configuration"
5
+ require "gossiper/notification_decorator"
5
6
 
6
7
  module Gossiper
7
8
 
@@ -10,7 +11,7 @@ module Gossiper
10
11
  @@_config ||= Configuration.new
11
12
  end
12
13
 
13
- def config
14
+ def configure
14
15
  yield configuration
15
16
  end
16
17
  end
metadata CHANGED
@@ -1,37 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gossiper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Jacobus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-08 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: sqlite3
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
20
- - - <
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
21
25
  - !ruby/object:Gem::Version
22
- version: '5.0'
23
- type: :runtime
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: shoulda-matchers
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
24
35
  prerelease: false
25
36
  version_requirements: !ruby/object:Gem::Requirement
26
37
  requirements:
27
38
  - - '>='
28
39
  - !ruby/object:Gem::Version
29
- version: '3.2'
30
- - - <
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
31
53
  - !ruby/object:Gem::Version
32
- version: '5.0'
54
+ version: '0'
33
55
  - !ruby/object:Gem::Dependency
34
- name: sqlite3
56
+ name: simplecov
35
57
  requirement: !ruby/object:Gem::Requirement
36
58
  requirements:
37
59
  - - '>='
@@ -45,7 +67,7 @@ dependencies:
45
67
  - !ruby/object:Gem::Version
46
68
  version: '0'
47
69
  - !ruby/object:Gem::Dependency
48
- name: shoulda-matchers
70
+ name: coveralls
49
71
  requirement: !ruby/object:Gem::Requirement
50
72
  requirements:
51
73
  - - '>='
@@ -59,7 +81,7 @@ dependencies:
59
81
  - !ruby/object:Gem::Version
60
82
  version: '0'
61
83
  - !ruby/object:Gem::Dependency
62
- name: rspec-rails
84
+ name: faker
63
85
  requirement: !ruby/object:Gem::Requirement
64
86
  requirements:
65
87
  - - '>='
@@ -73,7 +95,7 @@ dependencies:
73
95
  - !ruby/object:Gem::Version
74
96
  version: '0'
75
97
  - !ruby/object:Gem::Dependency
76
- name: simplecov
98
+ name: interactive_editor
77
99
  requirement: !ruby/object:Gem::Requirement
78
100
  requirements:
79
101
  - - '>='
@@ -93,30 +115,58 @@ executables: []
93
115
  extensions: []
94
116
  extra_rdoc_files: []
95
117
  files:
118
+ - app/views/layouts/gossiper/application.html.erb
119
+ - app/views/gossiper/notifications/dummy_notification_notification.html.erb
120
+ - app/views/gossiper/notifications/index.html.erb
121
+ - app/views/gossiper/notifications/show.html.erb
122
+ - app/views/kaminari/_first_page.html.erb
123
+ - app/views/kaminari/_prev_page.html.erb
124
+ - app/views/kaminari/gossiper/_first_page.html.erb
125
+ - app/views/kaminari/gossiper/_prev_page.html.erb
126
+ - app/views/kaminari/gossiper/_last_page.html.erb
127
+ - app/views/kaminari/gossiper/_next_page.html.erb
128
+ - app/views/kaminari/gossiper/_page.html.erb
129
+ - app/views/kaminari/gossiper/_gap.html.erb
130
+ - app/views/kaminari/gossiper/_paginator.html.erb
131
+ - app/views/kaminari/_last_page.html.erb
132
+ - app/views/kaminari/_next_page.html.erb
133
+ - app/views/kaminari/_page.html.erb
134
+ - app/views/kaminari/_gap.html.erb
135
+ - app/views/kaminari/_paginator.html.erb
136
+ - app/helpers/gossiper/notifications_helper.rb
137
+ - app/helpers/gossiper/application_helper.rb
138
+ - app/assets/javascripts/application.js
96
139
  - app/assets/javascripts/gossiper/application.js
140
+ - app/assets/javascripts/gossiper/notifications.js
141
+ - app/assets/javascripts/bootstrap.js
142
+ - app/assets/stylesheets/application.css
143
+ - app/assets/stylesheets/gossiper/notifications.css
97
144
  - app/assets/stylesheets/gossiper/application.css
98
- - app/helpers/gossiper/application_helper.rb
145
+ - app/assets/stylesheets/bootstrap_and_overrides.css.less
99
146
  - app/models/gossiper/notification.rb
100
- - app/views/layouts/gossiper/application.html.erb
101
147
  - app/controllers/gossiper/application_controller.rb
148
+ - app/controllers/gossiper/notifications_controller.rb
149
+ - config/locales/en.bootstrap.yml
102
150
  - config/routes.rb
103
151
  - db/migrate/20131206162038_create_gossiper_notifications.rb
104
- - lib/generators/gossiper/notification_type/USAGE
105
- - lib/generators/gossiper/notification_type/notification_type_generator.rb
106
- - lib/generators/gossiper/notification_type/templates/notification_type_spec.rb
107
- - lib/generators/gossiper/notification_type/templates/notification_type_test.rb
108
- - lib/generators/gossiper/notification_type/templates/notification_type.rb
109
- - lib/generators/gossiper/install/USAGE
110
- - lib/generators/gossiper/install/install_generator.rb
111
- - lib/generators/gossiper/install/templates/initializer.rb
112
- - lib/generators/gossiper/install/templates/locale.en.yml
113
152
  - lib/gossiper.rb
114
- - lib/tasks/gossiper_tasks.rake
115
- - lib/gossiper/email_config.rb
116
- - lib/gossiper/engine.rb
117
- - lib/gossiper/mailer.rb
118
153
  - lib/gossiper/configuration.rb
154
+ - lib/gossiper/engine.rb
155
+ - lib/gossiper/email_config.rb
119
156
  - lib/gossiper/version.rb
157
+ - lib/gossiper/mailer.rb
158
+ - lib/gossiper/notification_decorator.rb
159
+ - lib/tasks/gossiper_tasks.rake
160
+ - lib/generators/gossiper/install/templates/locale.en.yml
161
+ - lib/generators/gossiper/install/templates/initializer.rb
162
+ - lib/generators/gossiper/install/install_generator.rb
163
+ - lib/generators/gossiper/install/USAGE
164
+ - lib/generators/gossiper/notification_type/notification_type_generator.rb
165
+ - lib/generators/gossiper/notification_type/templates/notification_type.rb
166
+ - lib/generators/gossiper/notification_type/templates/notification_type_test.rb
167
+ - lib/generators/gossiper/notification_type/templates/notification_type_template.rb
168
+ - lib/generators/gossiper/notification_type/templates/notification_type_spec.rb
169
+ - lib/generators/gossiper/notification_type/USAGE
120
170
  - MIT-LICENSE
121
171
  - Rakefile
122
172
  homepage: https://github.com/mjacobus/gossiper
@@ -139,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
189
  version: '0'
140
190
  requirements: []
141
191
  rubyforge_project:
142
- rubygems_version: 2.0.3
192
+ rubygems_version: 2.1.11
143
193
  signing_key:
144
194
  specification_version: 4
145
195
  summary: It eases the creation of messages for the users