Saturday, 3 September 2022

INNER JOIN AND defaults routes with json

 Get states based country:

    @states = State.joins("INNER JOIN countries c on c.id = states.country_id").where("c.id LIKE ?", params[:country_id])


Get county based state name:

@countries = Country.joins("INNER JOIN states s on s.country_id = countries.id").where("LOWER(s.name) LIKE ?", "%params[:name].downcase%")

Set default JSON at routes:

resources :states, :defaults => { :format => 'json' }
resources :countries, :defaults => { :format => 'json' }
get '/get_states/:country_id' => 'states#get_states_based_county', :defaults => { :format => 'json' }


-------------------------------------------------------------------------------------------
resources routes

# resources :users, :defaults => { :format => 'json' }
      get '/users' => 'users#index', :defaults => { :format => 'json' }
      get '/user/:id' => 'users#show', :defaults => { :format => 'json' }
      post '/user' => 'users#create', :defaults => { :format => 'json' }
      put '/user/:id' => 'users#update', :defaults => { :format => 'json' }
      delete '/user/:id' => 'users#destroy', :defaults => { :format => 'json' }
      get '/typeahead/:input' => 'users#search', :defaults => { :format => 'json' }

Monday, 15 August 2022

AESCrypt - Simple AES encryption / decryption for Ruby

 gem 'aescrypt'

bundle

gem install aescrypt
==================================
password save in encrypted formate
Add On model:
before_save :encrypt_password
   def encrypt_password
	encrypted_data = AESCrypt.encrypt(self.password, ENV['ENCRYPT_KEY'])
	self.password = encrypted_data
   end
=============================================

Encrypting

encrypted_data = AESCrypt.encrypt(message, password)
message = AESCrypt.decrypt(encrypted_data, password)
=============================================
On Controller
exit_password = []
account.account_passwords.last(3).map(&:password).each do |encrypted_data|
       my_password = AESCrypt.decrypt(encrypted_data, ENV['ENCRYPT_KEY'])
        if my_password == create_params[:new_password]
          exit_password << encrypted_data
        end
end

Wednesday, 29 June 2022

Do masking on account number

 


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="ccnumber">434343434</div>

<script type="text/javascript">

  $('#ccnumber').text(function(_, val) {

    return val.replace(/\d(?=\d{4})/g, "X");

  });

</script>

Friday, 17 June 2022

Run sidekiq in proudction mode

On local server: bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e production
------------------------------------------------------------------------------------------------------------
On live server::

https://www.driftingruby.com/episodes/sidekiq-on-production


Before Login server: 
Then run:

1. sudo service redis-server restart
2. sudo apt install redis-server
3. redis-server

pwd

/home/ubuntu/.rvm/gems/ruby-2.7.0/wrappers/
--------------------------------------------
then run this line:

sudo nano /lib/systemd/system/sidekiq.service
--------------------------------------------------------------------
then paste:
------------------------------------------------------------------------------
[Unit]
Description=Sidekiq service
After=syslog.target
After=network.target

[Service]
WorkingDirectory=/home/ubuntu/project_name/
#ExecStart=/opt/sidekiq/sidekiq.sh
ExecStart=/home/ubuntu/.rvm/gems/ruby-2.7.0/wrappers/bundle exec sidekiq -e production


User=ubuntu
#User=webuser
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=sidekiq
TimeoutStopSec=120
Restart=always

[Install]
WantedBy=multi-user.target

--------------------------------------------------------------------------------


final step start or restart sidekiq:
sudo service sidekiq start

---------------------------------------------
---------------------------------------------
Sidekiq restart with new updation
ps aux | grep sidekiq
kill -9 <PID>

bundle exec sidekiq -d -L log/sidekiq.log
sudo service redis-server restart
sudo systemctl restart sidekiq
====================================






Wednesday, 13 April 2022

Install mongod BY IDE

 https://linuxize.com/post/how-to-install-mongodb-on-ubuntu-18-04/


1. sudo apt-get install nano

2. sudo mkdir /etc/init

Then create file

3. sudo nano /etc/init/mongod.conf

https://askubuntu.com/questions/856073/mongod-unrecognized-service-mongod-service-is-present-already

4. sudo mongod --fork -f /etc/mongod.conf

5. mongo

Wednesday, 2 March 2022

Add AJAX FILTER IN ACTIVE ADMIN:

ADD select2 gem in you gem file

https://github.com/platanus/activeadmin_addons/blob/master/docs/select2_search.md

input form:

f.input :category_id, as: :search_select, url: admin_categories_path,
          fields: [:name, :description], display_name: 'name', minimum_input_length: 2,
          order_by: 'description_asc'

OR
f.inputs do
      f.input :account_id, as: :search_select, url: admin_users_path,
          fields: [:first_name], display_name: 'first_name', minimum_input_length: 2,
          order_by: 'id'
    end

ON FILTER:
 filter :category_id, as: :search_select_filter, url: proc { admin_categories_path },
         fields: [:name, :description], display_name: 'name', minimum_input_length: 2,
         order_by: 'description_asc'

Friday, 14 January 2022

Multiple file upload by carrierwave upload any media one's only one column

 Note Add new column `photo_or_video` in your MODEL


In Controller:

Check type: content_type(image or video)

file = img.original_filename

attachment_type = file.split(".").last

video_or_image = attachment_type.downcase

------------------------------------------

 if video_or_image == "png" || video_or_image == "PNG" || video_or_image == "jpg" || video_or_image == "JPG" || video_or_image == "jpeg" || video_or_image == "JPEG" || video_or_image == "gif" || video_or_image == "GIF"

                video_or_image = "image"

              elsif video_or_image == "mp4" || video_or_image == "MP4" || video_or_image == "ogv" || video_or_image == "OGV" || video_or_image == "ogg" || video_or_image == "OGG" || video_or_image == "mov" || video_or_image == "MOV"

                video_or_image = "video"

              end

-------------------------------------------

And:  User.create(attachment: img, photo_or_video: video_or_image)


==========================================================

Multiple file uploads

Add it to your Gemfile:

      gem 'mini_magick'
      gem 'carrierwave'
      gem 'carrierwave-video-thumbnailer'
Than
      bundle

Install packages: sudo apt install ffmpegthumbnailer

Start off by generating an uploader:

app/uploaders/pictures_uploader.rb


      rails generate uploader pictures

Check out this file for some hints on how you can customize your uploader. It should look something like this:


class PicturesUploader < CarrierWave::Uploader::Base
      storage :file
end

If we want to upload video or image then we will have to use :-

class PicturesUploader < CarrierWave::Uploader::Base
      include CarrierWave::MiniMagick
      include CarrierWave::Video
      include CarrierWave::Video::Thumbnailer

      storage :file
   
     def store_dir
         "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end

     version :thumb do
          process thumbnail: [{format: 'jpg', quality: 8, size: 360, logger: Rails.logger}]
          def full_filename for_file
              jpg_name for_file, version_name
          end
     end

     version :medium do
           process thumbnail: [{format: 'jpg', quality: 85, size: 300, logger: Rails.logger}]
          def full_filename for_file
              jpg_name for_file, version_name
          end
     end

    # Create different versions of your uploaded files:
    version :thumb,:if => :is_image? do
          process :resize_to_fit => [740, 300]
    end

    def jpg_name for_file, version_name
         %Q{#{version_name}_#{for_file.chomp(File.extname(for_file))}.jpg}
    end

    protected
    def is_image?(resource_file)
      content_type = resource_file.content_type
      extentions = %w(image/jpeg image/png image/jpg image/gif)
      extentions.include? content_type
    end
    def video?(resource_file)
      content_type = resource_file.content_type
      extentions = %w(video/mp4 video/ogv video/ogg video/mov video/quicktime audio/ogg)
      extentions.include? content_type
    end
end

Add a string column to the model you want to mount the uploader by creating a migration:

     rails g migration add_vimeo_file_to_users attachment:string
     rake db:migrate

Open your model file and mount the uploader:

class User < ActiveRecord::Base
     mount_uploader :attachment:, VimeoUploader
end

===================================================


https://railsblogs.rohityadav.in/2017/11/uploading-any-media-file-with-carrier.html