veritrans 2.1.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +6 -1
- data/.travis.yml +3 -5
- data/CHANGELOG.md +20 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +89 -94
- data/Procfile +1 -1
- data/README.md +62 -13
- data/api_reference.md +10 -10
- data/example/rails/cable/Gemfile +48 -0
- data/example/rails/cable/Gemfile.lock +184 -0
- data/example/rails/cable/README.md +29 -0
- data/example/rails/cable/Rakefile +6 -0
- data/example/rails/cable/app/assets/config/manifest.js +3 -0
- data/example/rails/cable/app/assets/images/.keep +0 -0
- data/example/rails/cable/app/assets/javascripts/application.js +15 -0
- data/example/rails/cable/app/assets/javascripts/cable.js +13 -0
- data/example/rails/cable/app/assets/javascripts/channels/.keep +0 -0
- data/example/rails/cable/app/assets/javascripts/chats.js +39 -0
- data/example/rails/cable/app/assets/javascripts/rooms.js +55 -0
- data/example/rails/cable/app/assets/stylesheets/application.css +16 -0
- data/example/rails/cable/app/assets/stylesheets/chatbox.scss +31 -0
- data/example/rails/cable/app/assets/stylesheets/peoplebox.scss +6 -0
- data/example/rails/cable/app/channels/application_cable/channel.rb +4 -0
- data/example/rails/cable/app/channels/application_cable/connection.rb +4 -0
- data/example/rails/cable/app/channels/rooms_texting_channel.rb +13 -0
- data/example/rails/cable/app/controllers/application_controller.rb +3 -0
- data/example/rails/cable/app/controllers/chats_controller.rb +18 -0
- data/example/rails/cable/app/controllers/concerns/.keep +0 -0
- data/example/rails/cable/app/controllers/pays_controller.rb +28 -0
- data/example/rails/cable/app/controllers/rooms_controller.rb +4 -0
- data/example/rails/cable/app/helpers/application_helper.rb +2 -0
- data/example/rails/cable/app/helpers/chats_helper.rb +2 -0
- data/example/rails/cable/app/helpers/rooms_helper.rb +5 -0
- data/example/rails/cable/app/jobs/application_job.rb +2 -0
- data/example/rails/cable/app/jobs/chat_broadcaster_job.rb +15 -0
- data/example/rails/cable/app/mailers/application_mailer.rb +4 -0
- data/example/rails/cable/app/models/application_record.rb +3 -0
- data/example/rails/cable/app/models/chat.rb +41 -0
- data/example/rails/cable/app/models/concerns/.keep +0 -0
- data/example/rails/cable/app/models/order.rb +2 -0
- data/example/rails/cable/app/models/user.rb +2 -0
- data/example/rails/cable/app/views/chats/_chat.html.erb +18 -0
- data/example/rails/cable/app/views/layouts/application.html.erb +19 -0
- data/example/rails/cable/app/views/layouts/mailer.html.erb +13 -0
- data/example/rails/cable/app/views/layouts/mailer.text.erb +1 -0
- data/example/rails/cable/app/views/rooms/_chatbox.html.erb +13 -0
- data/example/rails/cable/app/views/rooms/_online_people.html.erb +53 -0
- data/example/rails/cable/app/views/rooms/index.html.erb +9 -0
- data/example/rails/cable/bin/bundle +3 -0
- data/example/rails/cable/bin/rails +9 -0
- data/example/rails/cable/bin/rake +9 -0
- data/example/rails/cable/bin/setup +34 -0
- data/example/rails/cable/bin/spring +16 -0
- data/example/rails/cable/bin/update +29 -0
- data/example/rails/cable/config.ru +5 -0
- data/example/rails/cable/config/application.rb +16 -0
- data/example/rails/cable/config/boot.rb +3 -0
- data/example/rails/cable/config/cable.yml +9 -0
- data/example/rails/cable/config/database.yml +20 -0
- data/example/rails/cable/config/environment.rb +5 -0
- data/example/rails/cable/config/environments/development.rb +57 -0
- data/example/rails/cable/config/environments/production.rb +86 -0
- data/example/rails/cable/config/environments/test.rb +42 -0
- data/example/rails/cable/config/initializers/application_controller_renderer.rb +6 -0
- data/example/rails/cable/config/initializers/assets.rb +11 -0
- data/example/rails/cable/config/initializers/backtrace_silencers.rb +7 -0
- data/example/rails/cable/config/initializers/cookies_serializer.rb +5 -0
- data/example/rails/cable/config/initializers/filter_parameter_logging.rb +4 -0
- data/example/rails/cable/config/initializers/inflections.rb +16 -0
- data/example/rails/cable/config/initializers/mime_types.rb +4 -0
- data/example/rails/cable/config/initializers/new_framework_defaults.rb +24 -0
- data/example/rails/cable/config/initializers/session_store.rb +3 -0
- data/example/rails/cable/config/initializers/sidekiq.rb +2 -0
- data/example/rails/cable/config/initializers/veritrans.rb +46 -0
- data/example/rails/cable/config/initializers/wrap_parameters.rb +14 -0
- data/example/rails/cable/config/locales/en.yml +23 -0
- data/example/rails/cable/config/puma.rb +47 -0
- data/example/rails/cable/config/routes.rb +18 -0
- data/example/rails/cable/config/secrets.yml +22 -0
- data/example/rails/cable/config/spring.rb +6 -0
- data/example/rails/cable/config/veritrans.yml +13 -0
- data/example/rails/cable/db/development.sqlite3 +0 -0
- data/example/rails/cable/db/migrate/20161215070044_create_chats.rb +10 -0
- data/example/rails/cable/db/migrate/20161215072021_create_users.rb +10 -0
- data/example/rails/cable/db/migrate/20161219110219_create_orders.rb +11 -0
- data/example/rails/cable/db/schema.rb +37 -0
- data/example/rails/cable/db/seeds.rb +41 -0
- data/example/rails/cable/db/test.sqlite3 +0 -0
- data/example/rails/cable/lib/assets/.keep +0 -0
- data/example/rails/cable/lib/tasks/.keep +0 -0
- data/example/rails/cable/public/404.html +67 -0
- data/example/rails/cable/public/422.html +67 -0
- data/example/rails/cable/public/500.html +66 -0
- data/example/rails/cable/public/apple-touch-icon-precomposed.png +0 -0
- data/example/rails/cable/public/apple-touch-icon.png +0 -0
- data/example/rails/cable/public/favicon.ico +0 -0
- data/example/rails/cable/public/images/avatar1.jpg +0 -0
- data/example/rails/cable/public/images/avatar2.jpg +0 -0
- data/example/rails/cable/public/images/avatar3.jpg +0 -0
- data/example/rails/cable/public/images/avatar4.jpg +0 -0
- data/example/rails/cable/public/images/avatar5.jpg +0 -0
- data/example/rails/cable/public/images/avatar6.jpg +0 -0
- data/example/rails/cable/public/robots.txt +5 -0
- data/example/rails/cable/vendor/assets/javascripts/.keep +0 -0
- data/example/rails/cable/vendor/assets/stylesheets/.keep +0 -0
- data/example/rails/cable/vendor/assets/stylesheets/photon.css +2333 -0
- data/example/rails/simplepay/Gemfile +54 -0
- data/example/rails/simplepay/Gemfile.lock +178 -0
- data/example/rails/simplepay/README.md +30 -0
- data/example/rails/simplepay/Rakefile +6 -0
- data/example/rails/simplepay/app/assets/config/manifest.js +3 -0
- data/example/rails/simplepay/app/assets/images/.keep +0 -0
- data/example/rails/simplepay/app/assets/javascripts/application.js +16 -0
- data/example/rails/simplepay/app/assets/javascripts/cable.js +13 -0
- data/example/rails/simplepay/app/assets/javascripts/channels/.keep +0 -0
- data/example/rails/simplepay/app/assets/javascripts/pay.js +18 -0
- data/example/rails/simplepay/app/assets/stylesheets/application.css +15 -0
- data/example/rails/simplepay/app/assets/stylesheets/style.css +254 -0
- data/example/rails/simplepay/app/channels/application_cable/channel.rb +4 -0
- data/example/rails/simplepay/app/channels/application_cable/connection.rb +4 -0
- data/example/rails/simplepay/app/controllers/application_controller.rb +3 -0
- data/example/rails/simplepay/app/controllers/concerns/.keep +0 -0
- data/example/rails/simplepay/app/controllers/home_controller.rb +16 -0
- data/example/rails/simplepay/app/controllers/pay_controller.rb +10 -0
- data/example/rails/simplepay/app/helpers/application_helper.rb +2 -0
- data/example/rails/simplepay/app/helpers/pay_helper.rb +2 -0
- data/example/rails/simplepay/app/jobs/application_job.rb +2 -0
- data/example/rails/simplepay/app/mailers/application_mailer.rb +4 -0
- data/example/rails/simplepay/app/models/application_record.rb +3 -0
- data/example/rails/simplepay/app/models/concerns/.keep +0 -0
- data/example/rails/simplepay/app/models/order.rb +2 -0
- data/example/rails/simplepay/app/views/home/index.html.erb +19 -0
- data/example/rails/simplepay/app/views/layouts/application.html.erb +15 -0
- data/example/rails/simplepay/app/views/layouts/mailer.html.erb +13 -0
- data/example/rails/simplepay/app/views/layouts/mailer.text.erb +1 -0
- data/example/rails/simplepay/app/views/pay/notify.html.erb +2 -0
- data/example/rails/simplepay/bin/bundle +3 -0
- data/example/rails/simplepay/bin/rails +9 -0
- data/example/rails/simplepay/bin/rake +9 -0
- data/example/rails/simplepay/bin/setup +34 -0
- data/example/rails/simplepay/bin/spring +16 -0
- data/example/rails/simplepay/bin/update +29 -0
- data/example/rails/simplepay/config.ru +5 -0
- data/example/rails/simplepay/config/application.rb +15 -0
- data/example/rails/simplepay/config/boot.rb +3 -0
- data/example/rails/simplepay/config/cable.yml +9 -0
- data/example/rails/simplepay/config/database.yml +25 -0
- data/example/rails/simplepay/config/environment.rb +5 -0
- data/example/rails/simplepay/config/environments/development.rb +57 -0
- data/example/rails/simplepay/config/environments/production.rb +86 -0
- data/example/rails/simplepay/config/environments/test.rb +42 -0
- data/example/rails/simplepay/config/initializers/application_controller_renderer.rb +6 -0
- data/example/rails/simplepay/config/initializers/assets.rb +11 -0
- data/example/rails/simplepay/config/initializers/backtrace_silencers.rb +7 -0
- data/example/rails/simplepay/config/initializers/cookies_serializer.rb +5 -0
- data/example/rails/simplepay/config/initializers/filter_parameter_logging.rb +4 -0
- data/example/rails/simplepay/config/initializers/inflections.rb +16 -0
- data/example/rails/simplepay/config/initializers/mime_types.rb +4 -0
- data/example/rails/simplepay/config/initializers/new_framework_defaults.rb +24 -0
- data/example/rails/simplepay/config/initializers/session_store.rb +3 -0
- data/example/rails/simplepay/config/initializers/veritrans.rb +46 -0
- data/example/rails/simplepay/config/initializers/wrap_parameters.rb +14 -0
- data/example/rails/simplepay/config/locales/en.yml +23 -0
- data/example/rails/simplepay/config/puma.rb +47 -0
- data/example/rails/simplepay/config/routes.rb +5 -0
- data/example/rails/simplepay/config/secrets.yml +22 -0
- data/example/rails/simplepay/config/spring.rb +6 -0
- data/example/rails/simplepay/config/veritrans.yml +18 -0
- data/example/rails/simplepay/db/development.sqlite3 +0 -0
- data/example/rails/simplepay/db/migrate/20161221090855_create_orders.rb +10 -0
- data/example/rails/simplepay/db/schema.rb +22 -0
- data/example/rails/simplepay/db/seeds.rb +7 -0
- data/example/rails/simplepay/db/test.sqlite3 +0 -0
- data/example/rails/simplepay/lib/assets/.keep +0 -0
- data/example/rails/simplepay/lib/tasks/.keep +0 -0
- data/example/rails/simplepay/public/404.html +67 -0
- data/example/rails/simplepay/public/422.html +67 -0
- data/example/rails/simplepay/public/500.html +66 -0
- data/example/rails/simplepay/public/apple-touch-icon-precomposed.png +0 -0
- data/example/rails/simplepay/public/apple-touch-icon.png +0 -0
- data/example/rails/simplepay/public/favicon.ico +0 -0
- data/example/rails/simplepay/public/robots.txt +5 -0
- data/example/rails/simplepay/vendor/assets/javascripts/.keep +0 -0
- data/example/rails/simplepay/vendor/assets/stylesheets/.keep +0 -0
- data/example/{README.md → sinatra/README.md} +0 -0
- data/example/{config.ru → sinatra/config.ru} +3 -0
- data/example/{index.erb → sinatra/index.erb} +7 -6
- data/example/{localization.erb → sinatra/localization.erb} +6 -5
- data/example/{points.erb → sinatra/points.erb} +6 -5
- data/example/{recurring.erb → sinatra/recurring.erb} +6 -6
- data/example/{response.erb → sinatra/response.erb} +4 -1
- data/example/{sinatra.rb → sinatra/sinatra.rb} +9 -3
- data/example/{style.css → sinatra/style.css} +11 -0
- data/example/{veritrans.yml → sinatra/veritrans.yml} +2 -2
- data/example/{widget.erb → sinatra/widget.erb} +18 -6
- data/lib/generators/templates/assets/credit_card_form.js +6 -0
- data/lib/generators/templates/payments_controller.rb +4 -4
- data/lib/generators/templates/veritrans.yml +5 -5
- data/lib/generators/templates/views/_credit_card_form.erb +2 -2
- data/lib/generators/templates/views/_veritrans_include.erb +1 -1
- data/lib/generators/veritrans/install_generator.rb +1 -1
- data/lib/generators/veritrans/payment_form_generator.rb +1 -1
- data/lib/veritrans.rb +106 -5
- data/lib/veritrans/api.rb +7 -7
- data/lib/veritrans/cli.rb +11 -5
- data/lib/veritrans/client.rb +7 -4
- data/lib/veritrans/config.rb +5 -3
- data/lib/veritrans/events.rb +46 -35
- data/lib/veritrans/result.rb +58 -2
- data/lib/veritrans/testing.rb +156 -0
- data/lib/veritrans/version.rb +1 -1
- data/spec/cli_spec.rb +2 -2
- data/spec/fixtures/approve_failed.yml +1 -1
- data/spec/fixtures/cancel_failed.yml +1 -1
- data/spec/fixtures/cancel_success.yml +2 -2
- data/spec/fixtures/capture_failed.yml +1 -1
- data/spec/fixtures/charge.yml +2 -2
- data/spec/fixtures/charge_direct.yml +1 -1
- data/spec/fixtures/charge_vtweb.yml +2 -2
- data/spec/fixtures/cli_test_1111-not-exists.yml +1 -1
- data/spec/fixtures/cli_test_not_exists.yml +1 -1
- data/spec/fixtures/cli_test_real_txn.yml +1 -1
- data/spec/fixtures/cli_test_unauthorized.yml +1 -1
- data/spec/fixtures/events_test_real_txn.yml +1 -1
- data/spec/fixtures/expire_failed.yml +1 -1
- data/spec/fixtures/expire_success.yml +1 -1
- data/spec/fixtures/midtrans_status.yml +2 -2
- data/spec/fixtures/status_fail.yml +1 -1
- data/spec/fixtures/status_success.yml +2 -2
- data/spec/rails_plugin_spec.rb +37 -20
- data/spec/spec_helper.rb +0 -1
- data/spec/veritrans_client_spec.rb +1 -1
- data/spec/veritrans_config_spec.rb +1 -1
- data/spec/veritrans_events_spec.rb +6 -6
- data/spec/veritrans_testing_spec.rb +184 -0
- data/testing_webhooks.md +2 -2
- data/veritrans.gemspec +1 -1
- metadata +195 -16
- data/lib/veritrans/core_extensions.rb +0 -32
@@ -0,0 +1,16 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require photon
|
15
|
+
*= require_self
|
16
|
+
*/
|
@@ -0,0 +1,31 @@
|
|
1
|
+
.chatbox {
|
2
|
+
height: 100%;
|
3
|
+
.chats {
|
4
|
+
height: 85%;
|
5
|
+
padding: 0px;
|
6
|
+
list-style: none;
|
7
|
+
margin: 0;
|
8
|
+
overflow-x: scroll;
|
9
|
+
|
10
|
+
.chat {
|
11
|
+
padding: 5px 25px;
|
12
|
+
p { margin: 0px; }
|
13
|
+
img.person-avatar {
|
14
|
+
width: 25px;
|
15
|
+
height: 25px;
|
16
|
+
}
|
17
|
+
} // .chat
|
18
|
+
} // .chats
|
19
|
+
|
20
|
+
.chat-input {
|
21
|
+
height: 15%;
|
22
|
+
padding: 7px;
|
23
|
+
|
24
|
+
form { height: 100%; width: 100%; }
|
25
|
+
|
26
|
+
#chat-input-text {
|
27
|
+
width: 100%;
|
28
|
+
height: 100%;
|
29
|
+
} // #chat-input-text
|
30
|
+
} // .chat-input
|
31
|
+
} // .chatbox
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class ChatsController < ApplicationController
|
2
|
+
def generate_checkout_token
|
3
|
+
chat = Chat.find(params[:id])
|
4
|
+
|
5
|
+
order_id = "#{params[:id]}#{SecureRandom.hex(3)}"
|
6
|
+
Order.create!(order_id: order_id)
|
7
|
+
|
8
|
+
response = Veritrans.create_widget_token(
|
9
|
+
transaction_details: {
|
10
|
+
order_id: order_id,
|
11
|
+
gross_amount: chat.gross_amount
|
12
|
+
}
|
13
|
+
)
|
14
|
+
|
15
|
+
token = response.token_id
|
16
|
+
render json: {token: token}
|
17
|
+
end
|
18
|
+
end
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class PaysController < ApplicationController
|
2
|
+
skip_before_action :verify_authenticity_token
|
3
|
+
|
4
|
+
def notify
|
5
|
+
transaction_status = params["transaction_status"]
|
6
|
+
fraud_status = params["fraud_status"]
|
7
|
+
|
8
|
+
if transaction_status == "capture" && fraud_status == "accept"
|
9
|
+
Order.find_by_order_id(params["order_id"]).update_attributes!(
|
10
|
+
transaction_status: transaction_status
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
render text: "OK"
|
15
|
+
end
|
16
|
+
|
17
|
+
def finish
|
18
|
+
redirect_to rooms_path
|
19
|
+
end
|
20
|
+
|
21
|
+
def unfinish
|
22
|
+
redirect_to rooms_path
|
23
|
+
end
|
24
|
+
|
25
|
+
def error
|
26
|
+
redirect_to rooms_path
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class ChatBroadcasterJob < ApplicationJob
|
2
|
+
queue_as :default
|
3
|
+
|
4
|
+
def perform(chat)
|
5
|
+
ActionCable.server.broadcast "chat_rooms_channel",
|
6
|
+
chat: render_message(chat)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def render_message(chat)
|
12
|
+
ChatsController.render partial: 'chats/chat',
|
13
|
+
locals: {chat: chat}
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Chat < ApplicationRecord
|
2
|
+
belongs_to :sender, class_name: User
|
3
|
+
after_create_commit { ChatBroadcasterJob.perform_later(self) }
|
4
|
+
|
5
|
+
ITEMABLE_REGEX = /\A.*jual\s+/i
|
6
|
+
|
7
|
+
def itemable?
|
8
|
+
!(text =~ ITEMABLE_REGEX).nil?
|
9
|
+
end
|
10
|
+
|
11
|
+
def gross_amount
|
12
|
+
items.inject(0) { |sum, elem| sum + elem[:price] }
|
13
|
+
end
|
14
|
+
|
15
|
+
def items
|
16
|
+
items = []
|
17
|
+
return items unless itemable?
|
18
|
+
|
19
|
+
clean_text = text.dup.gsub(ITEMABLE_REGEX, '')
|
20
|
+
|
21
|
+
# satu text jualan bisa berisi banyak item yang dipisahkan
|
22
|
+
# oleh tanda titik koma (;)
|
23
|
+
items_texts = clean_text.split(';')
|
24
|
+
|
25
|
+
# iterasi tiap text item
|
26
|
+
items_texts.each do |item_text|
|
27
|
+
# pisahkan item text berdasarkan tanda koma
|
28
|
+
# setelah itu ambil tiap 2 elemen data tiap satu iterasi
|
29
|
+
item_text.split(",").each_slice(2) do |name, price|
|
30
|
+
# tambahkan ke koleksi items
|
31
|
+
items << {
|
32
|
+
name: name,
|
33
|
+
price: price.try(:tr, '.', '').to_i
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# return items
|
39
|
+
items
|
40
|
+
end
|
41
|
+
end
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<li class='chat'>
|
2
|
+
<%= image_tag chat.sender.avatar,
|
3
|
+
class: 'person-avatar img-circle media-object pull-left' %>
|
4
|
+
<div class='media-body'>
|
5
|
+
<strong><%= chat.sender.name %></strong>
|
6
|
+
<p><%= chat.text %></p>
|
7
|
+
|
8
|
+
<% if chat.itemable? && chat.items.any? && chat.gross_amount > 0 %>
|
9
|
+
<a href="#beli-<%= chat.id %>"
|
10
|
+
data-token=""
|
11
|
+
data-chat-id="<%= chat.id %>"
|
12
|
+
class='buy-chat-items'>
|
13
|
+
Beli
|
14
|
+
</a>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
</div>
|
18
|
+
</li>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Cable</title>
|
5
|
+
<%= csrf_meta_tags %>
|
6
|
+
|
7
|
+
<%= stylesheet_link_tag 'application', media: 'all' %>
|
8
|
+
<%= javascript_include_tag 'application' %>
|
9
|
+
<script src="https://app.sandbox.midtrans.com/snap/snap.js"></script>
|
10
|
+
</head>
|
11
|
+
|
12
|
+
<body>
|
13
|
+
<div class='window'>
|
14
|
+
<div class='window-content'>
|
15
|
+
<%= yield %>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</body>
|
19
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= yield %>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class='chatbox'>
|
2
|
+
<ul class='chats'>
|
3
|
+
<% all_chats.each do |chat| %>
|
4
|
+
<%= render "chats/chat", chat: chat %>
|
5
|
+
<% end %>
|
6
|
+
</ul>
|
7
|
+
|
8
|
+
<div class='chat-input'>
|
9
|
+
<%= form_for Chat.new do |f| %>
|
10
|
+
<textarea id='chat-input-text' class='form-control' placeholder="Type 'Jual Nama Product, harga', e.g 'jual pisang, 3000'"></textarea>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
</div>
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<ul class="list-group people-box">
|
2
|
+
<li class="list-group-header">
|
3
|
+
<input class="form-control" type="text" placeholder="Search for someone">
|
4
|
+
</li>
|
5
|
+
|
6
|
+
<li class="list-group-item active">
|
7
|
+
<%= image_tag 'avatar1.jpg', class: 'person-avatar img-circle media-object pull-left' %>
|
8
|
+
<div class="media-body">
|
9
|
+
<strong>List item title</strong>
|
10
|
+
<p>Lorem ipsum dolor sit amet.</p>
|
11
|
+
</div>
|
12
|
+
</li>
|
13
|
+
|
14
|
+
<li class="list-group-item">
|
15
|
+
<%= image_tag 'avatar2.jpg', class: 'person-avatar img-circle media-object pull-left' %>
|
16
|
+
<div class="media-body">
|
17
|
+
<strong>List item title</strong>
|
18
|
+
<p>Lorem ipsum dolor sit amet.</p>
|
19
|
+
</div>
|
20
|
+
</li>
|
21
|
+
|
22
|
+
<li class="list-group-item">
|
23
|
+
<%= image_tag 'avatar3.jpg', class: 'person-avatar img-circle media-object pull-left' %>
|
24
|
+
<div class="media-body">
|
25
|
+
<strong>List item title</strong>
|
26
|
+
<p>Lorem ipsum dolor sit amet.</p>
|
27
|
+
</div>
|
28
|
+
</li>
|
29
|
+
|
30
|
+
<li class="list-group-item">
|
31
|
+
<%= image_tag 'avatar4.jpg', class: 'person-avatar img-circle media-object pull-left' %>
|
32
|
+
<div class="media-body">
|
33
|
+
<strong>List item title</strong>
|
34
|
+
<p>Lorem ipsum dolor sit amet.</p>
|
35
|
+
</div>
|
36
|
+
</li>
|
37
|
+
|
38
|
+
<li class="list-group-item">
|
39
|
+
<%= image_tag 'avatar5.jpg', class: 'person-avatar img-circle media-object pull-left' %>
|
40
|
+
<div class="media-body">
|
41
|
+
<strong>List item title</strong>
|
42
|
+
<p>Lorem ipsum dolor sit amet.</p>
|
43
|
+
</div>
|
44
|
+
</li>
|
45
|
+
|
46
|
+
<li class="list-group-item">
|
47
|
+
<%= image_tag 'avatar6.jpg', class: 'person-avatar img-circle media-object pull-left' %>
|
48
|
+
<div class="media-body">
|
49
|
+
<strong>List item title</strong>
|
50
|
+
<p>Lorem ipsum dolor sit amet.</p>
|
51
|
+
</div>
|
52
|
+
</li>
|
53
|
+
</ul>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
begin
|
3
|
+
load File.expand_path('../spring', __FILE__)
|
4
|
+
rescue LoadError => e
|
5
|
+
raise unless e.message.include?('spring')
|
6
|
+
end
|
7
|
+
APP_PATH = File.expand_path('../config/application', __dir__)
|
8
|
+
require_relative '../config/boot'
|
9
|
+
require 'rails/commands'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pathname'
|
3
|
+
require 'fileutils'
|
4
|
+
include FileUtils
|
5
|
+
|
6
|
+
# path to your application root.
|
7
|
+
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
|
8
|
+
|
9
|
+
def system!(*args)
|
10
|
+
system(*args) || abort("\n== Command #{args} failed ==")
|
11
|
+
end
|
12
|
+
|
13
|
+
chdir APP_ROOT do
|
14
|
+
# This script is a starting point to setup your application.
|
15
|
+
# Add necessary setup steps to this file.
|
16
|
+
|
17
|
+
puts '== Installing dependencies =='
|
18
|
+
system! 'gem install bundler --conservative'
|
19
|
+
system('bundle check') || system!('bundle install')
|
20
|
+
|
21
|
+
# puts "\n== Copying sample files =="
|
22
|
+
# unless File.exist?('config/database.yml')
|
23
|
+
# cp 'config/database.yml.sample', 'config/database.yml'
|
24
|
+
# end
|
25
|
+
|
26
|
+
puts "\n== Preparing database =="
|
27
|
+
system! 'bin/rails db:setup'
|
28
|
+
|
29
|
+
puts "\n== Removing old logs and tempfiles =="
|
30
|
+
system! 'bin/rails log:clear tmp:clear'
|
31
|
+
|
32
|
+
puts "\n== Restarting application server =="
|
33
|
+
system! 'bin/rails restart'
|
34
|
+
end
|