emojidex 0.0.23 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.rubocop.yml +3 -0
  4. data/.travis.yml +7 -6
  5. data/Gemfile +0 -2
  6. data/Guardfile +17 -8
  7. data/README.md +54 -17
  8. data/emojidex.gemspec +4 -1
  9. data/lib/emojidex.rb +12 -10
  10. data/lib/emojidex/{categories.rb → data/categories.rb} +3 -4
  11. data/lib/emojidex/{category.rb → data/category.rb} +1 -1
  12. data/lib/emojidex/data/collection.rb +158 -0
  13. data/lib/emojidex/data/collection/asset_information.rb +52 -0
  14. data/lib/emojidex/data/collection/cache.rb +137 -0
  15. data/lib/emojidex/{collection → data/collection}/moji_data.rb +1 -1
  16. data/lib/emojidex/data/collection/static_collection.rb +35 -0
  17. data/lib/emojidex/data/collection_checker.rb +94 -0
  18. data/lib/emojidex/{emoji.rb → data/emoji.rb} +3 -2
  19. data/lib/emojidex/data/emoji/asset_information.rb +45 -0
  20. data/lib/emojidex/data/extended.rb +18 -0
  21. data/lib/emojidex/data/utf.rb +18 -0
  22. data/lib/emojidex/defaults.rb +21 -0
  23. data/lib/emojidex/env_helper.rb +11 -0
  24. data/lib/emojidex/service/collection.rb +67 -0
  25. data/lib/emojidex/service/error.rb +9 -0
  26. data/lib/emojidex/service/indexes.rb +43 -0
  27. data/lib/emojidex/service/search.rb +82 -0
  28. data/lib/emojidex/service/transactor.rb +100 -0
  29. data/lib/emojidex/service/user.rb +233 -0
  30. data/spec/{categories_spec.rb → emojidex/data/categories_spec.rb} +4 -3
  31. data/spec/{collection_checker_spec.rb → emojidex/data/collection_checker_spec.rb} +12 -15
  32. data/spec/{collection_spec.rb → emojidex/data/collection_spec.rb} +40 -23
  33. data/spec/{emoji_spec.rb → emojidex/data/emoji_spec.rb} +2 -2
  34. data/spec/{extended_spec.rb → emojidex/data/extended_spec.rb} +21 -10
  35. data/spec/{utf_spec.rb → emojidex/data/utf_spec.rb} +22 -17
  36. data/spec/emojidex/service/collection_spec.rb +20 -0
  37. data/spec/emojidex/service/error_spec.rb +17 -0
  38. data/spec/emojidex/service/indexes_spec.rb +62 -0
  39. data/spec/emojidex/service/search_spec.rb +87 -0
  40. data/spec/emojidex/service/transactor_spec.rb +11 -0
  41. data/spec/emojidex/service/user_spec.rb +128 -0
  42. data/spec/spec_helper.rb +9 -62
  43. metadata +36 -31
  44. data/lib/emojidex/api/categories.rb +0 -16
  45. data/lib/emojidex/api/emoji.rb +0 -26
  46. data/lib/emojidex/api/search/emoji.rb +0 -16
  47. data/lib/emojidex/client.rb +0 -60
  48. data/lib/emojidex/collection.rb +0 -156
  49. data/lib/emojidex/collection/asset_information.rb +0 -49
  50. data/lib/emojidex/collection/cache.rb +0 -78
  51. data/lib/emojidex/collection_checker.rb +0 -93
  52. data/lib/emojidex/emoji/asset_information.rb +0 -20
  53. data/lib/emojidex/error.rb +0 -15
  54. data/lib/emojidex/extended.rb +0 -19
  55. data/lib/emojidex/service.rb +0 -32
  56. data/lib/emojidex/utf.rb +0 -19
  57. data/spec/api/categories_spec.rb +0 -49
  58. data/spec/api/emoji_spec.rb +0 -89
  59. data/spec/api/search/emoji_spec.rb +0 -30
  60. data/spec/client_spec.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c1f1c37ec62d2ad3daa5af377d01369009f4d734
4
- data.tar.gz: aa303bb871cb90133a0607a5fe2c50ff7af35162
3
+ metadata.gz: fcc13aecee9337bf14e28469269706c2cb3d1591
4
+ data.tar.gz: e75c72d4d8edd241c833ca7ecb0fb36a9fc350cf
5
5
  SHA512:
6
- metadata.gz: 96ad63027965d46efa54858616f1b5409b8e7cab814ee9d6114ae8273351b993584ca914baccd906dc1d5e0351852eb08f639ca00c5f90e9ddfb6717639c6838
7
- data.tar.gz: 32bc08ccfe71137b7cc2c900870cbf8e66d5b58e696e0f82e2f969ead86b1514f3baa41ab7a852aca32ab7271d241283e00ae7b0ac669153e2be94bab77c9c0f
6
+ metadata.gz: 3c33ca861d40126c552df6af929454c09d1431a00b28c83f5b387b885f13eefb61aaeaa549b59b79997283a7334c0874ea81855ac00bc23780efdf9bb51d04b3
7
+ data.tar.gz: a77e1f5cedd7308b28fa0f6a267ce746748ef9ebdcbe1430c19c25d12e4fa4b15cf5a3e1bcf105c4ac1c282c7669b41cbe8c960ab58472a140d4fd4a609695e2
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.rubocop.yml CHANGED
@@ -7,6 +7,9 @@ AsciiComments:
7
7
  AccessorMethodName:
8
8
  Enabled: false
9
9
 
10
+ Style/DefWithParentheses:
11
+ Enabled: false
12
+
10
13
  LineLength:
11
14
  Max: 99
12
15
 
data/.travis.yml CHANGED
@@ -1,17 +1,18 @@
1
1
  language: ruby
2
2
 
3
+ sudo: false
4
+
3
5
  rvm:
4
- - 1.9.3
5
6
  - 2.0.0
6
- - 2.1.5
7
- - 2.2.0
7
+ - 2.1
8
+ - 2.2.3
9
+ - ruby-head
8
10
  - rbx
9
-
10
- bundler_args: -j4 --without development
11
+ - jruby-head
11
12
 
12
13
  script:
13
14
  - bundle exec rspec
14
15
 
15
16
  addons:
16
17
  code_climate:
17
- repo_token: 4f9c56a5c9a2e99acd8e8f06491940f9174c6fd1e22236539bb2cbc2fefd0e30
18
+ repo_token: 1b416949c15b406b4606ead9dc3b29821f3700555aa869e359820a23b95c32a8
data/Gemfile CHANGED
@@ -12,9 +12,7 @@ group :development do
12
12
  end
13
13
 
14
14
  group :test do
15
- gem 'coveralls', require: false
16
15
  gem 'rspec'
17
- gem 'webmock'
18
16
  gem 'emojidex-vectors', github: 'emojidex/emojidex-vectors'
19
17
  gem 'emojidex-rasters', github: 'emojidex/emojidex-rasters'
20
18
  end
data/Guardfile CHANGED
@@ -1,10 +1,19 @@
1
- guard :rubocop do
2
- watch(%r{.+\.rb$})
3
- watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
4
- end
1
+ guard :rspec, cmd: "bundle exec rspec" do
2
+ require "guard/rspec/dsl"
3
+ dsl = Guard::RSpec::Dsl.new(self)
4
+
5
+ # RSpec files
6
+ rspec = dsl.rspec
7
+ watch(rspec.spec_helper) { rspec.spec_dir }
8
+ watch(rspec.spec_support) { rspec.spec_dir }
9
+ watch(rspec.spec_files)
5
10
 
6
- guard :rspec, cmd: 'bundle exec rspec' do
7
- watch(%r{^spec/.+_spec\.rb$})
8
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
9
- watch('spec/spec_helper.rb') { "spec" }
11
+ # Ruby files
12
+ ruby = dsl.ruby
13
+ dsl.watch_spec_files_for(ruby.lib_files)
10
14
  end
15
+
16
+ #guard :rubocop do
17
+ # watch(%r{.+\.rb$})
18
+ # watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
19
+ #end
data/README.md CHANGED
@@ -1,34 +1,71 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/emojidex.png)](http://badge.fury.io/rb/emojidex)
2
2
  [![Build Status](https://travis-ci.org/emojidex/emojidex.png)](https://travis-ci.org/emojidex/emojidex)
3
3
  [![Code Climate](https://codeclimate.com/github/emojidex/emojidex.png)](https://codeclimate.com/github/emojidex/emojidex)
4
+ [![Coverage Status](https://coveralls.io/repos/emojidex/emojidex/badge.svg?service=github)](https://coveralls.io/github/emojidex/emojidex)
4
5
  [![Inline docs](http://inch-ci.org/github/emojidex/emojidex.png?branch=master)](http://inch-ci.org/github/emojidex/emojidex)
5
6
  [![Gitter chat](https://badges.gitter.im/emojidex/emojidex.png)](https://gitter.im/emojidex/emojidex)
6
7
  emojidex
7
8
  ========
8
9
  emojidex core tools and scripts in Ruby. Provides a set of tools to utilize emojidex emoji right away in Ruby. Available as the "emojidex" gem.
9
10
 
11
+ Usage
12
+ =====
13
+ The emojidex gem can be used either on-line or off-line. Offline components require you to bundle
14
+ the assets you want to use by including either the emojidex-vectors gem for SVG assets or
15
+ emojidex-rasters gem for PNG assets. Simply including "emojidex-vectors" or "emojidex-rasters" in
16
+ your Gemfile or having the gem installed will enable this. Without one or both of these gems
17
+ installed the off-line components will fall back to connecting to the emojidex service and, if
18
+ they are unable to connect, will attempt to find the assets in the emojidex cache (usually found
19
+ in $HOME/.emojidex).
20
+
21
+ Off-line
22
+ --------
23
+ To use emojidex off-line you simply need to make an instance of one or more of the named
24
+ collections in the 'emojidex/data' directory:
25
+
26
+ For UTF (Unicode Standard) emoji:
27
+ ```
28
+ require 'emojidex/data/utf'
29
+
30
+ emoji = Emojidex::Data::UTF.new
31
+ ```
32
+
33
+ For Extended (emojidex Original) emoji:
34
+ ```
35
+ require 'emojidex/data/extended'
36
+
37
+ emoji = Emojidex::Data::Extended.new
38
+ ```
39
+
40
+ For all emoji in the cache (will include UTF and Extended if they have been cached):
41
+ ```
42
+ require 'emojidex/data/collection'
43
+
44
+ emoji = Emojidex::Data::Collection.new
45
+ ```
46
+
47
+ For a combined set of UTF, Extended and Cached emoji:
48
+ ```
49
+ require 'emojidex/data/collection'
50
+ require 'emojidex/data/utf'
51
+ require 'emojidex/data/extended'
52
+
53
+ emoji = Emojidex::Data::Collection.new
54
+ emoji << Emojidex::Data::UTF.new
55
+ emoji << Emojidex::Data::Extended.new
56
+ ```
57
+
58
+
59
+ On-line
60
+ -------
61
+ WIP
62
+
63
+
10
64
  Assets
11
65
  ======
12
66
  You can find Vectors here: [emojidex-vectors](https://github.com/emojidex/emojidex-vectors)
13
67
  You can find Rasters here: [emojidex-rasters](https://github.com/emojidex/emojidex-rasters)
14
68
 
15
- Notes / Caution
16
- ===============
17
-
18
- Pre 1.8 or non 1.9+ compliant Ruby
19
- ----------------------------------
20
- emojidex uses a variety of tricks and extensively utilizes UTF8/Unicode in ways most other code does not. As such, we do not recommend attempting
21
- to run emojidex on non 1.9+ compliant Ruby variants, and instead recommend the latest official Ruby. If you are/must use a non 1.9+ official Ruby
22
- and find an issue that can be remedied without imparing functionality or significantly impacting performance please notify us with an issue or
23
- submit a pull request with a patch.
24
-
25
- jRuby
26
- -----
27
- From 1.9 on Ruby is an m17n compliant Code Set Independent languge. jRuby, however, does not fulfill this requirement and has a variety of issues
28
- dealing with UTF8 code -and- content. It should be noted that this is NOT so much a fault of jRuby as it is the JRE/JVM, which simply imposes a
29
- code set (which in many/most cases is NOT UTF8) on jRuby. Due to this, caution must be excercised when using jRuby. You must make absolutely sure
30
- that the Java environment you are using is being run with UTF8 as the code set.
31
-
32
69
  License
33
70
  =======
34
71
  emojidex and emojidex tools are licensed under the [emojidex Open License](https://www.emojidex.com/emojidex/emojidex_open_license).
data/emojidex.gemspec CHANGED
@@ -1,12 +1,15 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'emojidex'
3
- s.version = '0.0.23'
3
+ s.version = '0.1.0'
4
4
  s.license = 'emojiOL'
5
5
  s.summary = 'emojidex Ruby tools'
6
6
  s.description = 'emojidex emoji handling, search and lookup, listing and caching functionality' \
7
7
  ' and user info (favorites/etc).'
8
8
  s.authors = ['Rei Kagetsuki']
9
9
  s.email = 'info@emojidex.com'
10
+
11
+ s.required_ruby_version = '>= 2.0'
12
+
10
13
  s.files = `git ls-files`.split("\n")
11
14
  s.require_paths = ['lib']
12
15
  s.homepage = 'http://developer.emojidex.com'
data/lib/emojidex.rb CHANGED
@@ -1,10 +1,12 @@
1
- require 'json'
2
- require 'emojidex/emoji'
3
- require 'emojidex/collection_checker'
4
- require 'emojidex/collection'
5
- require 'emojidex/utf'
6
- require 'emojidex/extended'
7
- require 'emojidex/category'
8
- require 'emojidex/categories'
9
- require 'emojidex/client'
10
- require 'emojidex/error'
1
+ require_relative 'emojidex/defaults'
2
+ require_relative 'emojidex/data/emoji'
3
+ require_relative 'emojidex/data/collection'
4
+ require_relative 'emojidex/data/category'
5
+ require_relative 'emojidex/data/categories'
6
+
7
+ # Master emojidex module. Contains a few general helper functions.
8
+ module Emojidex
9
+ def self.escape_code(code)
10
+ code.tr(' ', '_')
11
+ end
12
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- module Emojidex
3
+ module Emojidex::Data
4
4
  # Holds a master list of categories
5
5
  class Categories
6
6
  attr_accessor :categories
@@ -40,7 +40,7 @@ module Emojidex
40
40
 
41
41
  @categories ||= {}
42
42
  raw.each do |category_info|
43
- category = Emojidex::Category.new category_info
43
+ category = Emojidex::Data::Category.new category_info
44
44
  @categories[category.code.to_sym] = category
45
45
  end
46
46
  end
@@ -48,8 +48,7 @@ module Emojidex
48
48
  # loads standard categories local to the emojidex package
49
49
  # *automatically called on initialize if no options are passed
50
50
  def load_standard_categories
51
- load_categories(IO.read(
52
- File.expand_path('../../../emoji/categories.json', __FILE__)))
51
+ load_categories(IO.read(File.expand_path('../../../../emoji/categories.json', __FILE__)))
53
52
  end
54
53
  end
55
54
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- module Emojidex
3
+ module Emojidex::Data
4
4
  # Category information
5
5
  class Category
6
6
  attr_accessor :code, :en, :ja
@@ -0,0 +1,158 @@
1
+ # encoding: utf-8
2
+
3
+ require 'json'
4
+ require_relative 'emoji'
5
+ require_relative 'categories'
6
+ require_relative 'collection/cache'
7
+ require_relative 'collection/asset_information'
8
+ require_relative 'collection/moji_data'
9
+
10
+ module Emojidex
11
+ module Data
12
+ # listing and search of standard UTF emoji
13
+ class Collection
14
+ include Emojidex::Data::CollectionCache
15
+ include Emojidex::Data::CollectionAssetInformation
16
+ include Emojidex::Data::CollectionMojiData
17
+ attr_accessor :emoji, :categories,
18
+ :source_path, :vector_source_path, :raster_source_path
19
+
20
+ # Initialize Collection. You can pass a list of emoji to seed the collection
21
+ def initialize(emoji_list = nil, local_load_path = nil)
22
+ @emoji = {}
23
+ @raster_source_path = @vector_source_path = @source_path = nil
24
+ load_local_collection(local_load_path) unless local_load_path.nil?
25
+ add_emoji(emoji_list) unless emoji_list.nil?
26
+ @emoji
27
+ end
28
+
29
+ # Loads an emoji collection on local storage
30
+ def load_local_collection(path)
31
+ @source_path = @vector_source_path = @raster_source_path = File.expand_path(path)
32
+ json = IO.read(@source_path + '/emoji.json')
33
+ list = JSON.parse(json, symbolize_names: true)
34
+ add_emoji(list)
35
+ end
36
+
37
+ # each override to map each functionality to the emoji hash values
38
+ def each(&block)
39
+ @emoji.values.each(&block)
40
+ end
41
+
42
+ # select override to map select functionality to the emoji hash values
43
+ def select(&block)
44
+ @emoji.values.select(&block)
45
+ end
46
+
47
+ def map(&block)
48
+ @emoji.values.map(&block)
49
+ end
50
+
51
+ def collect(&block)
52
+ @emoji.values.collect(&block)
53
+ end
54
+
55
+ # Retreives an Emoji object by the actual moji code/character code
56
+ # Will likely only return moji from UTF collection
57
+ def find_by_moji(moji)
58
+ each do |m|
59
+ return m if m[:moji] == moji
60
+ end
61
+ nil
62
+ end
63
+
64
+ alias_method :文字検索, :find_by_moji
65
+
66
+ # Gets the emoji with the specified code
67
+ # Returns the Emoji object or nil if no emoji with that code is found
68
+ def find_by_code(code)
69
+ @emoji[code.gsub(/\s/, '_').to_sym]
70
+ end
71
+
72
+ # Locates emoji by Japanese code (original Japanese emoji name [絵文字名])
73
+ # Only applies to collections that contain JA codes, this function is mapped to
74
+ # find_by_code for all other implementations (such as client)
75
+ def find_by_code_ja(code_ja)
76
+ each do |m|
77
+ return m if m[:code_ja] == code_ja
78
+ end
79
+ nil
80
+ end
81
+
82
+ alias_method :コード検索, :find_by_code_ja
83
+
84
+ def find_by_unicode(unicode)
85
+ unicode = unicode.downcase
86
+ each do |m|
87
+ return m if m[:unicode] == unicode
88
+ end
89
+ nil
90
+ end
91
+
92
+ def search(criteria = {})
93
+ Emojidex::Data::Collection.new _sub_search(@emoji.values.dup, criteria)
94
+ end
95
+
96
+ # Get all emoji from this collection that are part of the specified category
97
+ # Returns a new collection of only emoji in the specified category
98
+ def category(category_code)
99
+ categorized = @emoji.values.select { |moji| moji.category == category_code }
100
+ Emojidex::Data::Collection.new categorized
101
+ end
102
+
103
+ # Check to see if there are emoji in this collection which have the specified categories
104
+ # Returns true if there are emoji for all secified categories within this collection
105
+ def category?(*category_codes)
106
+ (category_codes.uniq - @categories).empty?
107
+ end
108
+
109
+ # Adds emojis to the collection
110
+ # After add categories are updated
111
+ def add_emoji(list)
112
+ list.each do |moji_info|
113
+ if moji_info.instance_of? Emojidex::Data::Emoji
114
+ @emoji[moji_info.code.to_sym] = moji_info.dup
115
+ else
116
+ emoji = Emojidex::Data::Emoji.new moji_info
117
+ @emoji[emoji.code.to_sym] = emoji
118
+ end
119
+ end
120
+ categorize
121
+ associate_variants
122
+ condense_moji_code_data
123
+ @emoji
124
+ end
125
+
126
+ alias_method :<<, :add_emoji
127
+
128
+ private
129
+
130
+ # Makes a list of all categories which contain emoji in this collection
131
+ def categorize
132
+ @categories = @emoji.values.map { |moji| moji.category }
133
+ @categories.uniq!
134
+ end
135
+
136
+ def associate_variants
137
+ @emoji.values.each do |emoji_obj|
138
+ if emoji_obj.code.match(/\(.*\)$/) # this emoji is a variant
139
+ # check for base
140
+ base_code = emoji_obj.code.sub(/\(.*\)$/, '').to_sym
141
+ if @emoji.key? base_code
142
+ @emoji[base_code].variants << emoji_obj.code.to_sym
143
+ emoji_obj.base = base_code
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ def _sub_search(list, criteria = {})
150
+ cr = criteria.shift
151
+ return list if cr.nil?
152
+
153
+ list = list.select { |moji| moji if moji[cr[0]] =~ /#{cr[1]}/ }
154
+ _sub_search(list, criteria)
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,52 @@
1
+ require 'digest/md5'
2
+ require_relative '../../defaults'
3
+
4
+ module Emojidex
5
+ module Data
6
+ # Asset Information for Collections
7
+ module CollectionAssetInformation
8
+ def generate_checksums(formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
9
+ @emoji.values.each do |moji|
10
+ moji.checksums = get_checksums(moji, formats, sizes)
11
+ end
12
+ end
13
+
14
+ def get_checksums(moji, formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
15
+ sums = {}
16
+ sums[:svg] = _checksum_for_file("#{@cache_path}/#{moji.code}.svg") if formats.include? :svg
17
+ if formats.include? :png
18
+ sums[:png] = {}
19
+ sizes.keys.each do |size|
20
+ sums[:png][size] = _checksum_for_file("#{@cache_path}/#{size}/#{moji.code}.png")
21
+ end
22
+ end
23
+ sums
24
+ end
25
+
26
+ def generate_paths(formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
27
+ @emoji.values.each do |moji|
28
+ moji.paths = get_paths(moji, formats, sizes)
29
+ end
30
+ end
31
+
32
+ def get_paths(moji, formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
33
+ paths = {}
34
+ path = "#{@cache_path}/#{moji.code}.svg"
35
+ paths[:svg] = path if File.exist? path
36
+ if formats.include? :png
37
+ paths[:png] = {}
38
+ sizes.keys.each do |size|
39
+ path = "#{@cache_path}/#{size}/#{moji.code}.png"
40
+ paths[:png][size] = path if File.exist? path
41
+ end
42
+ end
43
+ paths
44
+ end
45
+
46
+ private
47
+ def _checksum_for_file(path)
48
+ (File.exist? path) ? Digest::MD5.file(path).hexdigest : nil
49
+ end
50
+ end
51
+ end
52
+ end