eventifier 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
 - data/Gemfile +5 -0
 - data/README.textile +13 -0
 - data/app/assets/javascripts/eventifier/notifications.coffee +19 -12
 - data/app/assets/stylesheets/eventifier/notifications.scss +1 -0
 - data/app/views/eventifier/notifications/index.jbuilder +3 -3
 - data/config/routes.rb +1 -5
 - data/eventifier.gemspec +3 -2
 - data/lib/eventifier.rb +2 -1
 - data/lib/eventifier/api.rb +19 -0
 - data/lib/eventifier/api/base.rb +36 -0
 - data/lib/eventifier/api/get_notifications.rb +37 -0
 - data/lib/eventifier/api/get_preferences.rb +7 -0
 - data/lib/eventifier/api/put_preferences.rb +9 -0
 - data/lib/eventifier/api/touch_notifications.rb +9 -0
 - data/lib/eventifier/api/view.rb +13 -0
 - data/spec/eventifier/api_spec.rb +109 -0
 - data/spec/internal/config/locales/events.en.yml +2 -0
 - data/spec/spec_helper.rb +4 -1
 - metadata +27 -11
 - data/app/controllers/eventifier/application_controller.rb +0 -4
 - data/app/controllers/eventifier/notifications_controller.rb +0 -36
 - data/app/controllers/eventifier/preferences_controller.rb +0 -17
 - data/spec/controllers/eventifier/notifications_controller_spec.rb +0 -26
 - data/spec/controllers/eventifier/preferences_controller_spec.rb +0 -38
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: aaf9b70e8194f8a8d0b9bbb3c1f47a66ce567924
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b5cfd42aac01fc16b8c3c6f1958c3f7000ccb61e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f33025942a2d0648a150905772630b8f5ffdf322529f3d03f4122c1d1799a6fcb159e3cedd83d9022dff49e92383db461647a33ca9719500572b22fb5781d56e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2027a96019a98283036f41efa293c77140e1144c30c8bb41b05046e5786c851df26221c9fa0b98825ca16fba8bc6c4f8520cc17fff702adc8512b6620fba55f6
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.textile
    CHANGED
    
    | 
         @@ -138,6 +138,19 @@ h2. Requirements 
     | 
|
| 
       138 
138 
     | 
    
         | 
| 
       139 
139 
     | 
    
         
             
            * ActiveRecord
         
     | 
| 
       140 
140 
     | 
    
         | 
| 
      
 141 
     | 
    
         
            +
            h2. Turbolinks
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
            Turbolinks removes the body of the page, which is where our dropdown notifications box sits.  We'll need to re-render it and point it at the holding element when the page changes.
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
            ```
         
     | 
| 
      
 146 
     | 
    
         
            +
            $ ->
         
     | 
| 
      
 147 
     | 
    
         
            +
              window.notifications = new NotificationDropdown el: $('.notifications'), pollTime: 60
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            $(document).on "page:change", ->
         
     | 
| 
      
 150 
     | 
    
         
            +
              notifications.el = $('.notifications')
         
     | 
| 
      
 151 
     | 
    
         
            +
              notifications.render()
         
     | 
| 
      
 152 
     | 
    
         
            +
            ```
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
       141 
154 
     | 
    
         
             
            h2. Testing
         
     | 
| 
       142 
155 
     | 
    
         | 
| 
       143 
156 
     | 
    
         
             
            Creating the database:
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #= require hamlcoffee
         
     | 
| 
       2 
     | 
    
         
            -
            #= require  
     | 
| 
       3 
     | 
    
         
            -
            #= require  
     | 
| 
      
 2 
     | 
    
         
            +
            #= require eventifier/templates/dropdown
         
     | 
| 
      
 3 
     | 
    
         
            +
            #= require eventifier/templates/settings
         
     | 
| 
       4 
4 
     | 
    
         
             
            # Usage
         
     | 
| 
       5 
5 
     | 
    
         
             
            # window.notifications = new NotificationDropdown el: $('.notifications'), limit: 5
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
         @@ -19,14 +19,18 @@ class window.NotificationDropdown 
     | 
|
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                @render()
         
     | 
| 
       21 
21 
     | 
    
         
             
                @loadMore(limit: 14)
         
     | 
| 
      
 22 
     | 
    
         
            +
                setTimeout =>
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @el.trigger 'poll'
         
     | 
| 
      
 24 
     | 
    
         
            +
                , @pollTime*1000
         
     | 
| 
       22 
25 
     | 
    
         | 
| 
       23 
26 
     | 
    
         
             
              render: =>
         
     | 
| 
      
 27 
     | 
    
         
            +
                @unsetEvents()
         
     | 
| 
      
 28 
     | 
    
         
            +
                @renderedNotifications = []
         
     | 
| 
       24 
29 
     | 
    
         
             
                @el.html(@template(@)).attr('tabindex', 0)
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
                @renderNotifications()
         
     | 
| 
       26 
31 
     | 
    
         
             
                # @checkVisibility()
         
     | 
| 
       27 
32 
     | 
    
         | 
| 
       28 
33 
     | 
    
         
             
                @setEvents()
         
     | 
| 
       29 
     | 
    
         
            -
                @poll()
         
     | 
| 
       30 
34 
     | 
    
         | 
| 
       31 
35 
     | 
    
         
             
              checkVisibility: =>
         
     | 
| 
       32 
36 
     | 
    
         
             
                @el.addClass("notifications_active").find('#notification_dropdown').attr('opacity': 0)
         
     | 
| 
         @@ -57,6 +61,9 @@ class window.NotificationDropdown 
     | 
|
| 
       57 
61 
     | 
    
         | 
| 
       58 
62 
     | 
    
         
             
                @
         
     | 
| 
       59 
63 
     | 
    
         | 
| 
      
 64 
     | 
    
         
            +
              unsetEvents: =>
         
     | 
| 
      
 65 
     | 
    
         
            +
                @el.off()
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
       60 
67 
     | 
    
         
             
              pushUrl: (e)=>
         
     | 
| 
       61 
68 
     | 
    
         
             
                location = $(e.currentTarget).attr('href')
         
     | 
| 
       62 
69 
     | 
    
         
             
                location = $('<a />').attr(href: location).get(0).pathname if location.match /^https?\:\/\//
         
     | 
| 
         @@ -72,16 +79,16 @@ class window.NotificationDropdown 
     | 
|
| 
       72 
79 
     | 
    
         
             
                  unless $.inArray(notification.id, @renderedNotifications) >= 0
         
     | 
| 
       73 
80 
     | 
    
         
             
                    if new Date(notification.created_at) > @lastReadAt
         
     | 
| 
       74 
81 
     | 
    
         
             
                      if @lastInserted?
         
     | 
| 
       75 
     | 
    
         
            -
                        @lastInserted.after @lastInserted = $("<li />")
         
     | 
| 
      
 82 
     | 
    
         
            +
                        @lastInserted.after( @lastInserted = $("<li />")
         
     | 
| 
       76 
83 
     | 
    
         
             
                          .addClass('unread')
         
     | 
| 
       77 
84 
     | 
    
         
             
                          .html(notification.html)
         
     | 
| 
      
 85 
     | 
    
         
            +
                        )
         
     | 
| 
       78 
86 
     | 
    
         
             
                      else
         
     | 
| 
       79 
87 
     | 
    
         
             
                        @el
         
     | 
| 
       80 
88 
     | 
    
         
             
                          .find('ol')
         
     | 
| 
       81 
     | 
    
         
            -
                          .prepend( 
     | 
| 
      
 89 
     | 
    
         
            +
                          .prepend(@lastInserted = $("<li />")
         
     | 
| 
       82 
90 
     | 
    
         
             
                            .addClass('unread')
         
     | 
| 
       83 
     | 
    
         
            -
                            .html(notification.html)
         
     | 
| 
       84 
     | 
    
         
            -
                        )
         
     | 
| 
      
 91 
     | 
    
         
            +
                            .html(notification.html))
         
     | 
| 
       85 
92 
     | 
    
         
             
                    else
         
     | 
| 
       86 
93 
     | 
    
         
             
                      @el
         
     | 
| 
       87 
94 
     | 
    
         
             
                      .find('ol')
         
     | 
| 
         @@ -105,7 +112,7 @@ class window.NotificationDropdown 
     | 
|
| 
       105 
112 
     | 
    
         
             
              toggleSettings: (event)=>
         
     | 
| 
       106 
113 
     | 
    
         
             
                event.preventDefault() if event?
         
     | 
| 
       107 
114 
     | 
    
         
             
                $.ajax
         
     | 
| 
       108 
     | 
    
         
            -
                  url: "/preferences"
         
     | 
| 
      
 115 
     | 
    
         
            +
                  url: "/eventifier/preferences"
         
     | 
| 
       109 
116 
     | 
    
         
             
                  success: (data)=>
         
     | 
| 
       110 
117 
     | 
    
         
             
                    @el.find("#settings_pane").html(@settingsTemplate(data))
         
     | 
| 
       111 
118 
     | 
    
         
             
                    @defaultSettings() if @arrayFromObject($.makeArray(data)).default
         
     | 
| 
         @@ -124,7 +131,7 @@ class window.NotificationDropdown 
     | 
|
| 
       124 
131 
     | 
    
         
             
                  serializedSettings[@name] = @value
         
     | 
| 
       125 
132 
     | 
    
         | 
| 
       126 
133 
     | 
    
         
             
                $.ajax
         
     | 
| 
       127 
     | 
    
         
            -
                  url: "/preferences"
         
     | 
| 
      
 134 
     | 
    
         
            +
                  url: "/eventifier/preferences"
         
     | 
| 
       128 
135 
     | 
    
         
             
                  type: "PUT"
         
     | 
| 
       129 
136 
     | 
    
         
             
                  data: preferences: serializedSettings
         
     | 
| 
       130 
137 
     | 
    
         
             
                  success: (data)=> @el.toggleClass('show_settings')
         
     | 
| 
         @@ -140,7 +147,7 @@ class window.NotificationDropdown 
     | 
|
| 
       140 
147 
     | 
    
         | 
| 
       141 
148 
     | 
    
         
             
              loadMore: (params = {})=>
         
     | 
| 
       142 
149 
     | 
    
         
             
                $.ajax
         
     | 
| 
       143 
     | 
    
         
            -
                  url: "/notifications"
         
     | 
| 
      
 150 
     | 
    
         
            +
                  url: "/eventifier/notifications"
         
     | 
| 
       144 
151 
     | 
    
         
             
                  dataType: 'json'
         
     | 
| 
       145 
152 
     | 
    
         
             
                  data: params
         
     | 
| 
       146 
153 
     | 
    
         
             
                  success: @addNotifications
         
     | 
| 
         @@ -189,7 +196,7 @@ class window.NotificationDropdown 
     | 
|
| 
       189 
196 
     | 
    
         
             
                if @isAlerting()
         
     | 
| 
       190 
197 
     | 
    
         
             
                  @lastReadAt = new Date()
         
     | 
| 
       191 
198 
     | 
    
         
             
                  @setUnreadCount()
         
     | 
| 
       192 
     | 
    
         
            -
                  $.post '/notifications/touch'
         
     | 
| 
      
 199 
     | 
    
         
            +
                  $.post '/eventifier/notifications/touch'
         
     | 
| 
       193 
200 
     | 
    
         | 
| 
       194 
201 
     | 
    
         
             
              poll: =>
         
     | 
| 
       195 
202 
     | 
    
         
             
                @loadMore(recent: true, since: @lastLookTime())
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            json.last_read_at  
     | 
| 
       2 
     | 
    
         
            -
            json.notifications  
     | 
| 
      
 1 
     | 
    
         
            +
            json.last_read_at user.notifications_last_read_at.to_i*1000
         
     | 
| 
      
 2 
     | 
    
         
            +
            json.notifications notifications do |notification|
         
     | 
| 
       3 
3 
     | 
    
         
             
              json.(notification, :id)
         
     | 
| 
       4 
4 
     | 
    
         
             
              json.created_at notification.created_at.to_i*1000
         
     | 
| 
       5 
5 
     | 
    
         
             
              json.html render_partial_view(notification, :dropdown)
         
     | 
| 
       6 
     | 
    
         
            -
            end
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
    
        data/config/routes.rb
    CHANGED
    
    
    
        data/eventifier.gemspec
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- encoding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       3 
3 
     | 
    
         
             
              s.name        = "eventifier"
         
     | 
| 
       4 
     | 
    
         
            -
              s.version     = '0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              s.version     = '0.1.3'
         
     | 
| 
       5 
5 
     | 
    
         
             
              s.authors     = ["Nathan Sampimon", "Peter Murray", "Pat Allan"]
         
     | 
| 
       6 
6 
     | 
    
         
             
              s.email       = ["nathan@inspire9.com"]
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.homepage    = "http://github.com/inspire9/eventifier"
         
     | 
| 
         @@ -16,7 +16,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       16 
16 
     | 
    
         
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
              s.add_runtime_dependency 'rails',           ' 
     | 
| 
      
 19 
     | 
    
         
            +
              s.add_runtime_dependency 'rails',           '>= 4.0.3'
         
     | 
| 
       20 
20 
     | 
    
         
             
              s.add_runtime_dependency "bson_ext"
         
     | 
| 
       21 
21 
     | 
    
         
             
              s.add_runtime_dependency 'haml-rails',      '~> 0.4'
         
     | 
| 
       22 
22 
     | 
    
         
             
              s.add_runtime_dependency 'haml_coffee_assets'
         
     | 
| 
         @@ -25,6 +25,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       25 
25 
     | 
    
         
             
              s.add_runtime_dependency 'multi_json',      '>= 1.7.4'
         
     | 
| 
       26 
26 
     | 
    
         
             
              s.add_runtime_dependency 'jbuilder',        '>= 2.0.4'
         
     | 
| 
       27 
27 
     | 
    
         
             
              s.add_runtime_dependency 'rails-observers', '~> 0.1.2'
         
     | 
| 
      
 28 
     | 
    
         
            +
              s.add_runtime_dependency 'sliver',          '~> 0.0.3'
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
              s.add_development_dependency 'combustion',  '~> 0.5.0'
         
     | 
| 
       30 
31 
     | 
    
         
             
              s.add_development_dependency 'fabrication', '~> 2.11.0'
         
     | 
    
        data/lib/eventifier.rb
    CHANGED
    
    | 
         @@ -18,6 +18,7 @@ require 'compass-rails' 
     | 
|
| 
       18 
18 
     | 
    
         
             
            require 'haml-rails'
         
     | 
| 
       19 
19 
     | 
    
         
             
            require 'haml_coffee_assets'
         
     | 
| 
       20 
20 
     | 
    
         
             
            require 'jbuilder'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'sliver'
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            module Eventifier
         
     | 
| 
       23 
24 
     | 
    
         
             
              mattr_accessor :mailer_sender
         
     | 
| 
         @@ -60,7 +61,7 @@ module Eventifier 
     | 
|
| 
       60 
61 
     | 
    
         
             
              end
         
     | 
| 
       61 
62 
     | 
    
         
             
            end
         
     | 
| 
       62 
63 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 64 
     | 
    
         
            +
            require 'eventifier/api'
         
     | 
| 
       64 
65 
     | 
    
         
             
            require 'eventifier/delivery'
         
     | 
| 
       65 
66 
     | 
    
         
             
            require 'eventifier/event_tracking'
         
     | 
| 
       66 
67 
     | 
    
         
             
            require 'eventifier/event_builder'
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Eventifier::API < Sliver::API
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize
         
     | 
| 
      
 3 
     | 
    
         
            +
                super do |api|
         
     | 
| 
      
 4 
     | 
    
         
            +
                  api.connect :get,  '/notifications', Eventifier::API::GetNotifications
         
     | 
| 
      
 5 
     | 
    
         
            +
                  api.connect :post, '/notifications/touch',
         
     | 
| 
      
 6 
     | 
    
         
            +
                    Eventifier::API::TouchNotifications
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  api.connect :get, '/preferences', Eventifier::API::GetPreferences
         
     | 
| 
      
 9 
     | 
    
         
            +
                  api.connect :put, '/preferences', Eventifier::API::PutPreferences
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            require 'eventifier/api/base'
         
     | 
| 
      
 15 
     | 
    
         
            +
            require 'eventifier/api/view'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'eventifier/api/get_notifications'
         
     | 
| 
      
 17 
     | 
    
         
            +
            require 'eventifier/api/touch_notifications'
         
     | 
| 
      
 18 
     | 
    
         
            +
            require 'eventifier/api/get_preferences'
         
     | 
| 
      
 19 
     | 
    
         
            +
            require 'eventifier/api/put_preferences'
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Eventifier::API::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              include Sliver::Action
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def skip?
         
     | 
| 
      
 5 
     | 
    
         
            +
                return false if user
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                response.status = 403
         
     | 
| 
      
 8 
     | 
    
         
            +
                response.body   = ['Forbidden']
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                true
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def call
         
     | 
| 
      
 14 
     | 
    
         
            +
                response.status ||= 200
         
     | 
| 
      
 15 
     | 
    
         
            +
                response.body   ||= {}
         
     | 
| 
      
 16 
     | 
    
         
            +
                response.headers['Content-Type'] ||= 'application/json'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                if response.body.is_a?(String)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  response.body = [response.body]
         
     | 
| 
      
 20 
     | 
    
         
            +
                else
         
     | 
| 
      
 21 
     | 
    
         
            +
                  response.body = [JSON.generate(response.body)]
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              private
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def user
         
     | 
| 
      
 28 
     | 
    
         
            +
                return nil unless warden && warden.authenticated?(:user)
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                warden.user(:user)
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def warden
         
     | 
| 
      
 34 
     | 
    
         
            +
                environment['warden']
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Eventifier::API::GetNotifications < Eventifier::API::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              include Eventifier::API::View
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def call
         
     | 
| 
      
 5 
     | 
    
         
            +
                render 'eventifier/notifications/index',
         
     | 
| 
      
 6 
     | 
    
         
            +
                  notifications: notifications, user: user
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                super
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              private
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              delegate :params, to: :request
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def notifications
         
     | 
| 
      
 16 
     | 
    
         
            +
                scope = user.notifications.order("eventifier_notifications.created_at DESC").limit(per_page)
         
     | 
| 
      
 17 
     | 
    
         
            +
                scope = scope.where("eventifier_notifications.created_at < ?", after) if params['after']
         
     | 
| 
      
 18 
     | 
    
         
            +
                scope = scope.where("eventifier_notifications.created_at > ?", since) if params['since']
         
     | 
| 
      
 19 
     | 
    
         
            +
                scope = scope.where(
         
     | 
| 
      
 20 
     | 
    
         
            +
                  "eventifier_notifications.created_at > ?", user.notifications_last_read_at
         
     | 
| 
      
 21 
     | 
    
         
            +
                ) if params['recent']
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                scope
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def after
         
     | 
| 
      
 27 
     | 
    
         
            +
                Time.zone.at params['after'].to_i
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def per_page
         
     | 
| 
      
 31 
     | 
    
         
            +
                (params['limit'] || 5).to_i
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def since
         
     | 
| 
      
 35 
     | 
    
         
            +
                Time.zone.at params['since'].to_i
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Eventifier::API::View
         
     | 
| 
      
 2 
     | 
    
         
            +
              private
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def render(template, locals = {})
         
     | 
| 
      
 5 
     | 
    
         
            +
                response.body = renderer.render template: template, locals: locals
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def renderer
         
     | 
| 
      
 9 
     | 
    
         
            +
                ApplicationController.view_context_class.new(
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ApplicationController.view_paths
         
     | 
| 
      
 11 
     | 
    
         
            +
                )
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,109 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Eventifier::API do
         
     | 
| 
      
 4 
     | 
    
         
            +
              include Rack::Test::Methods
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              let(:app)    { Eventifier::API.new }
         
     | 
| 
      
 7 
     | 
    
         
            +
              let(:user)   { double 'User' }
         
     | 
| 
      
 8 
     | 
    
         
            +
              let(:warden) { double 'Warden', authenticated?: true, user: user }
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              describe 'GET /notifications' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                let(:event)         { double 'Event', eventable_type: 'User', eventable: double, user: User.create!(name: 'Pat'), verb: :create }
         
     | 
| 
      
 12 
     | 
    
         
            +
                let(:notifications) { [double('Notification', id: 84, created_at: created_at, event: event)] }
         
     | 
| 
      
 13 
     | 
    
         
            +
                let(:created_at)    { 1.minute.ago }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  Rails.application.default_url_options = {host: 'eventifier.dev'}
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  allow(user).to receive(:notifications_last_read_at).and_return(1)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  allow(notifications).to receive(:order).and_return(notifications)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  allow(notifications).to receive(:limit).and_return(notifications)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                it 'returns 403 if there is no authenticated user' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  allow(warden).to receive(:authenticated?).and_return(false)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  allow(warden).to receive(:user).and_return(nil)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  get '/notifications', {}, {'warden' => warden}
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  expect(last_response.status).to eq(403)
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                it 'returns notifications as JSON' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                  allow(user).to receive(:notifications).and_return(notifications)
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  get '/notifications', {}, {'warden' => warden}
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  json = JSON.parse(last_response.body)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  expect(json['last_read_at']).to eq(1000)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  expect(json['notifications'].first['id']).to eq(84)
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              describe 'POST /notifications/touch' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  allow(user).to receive(:update_attribute).and_return(true)
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                it "updates the current user's notifications last read at" do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  expect(user).to receive(:update_attribute).
         
     | 
| 
      
 50 
     | 
    
         
            +
                    with(:notifications_last_read_at, anything)
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  post '/notifications/touch', {}, {'warden' => warden}
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                it "responds with JSON OK status" do
         
     | 
| 
      
 56 
     | 
    
         
            +
                  post '/notifications/touch', {}, {'warden' => warden}
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  expect(last_response.body).to eq ({'status' => 'OK'}.to_json)
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              describe 'GET /preferences' do
         
     | 
| 
      
 63 
     | 
    
         
            +
                let(:preferences) { double :to_hashes => [{'foo' => 'bar'}] }
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 66 
     | 
    
         
            +
                  allow(Eventifier::Preferences).to receive(:new).and_return(preferences)
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                it 'initializes the preferences with the logged in user' do
         
     | 
| 
      
 70 
     | 
    
         
            +
                  expect(Eventifier::Preferences).to receive(:new).with(user).
         
     | 
| 
      
 71 
     | 
    
         
            +
                    and_return(preferences)
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  get '/preferences', {}, {'warden' => warden}
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                it "returns the settings hashes" do
         
     | 
| 
      
 77 
     | 
    
         
            +
                  get '/preferences', {}, {'warden' => warden}
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  expect(last_response.body).to eq ([{'foo' => 'bar'}].to_json)
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
              describe 'PUT /preferences' do
         
     | 
| 
      
 84 
     | 
    
         
            +
                let(:preferences) { double update: true }
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 87 
     | 
    
         
            +
                  allow(Eventifier::Preferences).to receive(:new).and_return(preferences)
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                it 'initializes the preferences with the logged in user' do
         
     | 
| 
      
 91 
     | 
    
         
            +
                  expect(Eventifier::Preferences).to receive(:new).with(user).
         
     | 
| 
      
 92 
     | 
    
         
            +
                    and_return(preferences)
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  put '/preferences', {preferences: {'foo' => ''}}, {'warden' => warden}
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                it 'saves the settings changes' do
         
     | 
| 
      
 98 
     | 
    
         
            +
                  expect(preferences).to receive(:update).with('foo' => '')
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  put '/preferences', {preferences: {'foo' => ''}}, {'warden' => warden}
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                it "renders a JSON OK status" do
         
     | 
| 
      
 104 
     | 
    
         
            +
                  put '/preferences', {preferences: {'foo' => ''}}, {'warden' => warden}
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                  expect(last_response.body).to eq ({'status' => 'OK'}.to_json)
         
     | 
| 
      
 107 
     | 
    
         
            +
                end
         
     | 
| 
      
 108 
     | 
    
         
            +
              end
         
     | 
| 
      
 109 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -5,6 +5,8 @@ Bundler.setup :default, :development 
     | 
|
| 
       5 
5 
     | 
    
         
             
            require 'fabrication'
         
     | 
| 
       6 
6 
     | 
    
         
             
            require 'combustion'
         
     | 
| 
       7 
7 
     | 
    
         
             
            require 'active_record'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'action_view'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'haml'
         
     | 
| 
       8 
10 
     | 
    
         
             
            require 'eventifier'
         
     | 
| 
       9 
11 
     | 
    
         | 
| 
       10 
12 
     | 
    
         
             
            Fabrication.configure do |config|
         
     | 
| 
         @@ -12,7 +14,8 @@ Fabrication.configure do |config| 
     | 
|
| 
       12 
14 
     | 
    
         
             
              config.path_prefix     = '.'
         
     | 
| 
       13 
15 
     | 
    
         
             
            end
         
     | 
| 
       14 
16 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            Combustion.initialize! :action_controller, : 
     | 
| 
      
 17 
     | 
    
         
            +
            Combustion.initialize! :action_controller, :action_view, :active_record,
         
     | 
| 
      
 18 
     | 
    
         
            +
              :action_mailer
         
     | 
| 
       16 
19 
     | 
    
         | 
| 
       17 
20 
     | 
    
         
             
            require 'rspec/rails'
         
     | 
| 
       18 
21 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: eventifier
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Nathan Sampimon
         
     | 
| 
         @@ -10,20 +10,20 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date: 2014- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2014-09-18 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: rails
         
     | 
| 
       17 
17 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
     | 
    
         
            -
                - - " 
     | 
| 
      
 19 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       20 
20 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       21 
21 
     | 
    
         
             
                    version: 4.0.3
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
24 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       25 
25 
     | 
    
         
             
                requirements:
         
     | 
| 
       26 
     | 
    
         
            -
                - - " 
     | 
| 
      
 26 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       27 
27 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       28 
28 
     | 
    
         
             
                    version: 4.0.3
         
     | 
| 
       29 
29 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
         @@ -138,6 +138,20 @@ dependencies: 
     | 
|
| 
       138 
138 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       139 
139 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       140 
140 
     | 
    
         
             
                    version: 0.1.2
         
     | 
| 
      
 141 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 142 
     | 
    
         
            +
              name: sliver
         
     | 
| 
      
 143 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 144 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 145 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 146 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 147 
     | 
    
         
            +
                    version: 0.0.3
         
     | 
| 
      
 148 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 149 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 150 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 151 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 152 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 153 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 154 
     | 
    
         
            +
                    version: 0.0.3
         
     | 
| 
       141 
155 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       142 
156 
     | 
    
         
             
              name: combustion
         
     | 
| 
       143 
157 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -213,9 +227,6 @@ files: 
     | 
|
| 
       213 
227 
     | 
    
         
             
            - app/assets/javascripts/eventifier/templates/dropdown.hamlc
         
     | 
| 
       214 
228 
     | 
    
         
             
            - app/assets/javascripts/eventifier/templates/settings.hamlc
         
     | 
| 
       215 
229 
     | 
    
         
             
            - app/assets/stylesheets/eventifier/notifications.scss
         
     | 
| 
       216 
     | 
    
         
            -
            - app/controllers/eventifier/application_controller.rb
         
     | 
| 
       217 
     | 
    
         
            -
            - app/controllers/eventifier/notifications_controller.rb
         
     | 
| 
       218 
     | 
    
         
            -
            - app/controllers/eventifier/preferences_controller.rb
         
     | 
| 
       219 
230 
     | 
    
         
             
            - app/helpers/eventifier/notification_helper.rb
         
     | 
| 
       220 
231 
     | 
    
         
             
            - app/helpers/eventifier/path_helper.rb
         
     | 
| 
       221 
232 
     | 
    
         
             
            - app/mailers/eventifier/mailer.rb
         
     | 
| 
         @@ -238,6 +249,13 @@ files: 
     | 
|
| 
       238 
249 
     | 
    
         
             
            - db/migrate/5_system_events.rb
         
     | 
| 
       239 
250 
     | 
    
         
             
            - eventifier.gemspec
         
     | 
| 
       240 
251 
     | 
    
         
             
            - lib/eventifier.rb
         
     | 
| 
      
 252 
     | 
    
         
            +
            - lib/eventifier/api.rb
         
     | 
| 
      
 253 
     | 
    
         
            +
            - lib/eventifier/api/base.rb
         
     | 
| 
      
 254 
     | 
    
         
            +
            - lib/eventifier/api/get_notifications.rb
         
     | 
| 
      
 255 
     | 
    
         
            +
            - lib/eventifier/api/get_preferences.rb
         
     | 
| 
      
 256 
     | 
    
         
            +
            - lib/eventifier/api/put_preferences.rb
         
     | 
| 
      
 257 
     | 
    
         
            +
            - lib/eventifier/api/touch_notifications.rb
         
     | 
| 
      
 258 
     | 
    
         
            +
            - lib/eventifier/api/view.rb
         
     | 
| 
       241 
259 
     | 
    
         
             
            - lib/eventifier/delivery.rb
         
     | 
| 
       242 
260 
     | 
    
         
             
            - lib/eventifier/engine.rb
         
     | 
| 
       243 
261 
     | 
    
         
             
            - lib/eventifier/event_builder.rb
         
     | 
| 
         @@ -258,9 +276,8 @@ files: 
     | 
|
| 
       258 
276 
     | 
    
         
             
            - lib/generators/eventifier/install/templates/event_tracking.rb
         
     | 
| 
       259 
277 
     | 
    
         
             
            - lib/generators/eventifier/install/templates/events.en.yml
         
     | 
| 
       260 
278 
     | 
    
         
             
            - lib/tasks/email.rake
         
     | 
| 
       261 
     | 
    
         
            -
            - spec/controllers/eventifier/notifications_controller_spec.rb
         
     | 
| 
       262 
     | 
    
         
            -
            - spec/controllers/eventifier/preferences_controller_spec.rb
         
     | 
| 
       263 
279 
     | 
    
         
             
            - spec/event_tracking_spec.rb
         
     | 
| 
      
 280 
     | 
    
         
            +
            - spec/eventifier/api_spec.rb
         
     | 
| 
       264 
281 
     | 
    
         
             
            - spec/eventifier/delivery_spec.rb
         
     | 
| 
       265 
282 
     | 
    
         
             
            - spec/eventifier/event_translator_spec.rb
         
     | 
| 
       266 
283 
     | 
    
         
             
            - spec/eventifier/notification_translator_spec.rb
         
     | 
| 
         @@ -321,9 +338,8 @@ signing_key: 
     | 
|
| 
       321 
338 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       322 
339 
     | 
    
         
             
            summary: Event tracking and notifying for active record models
         
     | 
| 
       323 
340 
     | 
    
         
             
            test_files:
         
     | 
| 
       324 
     | 
    
         
            -
            - spec/controllers/eventifier/notifications_controller_spec.rb
         
     | 
| 
       325 
     | 
    
         
            -
            - spec/controllers/eventifier/preferences_controller_spec.rb
         
     | 
| 
       326 
341 
     | 
    
         
             
            - spec/event_tracking_spec.rb
         
     | 
| 
      
 342 
     | 
    
         
            +
            - spec/eventifier/api_spec.rb
         
     | 
| 
       327 
343 
     | 
    
         
             
            - spec/eventifier/delivery_spec.rb
         
     | 
| 
       328 
344 
     | 
    
         
             
            - spec/eventifier/event_translator_spec.rb
         
     | 
| 
       329 
345 
     | 
    
         
             
            - spec/eventifier/notification_translator_spec.rb
         
     | 
| 
         @@ -1,36 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class Eventifier::NotificationsController < Eventifier::ApplicationController
         
     | 
| 
       2 
     | 
    
         
            -
              def index
         
     | 
| 
       3 
     | 
    
         
            -
                @notifications = notifications
         
     | 
| 
       4 
     | 
    
         
            -
              end
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              def touch
         
     | 
| 
       7 
     | 
    
         
            -
                current_user.update_attribute :notifications_last_read_at, Time.zone.now
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                render :json => {'status' => 'OK'}
         
     | 
| 
       10 
     | 
    
         
            -
              end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              private
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              def notifications
         
     | 
| 
       15 
     | 
    
         
            -
                scope = current_user.notifications.order("eventifier_notifications.created_at DESC").limit(per_page)
         
     | 
| 
       16 
     | 
    
         
            -
                scope = scope.where("eventifier_notifications.created_at < ?", after) if params[:after]
         
     | 
| 
       17 
     | 
    
         
            -
                scope = scope.where("eventifier_notifications.created_at > ?", since) if params[:since]
         
     | 
| 
       18 
     | 
    
         
            -
                scope = scope.where(
         
     | 
| 
       19 
     | 
    
         
            -
                  "eventifier_notifications.created_at > ?", current_user.notifications_last_read_at
         
     | 
| 
       20 
     | 
    
         
            -
                ) if params[:recent]
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                scope
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              def after
         
     | 
| 
       26 
     | 
    
         
            -
                Time.zone.at params[:after].to_i
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
              def per_page
         
     | 
| 
       30 
     | 
    
         
            -
                (params[:limit] || 5).to_i
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              def since
         
     | 
| 
       34 
     | 
    
         
            -
                Time.zone.at params[:since].to_i
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,17 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            class Eventifier::PreferencesController < Eventifier::ApplicationController
         
     | 
| 
       2 
     | 
    
         
            -
              def show
         
     | 
| 
       3 
     | 
    
         
            -
                render :json => preferences.to_hashes
         
     | 
| 
       4 
     | 
    
         
            -
              end
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              def update
         
     | 
| 
       7 
     | 
    
         
            -
                preferences.update params[:preferences] || {}
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                render :json => {'status' => 'OK'}
         
     | 
| 
       10 
     | 
    
         
            -
              end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              private
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              def preferences
         
     | 
| 
       15 
     | 
    
         
            -
                Eventifier::Preferences.new(current_user)
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,26 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'spec_helper'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            describe Eventifier::NotificationsController do
         
     | 
| 
       4 
     | 
    
         
            -
              routes     { Eventifier::Engine.routes }
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              describe '#touch' do
         
     | 
| 
       7 
     | 
    
         
            -
                let(:user) { double 'User', :update_attribute => true }
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                before :each do
         
     | 
| 
       10 
     | 
    
         
            -
                  sign_in user
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                it "updates the current user's notifications last read at" do
         
     | 
| 
       14 
     | 
    
         
            -
                  user.should_receive(:update_attribute).
         
     | 
| 
       15 
     | 
    
         
            -
                    with(:notifications_last_read_at, anything)
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  post :touch
         
     | 
| 
       18 
     | 
    
         
            -
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                it "responds with JSON OK status" do
         
     | 
| 
       21 
     | 
    
         
            -
                  post :touch
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  expect(response.body).to eq ({'status' => 'OK'}.to_json)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
              end
         
     | 
| 
       26 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,38 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'spec_helper'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            describe Eventifier::PreferencesController do
         
     | 
| 
       4 
     | 
    
         
            -
              routes     { Eventifier::Engine.routes }
         
     | 
| 
       5 
     | 
    
         
            -
              let(:user) { double 'User' }
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              before :each do
         
     | 
| 
       8 
     | 
    
         
            -
                sign_in user
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                Eventifier::Preferences.stub :new => preferences
         
     | 
| 
       11 
     | 
    
         
            -
              end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
              describe '#show' do
         
     | 
| 
       14 
     | 
    
         
            -
                let(:preferences) { double :to_hashes => [{'foo' => 'bar'}] }
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                it "returns the settings hashes" do
         
     | 
| 
       17 
     | 
    
         
            -
                  get :show
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                  expect(response.body).to eq ([{'foo' => 'bar'}].to_json)
         
     | 
| 
       20 
     | 
    
         
            -
                end
         
     | 
| 
       21 
     | 
    
         
            -
              end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
              describe '#update' do
         
     | 
| 
       24 
     | 
    
         
            -
                let(:preferences) { double update: true }
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                it 'saves the settings changes' do
         
     | 
| 
       27 
     | 
    
         
            -
                  preferences.should_receive(:update).with('foo' => '')
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                  put :update, :preferences => {'foo' => ''}
         
     | 
| 
       30 
     | 
    
         
            -
                end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                it "renders a JSON OK status" do
         
     | 
| 
       33 
     | 
    
         
            -
                  put :update, :preferences => {'foo' => ''}
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  expect(response.body).to eq ({'status' => 'OK'}.to_json)
         
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
            end
         
     |