event_publisher 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +18 -0
  5. data/app/assets/javascripts/event_publisher/application.js +15 -0
  6. data/app/assets/stylesheets/event_publisher/application.css +13 -0
  7. data/app/controllers/event_publisher/application_controller.rb +4 -0
  8. data/app/helpers/event_publisher/application_helper.rb +4 -0
  9. data/app/models/event_publisher/anonymous_user.rb +9 -0
  10. data/app/models/event_publisher/event.rb +9 -0
  11. data/app/models/event_publisher/event_tracking.rb +10 -0
  12. data/app/views/layouts/event_publisher/application.html.erb +14 -0
  13. data/config/routes.rb +2 -0
  14. data/db/migrate/20140810140137_create_event_publisher_events.rb +9 -0
  15. data/db/migrate/20140810141012_create_event_publisher_event_trackings.rb +13 -0
  16. data/db/migrate/20140810144524_create_event_publisher_anonymous_users.rb +8 -0
  17. data/lib/event_publisher/controllers/trackable.rb +46 -0
  18. data/lib/event_publisher/engine.rb +12 -0
  19. data/lib/event_publisher/models/trackable.rb +19 -0
  20. data/lib/event_publisher/version.rb +3 -0
  21. data/lib/event_publisher.rb +6 -0
  22. data/lib/tasks/event_publisher_tasks.rake +4 -0
  23. data/spec/dummy/README.rdoc +261 -0
  24. data/spec/dummy/Rakefile +7 -0
  25. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  26. data/spec/dummy/app/assets/javascripts/articles.js +2 -0
  27. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  28. data/spec/dummy/app/assets/stylesheets/articles.css +4 -0
  29. data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
  30. data/spec/dummy/app/controllers/application_controller.rb +8 -0
  31. data/spec/dummy/app/controllers/articles_controller.rb +32 -0
  32. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  33. data/spec/dummy/app/helpers/articles_helper.rb +2 -0
  34. data/spec/dummy/app/models/article.rb +3 -0
  35. data/spec/dummy/app/models/user.rb +11 -0
  36. data/spec/dummy/app/views/articles/_form.html.erb +29 -0
  37. data/spec/dummy/app/views/articles/edit.html.erb +6 -0
  38. data/spec/dummy/app/views/articles/index.html.erb +27 -0
  39. data/spec/dummy/app/views/articles/new.html.erb +5 -0
  40. data/spec/dummy/app/views/articles/show.html.erb +20 -0
  41. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  42. data/spec/dummy/config/application.rb +65 -0
  43. data/spec/dummy/config/boot.rb +10 -0
  44. data/spec/dummy/config/database.yml +26 -0
  45. data/spec/dummy/config/environment.rb +5 -0
  46. data/spec/dummy/config/environments/development.rb +37 -0
  47. data/spec/dummy/config/environments/production.rb +67 -0
  48. data/spec/dummy/config/environments/test.rb +37 -0
  49. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  50. data/spec/dummy/config/initializers/devise.rb +256 -0
  51. data/spec/dummy/config/initializers/inflections.rb +15 -0
  52. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  53. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  54. data/spec/dummy/config/initializers/session_store.rb +8 -0
  55. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  56. data/spec/dummy/config/locales/devise.en.yml +59 -0
  57. data/spec/dummy/config/locales/en.yml +5 -0
  58. data/spec/dummy/config/routes.rb +7 -0
  59. data/spec/dummy/config.ru +4 -0
  60. data/spec/dummy/db/migrate/20140810145638_devise_create_users.rb +42 -0
  61. data/spec/dummy/db/migrate/20140810145842_create_articles.rb +11 -0
  62. data/spec/dummy/db/schema.rb +63 -0
  63. data/spec/dummy/log/development.log +88 -0
  64. data/spec/dummy/log/test.log +20386 -0
  65. data/spec/dummy/public/404.html +26 -0
  66. data/spec/dummy/public/422.html +26 -0
  67. data/spec/dummy/public/500.html +25 -0
  68. data/spec/dummy/public/favicon.ico +0 -0
  69. data/spec/dummy/script/rails +6 -0
  70. data/spec/dummy/spec/controllers/articles_controller_spec.rb +162 -0
  71. data/spec/dummy/spec/factories/articles.rb +9 -0
  72. data/spec/dummy/spec/factories/users.rb +6 -0
  73. data/spec/factories/article.rb +7 -0
  74. data/spec/factories/event_publisher_anonymous_users.rb +6 -0
  75. data/spec/factories/event_publisher_event_trackings.rb +11 -0
  76. data/spec/factories/event_publisher_events.rb +7 -0
  77. data/spec/factories/user.rb +9 -0
  78. data/spec/models/event_publisher/anonymous_user_spec.rb +30 -0
  79. data/spec/models/event_publisher/event_spec.rb +14 -0
  80. data/spec/models/event_publisher/event_tracking_spec.rb +14 -0
  81. data/spec/rails_helper.rb +39 -0
  82. data/spec/spec_helper.rb +19 -0
  83. metadata +240 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,162 @@
1
+ require 'rails_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+
21
+ RSpec.describe ArticlesController, :type => :controller do
22
+ shared_examples "setting event publisher cookies" do |action, params|
23
+ it "should save the cookies of the current logged in user" do
24
+ get action, params
25
+ expect(cookies.signed[:event_publisher_user_id]).to_not be_nil
26
+ expect(cookies.signed[:event_publisher_user_type]).to_not be_nil
27
+ end
28
+ end
29
+
30
+ context "signed in user" do
31
+ include Devise::TestHelpers
32
+ let(:user) { create(:user) }
33
+
34
+ before(:each) do
35
+ @request.env["devise.mapping"] = :user
36
+ sign_in user
37
+ end
38
+
39
+ describe "non authenticated action" do
40
+ it "tracks the user event for listing articles" do
41
+ expect{
42
+ get :index, {}
43
+ }.to change{ EventPublisher::EventTracking.count }.by(1)
44
+ end
45
+
46
+ it_behaves_like "setting event publisher cookies", :index
47
+ end
48
+
49
+ describe "authenticated action" do
50
+ it "tracks the user event for showing an article" do
51
+ article = create(:article)
52
+ expect{
53
+ get :show, { id: article.to_param }
54
+ }.to change{ EventPublisher::EventTracking.count }.by(1)
55
+ end
56
+
57
+ it_behaves_like "setting event publisher cookies", :show, { id: FactoryGirl.create(:article).to_param }
58
+ end
59
+
60
+ describe "tracking events after logging out" do
61
+ it "should track user's events after logging out" do
62
+ expect{
63
+ get :index, {}
64
+ }.to change{ user.event_trackings.count }.by(1)
65
+
66
+ # Signing out the logged in user
67
+ sign_out(user)
68
+
69
+ expect{
70
+ get :index, {}
71
+ }.to change{ user.event_trackings.count }.by(1)
72
+ end
73
+
74
+ it "should not track events if cookies are deleted" do
75
+ expect{
76
+ get :index, {}
77
+ }.to change{ user.event_trackings.count }.by(1)
78
+
79
+ sign_out(user)
80
+
81
+ # Removing the cookies
82
+ cookies.delete(:event_publisher_user_id)
83
+ cookies.delete(:event_publisher_user_type)
84
+
85
+ expect{
86
+ get :index, {}
87
+ }.to change{ EventPublisher::EventTracking.count }.by(1)
88
+
89
+ expect{
90
+ get :index, {}
91
+ }.to change{ user.event_trackings.count }.by(0)
92
+ end
93
+ end
94
+ end
95
+
96
+ context "non logged in user" do
97
+ describe "non authenticated action" do
98
+ it "should track the events for non logged in user without cookies saved before" do
99
+ expect{
100
+ get :index, {}
101
+ }.to change{ EventPublisher::EventTracking.count }.by(1)
102
+ end
103
+
104
+ it "should track the events for non logged in user with cookies saved before" do
105
+ anonymous_user = create(:event_publisher_anonymous_user)
106
+ cookies.signed[:event_publisher_user_id] = anonymous_user.id
107
+
108
+ # There should be only 1 anonymous user saved in the database
109
+ expect(EventPublisher::AnonymousUser.count).to eq(1)
110
+ expect(anonymous_user.event_trackings.count).to eq(0)
111
+
112
+ expect{
113
+ get :index, {}
114
+ }.to change{ EventPublisher::EventTracking.count }.by(1)
115
+
116
+ # No new anonymous user will be created
117
+ expect(EventPublisher::AnonymousUser.count).to eq(1)
118
+ expect(anonymous_user.event_trackings.count).to eq(1)
119
+ end
120
+
121
+ it "should log events for multiple non logged in users" do
122
+ expect{
123
+ get :index, {}
124
+ }.to change{ EventPublisher::AnonymousUser.count }.by(1)
125
+
126
+ cookies.delete(:event_publisher_user_id)
127
+ cookies.delete(:event_publisher_user_type)
128
+
129
+ expect{
130
+ get :index, {}
131
+ }.to change{ EventPublisher::AnonymousUser.count }.by(1)
132
+ end
133
+
134
+ it_behaves_like "setting event publisher cookies", :index
135
+ end
136
+ end
137
+
138
+ context "first time to login user" do
139
+ it "should save all the events user did before logging in" do
140
+ number_of_events = 5
141
+ anonymous_user = create(:event_publisher_anonymous_user)
142
+ events = create_list(
143
+ :event_publisher_event_tracking,
144
+ number_of_events,
145
+ trackable: anonymous_user
146
+ )
147
+
148
+ cookies.signed[:event_publisher_user_id] = anonymous_user.id
149
+ cookies.signed[:event_publisher_user_type] = anonymous_user.class.name
150
+
151
+ expect(anonymous_user.event_trackings.count).to eq(number_of_events)
152
+
153
+ # Logging in
154
+ user = create(:user)
155
+
156
+ controller.after_sign_in_path_for(user)
157
+
158
+ expect(user.event_trackings.count).to eq(number_of_events)
159
+ expect(anonymous_user.reload.event_trackings.count).to eq(0)
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,9 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :article do
5
+ name "MyString"
6
+ content "MyText"
7
+ author_id 1
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :user do
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :article, :class => 'Article' do
5
+ name "Article 1"
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :event_publisher_anonymous_user, class: "EventPublisher::AnonymousUser" do
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :event_publisher_event_tracking, :class => 'EventPublisher::EventTracking' do
5
+ trackable_id 1
6
+ trackable_type "User"
7
+ event_id 1
8
+ ip "127.0.0.1"
9
+ operation_system "Mac OSX"
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :event_publisher_event, :class => 'EventPublisher::Event' do
5
+ name "User logged in"
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ # Read about factories at https://github.com/thoughtbot/factory_girl
2
+
3
+ FactoryGirl.define do
4
+ factory :user, :class => 'User' do
5
+ email "user@example.com"
6
+ password "12345678"
7
+ password_confirmation "12345678"
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ require 'rails_helper'
2
+
3
+ module EventPublisher
4
+ RSpec.describe AnonymousUser, :type => :model do
5
+ context "track events of anonymous user" do
6
+ it "should track the events of an anonymous user" do
7
+ anonymous_user = create(:event_publisher_anonymous_user)
8
+
9
+ login_event = create(:event_publisher_event, name: "Login")
10
+ logout_event = create(:event_publisher_event, name: "Logout")
11
+
12
+ login_event_tracking = create(
13
+ :event_publisher_event_tracking,
14
+ event: logout_event,
15
+ trackable: anonymous_user
16
+ )
17
+
18
+ logout_event_tracking = create(
19
+ :event_publisher_event_tracking,
20
+ event: logout_event,
21
+ trackable: anonymous_user
22
+ )
23
+
24
+ expect(anonymous_user.event_trackings.pluck(:id)).to eq(
25
+ [login_event_tracking.id, logout_event_tracking.id]
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ require 'rails_helper'
2
+
3
+ module EventPublisher
4
+ RSpec.describe Event, type: :model do
5
+ context "Listing tracked events of a specific event" do
6
+ it "should list all the tracked event of a specific event" do
7
+ login_event = create(:event_publisher_event)
8
+ tracked_events = create_list(:event_publisher_event_tracking, 3, event: login_event)
9
+
10
+ expect(login_event.event_tracking_ids).to eq(tracked_events.map(&:id))
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ require 'rails_helper'
2
+
3
+ module EventPublisher
4
+ RSpec.describe EventTracking, type: :model do
5
+ context "saving an event in the database" do
6
+ it "should save the loggin event for a user" do
7
+ login_event = create(:event_publisher_event)
8
+ tracked_event = create(:event_publisher_event_tracking, event: login_event)
9
+
10
+ expect(tracked_event.event.id).to eq(login_event.id)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require 'spec_helper'
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require 'rspec/rails'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc, in
8
+ # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
9
+ # run as spec files by default. This means that files in spec/support that end
10
+ # in _spec.rb will both be required and run as specs, causing the specs to be
11
+ # run twice. It is recommended that you do not name files matching this glob to
12
+ # end with _spec.rb. You can configure this pattern with the --pattern
13
+ # option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
14
+ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
15
+
16
+ RSpec.configure do |config|
17
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
18
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
19
+
20
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
21
+ # examples within a transaction, remove the following line or assign false
22
+ # instead of true.
23
+ config.use_transactional_fixtures = true
24
+
25
+ # RSpec Rails can automatically mix in different behaviours to your tests
26
+ # based on their file location, for example enabling you to call `get` and
27
+ # `post` in specs under `spec/controllers`.
28
+ #
29
+ # You can disable this behaviour by removing the line below, and instead
30
+ # explicitly tag your specs with their type, e.g.:
31
+ #
32
+ # RSpec.describe UsersController, :type => :controller do
33
+ # # ...
34
+ # end
35
+ #
36
+ # The different available types are documented in the features, such as in
37
+ # https://relishapp.com/rspec/rspec-rails/docs
38
+ config.infer_spec_type_from_file_location!
39
+ end
@@ -0,0 +1,19 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
3
+ require 'rspec/rails'
4
+ require 'factory_girl_rails'
5
+
6
+ Rails.backtrace_cleaner.remove_silencers!
7
+
8
+ # Load support files
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
10
+
11
+ RSpec.configure do |config|
12
+ config.mock_with :rspec
13
+ config.use_transactional_fixtures = true
14
+ config.infer_base_class_for_anonymous_controllers = false
15
+ config.order = "random"
16
+
17
+ config.include FactoryGirl::Syntax::Methods
18
+ config.include Devise::TestHelpers, :type => :controller
19
+ end
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: event_publisher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Mohamed Magdy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.19
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.19
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_girl_rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Track and publish user events
70
+ email:
71
+ - mohamed.magdy.aly@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - README.rdoc
78
+ - Rakefile
79
+ - app/assets/javascripts/event_publisher/application.js
80
+ - app/assets/stylesheets/event_publisher/application.css
81
+ - app/controllers/event_publisher/application_controller.rb
82
+ - app/helpers/event_publisher/application_helper.rb
83
+ - app/models/event_publisher/anonymous_user.rb
84
+ - app/models/event_publisher/event.rb
85
+ - app/models/event_publisher/event_tracking.rb
86
+ - app/views/layouts/event_publisher/application.html.erb
87
+ - config/routes.rb
88
+ - db/migrate/20140810140137_create_event_publisher_events.rb
89
+ - db/migrate/20140810141012_create_event_publisher_event_trackings.rb
90
+ - db/migrate/20140810144524_create_event_publisher_anonymous_users.rb
91
+ - lib/event_publisher.rb
92
+ - lib/event_publisher/controllers/trackable.rb
93
+ - lib/event_publisher/engine.rb
94
+ - lib/event_publisher/models/trackable.rb
95
+ - lib/event_publisher/version.rb
96
+ - lib/tasks/event_publisher_tasks.rake
97
+ - spec/dummy/README.rdoc
98
+ - spec/dummy/Rakefile
99
+ - spec/dummy/app/assets/javascripts/application.js
100
+ - spec/dummy/app/assets/javascripts/articles.js
101
+ - spec/dummy/app/assets/stylesheets/application.css
102
+ - spec/dummy/app/assets/stylesheets/articles.css
103
+ - spec/dummy/app/assets/stylesheets/scaffold.css
104
+ - spec/dummy/app/controllers/application_controller.rb
105
+ - spec/dummy/app/controllers/articles_controller.rb
106
+ - spec/dummy/app/helpers/application_helper.rb
107
+ - spec/dummy/app/helpers/articles_helper.rb
108
+ - spec/dummy/app/models/article.rb
109
+ - spec/dummy/app/models/user.rb
110
+ - spec/dummy/app/views/articles/_form.html.erb
111
+ - spec/dummy/app/views/articles/edit.html.erb
112
+ - spec/dummy/app/views/articles/index.html.erb
113
+ - spec/dummy/app/views/articles/new.html.erb
114
+ - spec/dummy/app/views/articles/show.html.erb
115
+ - spec/dummy/app/views/layouts/application.html.erb
116
+ - spec/dummy/config.ru
117
+ - spec/dummy/config/application.rb
118
+ - spec/dummy/config/boot.rb
119
+ - spec/dummy/config/database.yml
120
+ - spec/dummy/config/environment.rb
121
+ - spec/dummy/config/environments/development.rb
122
+ - spec/dummy/config/environments/production.rb
123
+ - spec/dummy/config/environments/test.rb
124
+ - spec/dummy/config/initializers/backtrace_silencers.rb
125
+ - spec/dummy/config/initializers/devise.rb
126
+ - spec/dummy/config/initializers/inflections.rb
127
+ - spec/dummy/config/initializers/mime_types.rb
128
+ - spec/dummy/config/initializers/secret_token.rb
129
+ - spec/dummy/config/initializers/session_store.rb
130
+ - spec/dummy/config/initializers/wrap_parameters.rb
131
+ - spec/dummy/config/locales/devise.en.yml
132
+ - spec/dummy/config/locales/en.yml
133
+ - spec/dummy/config/routes.rb
134
+ - spec/dummy/db/migrate/20140810145638_devise_create_users.rb
135
+ - spec/dummy/db/migrate/20140810145842_create_articles.rb
136
+ - spec/dummy/db/schema.rb
137
+ - spec/dummy/log/development.log
138
+ - spec/dummy/log/test.log
139
+ - spec/dummy/public/404.html
140
+ - spec/dummy/public/422.html
141
+ - spec/dummy/public/500.html
142
+ - spec/dummy/public/favicon.ico
143
+ - spec/dummy/script/rails
144
+ - spec/dummy/spec/controllers/articles_controller_spec.rb
145
+ - spec/dummy/spec/factories/articles.rb
146
+ - spec/dummy/spec/factories/users.rb
147
+ - spec/factories/article.rb
148
+ - spec/factories/event_publisher_anonymous_users.rb
149
+ - spec/factories/event_publisher_event_trackings.rb
150
+ - spec/factories/event_publisher_events.rb
151
+ - spec/factories/user.rb
152
+ - spec/models/event_publisher/anonymous_user_spec.rb
153
+ - spec/models/event_publisher/event_spec.rb
154
+ - spec/models/event_publisher/event_tracking_spec.rb
155
+ - spec/rails_helper.rb
156
+ - spec/spec_helper.rb
157
+ homepage:
158
+ licenses: []
159
+ metadata: {}
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 2.2.2
177
+ signing_key:
178
+ specification_version: 4
179
+ summary: Track and publish user events
180
+ test_files:
181
+ - spec/dummy/app/assets/javascripts/application.js
182
+ - spec/dummy/app/assets/javascripts/articles.js
183
+ - spec/dummy/app/assets/stylesheets/application.css
184
+ - spec/dummy/app/assets/stylesheets/articles.css
185
+ - spec/dummy/app/assets/stylesheets/scaffold.css
186
+ - spec/dummy/app/controllers/application_controller.rb
187
+ - spec/dummy/app/controllers/articles_controller.rb
188
+ - spec/dummy/app/helpers/application_helper.rb
189
+ - spec/dummy/app/helpers/articles_helper.rb
190
+ - spec/dummy/app/models/article.rb
191
+ - spec/dummy/app/models/user.rb
192
+ - spec/dummy/app/views/articles/_form.html.erb
193
+ - spec/dummy/app/views/articles/edit.html.erb
194
+ - spec/dummy/app/views/articles/index.html.erb
195
+ - spec/dummy/app/views/articles/new.html.erb
196
+ - spec/dummy/app/views/articles/show.html.erb
197
+ - spec/dummy/app/views/layouts/application.html.erb
198
+ - spec/dummy/config/application.rb
199
+ - spec/dummy/config/boot.rb
200
+ - spec/dummy/config/database.yml
201
+ - spec/dummy/config/environment.rb
202
+ - spec/dummy/config/environments/development.rb
203
+ - spec/dummy/config/environments/production.rb
204
+ - spec/dummy/config/environments/test.rb
205
+ - spec/dummy/config/initializers/backtrace_silencers.rb
206
+ - spec/dummy/config/initializers/devise.rb
207
+ - spec/dummy/config/initializers/inflections.rb
208
+ - spec/dummy/config/initializers/mime_types.rb
209
+ - spec/dummy/config/initializers/secret_token.rb
210
+ - spec/dummy/config/initializers/session_store.rb
211
+ - spec/dummy/config/initializers/wrap_parameters.rb
212
+ - spec/dummy/config/locales/devise.en.yml
213
+ - spec/dummy/config/locales/en.yml
214
+ - spec/dummy/config/routes.rb
215
+ - spec/dummy/config.ru
216
+ - spec/dummy/db/migrate/20140810145638_devise_create_users.rb
217
+ - spec/dummy/db/migrate/20140810145842_create_articles.rb
218
+ - spec/dummy/db/schema.rb
219
+ - spec/dummy/log/development.log
220
+ - spec/dummy/log/test.log
221
+ - spec/dummy/public/404.html
222
+ - spec/dummy/public/422.html
223
+ - spec/dummy/public/500.html
224
+ - spec/dummy/public/favicon.ico
225
+ - spec/dummy/Rakefile
226
+ - spec/dummy/README.rdoc
227
+ - spec/dummy/script/rails
228
+ - spec/dummy/spec/controllers/articles_controller_spec.rb
229
+ - spec/dummy/spec/factories/articles.rb
230
+ - spec/dummy/spec/factories/users.rb
231
+ - spec/factories/article.rb
232
+ - spec/factories/event_publisher_anonymous_users.rb
233
+ - spec/factories/event_publisher_event_trackings.rb
234
+ - spec/factories/event_publisher_events.rb
235
+ - spec/factories/user.rb
236
+ - spec/models/event_publisher/anonymous_user_spec.rb
237
+ - spec/models/event_publisher/event_spec.rb
238
+ - spec/models/event_publisher/event_tracking_spec.rb
239
+ - spec/rails_helper.rb
240
+ - spec/spec_helper.rb