2014-01-07 2 views
2

Я пытаюсь построить свой первый рубиновый камень, который использует Middleman Frontmatter для отображения изображений Gravatar.Как я могу отобразить Gravtar, используя Middleman?

Моя цель состоит в том, чтобы использовать frontmatter так как вход:

--- 
email: [email protected] 
--- 

... и выход связанный Gravatar изображения в .erb файл, например так:

<%= gravatar_for(article.data.email) %> 

Вот что я нашел на основе инструкций, предоставленных Gravatar для отображения изображений через рубин:

require "gravatar/version" 
require 'digest/md5' 

module Gravatar 

    def gravatar_for(email) 
    hash = Digest::MD5.hexdigest(email.chomp.downcase) 
    "http://www.gravatar.com/avatar/#{hash}" 
    end 

end 

ошибка я получаю, когда код выполняется в

NoMethodError at/ 
undefined method `gravatar_for'... 

Драгоценный камень и репо можно найти здесь: https://rubygems.org/gems/snagagrav

+0

Вы должны объяснить, что у вас есть, возможно, добавить код? – rainkinz

+0

@rainkinz Извините. Первый плакат - хитов представить слишком рано. – rdnydnns

+0

не беспокойтесь, сделайте это сам :-) – rainkinz

ответ

0

Я предполагаю, что вы успешно пытались добавить что-то вроде этого в вашей конфигурации. гь:

require 'digest/md5' 
class Gravatar < Middleman::Extension 
    def initialize(app, options_hash={}, &block) 
    super 
    puts "#{options_hash.inspect}" 
    end 

    helpers do 
    def make_a_link(url, text) 
     "<a href='#{url}'>#{text}</a>" 
    end 

    def gravatar_for(email) 
     hash = Digest::MD5.hexdigest(email.chomp.downcase) 
     "http://www.gravatar.com/avatar/#{hash}" 
    end 
    end 
end 

::Middleman::Extensions.register(:gravatar, Gravatar) 

set :css_dir, 'stylesheets' 

set :js_dir, 'javascripts' 

set :images_dir, 'images' 

# Build-specific configuration 
configure :build do 
    activate :gravatar 
end 

Затем в шаблоне:

--- 
title: Welcome to Middleman 
email: [email protected] 
--- 

<div class="welcome"> 
    <h1>Middleman is Watching</h1> 
    <p class="doc"> 
    <%= gravatar_for(current_page.data.email) %> 
    </p><!-- .doc --> 
</div><!-- .welcome --> 

Это работает для меня. Похоже, вам нужно превратить свой драгоценный камень в расширение MiddleMan и зарегистрировать его.

0

Выяснил это! Вот что я сделал:

Создано камень называется middleman-gravatar.rb в каталоге middleman-gravatar/lib/

class MiddlemanGravatar < ::Middleman::Extension 

    helpers do 
    def gravatar_for(email, options_hash={}) 
     if email 
     # Creates md5 hash for email address 
     hash = Digest::MD5.hexdigest(email.chomp.downcase) 
     # Returns Gravatar image for email (.jpg) 
     "<img src='http://www.gravatar.com/avatar/#{hash}.jpg' />" 
     else 
     # Returns default mysterman image if no Gravatar exists 
     "<img src='http://www.gravatar.com/avatar/?d=mm' />" 
     end 
    end 
    end 

end 

::Middleman::Extensions.register(:middleman_gravatar, MiddlemanGravatar) 

добавил это в config.rb файл

# Gravatar 
require('middleman-gravatar/lib/middleman-gravatar') 
activate :middleman_gravatar 

добавил это к index.html.erb, чтобы показать Gravatar

<%= gravatar_for(article.data.gravatar) %> 

и прибавил к frontmatter файла статьи

--- 
gravatar: [email protected] 
--- 
2

Самый простой способ сделать это не надо делать свой собственный расширение Middleman:

Просто поместите это в config.rb:

require 'digest/md5' 
helpers do 
    def gravatar_for(email) 
    hash = Digest::MD5.hexdigest(email.chomp.downcase) 
    "http://www.gravatar.com/avatar/#{hash}" 
    end 
end 

И теперь в шаблонах вы можете сделать:

<%= gravatar_for(article.data.email) %>