Validate uploaded file in Ruby on Rails

File Validators gem adds file size and content type validations to ActiveModel. Any module that uses ActiveModel, for example ActiveRecord, can use these file validators.

Install:

gem install file_validators

or add to Gemfile

gem 'file_validators'

Using

class Profile
  include ActiveModel::Validations

  attr_accessor :avatar
  validates :avatar, file_size: { less_than_or_equal_to: 100.kilobytes },
                     file_content_type: { allow: ['image/jpeg', 'image/png'] } 
end

Get facebook picture using Koala gem

This article is about loading facebook images using Koala GEM

Install Koala GEM

gem install koala

or add to Gemfile

gem 'koala'

To load pictures of facebook user, you have to get user access token, you can access https://developers.facebook.com/tools/explorer/ then click GET TOKEN

To read more about how to get photos from Facebook document

https://developers.facebook.com/docs/graph-api/reference/user/photos

https://developers.facebook.com/docs/graph-api/reference/v2.7/album/photos

You can get photos by specific album, or you can get photos from all albums. I will demo get photo from all albums. Normally, when you get photos, fb will return all photos include your tag photos. So if you want to get only your uploaded photos, you can add params type = ‘uploaded’. Notice that: you only can get maximum 25 images per request.

class LoadFbImage
  def initialize(token)
    @fb_graph = Koala::Facebook::API.new(token)
  end

  def get_fb_photos(page = nil)
    if page.present?
      data = @fb_graph.get_page(page)
    else
      data = @fb_graph.get_connections('me', 'photos', type: 'uploaded',
                        fields: 'images', limit: 25)
    end

    {
      pictures: data.map{ |p| p['images'].first["source"] },
      # a list of pictures url
      # fb will return images with many size, so I only get first result
      next_page_params: data.next_page_params
      # next_page_params needs when want toload more image
      # next_page_params will be nil in last page
    }
   end
end

if you use Graph API, you can write FQL Query like

GET /{user-id}/photos?type=uploaded

if you want to load images that belongs to specific album, you can write

GET /{album-id}/photos?type=uploaded

That’s all.