aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKir2011-11-16 14:41:29 +0400
committerKir2011-11-16 14:41:29 +0400
commit661590c630f022fc678c4d5664b497db13de6eec (patch)
tree0c434d3e4560b6cb13c7184c31472dd824b5bbe5
parent61bd4dd67fdaee93af6994d539b86d46cd1c45f1 (diff)
downloadinboxes-0.0.1.tar.bz2
Faye integration, resources under modulev0.0.1
-rw-r--r--README.md23
-rw-r--r--app/controllers/inboxes/base_controller.rb3
-rw-r--r--app/controllers/inboxes/discussions_controller.rb (renamed from app/controllers/discussions_controller.rb)18
-rw-r--r--app/controllers/inboxes/messages_controller.rb (renamed from app/controllers/messages_controller.rb)2
-rw-r--r--app/controllers/inboxes/speakers_controller.rb (renamed from app/controllers/speakers_controller.rb)2
-rw-r--r--app/helpers/inboxes_helper.rb9
-rw-r--r--app/views/inboxes/discussions/_form.html.haml (renamed from app/views/discussions/_form.html.haml)0
-rw-r--r--app/views/inboxes/discussions/index.html.haml (renamed from app/views/discussions/index.html.haml)3
-rw-r--r--app/views/inboxes/discussions/new.html.haml (renamed from app/views/discussions/new.html.haml)0
-rw-r--r--app/views/inboxes/discussions/show.html.haml (renamed from app/views/discussions/show.html.haml)22
-rw-r--r--app/views/inboxes/messages/_form.html.haml (renamed from app/views/messages/_form.html.haml)0
-rw-r--r--app/views/inboxes/messages/_message.html.haml8
-rw-r--r--config/routes.rb2
-rw-r--r--inboxes.gemspec13
-rw-r--r--lib/inboxes.rb3
-rw-r--r--lib/inboxes/railtie.rb16
-rw-r--r--vendor/assets/javascripts/inboxes/faye.js3
-rw-r--r--vendor/assets/javascripts/inboxes/faye/init.js.coffee9
18 files changed, 91 insertions, 45 deletions
diff --git a/README.md b/README.md
index 582eb9a..26830cb 100644
--- a/README.md
+++ b/README.md
@@ -30,11 +30,28 @@ If you have problems with installation, you can check [code of demo app](https:/
By default, the gem provides localized phrases for Russian and English languages. You can easily override any of them. [Here is](https://github.com/kirs/inboxes/blob/master/config/locales/en.yml) list of all I18n phrases.
+#Integration with Faye
+
+1. Add `gem "faye"` to your Gemfile and run `bundle install`. Install Faye by [the screencast](http://railscasts.com/episodes/260-messaging-with-faye)
+2. Create `messaging.js` in `app/assets/javascripts/` with these lines:
+
+ /*
+ = require inboxes/faye
+ */
+
+3. Copy or replace 2 views from Inboxes example app to your application: [app/views/inboxes/messages/_form](https://github.com/kirs/inboxes-app/blob/master/app/views/inboxes/messages/_form.html.haml) and [app/views/inboxes/messages/create](https://github.com/kirs/inboxes-app/blob/master/app/views/inboxes/messages/create.js.erb)
+
+4. Add config parameters to your application config (last 2 are not necessary):
+
+ config.inboxes.faye_enabled = true
+ config.inboxes.faye_host = "inboxes-app.dev" # localhost by default
+ config.inboxes.faye_port = 9292 # 9292 by default
+
+5. Faye installation is finished. If you have any troubles, check the [example app](https://github.com/kirs/inboxes-app/)
+
##Todo
-- Add rspec tests
-- Move gem resources to namespace
-- Describe integration with Faye
+- Add RSpec tests
##Authors
diff --git a/app/controllers/inboxes/base_controller.rb b/app/controllers/inboxes/base_controller.rb
new file mode 100644
index 0000000..54767d2
--- /dev/null
+++ b/app/controllers/inboxes/base_controller.rb
@@ -0,0 +1,3 @@
+class Inboxes::BaseController < ApplicationController
+
+end \ No newline at end of file
diff --git a/app/controllers/discussions_controller.rb b/app/controllers/inboxes/discussions_controller.rb
index 5e769fb..d901a80 100644
--- a/app/controllers/discussions_controller.rb
+++ b/app/controllers/inboxes/discussions_controller.rb
@@ -1,7 +1,6 @@
-class DiscussionsController < ApplicationController
+class Inboxes::DiscussionsController < Inboxes::BaseController
before_filter :authenticate_user!
- # before_filter :check_permissions, :only => :show
-
+ before_filter :init_and_check_permissions, :only => :show
before_filter :load_and_check_discussion_recipient, :only => [:create, :new]
def index
@@ -11,10 +10,7 @@ class DiscussionsController < ApplicationController
# GET /discussions/1
# GET /discussions/1.json
def show
- @discussion = Discussion.includes(:messages, :speakers).find(params[:id])
- redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
-
- # @discussion.mark_as_read_for(current_user)
+ @discussion.mark_as_read_for(current_user)
end
# GET /discussions/new
@@ -44,6 +40,11 @@ class DiscussionsController < ApplicationController
private
+ def init_and_check_permissions
+ @discussion = Discussion.includes(:messages, :speakers).find(params[:id])
+ redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user)
+ end
+
def load_and_check_discussion_recipient
# initializing model fir new and create actions
@discussion = Discussion.new((params[:discussion] ? params[:discussion] : {}))
@@ -63,5 +64,4 @@ class DiscussionsController < ApplicationController
end
end
end
-
-end
+end \ No newline at end of file
diff --git a/app/controllers/messages_controller.rb b/app/controllers/inboxes/messages_controller.rb
index 7baf8df..1c63221 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/inboxes/messages_controller.rb
@@ -1,4 +1,4 @@
-class MessagesController < ApplicationController
+class Inboxes::MessagesController < Inboxes::BaseController
def create
@discussion = Discussion.find(params[:discussion_id])
diff --git a/app/controllers/speakers_controller.rb b/app/controllers/inboxes/speakers_controller.rb
index db90dbe..035df98 100644
--- a/app/controllers/speakers_controller.rb
+++ b/app/controllers/inboxes/speakers_controller.rb
@@ -1,4 +1,4 @@
-class SpeakersController < ApplicationController
+class Inboxes::SpeakersController < Inboxes::BaseController
before_filter :init_and_check_permissions
def create
diff --git a/app/helpers/inboxes_helper.rb b/app/helpers/inboxes_helper.rb
new file mode 100644
index 0000000..87bb763
--- /dev/null
+++ b/app/helpers/inboxes_helper.rb
@@ -0,0 +1,9 @@
+require 'net/http'
+module InboxesHelper
+ def inboxes_faye_broadcast(channel, &block)
+ message = {:channel => channel, :data => capture(&block), :ext => {:auth_token => defined?(FAYE_TOKEN) ? FAYE_TOKEN : ""}}
+ uri = URI.parse("http://#{Inboxes::config.faye_host}:#{Inboxes::config.faye_port}/faye")
+ # Rails.logger.info "Faye URL: #{uri}"
+ res = Net::HTTP.post_form(uri, :message => message.to_json)
+ end
+end \ No newline at end of file
diff --git a/app/views/discussions/_form.html.haml b/app/views/inboxes/discussions/_form.html.haml
index 303f0bb..303f0bb 100644
--- a/app/views/discussions/_form.html.haml
+++ b/app/views/inboxes/discussions/_form.html.haml
diff --git a/app/views/discussions/index.html.haml b/app/views/inboxes/discussions/index.html.haml
index 8060254..7c4de6e 100644
--- a/app/views/discussions/index.html.haml
+++ b/app/views/inboxes/discussions/index.html.haml
@@ -1,5 +1,6 @@
%h1 Discussions list
-
+%p
+ Unread messages:
%table
%tr
%th Last message
diff --git a/app/views/discussions/new.html.haml b/app/views/inboxes/discussions/new.html.haml
index 6bcf481..6bcf481 100644
--- a/app/views/discussions/new.html.haml
+++ b/app/views/inboxes/discussions/new.html.haml
diff --git a/app/views/discussions/show.html.haml b/app/views/inboxes/discussions/show.html.haml
index e25d0a2..a910b51 100644
--- a/app/views/discussions/show.html.haml
+++ b/app/views/inboxes/discussions/show.html.haml
@@ -1,3 +1,6 @@
+- if Inboxes::config.faye_enabled
+ = javascript_include_tag "messaging"
+
%h1 Discussion
%h3
@@ -17,22 +20,11 @@
%h3 Messages
-%table
- %tr
- %th User
- %th Message
- %th Posted at
- - @discussion.messages.each do |message|
- %tr
- %td
- = message.user[Inboxes::config.user_name]
- %td
- = message.body
- %td
- = l(message.created_at)
-
+#messages_box
+ = render @discussion.messages, :as => :message
+
%h3 Add message
-= render "messages/form"
+= render "inboxes/messages/form"
%p
= link_to "Leave discussion", discussion_speaker_path(@discussion, @discussion.find_speaker_by_user(current_user)), :method => :delete unless @discussion.private?
diff --git a/app/views/messages/_form.html.haml b/app/views/inboxes/messages/_form.html.haml
index f85ed37..f85ed37 100644
--- a/app/views/messages/_form.html.haml
+++ b/app/views/inboxes/messages/_form.html.haml
diff --git a/app/views/inboxes/messages/_message.html.haml b/app/views/inboxes/messages/_message.html.haml
new file mode 100644
index 0000000..639f130
--- /dev/null
+++ b/app/views/inboxes/messages/_message.html.haml
@@ -0,0 +1,8 @@
+.message
+ %p
+ %span
+ = message.user[Inboxes::config.user_name]
+ @
+ = l(message.created_at)
+ =":"
+ %b= message.body \ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index a9bce94..9da2d4a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,6 +1,6 @@
Rails.application.routes.draw do
- resources :discussions, :except => :edit do
+ resources :discussions, :except => :edit, :module => :inboxes do
resources :messages, :only => [:create, :index]
resources :speakers, :only => [:create, :destroy]
member do
diff --git a/inboxes.gemspec b/inboxes.gemspec
index ff3c296..be61064 100644
--- a/inboxes.gemspec
+++ b/inboxes.gemspec
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
s.version = Inboxes::VERSION
s.authors = ["Kir Shatrov"]
s.email = ["razor.psp@gmail.com"]
- s.homepage = ""
+ s.homepage = "http://evrone.com/"
s.summary = %q{Messaging system for Rails 3 app}
s.description = %q{Messaging system for Rails 3 app}
@@ -19,6 +19,15 @@ Gem::Specification.new do |s|
s.require_paths = ["lib"]
# specify any dependencies here; for example:
- s.add_development_dependency "ruby-debug"
+ # s.add_development_dependency "ruby-debug"
s.add_runtime_dependency "haml-rails"
+ # s.add_runtime_dependency "inherited_resources"
+
+ # s.add_development_dependency 'dm-sqlite-adapter', ['>= 1.1.0']
+ s.add_development_dependency 'rspec', ['>= 0']
+ s.add_development_dependency 'rspec-rails', ['>= 0']
+ # s.add_development_dependency 'rr', ['>= 0']
+ # s.add_development_dependency 'steak', ['>= 0']
+ # s.add_development_dependency 'capybara', ['>= 0']
+ s.add_development_dependency 'database_cleaner', ['>= 0']
end
diff --git a/lib/inboxes.rb b/lib/inboxes.rb
index 49bec39..133aa9c 100644
--- a/lib/inboxes.rb
+++ b/lib/inboxes.rb
@@ -18,6 +18,9 @@ module Inboxes
class Configuration #:nodoc:
include ActiveSupport::Configurable
config_accessor :user_name
+ config_accessor :faye_host
+ config_accessor :faye_port
+ config_accessor :faye_enabled
def param_name
config.param_name.respond_to?(:call) ? config.param_name.call() : config.param_name
diff --git a/lib/inboxes/railtie.rb b/lib/inboxes/railtie.rb
index 06ab0d3..9e5435e 100644
--- a/lib/inboxes/railtie.rb
+++ b/lib/inboxes/railtie.rb
@@ -1,26 +1,18 @@
require 'rails'
module Inboxes
- class Railtie < ::Rails::Railtie #:nodoc:
+ class Railtie < ::Rails::Railtie
config.inboxes = ActiveSupport::OrderedOptions.new
initializer "inboxes.configure" do |app|
Inboxes.configure do |config|
config.user_name = app.config.inboxes[:user_name] || "email"
+ config.faye_enabled = app.config.inboxes[:faye_enabled] || false
+ config.faye_host = app.config.inboxes[:faye_host] || "localhost"
+ config.faye_port = app.config.inboxes[:faye_port] || "9292"
end
# app.config.middleware.insert_before "::Rails::Rack::Logger", "Inboxes::Middleware"
end
-
- # initializer 'inboxes' do |app|
- # ActiveSupport.on_load(:active_record) do
- # # require 'kaminari/models/active_record_extension'
- # # ::ActiveRecord::Base.send :include, Kaminari::ActiveRecordExtension
- # end
- #
- # ActiveSupport.on_load(:action_view) do
- # # ::ActionView::Base.send :include, Kaminari::ActionViewExtension
- # end
- # end
end
end \ No newline at end of file
diff --git a/vendor/assets/javascripts/inboxes/faye.js b/vendor/assets/javascripts/inboxes/faye.js
new file mode 100644
index 0000000..cfc9cf3
--- /dev/null
+++ b/vendor/assets/javascripts/inboxes/faye.js
@@ -0,0 +1,3 @@
+/*
+= require_directory ./faye
+*/ \ No newline at end of file
diff --git a/vendor/assets/javascripts/inboxes/faye/init.js.coffee b/vendor/assets/javascripts/inboxes/faye/init.js.coffee
new file mode 100644
index 0000000..425d74a
--- /dev/null
+++ b/vendor/assets/javascripts/inboxes/faye/init.js.coffee
@@ -0,0 +1,9 @@
+$ ->
+ fayeUrl = window.location.origin + ":9292/faye" # change port for post of your Faye daemon
+ fayeJS = fayeUrl + ".js"
+ $.getScript(fayeJS, (e)->
+ faye = new Faye.Client(fayeUrl)
+ faye.subscribe(window.location.pathname, (data)->
+ eval(data)
+ )
+ ) \ No newline at end of file