Has Vimeo Video

Validate a Vimeo URL attribute in Active Record, and retrieve access to the video's data through Vimeo API.


Add to your Gemfile and run the bundle command to install it.

 gem "has_vimeo_video"

Requires Ruby 1.9.2 or later, and Rails 3.0.0 or later.


Call has_vimeo_video in an ActiveRecord class and pass the name of the attribute that will contain the URL for the video on Vimeo, e.g. http://vimeo.com/1234567890.

  class Post < ActiveRecord::Base
    has_vimeo_video :video_url

This will automatically validate the format of the URL to match Vimeo's, and will add a vimeo object to your model, which will contain the following methods:

  • info will give you access to a hash with the parsed response from Vimeo API
  • id will parse the id of the video from the URL (no API requests here)
  • embed_url will return a URL ready for embedding your video (no API requests as well)
  • thumbnail will return the URL for the large thumbnail from Vimeo API (the same as info['thumbnail_large'])

    post = Post.create video_url: 'http://www.vimeo.com/32733074'
    post.vimeo.info # {"id"=>32733074, "title"=>"Belo Monte, Anúncio de uma Guerra (CATARSE)", "description"=>"Mais do que um filme, queremos que esse documentário seja um ato político da sociedade, uma luta pelo acesso à informação e pelo direito de participar das decisões do país.<br />\n<br />\nEntre em http://catarse.me/pt/projects/459-belo-monte-anuncio-de-uma-guerra, assista o vídeo e apoie essa causa.", "url"=>"http://vimeo.com/32733074", "upload_date"=>"2011-11-27 06:49:45", "mobile_url"=>"http://vimeo.com/m/32733074", "thumbnail_small"=>"http://b.vimeocdn.com/ts/221/819/221819626_100.jpg", "thumbnail_medium"=>"http://b.vimeocdn.com/ts/221/819/221819626_200.jpg", "thumbnail_large"=>"http://b.vimeocdn.com/ts/221/819/221819626_640.jpg", "user_name"=>"André Vilela D'Elia", "user_url"=>"http://vimeo.com/cinedelia", "user_portrait_small"=>"http://b.vimeocdn.com/ps/283/288/2832886_30.jpg", "user_portrait_medium"=>"http://b.vimeocdn.com/ps/283/288/2832886_75.jpg", "user_portrait_large"=>"http://b.vimeocdn.com/ps/283/288/2832886_100.jpg", "user_portrait_huge"=>"http://b.vimeocdn.com/ps/283/288/2832886_300.jpg", "stats_number_of_likes"=>221, "stats_number_of_plays"=>107330, "stats_number_of_comments"=>49, "duration"=>661, "width"=>640, "height"=>360, "tags"=>"belo, monte, anúncio, cinedelia, gota, guerra, catarse, indigenas, xingu, rio, river, raoni, kayapo, vivo, eletro, norte, felicio, pontes, pare, amazonia", "embed_privacy"=>"anywhere"}
    post.vimeo.id # 32733074
    post.vimeo.embed_url # http://player.vimeo.com/video/32733074
    post.vimeo.thumbnail # http://b.vimeocdn.com/ts/221/819/221819626_640.jpg

Customizing validation message

You can customize the ActiveRecord validation message by passing the message option to has_vimeo_video.

  class Post < ActiveRecord::Base
    has_vimeo_video :video_url, message: "only Vimeo URLs are allowed"


Questions or problems? Please post them on the issue tracker. You can contribute changes by forking the project and submitting a pull request. You can ensure the tests passing by running bundle and rake.

This gem is created by Engage and is under the MIT License.