diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | README.md | 22 | ||||
| -rw-r--r-- | app/controllers/inboxes/base_controller.rb | 6 | ||||
| -rw-r--r-- | app/controllers/inboxes/discussions_controller.rb | 18 | ||||
| -rw-r--r-- | app/controllers/inboxes/messages_controller.rb | 9 | ||||
| -rw-r--r-- | app/controllers/inboxes/speakers_controller.rb | 2 | ||||
| -rw-r--r-- | app/helpers/inboxes_helper.rb | 3 | ||||
| -rw-r--r-- | app/models/discussion.rb | 2 | ||||
| -rw-r--r-- | app/models/inboxes/ability.rb | 38 | ||||
| -rw-r--r-- | lib/inboxes.rb | 3 | ||||
| -rw-r--r-- | lib/inboxes/ability.rb | 29 | ||||
| -rw-r--r-- | lib/inboxes/engine.rb | 7 | ||||
| -rw-r--r-- | lib/inboxes/railtie.rb | 1 | ||||
| -rw-r--r-- | lib/inboxes/version.rb | 2 | ||||
| -rw-r--r-- | log/development.log | 0 |
15 files changed, 22 insertions, 123 deletions
@@ -2,4 +2,5 @@ .bundle Gemfile.lock pkg/* -.DS_Store
\ No newline at end of file +.DS_Store +.rvmrc
\ No newline at end of file @@ -5,6 +5,7 @@ Inboxes is a young messaging system for Rails app. It: - provides 3 models for developers: Discussion, Message and Speaker - read/unread discussions counter - any user can be invited to discussion by the member of this discussion, so you can chat with unlimited number of users +- have configurable behavior via CanCan Ability ##Upgrading from 0.1 to current version (0.2) @@ -13,7 +14,6 @@ Inboxes is a young messaging system for Rails app. It: ##Requirements and recommendations Inboxes requires Rails 3.x and [Devise](https://github.com/plataformatec/devise) for user identification (surely, messaging system is not possible without users). Now the gem is tested only with Ruby 1.8.7 and REE. - We recommend to use Inboxes with [Faye](https://github.com/jcoglan/faye), because it's really sexy with it. Remember that unfortunately, Inboxes reserve 3 resources names: Discussion, Message and Speaker. @@ -22,12 +22,21 @@ Since version 0.2.0, it is possible to add `has_inboxes` option to any model. Fo ##Installation -*Make sure that Devise is already installed and configured in your app!* +*Make sure that [Devise](https://github.com/plataformatec/devise) and [CanCan](https://github.com/ryanb/cancan) are already installed and configured in your app!* 1. Add `gem "inboxes", "~> 0.2.0"` to the `Gemfile` and run `bundle install` 2. Execute `rails generate inboxes:install`. This command will generate migration for messaging system. Don't forget to run migrations: `rake db:migrate` 3. Add `has_inboxes` to your User model like [here](https://gist.github.com/1330080). -4. Now Inboxes are ready to use. Open `http://yoursite.dev/discussions` to see the list of discussions. You can start new one. +4. Add CanCan abilities to manage Inboxes models: + +```ruby +can [:index, :create], Discussion +can :read, Discussion do |discussion| + discussion.can_participate?(user) +end +``` + +5. Now Inboxes are ready to use. Open `http://yoursite.dev/discussions` to see the list of discussions. You can start new one. Default Inboxes views are ugly, so you can copy into your app and make anything with them: `rails generate inboxes:views` If you have problems with installation, you can check [code of demo app](https://github.com/kirs/inboxes-app) @@ -55,8 +64,8 @@ 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/) -*While testing Inboxes with Faye, don't forget to run it: `rackup faye.ru -s thin -E production`* -You can read more about Faye on it's [official page](http://faye.jcoglan.com/). +*While running Inboxes with Faye, don't forget to run Faye worker it: `rackup faye.ru -s thin -E production`* +You can read more about that on it's [official page](http://faye.jcoglan.com/). ### Hints @@ -64,8 +73,7 @@ You can read more about Faye on it's [official page](http://faye.jcoglan.com/). ##Todo -- Add RSpec tests -- Add ability to inherit Inboxes controllers +- Finalize RSpec tests (are located in [rspec branch](https://github.com/evrone/inboxes/tree/rspec)) - Add Pusher capability - Email notifications and the ability to answer received emails like in Github issues (#7) diff --git a/app/controllers/inboxes/base_controller.rb b/app/controllers/inboxes/base_controller.rb index f1e77b1..fa14bec 100644 --- a/app/controllers/inboxes/base_controller.rb +++ b/app/controllers/inboxes/base_controller.rb @@ -4,10 +4,4 @@ class Inboxes::BaseController < ApplicationController def init_discussion @discussion = Discussion.find(params[:discussion_id]) end - - # Needs to be overriden so that we use Spree's Ability rather than anyone else's. - def current_ability - # raise "Loading Ability" - @current_ability ||= Inboxes::Ability.new(current_user) - end end
\ No newline at end of file diff --git a/app/controllers/inboxes/discussions_controller.rb b/app/controllers/inboxes/discussions_controller.rb index 04a8edd..51e2334 100644 --- a/app/controllers/inboxes/discussions_controller.rb +++ b/app/controllers/inboxes/discussions_controller.rb @@ -1,31 +1,22 @@ class Inboxes::DiscussionsController < Inboxes::BaseController load_and_authorize_resource - # before_filter :authenticate_user! - # before_filter :init_and_check_permissions, :only => :show before_filter :load_and_check_discussion_recipient, :only => [:create, :new] def index @discussions = current_user.discussions end - # GET /discussions/1 - # GET /discussions/1.json def show - # @discussion = Discussion.includes(:messages, :speakers).find(params[:id]) + # raise current_user.inspect @discussion.mark_as_read_for(current_user) end - # GET /discussions/new - # GET /discussions/new.json def new # @discussion = Discussion.new @discussion.messages.build end - # POST /discussions - # POST /discussions.json def create - # @discussion = Discussion.new(params[:discussion]) @discussion.add_recipient_token current_user.id @discussion.messages.each do |m| @@ -42,11 +33,6 @@ class Inboxes::DiscussionsController < Inboxes::BaseController 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 for new and create actions @discussion = Discussion.new(params[:discussion].presence || {}) @@ -61,7 +47,7 @@ class Inboxes::DiscussionsController < Inboxes::BaseController @discussion.messages.each do |message| Message.create(:discussion => discussion, :user => current_user, :body => message.body) if message.body end - # перекидываем на нее + # redirecting to that existing object redirect_to discussion_url(discussion), :notice => t("inboxes.discussions.exists", :user => user[Inboxes::config.user_name]) end end diff --git a/app/controllers/inboxes/messages_controller.rb b/app/controllers/inboxes/messages_controller.rb index 697592a..9962c63 100644 --- a/app/controllers/inboxes/messages_controller.rb +++ b/app/controllers/inboxes/messages_controller.rb @@ -1,6 +1,4 @@ class Inboxes::MessagesController < Inboxes::BaseController - # before_filter :init_discussion - # load_and_authorize_resource load_and_authorize_resource :discussion load_resource :message, :through => :discussion, :shallow => true @@ -14,11 +12,4 @@ class Inboxes::MessagesController < Inboxes::BaseController format.js end end - - # private - # - # def init_and_check_permissions - # @discussion = Discussion.find(params[:discussion_id]) - # redirect_to discussions_url, :notice => t("inboxes.discussions.can_not_participate") unless @discussion.can_participate?(current_user) - # end end diff --git a/app/controllers/inboxes/speakers_controller.rb b/app/controllers/inboxes/speakers_controller.rb index 30c0b7f..ab79f70 100644 --- a/app/controllers/inboxes/speakers_controller.rb +++ b/app/controllers/inboxes/speakers_controller.rb @@ -1,8 +1,6 @@ class Inboxes::SpeakersController < Inboxes::BaseController - # before_filter :init_discussion load_and_authorize_resource :discussion load_resource :speaker, :through => :discussion, :shallow => true - # load_and_authorize_resource def create raise ActiveRecord::RecordNotFound unless params[:speaker] && params[:speaker][:user_id] diff --git a/app/helpers/inboxes_helper.rb b/app/helpers/inboxes_helper.rb index 87bb763..b5fc455 100644 --- a/app/helpers/inboxes_helper.rb +++ b/app/helpers/inboxes_helper.rb @@ -3,7 +3,6 @@ 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) + resource = Net::HTTP.post_form(uri, :message => message.to_json) end end
\ No newline at end of file diff --git a/app/models/discussion.rb b/app/models/discussion.rb index 675547d..6df0b1d 100644 --- a/app/models/discussion.rb +++ b/app/models/discussion.rb @@ -2,8 +2,6 @@ class Discussion < ActiveRecord::Base attr_accessor :recipient_tokens, :recipient_ids attr_reader :recipient_ids - # paginates_per 10 - # creater has_many :messages, :dependent => :destroy diff --git a/app/models/inboxes/ability.rb b/app/models/inboxes/ability.rb deleted file mode 100644 index deb3d81..0000000 --- a/app/models/inboxes/ability.rb +++ /dev/null @@ -1,38 +0,0 @@ -# Implementation class for Cancan gem. Instead of overriding this class, consider adding new permissions -# using the special +register_ability+ method which allows extensions to add their own abilities. -# -# See http://github.com/ryanb/cancan for more details on cancan. -module Inboxes - class Ability - include CanCan::Ability - - class_attribute :abilities - self.abilities = Set.new - - # Allows us to go beyond the standard cancan initialize method which makes it difficult for engines to - # modify the default +Ability+ of an application. The +ability+ argument must be a class that includes - # the +CanCan::Ability+ module. The registered ability should behave properly as a stand-alone class - # and therefore should be easy to test in isolation. - def self.register_ability(ability) - self.abilities.add(ability) - - end - - def initialize(user) - # raise "Initializing 3rd patry" - # self.clear_aliased_actions - - # can [:index, :create], Discussion - # can :read, Discussion do |discussion| - # discussion.can_participate?(user) - # end - - #include any abilities registered by extensions, etc. - - Ability.abilities.each do |clazz| - ability = clazz.send(:new, user) - @rules = rules + ability.send(:rules) - end - end - end -end diff --git a/lib/inboxes.rb b/lib/inboxes.rb index 57dc9a0..e9ecad7 100644 --- a/lib/inboxes.rb +++ b/lib/inboxes.rb @@ -1,10 +1,9 @@ +require "cancan" require "inboxes/version" require "inboxes/railtie" -require "inboxes/ability" require "inboxes/engine" require "inboxes/active_record_extension" - module Inboxes def self.configure(&block) diff --git a/lib/inboxes/ability.rb b/lib/inboxes/ability.rb deleted file mode 100644 index c9f8d6b..0000000 --- a/lib/inboxes/ability.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "cancan" - -module Inboxes - class InboxesAbility - include ::CanCan::Ability - - def initialize(user) - # Discussion - # raise "Registered!" - if user - can [:index, :create], Discussion - can :read, Discussion do |discussion| - discussion.can_participate?(user) - end - end - - # Message - # can :create, Message do |message| - # message.discussion.can_participate?(user) - # end - # - # # Speaker - # can [:create, :destroy], Speaker do |speaker| - # speaker.discussion.can_participate?(user) - # end - end - end - -end
\ No newline at end of file diff --git a/lib/inboxes/engine.rb b/lib/inboxes/engine.rb index b61eebc..061694e 100644 --- a/lib/inboxes/engine.rb +++ b/lib/inboxes/engine.rb @@ -1,11 +1,4 @@ -require "inboxes/ability" - module Inboxes class Engine < ::Rails::Engine - def self.activate - Ability.register_ability(InboxesAbility) - end - - config.to_prepare &method(:activate).to_proc end end
\ No newline at end of file diff --git a/lib/inboxes/railtie.rb b/lib/inboxes/railtie.rb index 1626b20..f99cd06 100644 --- a/lib/inboxes/railtie.rb +++ b/lib/inboxes/railtie.rb @@ -1,5 +1,4 @@ require 'rails' -require "inboxes/ability" module Inboxes class Railtie < ::Rails::Railtie diff --git a/lib/inboxes/version.rb b/lib/inboxes/version.rb index ee23565..c4b3908 100644 --- a/lib/inboxes/version.rb +++ b/lib/inboxes/version.rb @@ -1,3 +1,3 @@ module Inboxes - VERSION = "0.2.0" + VERSION = "0.2.1" end diff --git a/log/development.log b/log/development.log new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/log/development.log |
