Thursday, 28 June 2018
Wednesday, 6 June 2018
Devise form anywhere rails
Application controller:-
helper_method :resource_name, :resource, :devise_mapping, :resource_class
def resource_name
:user
end
def resource
@resource ||= User.new
end
def resource_class
User
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
helper_method :resource_name, :resource, :devise_mapping, :resource_class
def resource_name
:user
end
def resource
@resource ||= User.new
end
def resource_class
User
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
Tuesday, 15 May 2018
Redirect back to current page after sign in, sign out
Redirect back to current page after sign in, sign out
Applications_controller.rb
after_filter
:store_location
def store_location
# store last url - this is needed for post-login redirect
to whatever the user last visited.
return unless request.get?
if (request.path != "/users/sign_in" &&
request.path != "/users/sign_up" &&
request.path != "/users/password/new" &&
request.path != "/users/password/edit" &&
request.path != "/users/confirmation" &&
request.path != "/users/sign_out" &&
!request.xhr?) # don't store ajax calls
session[:previous_url] = request.fullpath
end
end
def after_sign_in_path_for(resource)
session[:previous_url] || root_path
end
def after_sign_out_path_for(resource)request.referrer|| root_path
end
Thursday, 10 May 2018
PREVIEW AN IMAGE AND VIDEO BEFORE IT IS UPLOADED
Please take a look at the sample JS code below:
<script type="text/javascript">
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#blah').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$("#imgInp").change(function(){
readURL(this);
});
</script>
and the associated HTML:
<div class="field">
<%= form.label :image %>
<%= form.file_field :image, id: "imgInp" %>
<img id="blah" src="#" alt="your image" style="height: 150px; width: 200px;" />
</div>
================================================================
Preview Video Before Saving
We can follow :-
Sunday, 6 May 2018
Customers should be able to view the venue on a map
application.html.erb
<head>
<title>Wedding Rooms</title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
_form.html.erb :-
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAvuPSxdugPS2FJQibo-i78wVZHWgmKemk"
></script>
<link href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="Stylesheet"></link>
<script src='https://cdn.rawgit.com/pguso/jquery-plugin-circliful/master/js/jquery.circliful.min.js'></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js" ></script>
<div class="field">
<%= f.label :address %><br>
<%= f.text_field :address, id: "gmaps-input-address", class: "form-control" %>
<br>
<div id="gmaps-canvas"></div>
<div id="gmaps-error"></div>
<%= f.hidden_field :latitude, id: "location_latitude" %>
<%= f.hidden_field :longitude, id: "location_longitude" %>
</div>
show.htmlerb
<% if @product.address.present? %>
<p>
<strong>Address:</strong>
<%= @product.address %>
<div id="map"></div>
</p>
<% else %>
<% end %>
<script type="text/javascript">
setTimeout(function(){
$(document).ready(function(){
$('.bxslider').bxSlider({
auto: true,
autoControls: true,
stopAutoOnClick: true,
pager: true,
slideWidth: 200
});
});
}, 2000);
</script>
<style>
#map {
height: 400px;
width: 100%;
}
</style>
<script>
function initMap() {
var lat1 = <%= @product.latitude %>;
var long1 = <%= @product.longitude %>;
var uluru = {lat: lat1, lng: long1};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: uluru
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAvuPSxdugPS2FJQibo-i78wVZHWgmKemk&callback=initMap">
</script>
Migration :-
add_column :products, :latitude, :decimal, {:precision=>10, :scale=>6}
add_column :products, :longitude, :decimal, {:precision=>10, :scale=>6}
<head>
<title>Wedding Rooms</title>
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<%= csrf_meta_tags %>
</head>
_form.html.erb :-
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAvuPSxdugPS2FJQibo-i78wVZHWgmKemk"
></script>
<link href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="Stylesheet"></link>
<script src='https://cdn.rawgit.com/pguso/jquery-plugin-circliful/master/js/jquery.circliful.min.js'></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js" ></script>
<div class="field">
<%= f.label :address %><br>
<%= f.text_field :address, id: "gmaps-input-address", class: "form-control" %>
<br>
<div id="gmaps-canvas"></div>
<div id="gmaps-error"></div>
<%= f.hidden_field :latitude, id: "location_latitude" %>
<%= f.hidden_field :longitude, id: "location_longitude" %>
</div>
show.htmlerb
<% if @product.address.present? %>
<p>
<strong>Address:</strong>
<%= @product.address %>
<div id="map"></div>
</p>
<% else %>
<% end %>
<script type="text/javascript">
setTimeout(function(){
$(document).ready(function(){
$('.bxslider').bxSlider({
auto: true,
autoControls: true,
stopAutoOnClick: true,
pager: true,
slideWidth: 200
});
});
}, 2000);
</script>
<style>
#map {
height: 400px;
width: 100%;
}
</style>
<script>
function initMap() {
var lat1 = <%= @product.latitude %>;
var long1 = <%= @product.longitude %>;
var uluru = {lat: lat1, lng: long1};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 15,
center: uluru
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAvuPSxdugPS2FJQibo-i78wVZHWgmKemk&callback=initMap">
</script>
Migration :-
add_column :products, :latitude, :decimal, {:precision=>10, :scale=>6}
add_column :products, :longitude, :decimal, {:precision=>10, :scale=>6}
Friday, 4 May 2018
Tasks: Need to display mailchimp emails by using API with Pagination
gem 'gibbon'
your_app/config/initializers/gibbon.rb
Gibbon::Request.api_key = "12bfe8bed564a0a4e6b6250baa8f4c51-us14"
Gibbon::Request.timeout = 15
Gibbon::Request.open_timeout = 15
Gibbon::Request.symbolize_keys = true
Gibbon::Request.debug = false
app/controller :-
class HomeController < ApplicationController
def index
gibbon = Gibbon::Request.new(api_key: "12bfe8bed564a0a4e6b6250baa8f4c51-us14", debug: true)
# members = gibbon.lists("5984a13076").members.retrieve
@page = params[:page].present? ? params[:page].to_i : 1
offset = (@page-1) * 50
members = gibbon.lists("5984a13076").members.retrieve(params: {"count": "50", "offset": offset.to_s, "status": "subscribed"})
@contacts = members.body[:members]
@total_pages = (members.body[:total_items]/50.0).ceil
end
end
--------------------------------------------------------------------------------------------------------------------------
Views:-
<div class="row">
<% @contacts.each do |contact| %>
<div class="col-sm-3 text-left">
<a href="mailto:<%= contact[:email_address] %>"><%= contact[:email_address] %></a>
</div>
<% end %>
</div>
<div class="row pull-right">
<nav aria-label="Page navigation " >
<ul class="pagination">
<% if @page > 1 %>
<li class="page-item"><a class="page-link" href="/home/index?page=<%= @page -1%>">Previous</a></li>
<% end %>
<% (1..@total_pages).each do |page|%>
<li class="page-item <%= @page== page ? 'active' : nil %>"><a class="page-link" href="/home/index?page=<%= page %>"><%= page %></a></li>
<% end %>
<% if @page < @total_pages%>
<li class="page-item"><a class="page-link" href="/home/index?page=<%= @page +1%>">Next</a></li>
<% end %>
</ul>
</nav>
</div>
-------------------------------------------------------------------------------------
<style type="text/css">
.pull-right{float: right;}
</style>
Wednesday, 13 December 2017
Mobile Rails API with Devise
1. Add column in User table
rails g migration AddAuthenticationtokenToUsers authentication_token:string
2. rails generate controller Api/V1/Api
3. User.rb
before_save :ensure_authentication_token
def ensure_authentication_token
if authentication_token.blank?
self.authentication_token = generate_authentication_token
end
end
private
def generate_authentication_token
loop do
token = Devise.friendly_token
break token unless User.find_by(authentication_token: token)
end
end
4. ApiController
class Api::V1::ApiController < ApplicationController
def create
end
def destroy
end
respond_to :json
helper_method :current_user
def getting_started
end
def current_user
@current_user ||= User.where(authentication_token: request.headers['User-Token']).first
end
def authenticate_user!
return render json:{error:'401 Unauthorized!'},status: 401 unless current_user
end
end
5. application controller with user over
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) do |user|
user.permit(:email, :password,:password_confirmation, :remember_me)
end
devise_parameter_sanitizer.permit(:sign_in) do |user|
user.permit(:email, :password)
end
devise_parameter_sanitizer.permit(:account_update) do |user|
user.permit(:email, :password,:password_confirmation, :current_password)
end
end
routes.rb
namespace :api do
namespace :v1 do
devise_scope :user do
post "/sign_in", :to => 'sessions#create'
post "/sign_up", :to => 'registrations#create'
put '/change_password', to: 'registrations#change_password'
get "/profile", :to => 'registrations#profile'
post "/update_account", :to => 'registrations#update'
# delete "/sign_out", :to => 'sessions#destroy'
# get "/reset_password", :to => 'registrations#reset_password'
# get "/reset_password_link", :to => 'registrations#reset_password_link'
end
end
end
6. Apipie Doc
gem 'apipie-rails'
bundle install
rails g apipie:install
config/initializers/apipie.rb
Apipie.configure do |config|
config.translate = false
config.app_name = "project_name"
config.api_base_url = ""
config.doc_base_url = "/apipie"
# where is your API defined?
config.api_controllers_matcher = ["#{Rails.root}/app/controllers/*/*/*.rb", "#{Rails.root}/app/controllers/*/*.rb", "#{Rails.root}/app/controllers/*.rb"]
config.authenticate = Proc.new do
authenticate_or_request_with_http_basic do |username, password|
username == "admin" && password == "password"
end
end
end
Doc URL:
https://jee-appy.blogspot.in/2016/03/how-to-make-rest-api-in-rails.html
rails g migration AddAuthenticationtokenToUsers authentication_token:string
2. rails generate controller Api/V1/Api
3. User.rb
before_save :ensure_authentication_token
def ensure_authentication_token
if authentication_token.blank?
self.authentication_token = generate_authentication_token
end
end
private
def generate_authentication_token
loop do
token = Devise.friendly_token
break token unless User.find_by(authentication_token: token)
end
end
4. ApiController
class Api::V1::ApiController < ApplicationController
def create
end
def destroy
end
respond_to :json
helper_method :current_user
def getting_started
end
def current_user
@current_user ||= User.where(authentication_token: request.headers['User-Token']).first
end
def authenticate_user!
return render json:{error:'401 Unauthorized!'},status: 401 unless current_user
end
end
5. application controller with user over
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) do |user|
user.permit(:email, :password,:password_confirmation, :remember_me)
end
devise_parameter_sanitizer.permit(:sign_in) do |user|
user.permit(:email, :password)
end
devise_parameter_sanitizer.permit(:account_update) do |user|
user.permit(:email, :password,:password_confirmation, :current_password)
end
end
routes.rb
namespace :api do
namespace :v1 do
devise_scope :user do
post "/sign_in", :to => 'sessions#create'
post "/sign_up", :to => 'registrations#create'
put '/change_password', to: 'registrations#change_password'
get "/profile", :to => 'registrations#profile'
post "/update_account", :to => 'registrations#update'
# delete "/sign_out", :to => 'sessions#destroy'
# get "/reset_password", :to => 'registrations#reset_password'
# get "/reset_password_link", :to => 'registrations#reset_password_link'
end
end
end
6. Apipie Doc
gem 'apipie-rails'
bundle install
rails g apipie:install
config/initializers/apipie.rb
Apipie.configure do |config|
config.translate = false
config.app_name = "project_name"
config.api_base_url = ""
config.doc_base_url = "/apipie"
# where is your API defined?
config.api_controllers_matcher = ["#{Rails.root}/app/controllers/*/*/*.rb", "#{Rails.root}/app/controllers/*/*.rb", "#{Rails.root}/app/controllers/*.rb"]
config.authenticate = Proc.new do
authenticate_or_request_with_http_basic do |username, password|
username == "admin" && password == "password"
end
end
end
Doc URL:
https://jee-appy.blogspot.in/2016/03/how-to-make-rest-api-in-rails.html
Subscribe to:
Posts (Atom)