Как я могу отображать Gravtar с помощью Middleman?

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

Моя цель — использовать в качестве ввода начальный текст, подобный этому:

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

...и выведите связанное изображение Gravatar в файле .erb следующим образом:

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

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

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


person rdnydnns    schedule 07.01.2014    source источник
comment
Вы должны объяснить, в чем проблема, может быть, добавить код?   -  person rainkinz    schedule 08.01.2014
comment
@rainkinz Прости. Плакат в первый раз – слишком рано нажмите "Отправить".   -  person rdnydnns    schedule 08.01.2014
comment
ничего страшного, сам так сделал :-)   -  person rainkinz    schedule 08.01.2014


Ответы (3)


Самый простой способ сделать это не требует создания собственного расширения 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) %>
person bhollis    schedule 22.03.2014

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

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 и зарегистрировать его.

person rainkinz    schedule 08.01.2014

Догадаться! Вот что я сделал:

Создал гем под названием 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) %>

и добавил это в начало файла статьи

---
gravatar: [email protected]
---
person rdnydnns    schedule 09.01.2014