RVM is a command-line tool which allows you to easily install, manage, and work with multiple ruby
environments from interpreters to sets of gems. To install Ubuntu in RVM 1. Check Apache and Mysql existed in your machine.
In /var/www/index.html type <?php phpinfo(); ?> , then type http://localhost or http://127.0.0.1 on your browser. If apache installation in your machine already correct, your browser will load PHP informations installed on your machine
source ~/.bash_profile .Note : This command is for reload opened terminal.
rvm requirements. Note : This command is for searching all libs that still needed, and then install the lib.
3. Install Ruby according to the version we need:
rvm install 1.9.3
4.Install another version of ruby with this method. 5. To view all installed RVM
rvm list
6.To use specifics RVM
rvm use 1.9.3
7.If there is an error when running rvm use 1.9.3 try open file ~/.bashrc and ~/.bash_profile and then add this script : [[
-s "$HOME/.rvm/scripts/rvm" ]] && source
"$HOME/.rvm/scripts/rvm" # Load RVM into a shell
session 8. To use Specifics Gemset
Veritrans is Indonesian Payment Gateway. Veritrans accepts Credit Card, Direct Debit, e-Wallet,Bank Transfer and Convenience Store. That's why this Payment Gateway is famous in Indonesia. Further explanations about Veritrans https://veritrans.co.id/ .
VT-Link facilitates a payment feature for your online store by redirecting the customer to Veritrans payment page through a link.
VT-Web
VT-Web facilitatess merchant to use Veritrans payment system, by redirecting the customer to the Veritrans payment page.
VT-Direct
VT-Direct is Veritrans product that allows you to use our payment system directly on your website
Integration Tool Kit
Rails 4
gem veritrans
Configurations
Add gem Veritrans to Gem File and bundle install
gem 'veritrans';
In Console generate veritrans.yml
rails g veritrans:install
Generate Veritrans Form
rails g veritrans:payment_form
This command will generate controller and view for Veritrans.
Because we will built dynamic key for this integrations. You can keep veritrans.yml configurations like this:
development:
# Register in sandbox veritrans and get your keys here:
# https://my.sandbox.veritrans.co.id/settings/config_info
client_key: ""
server_key: ""
api_host: ""
production:
# Register and get your keys here:
# https://my.veritrans.co.id/settings/config_info
client_key: ""
server_key: ""
api_host: ""
staging:
# Register and get your keys here:
# https://my.veritrans.co.id/settings/config_info
client_key: ""
server_key: ""
api_host: ""
Scripting
VT-Web Integrations
In VT-Web Integrations, you just need to obtain redirect URL to Veritrans . After last check out process, put this function for directing page to veritrans:
Rubycritic is gem that wraps around static analysis gems such as Reek, Flay and Flog to provide a quality report of your Ruby code.
Because this gem was uses as Audit guidelines code quality in my company, I often faced hard time to adjust, optimizing and refactor my code.
I began to summarize Rubycritic detecting behavior and implement it in my code to avoid Smells and easier get at least Grade C to bare pass.
A few my conclusion things to consider when developing code according Rubycritic :
Don't! Never! Avoid! Duplicity Code. Rubycritic love this think and will give you sudden great high score, enough to drop your Code Rating Grade.
Evade complicated nested logic with multiple if, switch, etc. It's saver to use functions to handle logic rather than nested logic. Fox example
// Rather than this
if obj == "a"
if obj1 == "1" && obj2 == "2"
// Process
elsif obj1 == "3" && obj2 == "4"
// Process
else
// Process
end
elsif obj1 == "b"
if obj1 == "1" && obj2 == "2"
// Process
elsif obj1 == "3" && obj2 == "4"
// Process
else
// Process
end
else
// Process
end
// Use this
if obj == "a"
process(obj1,obj2)
elsif obj1 == "b"
process(obj1,obj2)
else
// Process
end
Evade complicated nested loops with multiple each, for, etc. It's saver to use functions to handle loops rather than nested loops. Fox example
// Rather than this
data_sources.each do |data_source|
data_source.each do |data|
end
end
// Use This
data_sources.each do |data_source|
process(data_source)
end
If your function using nested hash, redeclare multiple used nested hash using variable.
// rather than
if params[:id] == '1'
user = User.where('id = ?',params[:id])
end
// Used This
id = params[:id]
if id == '1'
user = User.where('id = ?',id)
end
Breakman is static analysis security scanner for Ruby on Rails. It's open source vulnerability scanner specifically designed for Ruby on Rails applications. It statically analyzes Rails application code to find security issues at any stage of development. I will share some trick to avoid Breakman Mass Assignment medium settings warning.
Pay attention to your model relationship. My suggestion always use Nested Attributes .
If necessary used attr_protected to relationship variable key in your model.
Below is some of example case I've solved:
Example Case 1 "Without Relationship" :
Set relationship variable in attr_protected to avoid Breakman warning.
LinkedIn OAuth 2.0 is Rails Gems to integrate Linked Social Media to our Apps through API. This Gem is easy to integrated and use, we can directly GET and POST data from Linkedin. But, theres a problem when using add_share API using https://github.com/emorikawa/linkedin-oauth2 documentations. api.add_share(content:"hi")will always generated error. I've search, read Linkedin documentation, and customize the library but it always generated error. After a few times I found that doing a little change in add_share comments it will works. Changes the command into: api.add_share(comment:"hi") Voila, it works... :D
Koala is a Facebook library for Ruby, supporting the Graph API (including the batch requests and photo uploads), the REST API, realtime updates, test users, and OAuth validation.
Installation
In Gemfile:
gem "koala", "~> 2.0"
gem 'oauth', '~> 0.4.7'
Never forget to bundle install
Build Callback URL route:
get '/facebook_callback' => 'facebook#callback', as: :facebook_callback
Facebook Configurations
Get App ID and Secret Key:
Go to https://developers.facebook.com/
In My Apps, add or go to your New App
Get your App ID and App secret
App Configurations
In config/environments/{{your-environments}} add this line
This process will built redirect function to permission page user account in Facebook and return with App Token and App Token Secret. Facebook doesn't recognize localhost with port, if we want to built this connectivity it's better to do it in staging or live servers. Only to get Token and Secret Token Code.
// Connect
facebook_connect = Koala::Facebook::OAuth.new({{your-app-id}},{{your-secret-id}}, {{callback URL}})
// This function will automatically redirecting user to Facebook permission page and redirect it back to your Callback URL
redirect_to facebook_connect.url_for_oauth_code(:permissions => ["publish_actions", "user_posts"])
// Get Token Accces Code
code = facebook.get_access_token(params[:code])
// Get Token Access Secret Code
app_code = facebook.get_app_access_token
// Sample of Get my profile from Facebook
client = Koala::Facebook::API.new(code, {{your -secret-key}})
me = client.get_object("me")
// Save code and app_code to database. This tokens needed for REST API Process
Breakman is static analysis security scanner for Ruby on Rails. It's open source vulnerability scanner specifically designed for Ruby on Rails applications. It statically analyzes Rails application code to find security issues at any stage of development. I will share some trick to avoid Breakman SQL Injection medium settings warning. 1. Example Case "IN query": Wrong Format : id = [1,2,3,4,5] query = self.find(:all, :conditions =>["id in ("+id.joins(",")+")"]) Correct Format : id = [1,2,3,4,5] query = self.find(:all, :conditions =>["id in (?)", id]) or query = self.where("id in (?)", id) 2. Example Case "string query": Wrong Format : query = self.where("id = '"+id+"' and place = '"+place+"' and user = '"+user+"' ") Correct Format : query_conditions = [] unless id.blank? query_conditions << {"id = '"+id+"'"} end unless id.blank? query_conditions << {"place= '"+place+"'"} end unless id.blank? query_conditions << {"user = '"+user+"'"} end query_where = query_conditions.joins("and") result = self.where(query_where)