Thursday 23 February 2017

Ruby on Rails Developer need to have aware about


RoR experience in 3.x, 4.x, 5 beta
- Ruby 2.x
- Rspec, Mocha, Cucumber
- Postgres, RDS
- Passenger, Puma
- AngularJS/NodeJS
- Redis, SQS
-Rails caching 

RSpec and Resque
Demonstrated strengths for JAVA 7 and above, Core Java, Advance Java, Jersey Framework, JMS, JSON, XML, 
 
RESTFUL and SOAP web services

Monday 13 February 2017

RUBY On RAILS

What is indexing, trigger in mysql?


What is curl, why we use it, how to use it?


What is Static Class and Static method, define it and how to use that?


Rails asset pipeline: Why things break in production and what precompilation does to your assets

Rails asset pipeline: Why things break in production and what precompilation does to your assets

When you work with a Rails 3.1+ application, you will be working with the asset pipeline. The asset pipeline is awesome until you deploy. Then it will be less so if you haven't done everything as the pipeline expected it from you.

The problem

When using the asset pipeline your assets (images, javascripts, stylesheets, fonts) live in folders inside app:
COPY
app/assets/fonts app/assets/images app/assets/javascripts app/assets/stylesheets
With the asset pipeline, you can use the full power of Ruby to generate assets. E.g. you can have ERB tags in your Javascript. Or you can have an ERB template which generates Haml which generates HTML. You can chain as many preprocessors as you want.
When you deploy, Rails runs assets:precompile which precompiles all assets into static files that live in public/assets. This way you have all the performance of static files with all the expressiveness of Ruby.
Unfortunately, the path of every single file changes during precompilation. This means that you have to be a bit careful how you reference assets.
COPY
.tile background-image: url('../images/foo.png')
won't work any longer, because there is no public/assets/images. foo.png now lives directly in public/assets.

Example

COPY
app/assets/fonts app/assets/fonts/fonts_root.css app/assets/fonts/fonts_root.js app/assets/fonts/fonts_root.png app/assets/fonts/fonts_root.ttf app/assets/fonts/subfolder app/assets/fonts/subfolder/fonts_subfolder.css app/assets/fonts/subfolder/fonts_subfolder.js app/assets/fonts/subfolder/fonts_subfolder.png app/assets/fonts/subfolder/fonts_subfolder.ttf app/assets/images app/assets/images/images_root.css app/assets/images/images_root.js app/assets/images/images_root.png app/assets/images/images_root.ttf app/assets/images/subfolder app/assets/images/subfolder/images_subfolder.css app/assets/images/subfolder/images_subfolder.js app/assets/images/subfolder/images_subfolder.png app/assets/images/subfolder/images_subfolder.ttf app/assets/javascripts app/assets/javascripts/application.js app/assets/javascripts/javascripts_root.css app/assets/javascripts/javascripts_root.js app/assets/javascripts/javascripts_root.png app/assets/javascripts/javascripts_root.ttf app/assets/javascripts/subfolder app/assets/javascripts/subfolder/javascripts_subfolder.css app/assets/javascripts/subfolder/javascripts_subfolder.js app/assets/javascripts/subfolder/javascripts_subfolder.png app/assets/javascripts/subfolder/javascripts_subfolder.ttf app/assets/stylesheets app/assets/stylesheets/application.css app/assets/stylesheets/stylesheets_root.css app/assets/stylesheets/stylesheets_root.js app/assets/stylesheets/stylesheets_root.png app/assets/stylesheets/stylesheets_root.ttf app/assets/stylesheets/subfolder app/assets/stylesheets/subfolder/stylesheets_root.png app/assets/stylesheets/subfolder/stylesheets_subfolder.css app/assets/stylesheets/subfolder/stylesheets_subfolder.js app/assets/stylesheets/subfolder/stylesheets_subfolder.ttf
This precompiles into this (fingerprinted and compressed files removed for clarity):
COPY
public/assets/application.css public/assets/application.js public/assets/fonts_root.png public/assets/fonts_root.ttf public/assets/images_root.png public/assets/images_root.ttf public/assets/javascripts_root.png public/assets/javascripts_root.ttf public/assets/stylesheets_root.png public/assets/stylesheets_root.ttf public/assets/subfolder public/assets/subfolder/fonts_subfolder.png public/assets/subfolder/fonts_subfolder.ttf public/assets/subfolder/images_subfolder.png public/assets/subfolder/images_subfolder.ttf public/assets/subfolder/javascripts_subfolder.png public/assets/subfolder/javascripts_subfolder.ttf public/assets/subfolder/stylesheets_root.png public/assets/subfolder/stylesheets_subfolder.ttf

What has happened?

  1. All asset folders (app/assets/images, app/assets/stylesheets, app/assets/fonts, etc.) are merged into one folder:public/assets.
  2. Subfolders are also merged into public/assets. That means both app/assets/javascripts/subfolder/* andapp/assets/stylesheets/subfolder/* now live in public/assets/subfolder/*
  3. All CSS files are concatenated into one file (public/assets/application.css). With the default manifest inapp/assets/stylesheets/application.css, stylesheets in app/assets/stylesheets/**/*.css are concatenated. Sopublic/application.css has the following content:
    COPY
    /* content from app/assets/stylesheets/stylesheet_root.css */ /* content from app/assets/stylesheets/subfolder/stylesheet_subfolder.css */
  4. All Javascript files are concatenated into one file in root (public/assets/appliction.js). With the default manifest inapp/assets/javascripts/application.js, Javascripts in app/assets/javascripts/**/*.js are concatenated. Sopublic/application.js has the following content:
    COPY
    /* content from app/assets/javascripts/javascripts_root.js */ /* content from app/assets/javascripts/subfolder/javascripts_subfolder.js */

What will break after precompilation?

  • Stylesheets, that used url(../images/foo.png)-style tags
  • @font-face definitions that used url('fonts/bar.ttf')-style tags

How can I fix my stylesheets?

  • Do not use url(../images/foo.png). 
    This is plainly wrong, since from your browser's point of view, your stylesheet lives at /assets/application.css and your image at /assets/foo.png. I have no idea why it works in development in the first place. Simply use the SASS helper:
    COPY
    .tile background-image: image-url('foo.png')

How can I fix my font definitions?

  • With the Asset-Pipeline fonts are stored in app/assets/fonts. 
    Depending on your rails version, you may need to add
    COPY
    config.assets.paths << Rails.root.join("app", "assets", "fonts")
    to your config/application.rb
  • Do not use src: url(...) in your @font-face definitions.
    Again instead use a sass-helper: src: font-url(...)
  • Maybe the referenced paths need adjustment. If before it was src: url(fonts/...) now the leading fonts/ directory needs to be removed, because the fonts are compiled to the assets folder by the asset-pipeline.

https://makandracards.com/makandra/8951-rails-asset-pipeline-why-things-break-in-production-and-what-precompilation-does-to-your-assets 

Ruby How to use Haml in your helpers

How to use Haml in your helpers

You know those helper methods that just render some HTML but look weird because of content_tags all over the place? You could also use Haml instead.

Example

Consider the following helper.
COPY
def greeting message = ''.html_safe message << 'Welcome to ' message << content_tag(:span, Rails.env, class: 'greeting--location') content_tag :div, message, class: 'greeting' end
That looks clumsy and is hard to read.
Wouldn't it be nicer to say something like this?
COPY
def greeting render_haml <<-HAML .greeting Welcome to %span.greeting--location = Rails.env HAML end
It would be, and you can have it, too. You simply need to define render_haml as a helper method:
COPY
def render_haml(haml, locals = {}) Haml::Engine.new(haml.strip_heredoc, format: :html5).render(self, locals) end
Note how we pass the helper method's view context (self). This means that all of your other helper methods will be available to your Haml fragment.
Also note that you can pass locals to your Haml templates as usual:
COPY
def greet(someone) render_haml <<-HAML, name: someone Hello %strong = name HAML end
E

Sunday 12 February 2017

RubyMine tricks

1) pressing Shift twice
Have you tried the Search everywhere dialog? You can open it by pressing Shift twice.

2)

RubyMine: Set specific Ruby version per project

If your project uses another version than your default Ruby, RubyMine will give you incorrect inspections, for example.\
Here is how to switch which Ruby you use in RubyMine.
  1. File → Settings (Or press Ctrl+Alt+S)
  2. Select "Ruby SDK and Gems" from the left pane
  3. Switch your "Ruby interpreter".
Though it may seem you are changing a global setting here, this is in fact a per-project setting, as are all things you change in the "Project Settings [your_project_name]" area of the global settings dialog.
When you switch to another project, RubyMine will give you inspections and alike using that project's Ruby settings.

jQuery: When to use $(document).ready() and when $(window).load()

Summary

jQuery offers two methods to execute code and attach event handlers: $(document).ready and $(window).load.

$(document).ready()

The document ready event fired when the HTML document is loaded and the DOM is ready, even if all the graphics haven’t loaded yet. If you want to hook up your events for certain elements before the window loads, then $(document).ready is the right place.
Code:
$(document).ready(function() {
    // document is loaded and DOM is ready
    alert("document is ready");
});

$(window).load()

The window load event fired a bit later, when the complete page is fully loaded, including all frames, objects and images. Therefore functions which concern images or other page contents should be placed in the load event for the window or the content tag itself.
Code:
$(window).load(function() {
    // page is fully loaded, including all frames, objects and images
    alert("window is loaded");
});

Basic git commands

http://gitref.org/basic/ 
 
Get an existing from the server for the first time
git clone git@example.com:repositoryname
See what's changed
git status
Check in locally
git commit -m "good description"
Push local commits to the server
git push
Get and merge updates from the server
git pull
Stage a file for the next local commit
git add file
Stage all files for the next local commit
git add .
Create a new local branch
git checkout - b branchname
Switch to a local branch
git checkout branchname
Overview of local branches
git branch
Delete a local branch
git branch -d branchname
Insert changes on the server before your local changes
git pull --rebase
Temporarily discard local changes
git stash
Re-apply stashed away changes
git stash apply
Re-apply stashed away changes an delete them from stack
git stash pop
Find out who wrote something
git blame filename
Restore a deleted file (notice the space before and after the dash)
git checkout - filename
https://makandracards.com/makandra/517-basic-git-commands



How to merge a specific commit in git

Scenario
You were working on a certain branch of a git repository, and you committed some changes to it. Then you realize, this particular commit should also go to another branch of the repository BUT you are not ready for a complete merge. Maybe this commit was meant for the other branch?
You want to merge this particular commit from the current branch to the other branch of your requirement.
Resolution
Merging a specific commit from one branch to another is pretty easy: use the git cherry-pickcommand. The syntax is: git cherry-pick <commit hash>.
First make a note of the commit hash using the git reflog or git log command.
Then, switch to the branch where you'd like to merge the commit and run git cherry-pick with the commit hash, as shown in the example below.
$ git cherry-pick d4d8e7c
Now you will have merged the specific commit from one branch to the other.