diff options
| -rw-r--r-- | README.md | 22 | ||||
| -rw-r--r-- | app/controllers/inboxes/base_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/inboxes/discussions_controller.rb | 5 | ||||
| -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 | 2 | ||||
| -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 | 
14 files changed, 20 insertions, 106 deletions
| @@ -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 3e3f8dc..fa14bec 100644 --- a/app/controllers/inboxes/base_controller.rb +++ b/app/controllers/inboxes/base_controller.rb @@ -4,8 +4,4 @@ class Inboxes::BaseController < ApplicationController    def init_discussion      @discussion = Discussion.find(params[:discussion_id])    end - -  def current_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 52655e2..8074274 100644 --- a/app/controllers/inboxes/discussions_controller.rb +++ b/app/controllers/inboxes/discussions_controller.rb @@ -7,14 +7,13 @@ class Inboxes::DiscussionsController < Inboxes::BaseController    end    def show -    # @discussion = Discussion.includes(:messages, :speakers).find(params[:id])      @discussion.mark_as_read_for(current_user)    end    def new      @discussion.messages.build    end -   +    def create      @discussion.add_recipient_token current_user.id @@ -45,7 +44,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 this discussion page +        # redirecting to that existing object          redirect_to discussion_url(discussion), :notice => t("inboxes.discussions.already_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 af88b0c..4e7650d 100644 --- a/lib/inboxes.rb +++ b/lib/inboxes.rb @@ -1,6 +1,6 @@ +require "cancan"  require "inboxes/version"  require "inboxes/railtie" -require "inboxes/ability"  require "inboxes/engine"  require "inboxes/active_record_extension"  require "cancan" 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 | 
