mix-rails-message-board 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +27 -0
  4. data/app/controllers/admix/board_messages_controller.rb +17 -0
  5. data/app/controllers/admix/board_replies_controller.rb +21 -0
  6. data/app/controllers/admix/dashboard_controller.rb +7 -0
  7. data/app/controllers/board_messages_controller.rb +23 -0
  8. data/app/mailers/message_board_mailer.rb +10 -0
  9. data/app/models/admix/board_messages_datagrid.rb +31 -0
  10. data/app/models/admix/board_replies_datagrid.rb +29 -0
  11. data/app/models/board_message.rb +29 -0
  12. data/app/models/board_reply.rb +28 -0
  13. data/app/views/admix/board_messages/_form_fields.html.haml +5 -0
  14. data/app/views/admix/board_messages/_show.html.haml +16 -0
  15. data/app/views/admix/board_messages/_table_actions.html.haml +10 -0
  16. data/app/views/admix/board_replies/_form_fields.html.haml +5 -0
  17. data/app/views/admix/board_replies/_show.html.haml +11 -0
  18. data/app/views/admix/board_replies/_table_actions.html.haml +8 -0
  19. data/app/views/admix/dashboard/index.html.haml +4 -0
  20. data/app/views/board_messages/_board_message.html.haml +21 -0
  21. data/app/views/board_messages/index.html.haml +16 -0
  22. data/app/views/board_messages/show.html.haml +9 -0
  23. data/app/views/message_board_mailer/message_replied.text.erb +7 -0
  24. data/config/locales/message-board.pt-BR.yml +46 -0
  25. data/config/routes.rb +20 -0
  26. data/lib/mix-rails-message-board.rb +4 -0
  27. data/lib/mix-rails-message-board/engine.rb +19 -0
  28. data/lib/mix-rails-message-board/version.rb +10 -0
  29. data/lib/tasks/message-board_tasks.rake +4 -0
  30. metadata +96 -0
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,3 @@
1
+ = MessageBoard
2
+
3
+ This project rocks and uses MIT-LICENSE.
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'MessageBoard'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
@@ -0,0 +1,17 @@
1
+ class Admix::BoardMessagesController < Admix::InheritedController
2
+
3
+ def approve
4
+ resource.approved = :approved
5
+ resource.save!
6
+ flash[:notice] = t('boardmessages.flashes.approved')
7
+ redirect_to collection_url
8
+ end
9
+
10
+ def disapprove
11
+ resource.approved = :disapproved
12
+ resource.save!
13
+ flash[:notice] = t('boardmessages.flashes.disapproved')
14
+ redirect_to collection_url
15
+ end
16
+
17
+ end
@@ -0,0 +1,21 @@
1
+ class Admix::BoardRepliesController < Admix::InheritedController
2
+
3
+ polymorphic_belongs_to :board_message, param: :board_message_id
4
+
5
+ after_filter :message_replied, only: [:create]
6
+
7
+ def message_replied
8
+ if resource.errors.empty?
9
+ MessageBoardMailer.message_replied(parent).deliver
10
+ end
11
+ end
12
+
13
+ def report
14
+ datagrid = @datagrid_class.new(params[:guess_datagrid_params])
15
+ datagrid.scope do
16
+ parent.board_replies
17
+ end
18
+ datagrid
19
+ end
20
+
21
+ end
@@ -0,0 +1,7 @@
1
+ module Admix
2
+ class DashboardController < Admix::AdmixController
3
+ def index
4
+ @pending_messages = BoardMessage.pending
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ class BoardMessagesController < ApplicationController
2
+
3
+ def index
4
+ @board_message = BoardMessage.new
5
+ @board_messages = BoardMessage.approved.paginate(:page => params[:page], :per_page => 12)
6
+ end
7
+
8
+ def create
9
+ @board_message = BoardMessage.new(params[:board_message])
10
+ if @board_message.save
11
+ flash[:notice] = t('message_board.flashes.success_wait_moderation')
12
+ redirect_to board_messages_path
13
+ else
14
+ @board_messages = BoardMessage.approved.paginate(:page => params[:page], :per_page => 12)
15
+ render 'index'
16
+ end
17
+ end
18
+
19
+ def show
20
+ @board_message = BoardMessage.find(params[:id])
21
+ end
22
+
23
+ end
@@ -0,0 +1,10 @@
1
+ class MessageBoardMailer < AdmixMailer
2
+
3
+ def message_replied(board_message)
4
+ @board_message = board_message
5
+ @url = polymorphic_url(board_message)
6
+
7
+ mail(to: board_message.email, subject: t('message_board.mailers.message_replied.subject'))
8
+ end
9
+
10
+ end
@@ -0,0 +1,31 @@
1
+ class Admix::BoardMessagesDatagrid
2
+
3
+ include Datagrid
4
+ extend AdmixHelper
5
+
6
+ scope do
7
+ BoardMessage.desc(:date)
8
+ end
9
+
10
+ filter :date do |value|
11
+ value.to_s(:created_at)
12
+ end
13
+
14
+ column :name, header: input_label(:board_message, :name)
15
+ column :email, header: input_label(:board_message, :email)
16
+ column :message, header: input_label(:board_message, :message)
17
+ column :date, header: input_label(:board_message, :date) do |board_message|
18
+ board_message.date.strftime("%d/%m/%Y")
19
+ end
20
+
21
+ column :replies_count, header: input_label(:board_message, :replies_count) do |board_message|
22
+ board_message.board_replies.count
23
+ end
24
+
25
+ column :approved, header: input_label(:board_message, :approved) do |board_message|
26
+ board_message.approved.text
27
+ end
28
+
29
+ include Admix::TableActions
30
+
31
+ end
@@ -0,0 +1,29 @@
1
+ class Admix::BoardRepliesDatagrid
2
+
3
+ include Datagrid
4
+
5
+ extend AdmixHelper
6
+
7
+
8
+ scope do
9
+ BoardReply
10
+ end
11
+
12
+ filter :date do |value|
13
+ value.to_s(:created_at)
14
+ end
15
+
16
+ column :name, header: input_label(:board_reply, :name)
17
+ column :email, header: input_label(:board_reply, :email)
18
+ column :message, header: input_label(:board_reply, :message)
19
+ column :date, header: input_label(:board_reply, :date) do |board_reply|
20
+ board_reply.date.strftime("%d/%m/%Y")
21
+ end
22
+
23
+ column :approved, header: input_label(:board_reply, :approved) do |board_reply|
24
+ board_reply.approved.text
25
+ end
26
+
27
+ include Admix::TableActions
28
+
29
+ end
@@ -0,0 +1,29 @@
1
+ class BoardMessage
2
+
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+ include Mongoid::Paranoia
6
+
7
+ extend Enumerize
8
+
9
+ field :name, type: String
10
+ field :email, type: String
11
+ field :message, type: String
12
+ field :date, type: DateTime, default: -> { Time.now }
13
+ field :approved, type: String
14
+ enumerize :approved, in: [:pending, :approved, :disapproved], default: :pending, predicates: true
15
+
16
+
17
+ validates_presence_of :name
18
+ validates_presence_of :email
19
+ validates_presence_of :message
20
+ validates_presence_of :date
21
+
22
+ validates :email, email: true
23
+
24
+ scope :approved, where(approved: :approved)
25
+ scope :pending, where(approved: :pending)
26
+
27
+ embeds_many :board_replies, cascade_callbacks: true
28
+
29
+ end
@@ -0,0 +1,28 @@
1
+ class BoardReply
2
+
3
+ include Mongoid::Document
4
+ include Mongoid::Timestamps
5
+ include Mongoid::Paranoia
6
+
7
+ extend Enumerize
8
+
9
+ field :name, type: String, default: -> { Setting.app_title }
10
+ field :email, type: String, default: -> { Setting.app_email }
11
+ field :message, type: String
12
+ field :date, type: DateTime, default: -> { Time.now }
13
+ field :approved, type: String
14
+ enumerize :approved, in: [:pending, :approved, :disapproved], default: :approved, predicates: true
15
+
16
+
17
+ validates_presence_of :name
18
+ validates_presence_of :email
19
+ validates_presence_of :date
20
+
21
+ validates :email, email: true
22
+
23
+ scope :approved, where(approved: :approved)
24
+ scope :pending, where(approved: :pending)
25
+
26
+ embedded_in :board_message
27
+
28
+ end
@@ -0,0 +1,5 @@
1
+ = f.input :name, as: 'string'
2
+ = f.input :email, as: 'email'
3
+ = f.input :message, as: 'text'
4
+ = f.input :date, as: 'datepicker'
5
+ = f.input :approved
@@ -0,0 +1,16 @@
1
+ %dl
2
+ %dt= input_label(:board_message, :name)
3
+ %dd= resource.name
4
+ %dt= input_label(:board_message, :email)
5
+ %dd= resource.email
6
+ %dt= input_label(:board_message, :message)
7
+ %dd= resource.message
8
+ %dt= input_label(:board_message, :date)
9
+ %dd= localize(resource.date)
10
+ %dt= input_label(:board_message, :approved)
11
+ %dd
12
+ = resource.approved.text
13
+ - if resource.disapproved? or resource.approved.pending?
14
+ = link_to image_tag('admix/icons/shield_go.png'), approve_admix_board_message_path(resource), method: :put, data: { confirm: t('message_board.confirms.approve') }, class: 'btn', title:'Aprovar'
15
+ - if resource.approved.approved? or resource.approved.pending?
16
+ = link_to image_tag('admix/icons/shield_delete.png'), disapprove_admix_board_message_path(resource), method: :put,data: { confirm: t('message_board.confirms.disapprove') }, class: 'btn', title:'Reprovar'
@@ -0,0 +1,10 @@
1
+ - if resource.disapproved? or resource.approved.pending?
2
+ = link_to image_tag('admix/icons/shield_go.png'), approve_admix_board_message_path(resource), method: :put, data: { confirm: t('message_board.confirms.approve') }, class: 'btn', title:'Aprovar'
3
+ - if resource.approved.approved? or resource.approved.pending?
4
+ = link_to image_tag('admix/icons/shield_delete.png'), disapprove_admix_board_message_path(resource), method: :put,data: { confirm: t('message_board.confirms.disapprove') }, class: 'btn', title:'Reprovar'
5
+
6
+ = link_to image_tag('admix/icons/comment_add.png'), new_admix_board_message_board_reply_path(resource), class: 'btn', title:'Adicionar comentário'
7
+
8
+ = link_to image_tag('admix/zoom.png'), resource_url(resource), class: 'btn', title:'Visualizar registro'
9
+ = link_to image_tag('admix/page_edit.png'), edit_resource_url(resource), class: 'btn', title:'Editar registro'
10
+ = link_to image_tag('admix/cancel.png'), resource_url(resource), method: :delete, data: { confirm: t('admix.crud.destroy_confirm') }, class: 'btn', title:'Deletar registro'
@@ -0,0 +1,5 @@
1
+ = f.input :name, as: 'string'
2
+ = f.input :email, as: 'email'
3
+ = f.input :message, as: 'text'
4
+ = f.input :date, as: 'datepicker'
5
+ = f.input :approved
@@ -0,0 +1,11 @@
1
+ %dl
2
+ %dt= input_label(:board_message, :name)
3
+ %dd= resource.name
4
+ %dt= input_label(:board_message, :email)
5
+ %dd= resource.email
6
+ %dt= input_label(:board_message, :message)
7
+ %dd= resource.message
8
+ %dt= input_label(:board_message, :date)
9
+ %dd= localize(resource.date)
10
+ %dt= input_label(:board_message, :approved)
11
+ %dd= resource.approved.text
@@ -0,0 +1,8 @@
1
+ - if resource.disapproved? or resource.approved.pending?
2
+ = link_to image_tag('admix/icons/shield_go.png'), approve_admix_board_message_path(resource), method: :put, data: { confirm: t('message_board.confirms.approve') }, class: 'btn', title:'Aprovar'
3
+ - if resource.approved.approved? or resource.approved.pending?
4
+ = link_to image_tag('admix/icons/shield_delete.png'), disapprove_admix_board_message_path(resource), method: :put,data: { confirm: t('message_board.confirms.disapprove') }, class: 'btn', title:'Reprovar'
5
+
6
+ = link_to image_tag('admix/zoom.png'), resource_url(resource), class: 'btn', title:'Visualizar registro'
7
+ = link_to image_tag('admix/page_edit.png'), edit_resource_url(resource), class: 'btn', title:'Editar registro'
8
+ = link_to image_tag('admix/cancel.png'), resource_url(resource), method: :delete, data: { confirm: t('admix.crud.destroy_confirm') }, class: 'btn', title:'Deletar registro'
@@ -0,0 +1,4 @@
1
+ %h1 Bem vindo
2
+ - if @pending_messages.length > 0
3
+ %h4 Você possui #{@pending_messages.length} mensagens pendentes de aprovação
4
+ %a{href: admix_board_messages_path} Clique aqui para vê-las
@@ -0,0 +1,21 @@
1
+ %li
2
+ %p
3
+ %span.red= link_to board_message.name, board_message_path(board_message)
4
+ |
5
+ %small
6
+ %span.white= I18n.localize(board_message.date)
7
+ %p.muted.p.super= board_message.message
8
+ - if board_message.board_replies?
9
+ - board_message.board_replies.each do |r|
10
+ .pad.p
11
+ %span.yellow= r.name
12
+ %span :
13
+ = r.message
14
+ .p
15
+ .pull-left
16
+ %a.addthis_button_facebook_like{"addthis:url" => board_message_url(board_message),"fb:like:layout" => "button_count"}
17
+ .pull-left
18
+ %a.addthis_button_tweet{'tw:text' => "#{app_title}: #{@board_message.name}: #{@board_message.message} #{board_message_url(board_message)}"}
19
+ .pull-left
20
+ %a.addthis_button_google_plusone
21
+ .clearfix
@@ -0,0 +1,16 @@
1
+ - content_for(:board_messages_content) do
2
+ = simple_form_for @board_message do |f|
3
+ = f.error_notification
4
+ .row.p
5
+ .span8
6
+ .p= f.input :name, input_html: {class: 'span8'}
7
+ %div= f.input :email, input_html: {class: 'span8'}
8
+ .span8= f.input :message, as: 'text', input_html: {class: 'span8'}
9
+ .ta-r
10
+ %button.no-style{:type => "submit"}
11
+ = image_tag 'btn_enviar.png'
12
+ %hr.great-margin
13
+ %ul.list.sequential
14
+ = render @board_messages
15
+ = will_paginate @board_messages
16
+ = render template: 'templates/board_messages/index'
@@ -0,0 +1,9 @@
1
+ - content_for :metas do
2
+ %meta{property: "og:title", content: "Mural de recados do Forró com Turista"}
3
+ %meta{property: "og:type", content: "website"}
4
+ %meta{property: "og:image", content: asset_path('forrocomturista_logo.jpg')}
5
+ %meta{property: "og:description", content: "#{@board_message.name}: #{@board_message.message}" }
6
+
7
+ - content_for(:board_message_content) do
8
+ = render @board_message
9
+ = render template: 'templates/board_messages/show'
@@ -0,0 +1,7 @@
1
+ [<%= app_title %>]
2
+ ===================
3
+ Mensagem respondida.
4
+
5
+ Olá <%= @board_message.name %>,
6
+
7
+ Sua mensagem foi respondida, para ler a resposta clique aqui: <%= @url %>
@@ -0,0 +1,46 @@
1
+ pt-BR:
2
+
3
+ resources:
4
+ board_messages: 'mural-de-recados'
5
+
6
+ will_paginate:
7
+ previous_label: "<< anterior"
8
+ next_label: "próximo >>"
9
+
10
+ activerecord:
11
+ models:
12
+ board_message: 'Mensagem'
13
+ board_reply: 'Resposta'
14
+
15
+ simple_form:
16
+ labels:
17
+ board_message:
18
+ replies_count: 'Respostas (Qtde)'
19
+
20
+ message_board:
21
+ confirms:
22
+ approve: 'Tem certeza que deseja aprovar?'
23
+ disapprove: 'Tem certeza que deseja reprovar?'
24
+ message_board: 'Mural de Recados'
25
+ message: 'Mensagem'
26
+ messages: 'Mensagens'
27
+ flashes:
28
+ success_wait_moderation: 'Seu recado foi enviado. Por favor aguardar moderação.'
29
+ mailers:
30
+ message_replied:
31
+ subject: 'Sua mensagem foi respondida.'
32
+
33
+ boardmessages:
34
+ boardmessages: 'Mensagens'
35
+ boardmessage: 'Mensagem'
36
+ flashes:
37
+ approved: 'A mensagem foi aprovada.'
38
+ disapproved: 'A mensagem foi reprovada.'
39
+
40
+ boardreplies:
41
+ boardreplies: 'Respostas'
42
+ boardreply: 'Resposta'
43
+ flashes:
44
+ approved: 'A mensagem foi aprovada.'
45
+ disapproved: 'A mensagem foi reprovada.'
46
+
@@ -0,0 +1,20 @@
1
+ Rails.application.routes.draw do
2
+
3
+ localized do
4
+ resources :board_messages
5
+ end
6
+
7
+ namespace :admix do
8
+ resources :board_messages do
9
+
10
+ resources :board_replies
11
+
12
+ member do
13
+ put "approve"
14
+ put "disapprove"
15
+ end
16
+
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,4 @@
1
+ require "mix-rails-message-board/engine"
2
+
3
+ module MixRailsMessageBoard
4
+ end
@@ -0,0 +1,19 @@
1
+ module MixRailsMessageBoard
2
+ class Engine < ::Rails::Engine
3
+
4
+ def navigation
5
+ if defined? Admix
6
+ Admix::Navigation::NavBar.post_menu do
7
+ Admix::Navigation::NavBar.find(:content) do |menu|
8
+ menu.submenu do |submenu|
9
+ submenu.key = :message_board
10
+ submenu.title = I18n.t 'message_board.message_board'
11
+ submenu.url = 'admix_board_messages_url'
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ module MixRailsMessageBoard
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 10
5
+ TINY = 2
6
+ PRE = nil
7
+
8
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :message-board do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mix-rails-message-board
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Sadjow Leão
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.11
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.11
30
+ description: MessageBoard is a module from mix-rails
31
+ email:
32
+ - sadjow@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - app/controllers/admix/board_messages_controller.rb
38
+ - app/controllers/admix/dashboard_controller.rb
39
+ - app/controllers/admix/board_replies_controller.rb
40
+ - app/controllers/board_messages_controller.rb
41
+ - app/mailers/message_board_mailer.rb
42
+ - app/models/admix/board_messages_datagrid.rb
43
+ - app/models/admix/board_replies_datagrid.rb
44
+ - app/models/board_message.rb
45
+ - app/models/board_reply.rb
46
+ - app/views/admix/dashboard/index.html.haml
47
+ - app/views/admix/board_messages/_show.html.haml
48
+ - app/views/admix/board_messages/_table_actions.html.haml
49
+ - app/views/admix/board_messages/_form_fields.html.haml
50
+ - app/views/admix/board_replies/_show.html.haml
51
+ - app/views/admix/board_replies/_table_actions.html.haml
52
+ - app/views/admix/board_replies/_form_fields.html.haml
53
+ - app/views/board_messages/_board_message.html.haml
54
+ - app/views/board_messages/index.html.haml
55
+ - app/views/board_messages/show.html.haml
56
+ - app/views/message_board_mailer/message_replied.text.erb
57
+ - config/locales/message-board.pt-BR.yml
58
+ - config/routes.rb
59
+ - lib/tasks/message-board_tasks.rake
60
+ - lib/mix-rails-message-board/version.rb
61
+ - lib/mix-rails-message-board/engine.rb
62
+ - lib/mix-rails-message-board.rb
63
+ - MIT-LICENSE
64
+ - Rakefile
65
+ - README.rdoc
66
+ homepage: https://github.com/mixinternet/mix-rails
67
+ licenses: []
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ segments:
79
+ - 0
80
+ hash: 3611725181515502945
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ segments:
88
+ - 0
89
+ hash: 3611725181515502945
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 1.8.24
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: MessageBoard is a module from mix-rails
96
+ test_files: []