notify_user 0.0.1 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/javascripts/notify_user/notification.js +7 -0
  3. data/app/assets/stylesheets/notify_user/notify_user.css +50 -0
  4. data/app/controllers/notify_user/base_notifications_controller.rb +144 -0
  5. data/app/controllers/notify_user/notifications_controller.rb +7 -32
  6. data/app/helpers/notify_user/application_helper.rb +9 -0
  7. data/app/mailers/notify_user/notification_mailer.rb +2 -0
  8. data/app/models/notify_user/apns.rb +37 -0
  9. data/app/models/notify_user/base_notification.rb +136 -32
  10. data/app/models/notify_user/unsubscribe.rb +55 -0
  11. data/app/models/notify_user/user_hash.rb +36 -0
  12. data/app/serializers/notify_user/notification_serializer.rb +2 -2
  13. data/app/views/notify_user/action_mailer/aggregate_notification.html.erb +2 -1
  14. data/app/views/notify_user/action_mailer/notification.html.erb +1 -1
  15. data/app/views/notify_user/base_notifications/index.html.erb +20 -0
  16. data/app/views/notify_user/base_notifications/unsubscribe.html.erb +19 -0
  17. data/config/routes.rb +8 -0
  18. data/lib/generators/notify_user/install/install_generator.rb +20 -3
  19. data/lib/generators/notify_user/install/templates/{migration.rb → create_notify_user_notifications.rb} +1 -1
  20. data/lib/generators/notify_user/install/templates/create_notify_user_unsubscribes.rb +10 -0
  21. data/lib/generators/notify_user/install/templates/create_notify_user_user_hashes.rb +12 -0
  22. data/lib/generators/notify_user/install/templates/initializer.rb +2 -0
  23. data/lib/generators/notify_user/install/templates/notifications_controller.rb +9 -0
  24. data/lib/generators/notify_user/json_update/USAGE +5 -0
  25. data/lib/generators/notify_user/json_update/json_update_generator.rb +36 -0
  26. data/lib/generators/notify_user/json_update/templates/add_json_column_to_notifications.rb +9 -0
  27. data/lib/generators/notify_user/json_update/templates/move_params_to_json.rb +8 -0
  28. data/lib/generators/notify_user/notification/notification_generator.rb +2 -0
  29. data/lib/generators/notify_user/notification/templates/email_layout_template.html.erb.erb +6 -0
  30. data/lib/generators/notify_user/notification/templates/notification.rb.erb +2 -1
  31. data/lib/notify_user.rb +4 -1
  32. data/lib/notify_user/channels/action_mailer/action_mailer_channel.rb +2 -1
  33. data/lib/notify_user/channels/apns/apns_channel.rb +17 -0
  34. data/lib/notify_user/engine.rb +2 -0
  35. data/lib/notify_user/railtie.rb +10 -0
  36. data/lib/notify_user/version.rb +1 -1
  37. data/lib/tasks/notify_user.rake +15 -0
  38. data/spec/controllers/notify_user/notifications_controller_spec.rb +89 -1
  39. data/spec/dummy/rails-4.0.2/Gemfile +2 -2
  40. data/spec/dummy/rails-4.0.2/app/controllers/notify_user/notifications_controller.rb +9 -0
  41. data/spec/dummy/rails-4.0.2/app/notifications/new_post_notification.rb +2 -1
  42. data/spec/dummy/rails-4.0.2/app/views/notify_user/layouts/action_mailer.html.erb +6 -0
  43. data/spec/dummy/rails-4.0.2/config/database.yml +42 -13
  44. data/spec/dummy/rails-4.0.2/config/database2.yml +57 -0
  45. data/spec/dummy/rails-4.0.2/config/initializers/notify_user.rb +2 -0
  46. data/spec/dummy/rails-4.0.2/config/initializers/secret_token.rb +1 -1
  47. data/spec/dummy/rails-4.0.2/db/migrate/{20140105070446_create_users.rb → 20140428015529_create_users.rb} +0 -0
  48. data/spec/dummy/rails-4.0.2/db/migrate/{20140105070448_create_notify_user_notifications.rb → 20140428015531189189694000_create_notify_user_notifications.rb} +1 -1
  49. data/spec/dummy/rails-4.0.2/db/migrate/20140428015531190190743000_create_notify_user_unsubscribes.rb +10 -0
  50. data/spec/dummy/rails-4.0.2/db/migrate/20140428015531191191953000_create_notify_user_user_hashes.rb +12 -0
  51. data/spec/dummy/rails-4.0.2/db/schema.rb +23 -2
  52. data/spec/dummy/rails-4.0.2/log/test.log +787 -1414
  53. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/13195a56ea8581e42f709ea01ea4604f +0 -0
  54. data/{app/assets/stylesheets/notify_user/application.css → spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705} +0 -0
  55. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/148f39f7dc2ea6cb194598111dbd4598 +0 -0
  56. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/1d6bc1877ba2bbb89f393e10e8303d39 +0 -0
  57. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  58. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/311d2b645a860b78f79ff156f12092ce +0 -0
  59. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  60. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/39651f0f2ac78423732234ebf092c632 +0 -0
  61. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/5c85b1b5ac27b699c5f800c4e7ec82fb +0 -0
  62. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/68752c7ddc300bee3e9823db8befc306 +0 -0
  63. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/6961013077b8573ed19d1e33abb8ebc5 +0 -0
  64. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/7a316b3629b980c6d3a28924cb5fbbd8 +0 -0
  65. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/8698d6fed0ef2f173a377160752b959f +0 -0
  66. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/8bab520aad78da438df1c428288cf229 +0 -0
  67. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  68. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  69. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  70. data/spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/fa138a16887e031c0ae1b4caccfb4c05 +0 -0
  71. data/spec/mailers/notify_user/notification_mailer_spec.rb +1 -0
  72. data/spec/models/notify_user/notification_spec.rb +122 -1
  73. data/spec/models/notify_user/unsubscribe_spec.rb +40 -0
  74. data/spec/models/notify_user/user_hash_spec.rb +35 -0
  75. data/spec/spec_helper.rb +5 -0
  76. data/spec/support/database.yml +21 -0
  77. data/spec/support/rails_template.rb +9 -0
  78. metadata +196 -65
  79. data/spec/dummy/rails-4.0.2/db/test.sqlite3 +0 -0
@@ -24,6 +24,7 @@ describe NotifyUser::NotificationMailer do
24
24
  end
25
25
 
26
26
  it "renders with a layout" do
27
+ NotifyUser::NotificationMailer.any_instance.stub(:notification).and_return(notification)
27
28
  mail.body.raw_source.should include "This is the default generated layout"
28
29
  end
29
30
 
@@ -5,6 +5,52 @@ module NotifyUser
5
5
 
6
6
  let(:user) { User.create({email: "user@example.com" })}
7
7
  let(:notification) { NewPostNotification.create({target: user}) }
8
+ Rails.application.routes.default_url_options[:host]= 'localhost:5000'
9
+
10
+ before :each do
11
+ BaseNotification.any_instance.stub(:mobile_message).and_return("New Notification")
12
+ BaseNotification.channel(:apns, {aggregate_per: false})
13
+ end
14
+
15
+ describe "params" do
16
+
17
+ it "doesn't fail if searching for param variable that doesn't exist" do
18
+ notification.params[:unknown].should eq nil
19
+ end
20
+
21
+ it "doesn't fail if searching for a param that doesn't exist if other params are present" do
22
+ notification.params = {name: "hello_world"}
23
+ notification.params[:unknown].should eq nil
24
+ end
25
+
26
+ it "can reference params using string when submitted as json" do
27
+ notification.params = {"listing_id" => 1}
28
+ notification.save
29
+
30
+ NewPostNotification.last.params["listing_id"].should eq 1
31
+ end
32
+
33
+ it "can reference params using symbol when submitted as json" do
34
+ notification.params = {"listing_id" => 1}
35
+ notification.save
36
+
37
+ NewPostNotification.last.params[:listing_id].should eq 1
38
+ end
39
+
40
+ it "can reference params using symbol when submitted as hash" do
41
+ notification.params = {:listing_id => 1}
42
+ notification.save
43
+
44
+ NewPostNotification.last.params[:listing_id].should eq 1
45
+ end
46
+
47
+ it "can reference params using string when subbmited as hash" do
48
+ notification.params = {:listing_id => 1}
49
+ notification.save
50
+
51
+ NewPostNotification.last.params["listing_id"].should eq 1
52
+ end
53
+ end
8
54
 
9
55
  describe "#notify" do
10
56
 
@@ -20,6 +66,7 @@ module NotifyUser
20
66
  .with(notification.class.aggregate_per)
21
67
  .and_call_original
22
68
  ActionMailerChannel.should_receive(:deliver)
69
+ Apns.should_receive(:push_notification)
23
70
  notification.notify
24
71
  end
25
72
 
@@ -47,12 +94,47 @@ module NotifyUser
47
94
 
48
95
  it "sends a singular email if no more notifications were queued since the original was delayed" do
49
96
  Sidekiq::Testing.inline!
50
-
97
+ Apns.should_receive(:push_notification)
51
98
  NotificationMailer.should_receive(:notification_email).with(notification, anything).and_call_original
52
99
  BaseNotification.notify_aggregated(notification.id)
53
100
  end
54
101
 
55
102
  end
103
+
104
+ describe ".delovery_notification_channel" do
105
+
106
+ it "doesn't send if unsubscribed from channel" do
107
+ unsubscribe = NotifyUser::Unsubscribe.create({target: user, type: "NewPostNotification"})
108
+ ActionMailerChannel.should_not_receive(:deliver)
109
+ BaseNotification.deliver_notification_channel(notification.id, "action_mailer")
110
+ end
111
+
112
+ it "does send if subscribed to channel" do
113
+ ActionMailerChannel.should_receive(:deliver)
114
+ BaseNotification.deliver_notification_channel(notification.id, "action_mailer")
115
+ end
116
+
117
+ end
118
+
119
+ describe " .notify_aggregated_channel" do
120
+
121
+ it "sends an aggregated email if more than one notification queued up" do
122
+ Sidekiq::Testing.inline!
123
+
124
+ NewPostNotification.create({target: user, type: 'NewPostNotification'})
125
+
126
+ BaseNotification.should_receive(:deliver_notifications_channel).and_call_original
127
+ BaseNotification.notify_aggregated_channel(notification.id, 'action_mailer')
128
+ end
129
+
130
+ it "sends a single email if more not pending notifications" do
131
+ Sidekiq::Testing.inline!
132
+
133
+ BaseNotification.should_receive(:deliver_notification_channel).and_call_original
134
+ BaseNotification.notify_aggregated_channel(notification.id, 'action_mailer')
135
+ end
136
+ end
137
+
56
138
  end
57
139
 
58
140
  end
@@ -60,12 +142,51 @@ module NotifyUser
60
142
  describe "#notify!" do
61
143
 
62
144
  it "sends immediately, ignoring aggregation" do
145
+ Apns.should_receive(:push_notification)
63
146
  BaseNotification.should_not_receive(:delay_for)
64
147
  ActionMailerChannel.should_receive(:deliver)
65
148
  notification.notify!
66
149
  end
67
150
 
151
+ it "doesn't send if unsubscribed from type" do
152
+ unsubscribe = NotifyUser::Unsubscribe.create({target: user, type: "NewPostNotification"})
153
+ ActionMailerChannel.should_not_receive(:deliver)
154
+ ApnsChannel.should_not_receive(:deliver)
155
+
156
+ notification.notify!
157
+
158
+ end
159
+
160
+ it "doesn't send if unsubscribed from mailer channel" do
161
+ unsubscribe = NotifyUser::Unsubscribe.create({target: user, type: "action_mailer"})
162
+ ActionMailerChannel.should_not_receive(:deliver)
163
+ ApnsChannel.should_receive(:deliver)
164
+ notification.notify!
165
+ end
166
+
68
167
  end
69
168
 
169
+ describe "generate hash" do
170
+ it "creates a new hash if an active hash doesn't already exist" do
171
+ user_hash = notification.generate_unsubscribe_hash
172
+ user_hash.should_not eq nil
173
+ end
174
+
175
+ it "uses the old hash if an active hash already exists" do
176
+ user_hash = notification.generate_unsubscribe_hash
177
+
178
+ another_hash = notification.generate_unsubscribe_hash
179
+ another_hash.token.should eq user_hash.token
180
+ end
181
+
182
+ it "creates a new hash if no active hash exists" do
183
+ user_hash = notification.generate_unsubscribe_hash
184
+ user_hash.deactivate
185
+
186
+ another_hash = notification.generate_unsubscribe_hash
187
+ another_hash.token.should_not eq user_hash.token
188
+
189
+ end
190
+ end
70
191
  end
71
192
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module NotifyUser
4
+ describe Unsubscribe do
5
+
6
+ let(:user) { User.create({email: "user@example.com" })}
7
+ let(:notification) { NotifyUser.send_notification('new_post_notification').to(user).with(name: "Mr. Blobby") }
8
+ let(:unsubscribe) { NotifyUser::Unsubscribe.create({target: user, type: "NewPostNotification"}) }
9
+
10
+
11
+ describe "unsubscribed" do
12
+ before :each do
13
+ unsubscribe.save
14
+ end
15
+
16
+ it "doesn't create notification object if unsubscribed" do
17
+ notification.save
18
+ notification.errors[:target].first.should eq " has unsubscribed from this type"
19
+ end
20
+
21
+ it "doesnt create object if notification type isn't unsubscribable" do
22
+ unsubscribe = NotifyUser::Unsubscribe.create({target: user, type: "UnsubscribableNotification"})
23
+ NotifyUser::Unsubscribe.last.type.should_not eq "UnsubscribableNotification"
24
+ end
25
+
26
+ it "toggles the status of a subscription" do
27
+ unsubscribe = NotifyUser::Unsubscribe.create({target: user, type: "NewPostNotification"})
28
+ NotifyUser::Unsubscribe.toggle_status(user, "NewPostNotification")
29
+ NotifyUser::Unsubscribe.has_unsubscribed_from(user, 'NewPostNotification').should eq []
30
+ end
31
+ end
32
+
33
+ describe "subscribed" do
34
+ it "creates notification if subscribed" do
35
+ notification.save
36
+ notification.errors.count.should eq 0
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ module NotifyUser
4
+ describe UserHash do
5
+
6
+ let(:user) { User.create({email: "user@example.com" })}
7
+ let(:user_hash) { NotifyUser::UserHash.create({target: user, type: "NewPostNotification"})}
8
+
9
+ describe "check hash" do
10
+ before :each do
11
+ user_hash.save
12
+ end
13
+
14
+ it "returns true if hash hasn't be used before" do
15
+ NotifyUser::UserHash.confirm_hash(user_hash.token,"NewPostNotification").should eq true
16
+ end
17
+
18
+ it "returns false if hash has been used before" do
19
+ user_hash.deactivate
20
+ NotifyUser::UserHash.confirm_hash(user_hash.token,"NewPostNotification").should eq false
21
+ end
22
+
23
+ it "deactivates hash setting active to false" do
24
+ user_hash.deactivate
25
+ user_hash.active.should eq false
26
+ end
27
+
28
+ it "generates a 44 character hash on create" do
29
+ user_hash.token.length.should eq 44
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,8 @@ Bundler.setup
11
11
  ENV['RAILS_ENV'] = 'test'
12
12
  ENV['RAILS_ROOT'] = File.expand_path("../dummy/rails-#{ENV['RAILS_VERSION']}", __FILE__)
13
13
 
14
+
15
+
14
16
  # Create the test app if it doesn't exists
15
17
  unless File.exists?(ENV['RAILS_ROOT'])
16
18
  system 'rake setup'
@@ -23,8 +25,11 @@ require File.expand_path("#{ENV['RAILS_ROOT']}/config/environment.rb", __FILE__
23
25
  puts "Testing with Rails #{Rails::VERSION::STRING} and Ruby #{RUBY_VERSION}"
24
26
 
25
27
  require 'rspec/rails'
28
+ require 'capybara/rails'
26
29
  require 'factory_girl_rails'
27
30
  require 'sidekiq/testing'
31
+ require "awesome_print"
32
+
28
33
  Sidekiq::Testing.inline!
29
34
 
30
35
  RSpec.configure do |config|
@@ -0,0 +1,21 @@
1
+ development:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ database: notify_user_development
5
+ pool: 5
6
+ timeout: 5000
7
+
8
+ test:
9
+ adapter: postgresql
10
+ encoding: unicode
11
+ database: notify_user_test
12
+ pool: 5
13
+ timeout: 5000
14
+
15
+
16
+ production:
17
+ adapter: postgresql
18
+ encoding: unicode
19
+ database: notify_user_production
20
+ pool: 5
21
+ timeout: 5000
@@ -1,8 +1,17 @@
1
+ #removes the username and password fields from database.yml
2
+ system("cat #{ENV['RAILS_ROOT']}/config/database.yml | grep -v 'username' > #{ENV['RAILS_ROOT']}/config/database2.yml ")
3
+ system("cat #{ENV['RAILS_ROOT']}/config/database2.yml | grep -v 'password' > #{ENV['RAILS_ROOT']}/config/database.yml ")
4
+
5
+ rake "db:drop:all"
6
+ rake "db:create:all"
7
+
1
8
  generate :model, 'user email:string'
2
9
 
3
10
  generate "notify_user:install"
4
11
  generate "notify_user:notification NewPostNotification"
5
12
 
13
+ gem_dir = File.expand_path('..',File.dirname(__FILE__))
14
+
6
15
  # Finalise
7
16
  rake "db:migrate"
8
17
  rake "db:test:prepare"
metadata CHANGED
@@ -1,115 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notify_user
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tom Spacek
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-01-15 00:00:00.000000000 Z
11
+ date: 2014-04-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
- requirement: &70361717136460 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.2'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70361717136460
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.2'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: state_machine
27
- requirement: &70361717135940 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70361717135940
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: sidekiq
38
- requirement: &70361717135380 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - ">="
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :runtime
45
49
  prerelease: false
46
- version_requirements: *70361717135380
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: kaminari
49
- requirement: &70361717134840 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - ">="
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  type: :runtime
56
63
  prerelease: false
57
- version_requirements: *70361717134840
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: active_model_serializers
60
- requirement: &70361717134340 !ruby/object:Gem::Requirement
61
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
62
72
  requirements:
63
- - - ! '>='
73
+ - - ">="
64
74
  - !ruby/object:Gem::Version
65
75
  version: '0'
66
76
  type: :runtime
67
77
  prerelease: false
68
- version_requirements: *70361717134340
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: sqlite3
71
- requirement: &70361717133820 !ruby/object:Gem::Requirement
72
- none: false
84
+ name: urbanairship
85
+ requirement: !ruby/object:Gem::Requirement
73
86
  requirements:
74
- - - ! '>='
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pg
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
75
102
  - !ruby/object:Gem::Version
76
103
  version: '0'
77
104
  type: :development
78
105
  prerelease: false
79
- version_requirements: *70361717133820
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
80
111
  - !ruby/object:Gem::Dependency
81
112
  name: rspec-rails
82
- requirement: &70361717133300 !ruby/object:Gem::Requirement
83
- none: false
113
+ requirement: !ruby/object:Gem::Requirement
84
114
  requirements:
85
- - - ! '>='
115
+ - - ">="
86
116
  - !ruby/object:Gem::Version
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70361717133300
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
91
125
  - !ruby/object:Gem::Dependency
92
126
  name: rspec-sidekiq
93
- requirement: &70361717132760 !ruby/object:Gem::Requirement
94
- none: false
127
+ requirement: !ruby/object:Gem::Requirement
95
128
  requirements:
96
- - - ! '>='
129
+ - - ">="
97
130
  - !ruby/object:Gem::Version
98
131
  version: '0'
99
132
  type: :development
100
133
  prerelease: false
101
- version_requirements: *70361717132760
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
102
139
  - !ruby/object:Gem::Dependency
103
140
  name: factory_girl_rails
104
- requirement: &70361717132260 !ruby/object:Gem::Requirement
105
- none: false
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: capybara
155
+ requirement: !ruby/object:Gem::Requirement
106
156
  requirements:
107
- - - ! '>='
157
+ - - ">="
108
158
  - !ruby/object:Gem::Version
109
159
  version: '0'
110
160
  type: :development
111
161
  prerelease: false
112
- version_requirements: *70361717132260
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: awesome_print
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
113
181
  description: Drop-in solution for user notifications. Handles notifying by email,
114
182
  SMS and APNS, plus per-user notification frequency settings and views for checking
115
183
  new notifications.
@@ -119,38 +187,59 @@ executables: []
119
187
  extensions: []
120
188
  extra_rdoc_files: []
121
189
  files:
190
+ - MIT-LICENSE
191
+ - README.rdoc
192
+ - Rakefile
122
193
  - app/assets/javascripts/notify_user/application.js
123
- - app/assets/stylesheets/notify_user/application.css
194
+ - app/assets/javascripts/notify_user/notification.js
195
+ - app/assets/stylesheets/notify_user/notify_user.css
196
+ - app/controllers/notify_user/base_notifications_controller.rb
124
197
  - app/controllers/notify_user/notifications_controller.rb
125
198
  - app/helpers/notify_user/application_helper.rb
126
199
  - app/mailers/notify_user/notification_mailer.rb
200
+ - app/models/notify_user/apns.rb
127
201
  - app/models/notify_user/base_notification.rb
202
+ - app/models/notify_user/unsubscribe.rb
203
+ - app/models/notify_user/user_hash.rb
128
204
  - app/serializers/notify_user/notification_serializer.rb
129
205
  - app/views/layouts/notify_user/application.html.erb
130
206
  - app/views/notify_user/action_mailer/aggregate_notification.html.erb
131
207
  - app/views/notify_user/action_mailer/notification.html.erb
208
+ - app/views/notify_user/base_notifications/index.html.erb
209
+ - app/views/notify_user/base_notifications/unsubscribe.html.erb
132
210
  - config/routes.rb
211
+ - lib/generators/notify_user/install/USAGE
133
212
  - lib/generators/notify_user/install/install_generator.rb
213
+ - lib/generators/notify_user/install/templates/create_notify_user_notifications.rb
214
+ - lib/generators/notify_user/install/templates/create_notify_user_unsubscribes.rb
215
+ - lib/generators/notify_user/install/templates/create_notify_user_user_hashes.rb
134
216
  - lib/generators/notify_user/install/templates/initializer.rb
135
- - lib/generators/notify_user/install/templates/migration.rb
136
- - lib/generators/notify_user/install/USAGE
217
+ - lib/generators/notify_user/install/templates/notifications_controller.rb
218
+ - lib/generators/notify_user/json_update/USAGE
219
+ - lib/generators/notify_user/json_update/json_update_generator.rb
220
+ - lib/generators/notify_user/json_update/templates/add_json_column_to_notifications.rb
221
+ - lib/generators/notify_user/json_update/templates/move_params_to_json.rb
222
+ - lib/generators/notify_user/notification/USAGE
137
223
  - lib/generators/notify_user/notification/notification_generator.rb
138
224
  - lib/generators/notify_user/notification/templates/email_layout_template.html.erb.erb
139
225
  - lib/generators/notify_user/notification/templates/email_template.html.erb.erb
140
226
  - lib/generators/notify_user/notification/templates/mobile_sdk_template.html.erb.erb
141
227
  - lib/generators/notify_user/notification/templates/notification.rb.erb
142
- - lib/generators/notify_user/notification/USAGE
228
+ - lib/notify_user.rb
143
229
  - lib/notify_user/channels/action_mailer/action_mailer_channel.rb
230
+ - lib/notify_user/channels/apns/apns_channel.rb
144
231
  - lib/notify_user/engine.rb
232
+ - lib/notify_user/railtie.rb
145
233
  - lib/notify_user/version.rb
146
- - lib/notify_user.rb
147
- - MIT-LICENSE
148
- - Rakefile
149
- - README.rdoc
234
+ - lib/tasks/notify_user.rake
150
235
  - spec/controllers/notify_user/notifications_controller_spec.rb
236
+ - spec/dummy/rails-4.0.2/Gemfile
237
+ - spec/dummy/rails-4.0.2/README.rdoc
238
+ - spec/dummy/rails-4.0.2/Rakefile
151
239
  - spec/dummy/rails-4.0.2/app/assets/javascripts/application.js
152
240
  - spec/dummy/rails-4.0.2/app/assets/stylesheets/application.css
153
241
  - spec/dummy/rails-4.0.2/app/controllers/application_controller.rb
242
+ - spec/dummy/rails-4.0.2/app/controllers/notify_user/notifications_controller.rb
154
243
  - spec/dummy/rails-4.0.2/app/helpers/application_helper.rb
155
244
  - spec/dummy/rails-4.0.2/app/models/user.rb
156
245
  - spec/dummy/rails-4.0.2/app/notifications/new_post_notification.rb
@@ -161,9 +250,11 @@ files:
161
250
  - spec/dummy/rails-4.0.2/bin/bundle
162
251
  - spec/dummy/rails-4.0.2/bin/rails
163
252
  - spec/dummy/rails-4.0.2/bin/rake
253
+ - spec/dummy/rails-4.0.2/config.ru
164
254
  - spec/dummy/rails-4.0.2/config/application.rb
165
255
  - spec/dummy/rails-4.0.2/config/boot.rb
166
256
  - spec/dummy/rails-4.0.2/config/database.yml
257
+ - spec/dummy/rails-4.0.2/config/database2.yml
167
258
  - spec/dummy/rails-4.0.2/config/environment.rb
168
259
  - spec/dummy/rails-4.0.2/config/environments/development.rb
169
260
  - spec/dummy/rails-4.0.2/config/environments/production.rb
@@ -178,61 +269,79 @@ files:
178
269
  - spec/dummy/rails-4.0.2/config/initializers/wrap_parameters.rb
179
270
  - spec/dummy/rails-4.0.2/config/locales/en.yml
180
271
  - spec/dummy/rails-4.0.2/config/routes.rb
181
- - spec/dummy/rails-4.0.2/config.ru
182
- - spec/dummy/rails-4.0.2/db/migrate/20140105070446_create_users.rb
183
- - spec/dummy/rails-4.0.2/db/migrate/20140105070448_create_notify_user_notifications.rb
272
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015529_create_users.rb
273
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015531189189694000_create_notify_user_notifications.rb
274
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015531190190743000_create_notify_user_unsubscribes.rb
275
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015531191191953000_create_notify_user_user_hashes.rb
184
276
  - spec/dummy/rails-4.0.2/db/schema.rb
185
277
  - spec/dummy/rails-4.0.2/db/seeds.rb
186
- - spec/dummy/rails-4.0.2/db/test.sqlite3
187
- - spec/dummy/rails-4.0.2/Gemfile
188
278
  - spec/dummy/rails-4.0.2/log/test.log
189
279
  - spec/dummy/rails-4.0.2/public/404.html
190
280
  - spec/dummy/rails-4.0.2/public/422.html
191
281
  - spec/dummy/rails-4.0.2/public/500.html
192
282
  - spec/dummy/rails-4.0.2/public/favicon.ico
193
283
  - spec/dummy/rails-4.0.2/public/robots.txt
194
- - spec/dummy/rails-4.0.2/Rakefile
195
- - spec/dummy/rails-4.0.2/README.rdoc
196
284
  - spec/dummy/rails-4.0.2/test/fixtures/users.yml
197
285
  - spec/dummy/rails-4.0.2/test/models/user_test.rb
198
286
  - spec/dummy/rails-4.0.2/test/test_helper.rb
287
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/13195a56ea8581e42f709ea01ea4604f
288
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705
289
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/148f39f7dc2ea6cb194598111dbd4598
290
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/1d6bc1877ba2bbb89f393e10e8303d39
291
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af
292
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/311d2b645a860b78f79ff156f12092ce
293
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953
294
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/39651f0f2ac78423732234ebf092c632
295
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/5c85b1b5ac27b699c5f800c4e7ec82fb
296
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/68752c7ddc300bee3e9823db8befc306
297
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/6961013077b8573ed19d1e33abb8ebc5
298
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/7a316b3629b980c6d3a28924cb5fbbd8
299
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/8698d6fed0ef2f173a377160752b959f
300
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/8bab520aad78da438df1c428288cf229
301
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994
302
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6
303
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655
304
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/fa138a16887e031c0ae1b4caccfb4c05
199
305
  - spec/factories/notify_user_notifications.rb
200
306
  - spec/fixtures/notify_user/notification_mailer/notification_email
201
307
  - spec/mailers/notify_user/notification_mailer_spec.rb
202
308
  - spec/models/notify_user/notification_spec.rb
309
+ - spec/models/notify_user/unsubscribe_spec.rb
310
+ - spec/models/notify_user/user_hash_spec.rb
203
311
  - spec/serializers/notify_user/notification_serializer_spec.rb
204
312
  - spec/setup_spec.rb
205
313
  - spec/spec_helper.rb
314
+ - spec/support/database.yml
206
315
  - spec/support/rails_template.rb
207
316
  homepage: http://www.papercloud.com.au
208
317
  licenses: []
318
+ metadata: {}
209
319
  post_install_message:
210
320
  rdoc_options: []
211
321
  require_paths:
212
322
  - lib
213
323
  required_ruby_version: !ruby/object:Gem::Requirement
214
- none: false
215
324
  requirements:
216
- - - ! '>='
325
+ - - ">="
217
326
  - !ruby/object:Gem::Version
218
327
  version: '0'
219
328
  required_rubygems_version: !ruby/object:Gem::Requirement
220
- none: false
221
329
  requirements:
222
- - - ! '>='
330
+ - - ">="
223
331
  - !ruby/object:Gem::Version
224
332
  version: '0'
225
333
  requirements: []
226
334
  rubyforge_project:
227
- rubygems_version: 1.8.15
335
+ rubygems_version: 2.2.2
228
336
  signing_key:
229
- specification_version: 3
337
+ specification_version: 4
230
338
  summary: A Rails engine for user notifications.
231
339
  test_files:
232
340
  - spec/controllers/notify_user/notifications_controller_spec.rb
233
341
  - spec/dummy/rails-4.0.2/app/assets/javascripts/application.js
234
342
  - spec/dummy/rails-4.0.2/app/assets/stylesheets/application.css
235
343
  - spec/dummy/rails-4.0.2/app/controllers/application_controller.rb
344
+ - spec/dummy/rails-4.0.2/app/controllers/notify_user/notifications_controller.rb
236
345
  - spec/dummy/rails-4.0.2/app/helpers/application_helper.rb
237
346
  - spec/dummy/rails-4.0.2/app/models/user.rb
238
347
  - spec/dummy/rails-4.0.2/app/notifications/new_post_notification.rb
@@ -246,6 +355,7 @@ test_files:
246
355
  - spec/dummy/rails-4.0.2/config/application.rb
247
356
  - spec/dummy/rails-4.0.2/config/boot.rb
248
357
  - spec/dummy/rails-4.0.2/config/database.yml
358
+ - spec/dummy/rails-4.0.2/config/database2.yml
249
359
  - spec/dummy/rails-4.0.2/config/environment.rb
250
360
  - spec/dummy/rails-4.0.2/config/environments/development.rb
251
361
  - spec/dummy/rails-4.0.2/config/environments/production.rb
@@ -261,11 +371,12 @@ test_files:
261
371
  - spec/dummy/rails-4.0.2/config/locales/en.yml
262
372
  - spec/dummy/rails-4.0.2/config/routes.rb
263
373
  - spec/dummy/rails-4.0.2/config.ru
264
- - spec/dummy/rails-4.0.2/db/migrate/20140105070446_create_users.rb
265
- - spec/dummy/rails-4.0.2/db/migrate/20140105070448_create_notify_user_notifications.rb
374
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015529_create_users.rb
375
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015531189189694000_create_notify_user_notifications.rb
376
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015531190190743000_create_notify_user_unsubscribes.rb
377
+ - spec/dummy/rails-4.0.2/db/migrate/20140428015531191191953000_create_notify_user_user_hashes.rb
266
378
  - spec/dummy/rails-4.0.2/db/schema.rb
267
379
  - spec/dummy/rails-4.0.2/db/seeds.rb
268
- - spec/dummy/rails-4.0.2/db/test.sqlite3
269
380
  - spec/dummy/rails-4.0.2/Gemfile
270
381
  - spec/dummy/rails-4.0.2/log/test.log
271
382
  - spec/dummy/rails-4.0.2/public/404.html
@@ -278,12 +389,32 @@ test_files:
278
389
  - spec/dummy/rails-4.0.2/test/fixtures/users.yml
279
390
  - spec/dummy/rails-4.0.2/test/models/user_test.rb
280
391
  - spec/dummy/rails-4.0.2/test/test_helper.rb
392
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/13195a56ea8581e42f709ea01ea4604f
393
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705
394
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/148f39f7dc2ea6cb194598111dbd4598
395
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/1d6bc1877ba2bbb89f393e10e8303d39
396
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af
397
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/311d2b645a860b78f79ff156f12092ce
398
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953
399
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/39651f0f2ac78423732234ebf092c632
400
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/5c85b1b5ac27b699c5f800c4e7ec82fb
401
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/68752c7ddc300bee3e9823db8befc306
402
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/6961013077b8573ed19d1e33abb8ebc5
403
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/7a316b3629b980c6d3a28924cb5fbbd8
404
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/8698d6fed0ef2f173a377160752b959f
405
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/8bab520aad78da438df1c428288cf229
406
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994
407
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6
408
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655
409
+ - spec/dummy/rails-4.0.2/tmp/cache/assets/test/sprockets/fa138a16887e031c0ae1b4caccfb4c05
281
410
  - spec/factories/notify_user_notifications.rb
282
411
  - spec/fixtures/notify_user/notification_mailer/notification_email
283
412
  - spec/mailers/notify_user/notification_mailer_spec.rb
284
413
  - spec/models/notify_user/notification_spec.rb
414
+ - spec/models/notify_user/unsubscribe_spec.rb
415
+ - spec/models/notify_user/user_hash_spec.rb
285
416
  - spec/serializers/notify_user/notification_serializer_spec.rb
286
417
  - spec/setup_spec.rb
287
418
  - spec/spec_helper.rb
419
+ - spec/support/database.yml
288
420
  - spec/support/rails_template.rb
289
- has_rdoc: