kablam 0.0.4 → 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 +4 -4
- data/.DS_Store +0 -0
- data/app/assets/javascripts/kablam/ajax.js +531 -0
- data/app/assets/javascripts/kablam/forms.js +167 -0
- data/app/assets/javascripts/kablam/messaging.js +95 -0
- data/app/assets/stylesheets/kablam.scss +25 -0
- data/app/channels/chat_channel.rb +12 -0
- data/app/controllers/concerns/api_settings.rb +41 -0
- data/app/controllers/data_controller.rb +133 -0
- data/app/views/data/create.js.erb +10 -0
- data/app/views/data/destroy.js.erb +12 -0
- data/app/views/data/form.html.erb +1 -0
- data/app/views/data/undo.js.erb +2 -0
- data/app/views/data/update.js.erb +9 -0
- data/app/views/kablam_forms/_form_generator.html.erb +1 -1
- data/app/views/kablam_forms/fields/_checkbox_array.html.erb +3 -3
- data/app/views/kablam_forms/fields/_checkbox_boolean.html.erb +3 -3
- data/app/views/kablam_forms/fields/_file_upload.html.erb +2 -2
- data/app/views/kablam_forms/fields/_input.html.erb +2 -2
- data/app/views/kablam_forms/fields/_multi_inputs.html.erb +2 -2
- data/app/views/kablam_forms/fields/_pretext.html.erb +1 -1
- data/app/views/kablam_forms/fields/_select.html.erb +3 -3
- data/app/views/kablam_forms/fields/_text.html.erb +3 -3
- data/kablam.gemspec +2 -1
- data/lib/generators/kablam/USAGE +5 -2
- data/lib/generators/kablam/install_generator.rb +37 -0
- data/lib/generators/kablam/messaging_generator.rb +40 -0
- data/lib/generators/kablam/templates/chat.rb +44 -0
- data/lib/generators/kablam/templates/kablam.rb +45 -0
- data/lib/generators/kablam/templates/message.rb +53 -0
- data/lib/kablam.rb +35 -0
- data/lib/kablam/forms.rb +26 -21
- data/lib/kablam/kablam_record.rb +61 -0
- metadata +32 -2
- data/lib/generators/kablam/kablam_generator.rb +0 -12
@@ -0,0 +1,10 @@
|
|
1
|
+
var content = '<%= j render "data/models/#{@object.model_name.singular}", obj: @object %>'
|
2
|
+
|
3
|
+
document
|
4
|
+
.getElementById('<%= params[:target] || "target_index" %>')
|
5
|
+
.insertAdjacentHTML('beforeend', content)
|
6
|
+
|
7
|
+
document
|
8
|
+
.querySelector('[action$="/<%= params[:target] || "target_index" %>"]')
|
9
|
+
.reset()
|
10
|
+
<%= render_flash message: 'Created' %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= hide @object %>
|
2
|
+
<% if @object.undoable? %>
|
3
|
+
<%= render_flash message: 'Deleted', partial: 'application/flash_undo',
|
4
|
+
link: button_to('Undo', data_undo_path(@object.class.table_name, @object,
|
5
|
+
@object.model_name.singular.to_sym => { destroyed_at: nil }),
|
6
|
+
{data: { disable_with: 'Restoring…' },
|
7
|
+
class: 'no-underline mt3 f4 tc pv2 ph4 white bg-black hover-bg-green shadow-5',
|
8
|
+
method: :put,
|
9
|
+
remote: true}) %>
|
10
|
+
<% else %>
|
11
|
+
<%= render_flash message: 'Deleted' %>
|
12
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render "kablam_forms/kablam_form", obj: @object, target: (params[:target] || nil), ajax_remove: true %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if params[:target].present? %>
|
2
|
+
|
3
|
+
var objRow = byId('<%= @object.html_id %>')
|
4
|
+
var content = `<%= j render "data/models/#{@object.model_name.singular}", obj: @object %>`
|
5
|
+
var newRow = HTMLElement.From(content);
|
6
|
+
|
7
|
+
objRow.innerHTML = newRow.innerHTML
|
8
|
+
<% end %>
|
9
|
+
<%= render_flash message: 'Information has been updated 👍' %>
|
@@ -21,7 +21,7 @@
|
|
21
21
|
<% kablam_scope = "kablam_forms.#{@table_name}.#{field}" %>
|
22
22
|
<% classyy = @model.prep_form_field[field] %>
|
23
23
|
<% next if classyy == :exclude %>
|
24
|
-
<% input =
|
24
|
+
<% input = obj.input(field) %>
|
25
25
|
<%= (render "kablam_forms/fields/pretext", classes: classes, input: input) if input[:pretext].present? %>
|
26
26
|
<%= render "kablam_forms/fields/#{classyy.to_s}", classes: classes, input: input, f: f %>
|
27
27
|
<% end %>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<div class="<%= classes[:form_group] %>">
|
2
2
|
<fieldset id="<%= input[:id] %>" class="<%= classes[:checkbox_group_wrapper] %>">
|
3
|
-
<legend class="<%= classes[:field_label] %>"><%= input[:label] %></legend>
|
4
|
-
<small id="<%= input[:id] %>-desc" class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
3
|
+
<legend class="<%= classes[:field_label] %>"><%= raw input[:label] %></legend>
|
4
|
+
<small id="<%= input[:id] %>-desc" class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
5
5
|
|
6
6
|
<% input[:choices].each_with_index do |choice, i| %>
|
7
7
|
<div class="<%= classes[:checkbox_wrapper] %>">
|
8
8
|
<input id="<%= input[:id] %>_<%= i %>" name="<%= input[:name] %>[]" class="<%= classes[:checkbox] %>" <%= "checked" if input[:value].include?(choice[:value]) %> type="checkbox" value="<%= choice[:value] %>">
|
9
|
-
<label for="<%= input[:id] %>_<%= i %>" class="<%= classes[:checkbox_label] %>"><%= choice[:label] %></label>
|
9
|
+
<label for="<%= input[:id] %>_<%= i %>" class="<%= classes[:checkbox_label] %>"><%= raw choice[:label] %></label>
|
10
10
|
</div>
|
11
11
|
<% end %>
|
12
12
|
</fieldset>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<div class="<%= classes[:form_group] %>">
|
2
2
|
<fieldset id="<%= input[:id] %>" class="<%= classes[:checkbox_group_wrapper] %>">
|
3
|
-
<legend class="<%= classes[:field_label] %>"><%= input[:label] %></legend>
|
4
|
-
<small id="<%= input[:id] %>-desc" class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
3
|
+
<legend class="<%= classes[:field_label] %>"><%= raw input[:label] %></legend>
|
4
|
+
<small id="<%= input[:id] %>-desc" class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
5
5
|
<div class="<%= classes[:checkbox_wrapper] %>">
|
6
6
|
<input id="<%= input[:id] %>" name="<%= input[:name] %>" class="<%= classes[:checkbox] %>" <%= "checked" if input[:value].present? %> type="checkbox">
|
7
|
-
<label for="<%= input[:id] %>" class="<%= classes[:checkbox_label] %>"><%= input[:choices].first[:label] %></label>
|
7
|
+
<label for="<%= input[:id] %>" class="<%= classes[:checkbox_label] %>"><%= raw input[:choices].first[:label] %></label>
|
8
8
|
</div>
|
9
9
|
</fieldset>
|
10
10
|
</div>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
<div class="<%= classes[:form_group] %>">
|
3
|
-
<label class="<%= classes[:field_label] %>" for="<%= input[:id] %>"><%= input[:label] %></label>
|
4
|
-
<small id="<%= input[:name] %>-desc" class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
3
|
+
<label class="<%= classes[:field_label] %>" for="<%= input[:id] %>"><%= raw input[:label] %></label>
|
4
|
+
<small id="<%= input[:name] %>-desc" class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
5
5
|
<div class="kablam_fileinput_init">
|
6
6
|
<input class="kablam_file <%= classes[:file_upload] %>" name="<%= input[:name] %>" type="file" id="<%= input[:id] %>">
|
7
7
|
</div>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="<%= classes[:form_group] %>">
|
2
|
-
<label for="<%= input[:name] %>" class="<%= classes[:field_label] %>"><%= input[:label] %></label>
|
3
|
-
<small id="<%= input[:name] %>-desc" class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
2
|
+
<label for="<%= input[:name] %>" class="<%= classes[:field_label] %>"><%= raw input[:label] %></label>
|
3
|
+
<small id="<%= input[:name] %>-desc" class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
4
4
|
<input id="<%= input[:id] if input[:id].present? %>" name="<%= input[:name] %>" class="<%= classes[:input] %>" type="text" aria-describedby="<%= input[:name] %>-desc" value="<%= input[:value] %>" placeholder="<%= input[:placeholder] %>">
|
5
5
|
</div>
|
6
6
|
|
@@ -6,8 +6,8 @@
|
|
6
6
|
EX of FORMAT: input = {label: "choices", name: "assessment[choices]", value: ["value", "from", "existing", "DB_ENTRY"], id: "1" (if input_id is used)}
|
7
7
|
%>
|
8
8
|
<div id="multi_input_<%= unique_id %>" class="<%= classes[:form_group] %>">
|
9
|
-
<label class="<%= classes[:field_label] %>"><%= input[:label] %></label>
|
10
|
-
<small class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
9
|
+
<label class="<%= classes[:field_label] %>"><%= raw input[:label] %></label>
|
10
|
+
<small class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
11
11
|
<a href="#!" class="<%= classes[:multi_add_button] %>" onclick='event.preventDefault();addInput("multi_input_<%= unique_id %>", "<%= input[:name] %>[]", { "input": "<%= classes[:input] %>", "btn": "<%= classes[:multi_remove_button] %>", "icon": "<%= classes[:multi_remove_icon] %>", "group": "<%= classes[:multi_input_group] %>"});'><i class="<%= classes[:multi_add_icon] %>"></i></a>
|
12
12
|
<% if input[:value].present? %>
|
13
13
|
<% input[:value].each_with_index do |val, i| %>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<div class="<%= classes[:form_group] %>">
|
2
|
-
<label for="<%= input[:id] %>" class="<%= classes[:field_label] %>"><%= input[:label] %></label>
|
3
|
-
<small id="select_<%= input[:id] %>-desc" class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
2
|
+
<label for="<%= input[:id] %>" class="<%= classes[:field_label] %>"><%= raw input[:label] %></label>
|
3
|
+
<small id="select_<%= input[:id] %>-desc" class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
4
4
|
<select id="<%= input[:id] if input[:id].present? %>" class="select_basic <%= classes[:select] %>" name="<%= input[:name] %>" aria-describedby="select_<%= input[:id] %>-desc">
|
5
|
-
<option value=""><%= input[:placeholder] %></option>
|
5
|
+
<option value=""><%= raw input[:placeholder] %></option>
|
6
6
|
<% input[:choices].each do |choice| %>
|
7
7
|
<option label="<%= choice[:label] %>" value="<%= choice[:value] %>"<%= input[:value].present? ? (" selected=\"selected\"" if input[:value] == choice[:value] ) : "" %>></option>
|
8
8
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div class="<%= classes[:form_group] %>">
|
2
|
-
<label for="<%= input[:name] %>" class="<%= classes[:field_label] %>"><%= input[:label] %></label>
|
3
|
-
<small id="<%= input[:name] %>-desc" class="<%= classes[:field_hint] %>"><%= input[:hint] %></small>
|
4
|
-
<textarea id="<%= input[:id] if input[:id].present? %>" name="<%= input[:name] %>" class="<%= classes[:textarea] %>" aria-describedby="<%= input[:name] %>-desc" placeholder="<%= input[:placeholder] %>"><%= input[:value] if input[:value].present? %></textarea>
|
2
|
+
<label for="<%= input[:name] %>" class="<%= classes[:field_label] %>"><%= raw input[:label] %></label>
|
3
|
+
<small id="<%= input[:name] %>-desc" class="<%= classes[:field_hint] %>"><%= raw input[:hint] %></small>
|
4
|
+
<textarea id="<%= input[:id] if input[:id].present? %>" name="<%= input[:name] %>" class="<%= classes[:textarea] %>" aria-describedby="<%= input[:name] %>-desc" placeholder="<%= input[:placeholder] %>"><%= raw input[:value] if input[:value].present? %></textarea>
|
5
5
|
</div>
|
6
6
|
|
data/kablam.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'kablam'
|
3
|
-
s.version = '0.0.
|
3
|
+
s.version = '0.0.8'
|
4
4
|
s.date = '2018-09-14'
|
5
5
|
s.summary = "Empty Initialization of Gem"
|
6
6
|
s.description = "Gem to make development of everything in rails even faster."
|
@@ -13,4 +13,5 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
s.add_dependency("rails", ">= 5.1.6")
|
15
15
|
s.add_dependency('rails-i18n', ">= 5.1.1")
|
16
|
+
s.add_dependency('puma')
|
16
17
|
end
|
data/lib/generators/kablam/USAGE
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
+
rails generate kablam:install
|
2
|
+
---> This sets up all the basic kablam backend dependencies for auto-forms
|
3
|
+
|
1
4
|
rails generate kablam:forms LOCALE
|
2
5
|
|
3
|
-
---> This will generate
|
6
|
+
---> This will generate an empty template file for use with i18n at '/config/locales/kablam-forms.<LOCALE>.yml'
|
4
7
|
|
5
|
-
rails generate kablam:form_views
|
8
|
+
rails generate kablam:form_views (Not Available Yet)
|
6
9
|
|
7
10
|
---> This will generate all the form-components used with kablam_forms. You can change them to fit any HTML based template you have!
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Kablam
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::NamedBase
|
6
|
+
include Rails::Generators::ResourceHelpers
|
7
|
+
namespace "kablam:install"
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
# argument :name, :type => :string, :default => "en"
|
10
|
+
|
11
|
+
# Change ApplicationRecord's inheritence
|
12
|
+
gsub_file 'app/models/application_record.rb', 'class ApplicationRecord < ActiveRecord::Base', 'class ApplicationRecord < Kablam::KablamRecord'
|
13
|
+
|
14
|
+
# Setup Initializer
|
15
|
+
template "kablam.rb", "config/initializers/kablam.rb"
|
16
|
+
|
17
|
+
def setup_routes
|
18
|
+
route "# form/create/update/destroy/undo for all models"
|
19
|
+
route "get 'd/:name/form' => 'data#form', as: 'data_form'"
|
20
|
+
route "post 'd/:name' => 'data#create', as: 'data_create'"
|
21
|
+
route "patch 'd/:name/:id' => 'data#update', as: 'data_update'"
|
22
|
+
route "delete 'd/:name/:id' => 'data#destroy', as: 'data_destroy'"
|
23
|
+
route "put 'd/:name/:id' => 'data#undo', as: 'data_undo'"
|
24
|
+
end
|
25
|
+
|
26
|
+
def setup_assets
|
27
|
+
inject_into_file 'app/assets/javascripts/application.js', before: "//=require_tree ." do
|
28
|
+
"//=require kablam/ajax"
|
29
|
+
"//=require kablam/forms\n"
|
30
|
+
end
|
31
|
+
prepend_file 'app/assets/stylesheets/application.css.scss', "@import 'kablam';"
|
32
|
+
end
|
33
|
+
|
34
|
+
readme "README"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Kablam
|
4
|
+
module Generators
|
5
|
+
class MessagingGenerator < Rails::Generators::NamedBase
|
6
|
+
include Rails::Generators::ResourceHelpers
|
7
|
+
namespace "kablam:messaging"
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
# argument :name, :type => :string, :default => "en"
|
10
|
+
|
11
|
+
|
12
|
+
def setup_action_cable
|
13
|
+
inject_into_file 'app/assets/javascripts/application.js', after: "//=require_tree .\n" do
|
14
|
+
"//=require cable"
|
15
|
+
end
|
16
|
+
route "mount ActionCable.server => '/cable'"
|
17
|
+
inject_into_file "app/views/layouts/application.html.erb", before: "</head>" do
|
18
|
+
" <%= action_cable_meta_tag %>\n "
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup_models
|
23
|
+
generate "model", "chat user:references subject:string "
|
24
|
+
generate "model", "message chat:references content:text sender_id:integer attachment:string"
|
25
|
+
generate "model", "message_status user:references message references read:boolean"
|
26
|
+
copy_file "chat.rb", "app/models/chat.rb", force: true
|
27
|
+
copy_file "message.rb", "app/models/message.rb", force: true
|
28
|
+
status_migration = Dir.glob(Rails.root.to_s+"/db/migrate/**").last
|
29
|
+
gsub_file status_migration, "t.boolean :read", "t.boolean :read, default: false"
|
30
|
+
|
31
|
+
rake "db:migrate"
|
32
|
+
end
|
33
|
+
def setup_assets
|
34
|
+
inject_into_file 'app/assets/javascripts/application.js', before: "//=require_tree .\n" do
|
35
|
+
"//=require kablam/messaging"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Chat < ApplicationRecord
|
2
|
+
belongs_to :user
|
3
|
+
has_many :messages, dependent: :destroy
|
4
|
+
has_many :message_statuses, through: :messages
|
5
|
+
after_update_commit :broadcast_self
|
6
|
+
|
7
|
+
def messages_array
|
8
|
+
y = messages.map do |x|
|
9
|
+
u = User.find(x.sender_id)
|
10
|
+
h = x.serializable_hash
|
11
|
+
# h["status"] = x.status(user_id)
|
12
|
+
h["chat_id"] = id.to_s
|
13
|
+
h["image"] = u.name? ? u.avatar_url(50) : "/assets/default.png"
|
14
|
+
h['username'] = u.name || "An Amazing Person~"
|
15
|
+
h["user_time"] = x.user_time
|
16
|
+
h
|
17
|
+
end
|
18
|
+
y.sort_by{|x|x["created_at"]}
|
19
|
+
end
|
20
|
+
|
21
|
+
def latest_message
|
22
|
+
messages_array.last
|
23
|
+
end
|
24
|
+
|
25
|
+
def unread_messages(user_id)
|
26
|
+
message_statuses.where(user_id: user_id.to_i, read: false).count
|
27
|
+
end
|
28
|
+
|
29
|
+
def broadcast_self
|
30
|
+
ActionCable.server.broadcast "ChatChannel_#{self.id}", {chat: messages_array.last }
|
31
|
+
end
|
32
|
+
|
33
|
+
def users
|
34
|
+
messages.map{ |m| m.sender_id}.uniq
|
35
|
+
end
|
36
|
+
|
37
|
+
def not_answered(user_id)
|
38
|
+
if !messages.blank?
|
39
|
+
return messages.last.sender_id != user_id
|
40
|
+
else
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Here's the configuration setup for Kablam!
|
2
|
+
# You can change all the defaults to fit the css in your project.
|
3
|
+
# Just for fun, all the defaults used here are based on the awesome Tachyons css library.
|
4
|
+
|
5
|
+
Kablam.setup do |config|
|
6
|
+
# ===========================================================
|
7
|
+
# _ _ ____ ___ _ ____ _ _
|
8
|
+
# |_/ |__| |__] | |__| |\/|
|
9
|
+
# | \_ | | |__] |___ | | | |
|
10
|
+
# .___ __ .
|
11
|
+
# [__ _ ._.._ _ / `| _. __ __ _ __
|
12
|
+
# | (_)[ [ | ) \__.|(_]_) _) (/,_)
|
13
|
+
# ===========================================================
|
14
|
+
|
15
|
+
# These classes are used for the labels/group-wrappers, etc.
|
16
|
+
config.form_wrapper = "pa4 black-80"
|
17
|
+
config.submit_button = "relative no-underline mt3 f4 tc db w-75 pv3 mb3 bg-red hover-bg-green white br2 shadow-5 btn-3d bn outline-0"
|
18
|
+
config.form_group = "measure mb4 relative"
|
19
|
+
config.field_label = "f6 b db mb2"
|
20
|
+
config.field_hint = "f6 black-60 db mb2"
|
21
|
+
config.pretext_wrapper = "measure ph3 pv1 mb3 b ba b--dashed bw1 b--red"
|
22
|
+
config.pretext = "fw5 i f5"
|
23
|
+
|
24
|
+
# Classes for the acutal from field input/select html items =
|
25
|
+
config.input = "input-reset ba b--black-20 pa2 db w-100"
|
26
|
+
config.textarea = "db border-box hover-black w-100 measure ba b--black-20 pa2 br2 mb2"
|
27
|
+
config.dropdown_select = "ba bg-white b--black-20 pa2 mb2 db w-100"
|
28
|
+
config.file_upload = "ba b--black-20 pa5 mb2 db w-100 b--dashed b--red"
|
29
|
+
config.file_upload_icon = "fa fa-upload absolute left-0 right-0 ml-auto mr-auto top-2 mt3 f1 black-05"
|
30
|
+
|
31
|
+
# Checkbox Classes
|
32
|
+
config.checkbox_group_wrapper = "" # Wrapper around all checkboxes
|
33
|
+
config.checkbox_wrapper = "flex items-center mb2" # Wrapper for individual checkbox
|
34
|
+
config.checkbox_label = "f6 b db"
|
35
|
+
config.checkbox = "mr2"
|
36
|
+
|
37
|
+
# Classes for Muli-Input form_type
|
38
|
+
# i.e. a normal input w/ +/- button to add/remove entries.
|
39
|
+
# result is an array []
|
40
|
+
config.multi_input_group = "flex mb2" #wrapper with input + delete button
|
41
|
+
config.multi_add_button = "absolute bg-green hover-bg-red no-underline pv2 pl3 pr3 right-0 top-0 white btn-3d br2"
|
42
|
+
config.multi_remove_button = "relative no-underline bg-red hover-bg-green white pa2 pl3 pr3 ml1 btn-3d br2"
|
43
|
+
config.multi_add_icon = "fa fa-plus"
|
44
|
+
config.multi_remove_icon = "fa fa-trash"
|
45
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# require 'rest-client'
|
2
|
+
class Message < ApplicationRecord
|
3
|
+
belongs_to :chat
|
4
|
+
has_many :message_statuses, dependent: :destroy
|
5
|
+
after_commit :setup_status, :set_updated_at
|
6
|
+
after_commit :broadcast_self, on: :create
|
7
|
+
|
8
|
+
def self.slack_hook
|
9
|
+
# "http://insert-slack-hook-here"
|
10
|
+
nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.slack_message
|
14
|
+
{create: {
|
15
|
+
pretext: "New Message from #{user.name}",
|
16
|
+
author: "#{user.name}",
|
17
|
+
title: "chat.subject",
|
18
|
+
text: "#{content}"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def setup_status
|
24
|
+
MessageStatus.create(user_id: self.chat.user_id, message_id: self.id)
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_updated_at
|
28
|
+
@chat = self.chat
|
29
|
+
@chat.update(updated_at: self.created_at)
|
30
|
+
# @chat.save
|
31
|
+
end
|
32
|
+
|
33
|
+
def status(user_id)
|
34
|
+
MessageStatus.find_by(user_id: user_id, message_id: self.id).read
|
35
|
+
end
|
36
|
+
|
37
|
+
def user
|
38
|
+
User.find(self.sender_id.to_i)
|
39
|
+
end
|
40
|
+
|
41
|
+
def broadcast_self
|
42
|
+
ActionCable.server.broadcast "AdminChannel", {chat_id: "#{chat.id}_#{sender_id}" }
|
43
|
+
|
44
|
+
chat.users.each do |u|
|
45
|
+
ActionCable.server.broadcast "DotChannel_#{u}", {dot: "#{sender_id}" }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def user_time
|
50
|
+
u = User.find(self.sender_id.to_i)
|
51
|
+
ActiveSupport::TimeZone[u.timezone].now if !u.timezone.nil?
|
52
|
+
end
|
53
|
+
end
|
data/lib/kablam.rb
CHANGED
@@ -1,4 +1,33 @@
|
|
1
1
|
module Kablam
|
2
|
+
# Basic form classes (in initialize)
|
3
|
+
mattr_accessor :form_wrapper
|
4
|
+
mattr_accessor :submit_button
|
5
|
+
mattr_accessor :form_group
|
6
|
+
mattr_accessor :field_label
|
7
|
+
mattr_accessor :field_hint
|
8
|
+
mattr_accessor :pretext_wrapper
|
9
|
+
mattr_accessor :pretext
|
10
|
+
|
11
|
+
# Classes for the acutal from field input/select html items:
|
12
|
+
mattr_accessor :input
|
13
|
+
mattr_accessor :textarea
|
14
|
+
mattr_accessor :dropdown_select
|
15
|
+
mattr_accessor :file_upload
|
16
|
+
mattr_accessor :file_upload_icon
|
17
|
+
|
18
|
+
# Checkbox classes
|
19
|
+
mattr_accessor :checkbox_group_wrapper
|
20
|
+
mattr_accessor :checkbox_wrapper
|
21
|
+
mattr_accessor :checkbox_label
|
22
|
+
mattr_accessor :checkbox
|
23
|
+
|
24
|
+
# Multi-Inputs classes (i.e. add string arrays)
|
25
|
+
mattr_accessor :multi_input_group
|
26
|
+
mattr_accessor :multi_add_button
|
27
|
+
mattr_accessor :multi_remove_button
|
28
|
+
mattr_accessor :multi_add_icon
|
29
|
+
mattr_accessor :multi_remove_icon
|
30
|
+
|
2
31
|
module ClassMethods
|
3
32
|
|
4
33
|
end
|
@@ -11,6 +40,12 @@ module Kablam
|
|
11
40
|
receiver.extend ClassMethods
|
12
41
|
receiver.send :include, InstanceMethods
|
13
42
|
end
|
43
|
+
|
44
|
+
def self.setup
|
45
|
+
yield self
|
46
|
+
end
|
47
|
+
|
48
|
+
|
14
49
|
end
|
15
50
|
|
16
51
|
require 'kablam/engine'
|