chatroom 0.0.8
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.
- checksums.yaml +15 -0
- data/.gitignore +18 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +54 -0
- data/Rakefile +1 -0
- data/app/assets/images/chatroom-icons/default.png +0 -0
- data/app/assets/images/emotions/0.gif +0 -0
- data/app/assets/images/emotions/1.gif +0 -0
- data/app/assets/images/emotions/10.gif +0 -0
- data/app/assets/images/emotions/100.gif +0 -0
- data/app/assets/images/emotions/101.gif +0 -0
- data/app/assets/images/emotions/102.gif +0 -0
- data/app/assets/images/emotions/103.gif +0 -0
- data/app/assets/images/emotions/104.gif +0 -0
- data/app/assets/images/emotions/105.gif +0 -0
- data/app/assets/images/emotions/106.gif +0 -0
- data/app/assets/images/emotions/107.gif +0 -0
- data/app/assets/images/emotions/108.gif +0 -0
- data/app/assets/images/emotions/109.gif +0 -0
- data/app/assets/images/emotions/11.gif +0 -0
- data/app/assets/images/emotions/110.gif +0 -0
- data/app/assets/images/emotions/111.gif +0 -0
- data/app/assets/images/emotions/112.gif +0 -0
- data/app/assets/images/emotions/113.gif +0 -0
- data/app/assets/images/emotions/114.gif +0 -0
- data/app/assets/images/emotions/115.gif +0 -0
- data/app/assets/images/emotions/116.gif +0 -0
- data/app/assets/images/emotions/117.gif +0 -0
- data/app/assets/images/emotions/118.gif +0 -0
- data/app/assets/images/emotions/119.gif +0 -0
- data/app/assets/images/emotions/12.gif +0 -0
- data/app/assets/images/emotions/120.gif +0 -0
- data/app/assets/images/emotions/121.gif +0 -0
- data/app/assets/images/emotions/122.gif +0 -0
- data/app/assets/images/emotions/123.gif +0 -0
- data/app/assets/images/emotions/124.gif +0 -0
- data/app/assets/images/emotions/125.gif +0 -0
- data/app/assets/images/emotions/126.gif +0 -0
- data/app/assets/images/emotions/127.gif +0 -0
- data/app/assets/images/emotions/128.gif +0 -0
- data/app/assets/images/emotions/129.gif +0 -0
- data/app/assets/images/emotions/13.gif +0 -0
- data/app/assets/images/emotions/130.gif +0 -0
- data/app/assets/images/emotions/131.gif +0 -0
- data/app/assets/images/emotions/132.gif +0 -0
- data/app/assets/images/emotions/133.gif +0 -0
- data/app/assets/images/emotions/134.gif +0 -0
- data/app/assets/images/emotions/14.gif +0 -0
- data/app/assets/images/emotions/15.gif +0 -0
- data/app/assets/images/emotions/16.gif +0 -0
- data/app/assets/images/emotions/17.gif +0 -0
- data/app/assets/images/emotions/18.gif +0 -0
- data/app/assets/images/emotions/19.gif +0 -0
- data/app/assets/images/emotions/2.gif +0 -0
- data/app/assets/images/emotions/20.gif +0 -0
- data/app/assets/images/emotions/21.gif +0 -0
- data/app/assets/images/emotions/22.gif +0 -0
- data/app/assets/images/emotions/23.gif +0 -0
- data/app/assets/images/emotions/24.gif +0 -0
- data/app/assets/images/emotions/25.gif +0 -0
- data/app/assets/images/emotions/26.gif +0 -0
- data/app/assets/images/emotions/27.gif +0 -0
- data/app/assets/images/emotions/28.gif +0 -0
- data/app/assets/images/emotions/29.gif +0 -0
- data/app/assets/images/emotions/3.gif +0 -0
- data/app/assets/images/emotions/30.gif +0 -0
- data/app/assets/images/emotions/31.gif +0 -0
- data/app/assets/images/emotions/32.gif +0 -0
- data/app/assets/images/emotions/33.gif +0 -0
- data/app/assets/images/emotions/34.gif +0 -0
- data/app/assets/images/emotions/35.gif +0 -0
- data/app/assets/images/emotions/36.gif +0 -0
- data/app/assets/images/emotions/37.gif +0 -0
- data/app/assets/images/emotions/38.gif +0 -0
- data/app/assets/images/emotions/39.gif +0 -0
- data/app/assets/images/emotions/4.gif +0 -0
- data/app/assets/images/emotions/40.gif +0 -0
- data/app/assets/images/emotions/41.gif +0 -0
- data/app/assets/images/emotions/42.gif +0 -0
- data/app/assets/images/emotions/43.gif +0 -0
- data/app/assets/images/emotions/44.gif +0 -0
- data/app/assets/images/emotions/45.gif +0 -0
- data/app/assets/images/emotions/46.gif +0 -0
- data/app/assets/images/emotions/47.gif +0 -0
- data/app/assets/images/emotions/48.gif +0 -0
- data/app/assets/images/emotions/49.gif +0 -0
- data/app/assets/images/emotions/5.gif +0 -0
- data/app/assets/images/emotions/50.gif +0 -0
- data/app/assets/images/emotions/51.gif +0 -0
- data/app/assets/images/emotions/52.gif +0 -0
- data/app/assets/images/emotions/53.gif +0 -0
- data/app/assets/images/emotions/54.gif +0 -0
- data/app/assets/images/emotions/55.gif +0 -0
- data/app/assets/images/emotions/56.gif +0 -0
- data/app/assets/images/emotions/57.gif +0 -0
- data/app/assets/images/emotions/58.gif +0 -0
- data/app/assets/images/emotions/59.gif +0 -0
- data/app/assets/images/emotions/6.gif +0 -0
- data/app/assets/images/emotions/60.gif +0 -0
- data/app/assets/images/emotions/61.gif +0 -0
- data/app/assets/images/emotions/62.gif +0 -0
- data/app/assets/images/emotions/63.gif +0 -0
- data/app/assets/images/emotions/64.gif +0 -0
- data/app/assets/images/emotions/65.gif +0 -0
- data/app/assets/images/emotions/66.gif +0 -0
- data/app/assets/images/emotions/67.gif +0 -0
- data/app/assets/images/emotions/68.gif +0 -0
- data/app/assets/images/emotions/69.gif +0 -0
- data/app/assets/images/emotions/7.gif +0 -0
- data/app/assets/images/emotions/70.gif +0 -0
- data/app/assets/images/emotions/71.gif +0 -0
- data/app/assets/images/emotions/72.gif +0 -0
- data/app/assets/images/emotions/73.gif +0 -0
- data/app/assets/images/emotions/74.gif +0 -0
- data/app/assets/images/emotions/75.gif +0 -0
- data/app/assets/images/emotions/76.gif +0 -0
- data/app/assets/images/emotions/77.gif +0 -0
- data/app/assets/images/emotions/78.gif +0 -0
- data/app/assets/images/emotions/79.gif +0 -0
- data/app/assets/images/emotions/8.gif +0 -0
- data/app/assets/images/emotions/80.gif +0 -0
- data/app/assets/images/emotions/81.gif +0 -0
- data/app/assets/images/emotions/82.gif +0 -0
- data/app/assets/images/emotions/83.gif +0 -0
- data/app/assets/images/emotions/84.gif +0 -0
- data/app/assets/images/emotions/85.gif +0 -0
- data/app/assets/images/emotions/86.gif +0 -0
- data/app/assets/images/emotions/87.gif +0 -0
- data/app/assets/images/emotions/88.gif +0 -0
- data/app/assets/images/emotions/89.gif +0 -0
- data/app/assets/images/emotions/9.gif +0 -0
- data/app/assets/images/emotions/90.gif +0 -0
- data/app/assets/images/emotions/91.gif +0 -0
- data/app/assets/images/emotions/92.gif +0 -0
- data/app/assets/images/emotions/93.gif +0 -0
- data/app/assets/images/emotions/94.gif +0 -0
- data/app/assets/images/emotions/95.gif +0 -0
- data/app/assets/images/emotions/96.gif +0 -0
- data/app/assets/images/emotions/97.gif +0 -0
- data/app/assets/images/emotions/98.gif +0 -0
- data/app/assets/images/emotions/99.gif +0 -0
- data/app/assets/images/emotions/static.gif +0 -0
- data/app/assets/javascripts/chatroom/marks.js +34 -0
- data/app/assets/javascripts/chatroom/messages.js.coffee +145 -0
- data/app/assets/stylesheets/chatroom/messages.css.scss +300 -0
- data/app/controllers/chatroom/messages_controller.rb +20 -0
- data/app/helpers/chatroom/message_helper.rb +26 -0
- data/app/views/chatroom/messages/_chatroom.html.erb +15 -0
- data/app/views/chatroom/messages/_form.html.erb +35 -0
- data/app/views/chatroom/messages/create.js.erb +6 -0
- data/chatroom.gemspec +26 -0
- data/lib/chatroom.rb +12 -0
- data/lib/chatroom/engine.rb +14 -0
- data/lib/chatroom/version.rb +3 -0
- data/lib/generators/active_record/chatroom_generator.rb +43 -0
- data/lib/generators/active_record/templates/migration.rb +14 -0
- data/lib/generators/chatroom/assets_generator.rb +40 -0
- data/lib/generators/chatroom/chatroom_generator.rb +40 -0
- data/lib/generators/chatroom/controllers_generator.rb +24 -0
- data/lib/generators/chatroom/helpers_generator.rb +24 -0
- data/lib/generators/chatroom/install_generator.rb +19 -0
- data/lib/generators/chatroom/orm_helpers.rb +59 -0
- data/lib/generators/chatroom/views_generator.rb +38 -0
- data/lib/generators/templates/chatroom.rb +3 -0
- metadata +278 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
module MessageHelper
|
|
3
|
+
def new_communication(msg=nil)
|
|
4
|
+
"<span class='message-line'>
|
|
5
|
+
<div class='info-message'>
|
|
6
|
+
<span class='sender'>:</span><span class='send-time'>#{msg.try(:send_time)}</span>
|
|
7
|
+
</div>
|
|
8
|
+
<span class='say'>#{msg.try(:html_content)}</span>
|
|
9
|
+
</span>"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Show all the communications in chatroom
|
|
13
|
+
def show_communications(msgs=nil)
|
|
14
|
+
msgs ||= []
|
|
15
|
+
messages = msgs.collect do |msg|
|
|
16
|
+
"<span class='message-line'>
|
|
17
|
+
<div class='info-message'>
|
|
18
|
+
<span class='sender'>:</span><span class='send-time'>#{msg.try(:send_time)}</span>
|
|
19
|
+
</div>
|
|
20
|
+
<span class='say'>#{msg.try(:html_content)}</span>
|
|
21
|
+
</span>"
|
|
22
|
+
end
|
|
23
|
+
messages.join('')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div id="chatroom">
|
|
2
|
+
<div class="min-chatroom">Chatroom</div>
|
|
3
|
+
|
|
4
|
+
<div class="chat-show">
|
|
5
|
+
<div id="chat">
|
|
6
|
+
<%= show_communications(@messages).html_safe %>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<%= render "chatroom/messages/form" %>
|
|
10
|
+
</div>
|
|
11
|
+
<%= subscribe_to "/messages/new" %>
|
|
12
|
+
|
|
13
|
+
<div id="chatBeam">
|
|
14
|
+
<div class="max-chatroom">Chatroom</div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<div class="chat-send">
|
|
2
|
+
|
|
3
|
+
<%= form_for Message.new, :remote => true, :html => { :class => "send-message" } do |f| %>
|
|
4
|
+
<div class="send-bar">
|
|
5
|
+
<%= link_to "", :class => "font-colorer" do%>
|
|
6
|
+
<i class="font-colorer-icon"></i>
|
|
7
|
+
<table class="chatroom-font-colors">
|
|
8
|
+
<tbody>
|
|
9
|
+
</tbody>
|
|
10
|
+
</table>
|
|
11
|
+
<% end %>
|
|
12
|
+
|
|
13
|
+
<%= link_to "", :class => "emotions" do%>
|
|
14
|
+
<i class="emotions-icon"></i>
|
|
15
|
+
<table class="chatroom-emotions-images">
|
|
16
|
+
<tbody>
|
|
17
|
+
</tbody>
|
|
18
|
+
</table>
|
|
19
|
+
<% end %>
|
|
20
|
+
|
|
21
|
+
<%= link_to "", :class => "font-bloder" do%>
|
|
22
|
+
<i class="font-bloder-icon"></i>
|
|
23
|
+
<% end %>
|
|
24
|
+
|
|
25
|
+
<%= link_to "", :class => "font-italic" do%>
|
|
26
|
+
<i class="font-italic-icon"></i>
|
|
27
|
+
<% end %>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<%= f.text_area :content, :id => "new_message_editor", :rows => 5 %>
|
|
31
|
+
|
|
32
|
+
<div class="send"><%= f.submit "Send", :class => "btn" %></div>
|
|
33
|
+
<% end %>
|
|
34
|
+
</div>
|
|
35
|
+
|
data/chatroom.gemspec
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'chatroom/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "chatroom"
|
|
8
|
+
spec.version = Chatroom::VERSION
|
|
9
|
+
spec.authors = ["TsaiKoga"]
|
|
10
|
+
spec.email = ["969024089@qq.com"]
|
|
11
|
+
spec.description = %q{This gem can help you create a chatroom.}
|
|
12
|
+
spec.summary = %q{Chatroom provides functions, like adding emotions or changing text pattern.}
|
|
13
|
+
spec.homepage = "http://github.com/TsaiKoga/"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
|
22
|
+
spec.add_development_dependency "rake"
|
|
23
|
+
spec.add_development_dependency "faye", "~> 1.0.0"
|
|
24
|
+
spec.add_development_dependency "private_pub", "~> 1.0.3"
|
|
25
|
+
spec.add_development_dependency "thin", "~> 1.5.1"
|
|
26
|
+
end
|
data/lib/chatroom.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
|
|
3
|
+
require 'chatroom/engine' if defined?(Rails)
|
|
4
|
+
require 'generators/chatroom/install_generator'
|
|
5
|
+
|
|
6
|
+
# Default way to setup Chatroom. Run rails generate chatroom_install to create
|
|
7
|
+
# a fresh initializer with all configuration values.
|
|
8
|
+
# def self.setup
|
|
9
|
+
# yield self
|
|
10
|
+
# end
|
|
11
|
+
|
|
12
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require "rails"
|
|
2
|
+
|
|
3
|
+
module Chatroom
|
|
4
|
+
class Engine < Rails::Engine
|
|
5
|
+
# ==> HookFor Configuration
|
|
6
|
+
# It allows you to implement a generators command by hooking for views,
|
|
7
|
+
# helpers or controllers.
|
|
8
|
+
config.generators do |g|
|
|
9
|
+
g.views :views
|
|
10
|
+
g.helpers :helpers
|
|
11
|
+
g.controllers :controllers
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require "rails/generators/active_record"
|
|
2
|
+
require "generators/chatroom/orm_helpers"
|
|
3
|
+
|
|
4
|
+
module ActiveRecord
|
|
5
|
+
module Generators
|
|
6
|
+
class ChatroomGenerator < ActiveRecord::Generators::Base
|
|
7
|
+
argument :attributes, :type => :array, :default => [], :banner => "field: type field: type"
|
|
8
|
+
|
|
9
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
10
|
+
include Chatroom::Generators::OrmHelpers
|
|
11
|
+
|
|
12
|
+
def copy_chatroom_migration
|
|
13
|
+
migration_template "migration.rb", "db/migrate/chatroom_create_#{table_name}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def migration_data
|
|
17
|
+
<<RUBY
|
|
18
|
+
t.text :content, :null => false
|
|
19
|
+
RUBY
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def generate_model
|
|
23
|
+
invoke "active_record:model", [name], :migration => false
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def inject_chatroom_content
|
|
27
|
+
content = model_contents
|
|
28
|
+
|
|
29
|
+
class_path = if namespaced?
|
|
30
|
+
class_name.to_s.split("::")
|
|
31
|
+
else
|
|
32
|
+
[class_name]
|
|
33
|
+
end
|
|
34
|
+
indent_depth = class_path.size - 1
|
|
35
|
+
|
|
36
|
+
content = content.split("\n").map { |line| " " * indent_depth + line }.join("\n") << "\n"
|
|
37
|
+
|
|
38
|
+
inject_into_class(model_path, class_path.last, content) if model_exists?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
class ChatroomCreate<%= table_name.camelize %> < ActiveRecord::Migration
|
|
3
|
+
def change
|
|
4
|
+
create_table(:<%= table_name %>) do |t|
|
|
5
|
+
<%= migration_data -%>
|
|
6
|
+
|
|
7
|
+
<% attributes.each do |attribute| -%>
|
|
8
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
|
9
|
+
<% end -%>
|
|
10
|
+
|
|
11
|
+
t.timestamps
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
module Generators
|
|
3
|
+
class AssetsGenerator < Rails::Generators::Base
|
|
4
|
+
source_root File.expand_path('../../../../app/assets', __FILE__)
|
|
5
|
+
|
|
6
|
+
desc "Generators the assets including coffee and sass"
|
|
7
|
+
|
|
8
|
+
def generate_stylesheets
|
|
9
|
+
directory "stylesheets/chatroom", "#{stylesheets_target_path}" do |content|
|
|
10
|
+
content
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def generate_coffees
|
|
15
|
+
directory "javascripts/chatroom", "#{javascripts_target_path}" do |content|
|
|
16
|
+
content
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def generate_images
|
|
21
|
+
directory "images", "#{images_target_path}" do |content|
|
|
22
|
+
content
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
def stylesheets_target_path
|
|
28
|
+
@stylesheets_target_path ||= "app/assets/stylesheets/chatroom"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def javascripts_target_path
|
|
32
|
+
@javascripts_target_path ||= "app/assets/javascripts/chatroom"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def images_target_path
|
|
36
|
+
@images_target_path ||= "app/assets/images"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
module Generators
|
|
3
|
+
class ChatroomGenerator < Rails::Generators::NamedBase
|
|
4
|
+
include Rails::Generators::ResourceHelpers
|
|
5
|
+
|
|
6
|
+
namespace "chatroom"
|
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
8
|
+
|
|
9
|
+
desc "Generators a model with the given NAME (if one does not exists) with chatroom " <<
|
|
10
|
+
"configuration plus a migration file, controller_file, assets_file, views_file and chatroom routes." <<
|
|
11
|
+
"Setup the faye server for chatting."
|
|
12
|
+
|
|
13
|
+
class_option :routes, :desc => "Generate routes", :type => :boolean, :default => true
|
|
14
|
+
|
|
15
|
+
hook_for :orm
|
|
16
|
+
# hook_for :views
|
|
17
|
+
# hook_for :controllers
|
|
18
|
+
hook_for :assets
|
|
19
|
+
# hook_for :helpers
|
|
20
|
+
|
|
21
|
+
def add_chatroom_routes
|
|
22
|
+
chatroom_route = <<-ROUTE
|
|
23
|
+
resources :#{plural_name}, module: 'chatroom'
|
|
24
|
+
ROUTE
|
|
25
|
+
route chatroom_route
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def setup_private_pub
|
|
29
|
+
gem 'private_pub', '1.0.3'
|
|
30
|
+
gem 'thin', '1.5.1'
|
|
31
|
+
generate 'private_pub:install'
|
|
32
|
+
|
|
33
|
+
inject_into_file 'app/assets/javascripts/application.js', before: '//= require_tree .' do <<-RUBY
|
|
34
|
+
//= require private_pub
|
|
35
|
+
RUBY
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
# Include this module in your generator to generate Chatroom controllers.
|
|
3
|
+
# 'copy_controllers' is the main method and by default copies all controllers.
|
|
4
|
+
module ControllerPathTemplates
|
|
5
|
+
protected
|
|
6
|
+
def target_path
|
|
7
|
+
@target_path ||= "app/controllers"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def controller_directory(name, _target_path = nil)
|
|
11
|
+
directory name.to_s, _target_path || "#{target_path}/#{name}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class ControllersGenerator < Rails::Generators::Base
|
|
16
|
+
include ControllerPathTemplates
|
|
17
|
+
source_root File.expand_path('../../../../app/controllers', __FILE__)
|
|
18
|
+
desc "Copies Chatroom controllers to your application."
|
|
19
|
+
|
|
20
|
+
def copy_controllers
|
|
21
|
+
controller_directory(:chatroom)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
# Include this module in your generator to generate Chatroom helpers.
|
|
3
|
+
# 'copy_helpers' is the main method and by default copies all helpers.
|
|
4
|
+
module HelperPathTemplates
|
|
5
|
+
protected
|
|
6
|
+
def target_path
|
|
7
|
+
@target_path ||= "app/helpers"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def helper_directory(name, _target_path = nil)
|
|
11
|
+
directory name.to_s, _target_path || "#{target_path}/#{name}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class HelpersGenerator < Rails::Generators::Base
|
|
16
|
+
include HelperPathTemplates
|
|
17
|
+
source_root File.expand_path('../../../../app/helpers', __FILE__)
|
|
18
|
+
desc "Copies Chatroom helpers to your application."
|
|
19
|
+
|
|
20
|
+
def copy_helpers
|
|
21
|
+
helper_directory(:chatroom)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require "rails/generators"
|
|
2
|
+
module Chatroom
|
|
3
|
+
module Generators
|
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
6
|
+
|
|
7
|
+
desc "Create a Chatroom initalizer and run generators."
|
|
8
|
+
class_option :orm
|
|
9
|
+
|
|
10
|
+
def install_app
|
|
11
|
+
generate "chatroom messages"
|
|
12
|
+
generate "chatroom:views"
|
|
13
|
+
generate "chatroom:helpers"
|
|
14
|
+
generate "chatroom:controllers"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
module Generators
|
|
3
|
+
module OrmHelpers
|
|
4
|
+
def model_contents
|
|
5
|
+
buffer = <<-CONTENT
|
|
6
|
+
# validates
|
|
7
|
+
validates :content, :presence => true, :length => { :maximum => 250 }
|
|
8
|
+
|
|
9
|
+
EMOTIONS = [
|
|
10
|
+
"smile", "despressed", "like", "dull", "proud", "cry", "shy", "shut up",
|
|
11
|
+
"nap", "big cry", "awkward red", "angry", "naughty", "snag", "surprise", "bad",
|
|
12
|
+
"cool", "awkward", "scream", "vomit", "giggle", "lovely", "who cares", "zhuai",
|
|
13
|
+
"hungry", "sleepy", "scared", "sweat", "simper", "solider", "strive", "shout",
|
|
14
|
+
"questionaire", "hiss", "dizzy", "impantient", "be bombed", "skull", "hit head", "bye"
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
# The created time of the message
|
|
18
|
+
def send_time
|
|
19
|
+
self.created_at.strftime("%Y-%m-%d %H:%M:%d")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# convert the marks to html tags
|
|
23
|
+
def html_content
|
|
24
|
+
return "" if content.blank?
|
|
25
|
+
str = content.gsub(/\\[bold\\]/, "<b>")
|
|
26
|
+
str = str.gsub(/\\[-bold\\]/, "</b>")
|
|
27
|
+
str = str.gsub(/\\[italic\\]/, "<i>")
|
|
28
|
+
str = str.gsub(/\\[-italic\\]/, "</i>")
|
|
29
|
+
str = str.gsub(/\\[color:(#.{6})\\]/){ |s| "<span style=\\"color:\#{$1}\\">" }
|
|
30
|
+
str = str.gsub(/\\[-color\\]/, "</span>")
|
|
31
|
+
str = str.gsub(/\\[(.+)\\]/) do |s|
|
|
32
|
+
emotion = EMOTIONS.index($1)
|
|
33
|
+
emotion.nil? ? "[\#{$1}]": "<img src=\\"/assets/emotions/\#{emotion}.gif\\" />"
|
|
34
|
+
end
|
|
35
|
+
return str
|
|
36
|
+
end
|
|
37
|
+
CONTENT
|
|
38
|
+
buffer
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
def model_exists?
|
|
43
|
+
File.exists?(File.join(destination_root, model_path))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def migration_exists?
|
|
47
|
+
Dir.glob("#{File.join(destination_root, migration_path)}/[0-9]*_*.rb").grep(/\d+_add_devise_to_#{table_name}.rb$/).first
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def migration_path
|
|
51
|
+
@migration_path ||= File.join("db", "migrate")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def model_path
|
|
55
|
+
@model_path ||= File.join("app", "models", "#{file_path}.rb")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Chatroom
|
|
2
|
+
# Include this module in your generator to generate Chatroom views.
|
|
3
|
+
# 'copy_views' is the main method and by default copies all views.
|
|
4
|
+
module ViewPathTemplates
|
|
5
|
+
|
|
6
|
+
def self.included(base)
|
|
7
|
+
base.extend ClassMethods
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ClassMethods
|
|
11
|
+
def hide!
|
|
12
|
+
Rails::Generators.hide_namespace self.namespace
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
protected
|
|
17
|
+
def target_path
|
|
18
|
+
@target_path ||= "app/views/chatroom"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def view_directory(name, _target_path = nil)
|
|
22
|
+
directory name.to_s, _target_path || "#{target_path}/#{name}" do |content|
|
|
23
|
+
content
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class ViewsGenerator < Rails::Generators::Base
|
|
29
|
+
include ViewPathTemplates
|
|
30
|
+
source_root File.expand_path('../../../../app/views/chatroom', __FILE__)
|
|
31
|
+
|
|
32
|
+
desc "Copies Chatroom views to your application."
|
|
33
|
+
|
|
34
|
+
def copy_views
|
|
35
|
+
view_directory :messages
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|