Skip to content

Commit

Permalink
Change find_by_* to return nil rather than raise an exception.
Browse files Browse the repository at this point in the history
This is a breaking API change.

You probably have code that looks like
  if emoji = Emoji.find_by_alias($1) { nil }
that you can change to
  if emoji = Emoji.find_by_alias($1)
  • Loading branch information
jeremy committed Jul 18, 2014
1 parent 2741be5 commit f9aba61
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 39 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -56,7 +56,7 @@ See the [Emoji cheat sheet](http://www.emoji-cheat-sheet.com) for more examples.
module EmojiHelper
def emojify(content)
h(content).to_str.gsub(/:([\w+-]+):/) do |match|
if emoji = Emoji.find_by_alias($1) { nil }
if emoji = Emoji.find_by_alias($1)
%(<img alt="#$1" src="#{asset_path("emoji/#{emoji.image_filename}")}" style="vertical-align:middle" width="20" height="20" />)
else
match
Expand Down
16 changes: 4 additions & 12 deletions lib/emoji.rb
Expand Up @@ -4,8 +4,6 @@
module Emoji
extend self

NotFound = Class.new(IndexError)

def data_file
File.expand_path('../../db/emoji.json', __FILE__)
end
Expand Down Expand Up @@ -47,20 +45,14 @@ def edit_emoji(emoji)
emoji
end

# Public: Find an emoji by its aliased name. Return nil if missing.
def find_by_alias(name)
names_index.fetch(name) {
if block_given? then yield name
else raise NotFound, "Emoji not found by name: %s" % name.inspect
end
}
names_index[name]
end

# Public: Find an emoji by its unicode character. Return nil if missing.
def find_by_unicode(unicode)
unicodes_index.fetch(unicode) {
if block_given? then yield unicode
else raise NotFound, "Emoji not found from unicode: %s" % Emoji::Character.hex_inspect(unicode)
end
}
unicodes_index[unicode]
end

private
Expand Down
34 changes: 8 additions & 26 deletions test/emoji_test.rb
Expand Up @@ -12,38 +12,20 @@ class EmojiTest < TestCase
assert count > min_size, "there were too few unicode mappings: #{count}"
end

test "fetching emoji by alias" do
emoji = Emoji.find_by_alias('smile')
assert_equal "\u{1f604}", emoji.raw
end

test "emoji alias not found" do
error = assert_raises Emoji::NotFound do
Emoji.find_by_alias('$$$')
end
assert_equal %(Emoji not found by name: "$$$"), error.message
test "finding emoji by alias" do
assert_equal 'smile', Emoji.find_by_alias('smile').name
end

test "emoji by alias fallback block" do
emoji = Emoji.find_by_alias('hello') { |name| name.upcase }
assert_equal 'HELLO', emoji
test "finding nonexistent emoji by alias returns nil" do
assert_nil Emoji.find_by_alias('$$$')
end

test "fetching emoji by unicode" do
emoji = Emoji.find_by_unicode("\u{1f604}")
assert_equal 'smile', emoji.name
end

test "emoji unicode not found" do
error = assert_raises Emoji::NotFound do
Emoji.find_by_unicode("\u{1234}\u{abcd}")
end
assert_equal %(Emoji not found from unicode: 1234-abcd), error.message
test "finding emoji by unicode" do
assert_equal "\u{1f604}", Emoji.find_by_unicode("\u{1f604}").raw
end

test "emoji by unicode fallback block" do
emoji = Emoji.find_by_unicode("\u{1234}") { |u| "not-#{u}-found" }
assert_equal "not-\u{1234}-found", emoji
test "finding nonexistent emoji by unicode returns nil" do
assert_nil Emoji.find_by_unicode("\u{1234}")
end

test "unicode_aliases" do
Expand Down

0 comments on commit f9aba61

Please sign in to comment.