emojidex 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/emojidex.gemspec +7 -6
  3. data/lib/emojidex.rb +9 -1
  4. data/lib/emojidex/client.rb +53 -0
  5. data/lib/emojidex/data/categories.rb +42 -42
  6. data/lib/emojidex/data/category.rb +10 -10
  7. data/lib/emojidex/data/collection.rb +39 -21
  8. data/lib/emojidex/data/collection/asset_information.rb +19 -3
  9. data/lib/emojidex/data/collection/cache.rb +28 -33
  10. data/lib/emojidex/data/collection/moji_data.rb +13 -11
  11. data/lib/emojidex/data/collection/static_collection.rb +3 -3
  12. data/lib/emojidex/data/emoji.rb +54 -37
  13. data/lib/emojidex/data/emoji/asset_information.rb +86 -3
  14. data/lib/emojidex/data/extended.rb +2 -2
  15. data/lib/emojidex/data/utf.rb +2 -2
  16. data/lib/emojidex/defaults.rb +9 -1
  17. data/lib/emojidex/env_helper.rb +1 -2
  18. data/lib/emojidex/service/collection.rb +70 -31
  19. data/lib/emojidex/service/error.rb +1 -0
  20. data/lib/emojidex/service/indexes.rb +31 -10
  21. data/lib/emojidex/service/search.rb +5 -4
  22. data/lib/emojidex/service/transactor.rb +35 -19
  23. data/lib/emojidex/service/user.rb +80 -37
  24. data/lib/emojidex/service/user/history_item.rb +23 -0
  25. data/lib/emojidex/{data → util}/collection_checker.rb +2 -3
  26. metadata +10 -79
  27. data/.coveralls.yml +0 -1
  28. data/.gitignore +0 -12
  29. data/.rspec +0 -2
  30. data/.rubocop.yml +0 -18
  31. data/.travis.yml +0 -18
  32. data/Gemfile +0 -18
  33. data/Guardfile +0 -19
  34. data/README.md +0 -73
  35. data/spec/emojidex/data/categories_spec.rb +0 -19
  36. data/spec/emojidex/data/collection_checker_spec.rb +0 -72
  37. data/spec/emojidex/data/collection_spec.rb +0 -136
  38. data/spec/emojidex/data/emoji_spec.rb +0 -47
  39. data/spec/emojidex/data/extended_spec.rb +0 -118
  40. data/spec/emojidex/data/utf_spec.rb +0 -91
  41. data/spec/emojidex/service/collection_spec.rb +0 -20
  42. data/spec/emojidex/service/error_spec.rb +0 -17
  43. data/spec/emojidex/service/indexes_spec.rb +0 -62
  44. data/spec/emojidex/service/search_spec.rb +0 -87
  45. data/spec/emojidex/service/transactor_spec.rb +0 -11
  46. data/spec/emojidex/service/user_spec.rb +0 -128
  47. data/spec/spec_helper.rb +0 -18
  48. data/spec/support/Genshin.svg +0 -126
  49. data/spec/support/couple_kiss/0.svg +0 -177
  50. data/spec/support/couple_kiss/1.svg +0 -177
  51. data/spec/support/couple_kiss/10.svg +0 -293
  52. data/spec/support/couple_kiss/11.svg +0 -235
  53. data/spec/support/couple_kiss/12.svg +0 -235
  54. data/spec/support/couple_kiss/13.svg +0 -235
  55. data/spec/support/couple_kiss/14.svg +0 -177
  56. data/spec/support/couple_kiss/15.svg +0 -177
  57. data/spec/support/couple_kiss/2.svg +0 -177
  58. data/spec/support/couple_kiss/3.svg +0 -235
  59. data/spec/support/couple_kiss/4.svg +0 -235
  60. data/spec/support/couple_kiss/5.svg +0 -235
  61. data/spec/support/couple_kiss/6.svg +0 -293
  62. data/spec/support/couple_kiss/7.svg +0 -235
  63. data/spec/support/couple_kiss/8.svg +0 -235
  64. data/spec/support/couple_kiss/9.svg +0 -235
  65. data/spec/support/couple_kiss/animation.json +0 -14
  66. data/spec/support/fixtures/categories.json +0 -14
  67. data/spec/support/fixtures/category.json +0 -5
  68. data/spec/support/fixtures/emoji.json +0 -28
  69. data/spec/support/fixtures/emoji_detailed.json +0 -41
  70. data/spec/support/fixtures/search_emoji.json +0 -21
  71. data/spec/support/fixtures/single_emoji.json +0 -19
  72. data/spec/support/fixtures/single_emoji_detailed.json +0 -30
  73. data/spec/support/sample_collections/good/emoji.json +0 -30
  74. data/spec/support/sample_collections/good/mouth.svg +0 -49
  75. data/spec/support/sample_collections/good/nut_and_bolt.svg +0 -372
  76. data/spec/support/sample_collections/good/purple_heart.svg +0 -24
  77. data/spec/support/sample_collections/good/px32/mouth.png +0 -0
  78. data/spec/support/sample_collections/good/px32/nut_and_bolt.png +0 -0
  79. data/spec/support/sample_collections/good/px32/purple_heart.png +0 -0
  80. data/spec/support/sample_collections/good/px32/woman_with_bunny_ears.png +0 -0
  81. data/spec/support/sample_collections/good/woman_with_bunny_ears.svg +0 -90
  82. data/spec/support/sample_collections/missing_assets/emoji.json +0 -30
  83. data/spec/support/sample_collections/missing_assets/mouth.svg +0 -49
  84. data/spec/support/sample_collections/missing_assets/purple_heart.svg +0 -24
  85. data/spec/support/sample_collections/missing_assets/px32/mouth.png +0 -0
  86. data/spec/support/sample_collections/missing_assets/px32/nut_and_bolt.png +0 -0
  87. data/spec/support/sample_collections/missing_assets/px32/woman_with_bunny_ears.png +0 -0
  88. data/spec/support/sample_collections/missing_assets/woman_with_bunny_ears.svg +0 -90
  89. data/spec/support/sample_collections/missing_index/emoji.json +0 -23
  90. data/spec/support/sample_collections/missing_index/mouth.svg +0 -49
  91. data/spec/support/sample_collections/missing_index/nut_and_bolt.svg +0 -372
  92. data/spec/support/sample_collections/missing_index/purple_heart.svg +0 -24
  93. data/spec/support/sample_collections/missing_index/px32/mouth.png +0 -0
  94. data/spec/support/sample_collections/missing_index/px32/nut_and_bolt.png +0 -0
  95. data/spec/support/sample_collections/missing_index/px32/purple_heart.png +0 -0
  96. data/spec/support/sample_collections/missing_index/px32/woman_with_bunny_ears.png +0 -0
  97. data/spec/support/sample_collections/missing_index/woman_with_bunny_ears.svg +0 -90
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcc13aecee9337bf14e28469269706c2cb3d1591
4
- data.tar.gz: e75c72d4d8edd241c833ca7ecb0fb36a9fc350cf
3
+ metadata.gz: a23e3b7d0fdb86b4577cb31f2f4d507dd2aab718
4
+ data.tar.gz: c225211888f80285139ce2b5ab6722c7f56a3491
5
5
  SHA512:
6
- metadata.gz: 3c33ca861d40126c552df6af929454c09d1431a00b28c83f5b387b885f13eefb61aaeaa549b59b79997283a7334c0874ea81855ac00bc23780efdf9bb51d04b3
7
- data.tar.gz: a77e1f5cedd7308b28fa0f6a267ce746748ef9ebdcbe1430c19c25d12e4fa4b15cf5a3e1bcf105c4ac1c282c7669b41cbe8c960ab58472a140d4fd4a609695e2
6
+ metadata.gz: 0fde73983a81cbd08fb429a77a22c655329e16e4cbf8ff1d6bc43bdc8532ce39a85b8310df6d8a455d3845336728ded4147055b1e0059e044661e3b6a1bf117b
7
+ data.tar.gz: 56b050497be82e6917e5954dea7d269869f5b78b3f6912aebd127f9c22ed29ce89e5ecbb6d0d5bbac3e606867fa77a268c3e9fcf3c86c66c3b24548ddf214361
@@ -1,19 +1,20 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'emojidex'
3
- s.version = '0.1.0'
3
+ s.version = '0.2.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
+ s.homepage = 'http://developer.emojidex.com'
10
11
 
11
12
  s.required_ruby_version = '>= 2.0'
12
-
13
- s.files = `git ls-files`.split("\n")
13
+ s.files = Dir.glob('emoji/**/*') +
14
+ Dir.glob('lib/**/*.rb') +
15
+ ['emojidex.gemspec']
14
16
  s.require_paths = ['lib']
15
- s.homepage = 'http://developer.emojidex.com'
16
17
 
17
- s.add_dependency 'faraday', '~> 0.9', '~> 0.9.1'
18
- s.add_dependency 'faraday_middleware', '~> 0.9', '~> 0.9.1'
18
+ s.add_dependency 'faraday', '~> 0.9', '~> 0.9.2'
19
+ s.add_dependency 'faraday_middleware', '~> 0.9', '~> 0.9.2'
19
20
  end
@@ -7,6 +7,14 @@ require_relative 'emojidex/data/categories'
7
7
  # Master emojidex module. Contains a few general helper functions.
8
8
  module Emojidex
9
9
  def self.escape_code(code)
10
- code.tr(' ', '_')
10
+ code.tr(' ', '_').tr(':', '')
11
+ end
12
+
13
+ def self.unescape_code(code)
14
+ code.tr('_', ' ')
15
+ end
16
+
17
+ def self.encapsulate_code(code)
18
+ "#{Emojidex::Defaults.encapsulator}#{unescape_code(code)}#{Emojidex::Defaults.encapsulator}"
11
19
  end
12
20
  end
@@ -0,0 +1,53 @@
1
+ require_relative 'defaults'
2
+ require_relative 'service/user'
3
+ require_relative 'data/collection'
4
+
5
+ module Emojidex
6
+ # A consolidated client which handles a user and their collection
7
+ class Client
8
+ @@client_cache_path = nil
9
+ @@user_instance = nil
10
+ @@collection_instance = nil
11
+
12
+ def self.USER
13
+ return @@user_instance unless @@user_instance.nil?
14
+ @@user_instance = Emojidex::Service::User.new
15
+ @@user_instance.load(@cache_path)
16
+ @@user_instance
17
+ end
18
+
19
+ def user
20
+ Emojidex::Client.USER
21
+ end
22
+
23
+ def self.COLLECTION
24
+ return @@collection_instance unless @@collection_instance.nil?
25
+ @@collection_instance = Emojidex::Data::Collection.new
26
+ @@collection_instance.load_cache
27
+ @@collection_instance
28
+ end
29
+
30
+ def collection
31
+ Emojidex::Client.COLLECTION
32
+ end
33
+
34
+ def self.CACHE_PATH
35
+ return @@client_cache_path unless @@client_cache_path.nil?
36
+ @@client_cache_path = Emojidex::Defaults.system_cache_path
37
+ @@client_cache_path
38
+ end
39
+
40
+ def cache_path
41
+ Emojidex::Client.CACHE_PATH
42
+ end
43
+
44
+ def initialize(opts = {})
45
+ if (opts.include? :cache_path)
46
+ @@client_cache_path = opts[:cache_path]
47
+ user = collection = nil
48
+ end
49
+ user
50
+ collection
51
+ end
52
+ end
53
+ end
@@ -1,54 +1,54 @@
1
- # encoding: utf-8
2
-
3
- module Emojidex::Data
4
- # Holds a master list of categories
5
- class Categories
6
- attr_accessor :categories
7
-
8
- def initialize(categories_json = nil)
9
- if categories_json
10
- load_categories(categories_json)
11
- else
12
- load_standard_categories
1
+ module Emojidex
2
+ module Data
3
+ # Holds a master list of categories
4
+ class Categories
5
+ attr_accessor :categories
6
+
7
+ def initialize(categories_json = nil)
8
+ if categories_json
9
+ load_categories(categories_json)
10
+ else
11
+ load_standard_categories
12
+ end
13
13
  end
14
- end
15
14
 
16
- # each override to map each functionality to the categories hash
17
- def each(&block)
18
- @categories.values.each(&block)
19
- end
15
+ # each override to map each functionality to the categories hash
16
+ def each(&block)
17
+ @categories.values.each(&block)
18
+ end
20
19
 
21
- # select override to map select functionality to the categories hash
22
- def select(&block)
23
- @categories.values.select(&block)
24
- end
20
+ # select override to map select functionality to the categories hash
21
+ def select(&block)
22
+ @categories.values.select(&block)
23
+ end
25
24
 
26
- # map override to map each functionality to the categories hash
27
- def map(&block)
28
- @categories.values.map(&block)
29
- end
25
+ # map override to map each functionality to the categories hash
26
+ def map(&block)
27
+ @categories.values.map(&block)
28
+ end
30
29
 
31
- # collect override to map each functionality to the categories hash
32
- def collect(&block)
33
- @categories.values.collect(&block)
34
- end
30
+ # collect override to map each functionality to the categories hash
31
+ def collect(&block)
32
+ @categories.values.collect(&block)
33
+ end
35
34
 
36
- # loads categories from a JSON hash object / JSON text
37
- def load_categories(json)
38
- raw = JSON.parse(json, symbolize_names: true)
39
- raw = raw[:categories]
35
+ # loads categories from a JSON hash object / JSON text
36
+ def load_categories(json)
37
+ raw = JSON.parse(json, symbolize_names: true)
38
+ raw = raw[:categories]
40
39
 
41
- @categories ||= {}
42
- raw.each do |category_info|
43
- category = Emojidex::Data::Category.new category_info
44
- @categories[category.code.to_sym] = category
40
+ @categories ||= {}
41
+ raw.each do |category_info|
42
+ category = Emojidex::Data::Category.new category_info
43
+ @categories[category.code.to_sym] = category
44
+ end
45
45
  end
46
- end
47
46
 
48
- # loads standard categories local to the emojidex package
49
- # *automatically called on initialize if no options are passed
50
- def load_standard_categories
51
- load_categories(IO.read(File.expand_path('../../../../emoji/categories.json', __FILE__)))
47
+ # loads standard categories local to the emojidex package
48
+ # *automatically called on initialize if no options are passed
49
+ def load_standard_categories
50
+ load_categories(IO.read(File.expand_path('../../../../emoji/categories.json', __FILE__)))
51
+ end
52
52
  end
53
53
  end
54
54
  end
@@ -1,14 +1,14 @@
1
- # encoding: utf-8
1
+ module Emojidex
2
+ module Data
3
+ # Category information
4
+ class Category
5
+ attr_accessor :code, :en, :ja
2
6
 
3
- module Emojidex::Data
4
- # Category information
5
- class Category
6
- attr_accessor :code, :en, :ja
7
-
8
- def initialize(details = {})
9
- @code = details[:code].to_sym
10
- @en = details[:en]
11
- @ja = details[:ja]
7
+ def initialize(details = {})
8
+ @code = details[:code].to_sym
9
+ @en = details[:en]
10
+ @ja = details[:ja]
11
+ end
12
12
  end
13
13
  end
14
14
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'json'
4
+ require_relative '../../emojidex'
4
5
  require_relative 'emoji'
5
6
  require_relative 'categories'
6
7
  require_relative 'collection/cache'
@@ -18,11 +19,17 @@ module Emojidex
18
19
  :source_path, :vector_source_path, :raster_source_path
19
20
 
20
21
  # Initialize Collection. You can pass a list of emoji to seed the collection
21
- def initialize(emoji_list = nil, local_load_path = nil)
22
+ def initialize(opts = {})
22
23
  @emoji = {}
23
24
  @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?
25
+ if opts.include? :cache_path
26
+ setup_cache(opts[:cache_path])
27
+ opts.delete :cache_path
28
+ else
29
+ setup_cache
30
+ end
31
+ load_local_collection(opts[:local_load_path]) if opts.include? :local_load_path
32
+ add_emoji(opts[:emoji]) if opts.include? :emoji
26
33
  @emoji
27
34
  end
28
35
 
@@ -32,6 +39,7 @@ module Emojidex
32
39
  json = IO.read(@source_path + '/emoji.json')
33
40
  list = JSON.parse(json, symbolize_names: true)
34
41
  add_emoji(list)
42
+ generate_paths
35
43
  end
36
44
 
37
45
  # each override to map each functionality to the emoji hash values
@@ -90,14 +98,14 @@ module Emojidex
90
98
  end
91
99
 
92
100
  def search(criteria = {})
93
- Emojidex::Data::Collection.new _sub_search(@emoji.values.dup, criteria)
101
+ Emojidex::Data::Collection.new(emoji: _sub_search(@emoji.values.dup, criteria))
94
102
  end
95
103
 
96
104
  # Get all emoji from this collection that are part of the specified category
97
105
  # Returns a new collection of only emoji in the specified category
98
106
  def category(category_code)
99
107
  categorized = @emoji.values.select { |moji| moji.category == category_code }
100
- Emojidex::Data::Collection.new categorized
108
+ Emojidex::Data::Collection.new(emoji: categorized)
101
109
  end
102
110
 
103
111
  # Check to see if there are emoji in this collection which have the specified categories
@@ -109,14 +117,7 @@ module Emojidex
109
117
  # Adds emojis to the collection
110
118
  # After add categories are updated
111
119
  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
+ _add_list(list)
120
121
  categorize
121
122
  associate_variants
122
123
  condense_moji_code_data
@@ -125,23 +126,40 @@ module Emojidex
125
126
 
126
127
  alias_method :<<, :add_emoji
127
128
 
129
+ def remove_emoji(code)
130
+ emoji.delete(code)
131
+ @emoji
132
+ end
133
+
128
134
  private
129
135
 
136
+ def _add_list(list)
137
+ list.each do |moji_info|
138
+ if moji_info.instance_of? Emojidex::Data::Emoji
139
+ @emoji[moji_info.code.to_sym] = moji_info.dup
140
+ @emoji[moji_info.code.to_sym].paths = get_paths(moji_info)
141
+ else
142
+ emoji = Emojidex::Data::Emoji.new moji_info
143
+ emoji.paths = get_paths(emoji)
144
+ @emoji[Emojidex.escape_code(emoji.code.to_s).to_sym] = emoji
145
+ end
146
+ end
147
+ end
148
+
130
149
  # Makes a list of all categories which contain emoji in this collection
131
150
  def categorize
132
- @categories = @emoji.values.map { |moji| moji.category }
151
+ @categories = @emoji.values.map(&:category)
133
152
  @categories.uniq!
134
153
  end
135
154
 
136
155
  def associate_variants
137
156
  @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
157
+ next unless emoji_obj.code.match(/\(.*\)$/) # this emoji is a variant
158
+ # check for base
159
+ base_code = emoji_obj.code.sub(/\(.*\)$/, '').to_sym
160
+ if @emoji.key? base_code
161
+ @emoji[base_code].variants << emoji_obj.code.to_sym
162
+ emoji_obj.base = base_code
145
163
  end
146
164
  end
147
165
  end
@@ -5,13 +5,15 @@ module Emojidex
5
5
  module Data
6
6
  # Asset Information for Collections
7
7
  module CollectionAssetInformation
8
- def generate_checksums(formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
8
+ def generate_checksums(formats = Emojidex::Defaults.formats,
9
+ sizes = Emojidex::Defaults.sizes)
9
10
  @emoji.values.each do |moji|
10
11
  moji.checksums = get_checksums(moji, formats, sizes)
11
12
  end
12
13
  end
13
14
 
14
- def get_checksums(moji, formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
15
+ def get_checksums(moji, formats = Emojidex::Defaults.formats,
16
+ sizes = Emojidex::Defaults.sizes)
15
17
  sums = {}
16
18
  sums[:svg] = _checksum_for_file("#{@cache_path}/#{moji.code}.svg") if formats.include? :svg
17
19
  if formats.include? :png
@@ -29,7 +31,7 @@ module Emojidex
29
31
  end
30
32
  end
31
33
 
32
- def get_paths(moji, formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
34
+ def get_paths?(moji, formats = Emojidex::Defaults.formats, sizes = Emojidex::Defaults.sizes)
33
35
  paths = {}
34
36
  path = "#{@cache_path}/#{moji.code}.svg"
35
37
  paths[:svg] = path if File.exist? path
@@ -43,7 +45,21 @@ module Emojidex
43
45
  paths
44
46
  end
45
47
 
48
+ def get_paths(moji, formats = Emojidex::Defaults.formats,
49
+ sizes = Emojidex::Defaults.sizes)
50
+ paths = {}
51
+ paths[:svg] = "#{@cache_path}/#{moji.code}.svg"
52
+ if formats.include? :png
53
+ paths[:png] = {}
54
+ sizes.keys.each do |size|
55
+ paths[:png][size] = "#{@cache_path}/#{size}/#{moji.code}.png"
56
+ end
57
+ end
58
+ paths
59
+ end
60
+
46
61
  private
62
+
47
63
  def _checksum_for_file(path)
48
64
  (File.exist? path) ? Digest::MD5.file(path).hexdigest : nil
49
65
  end
@@ -18,15 +18,25 @@ module Emojidex
18
18
  # check if cache dir is already set
19
19
  return @cache_path if @cache_path && path.nil?
20
20
  # setup cache
21
- @cache_path = File.expand_path((path || ENV['EMOJI_CACHE'] || "#{ENV['HOME']}/.emojidex/") + '/emoji')
21
+ @cache_path =
22
+ File.expand_path((path || Emojidex::Defaults.system_cache_path) + '/emoji')
22
23
  # ENV['EMOJI_CACHE'] = @cache_path
23
24
  FileUtils.mkdir_p(@cache_path)
24
25
  Emojidex::Defaults.sizes.keys.each do |size|
25
26
  FileUtils.mkdir_p(@cache_path + "/#{size}")
26
27
  end
28
+ # load will expect emoji.json even if it contains no emoji
29
+ unless File.exist? "#{cache_path}/emoji.json"
30
+ File.open("#{@cache_path}/emoji.json", 'w') { |f| f.write '[]' }
31
+ end
27
32
  @cache_path
28
33
  end
29
34
 
35
+ def load_cache(path = nil)
36
+ setup_cache(path)
37
+ load_local_collection(@cache_path)
38
+ end
39
+
30
40
  # Caches emoji to local emoji storage cache
31
41
  # Options:
32
42
  # cache_path: manually specify cache location
@@ -61,37 +71,42 @@ module Emojidex
61
71
  def write_index(destination)
62
72
  idx = @emoji.values.to_json
63
73
  idx = JSON.parse idx
64
- idx.each { |moji| moji.delete_if{ |k, v| v.nil? }}
74
+ idx.each { |moji| moji.delete_if { |_k, v| v.nil? } }
65
75
  File.open("#{destination}/emoji.json", 'w') { |f| f.write idx.to_json }
66
76
  end
67
77
 
68
78
  private
69
79
 
70
80
  def _svg_check_copy(moji)
71
- @download_queue << { moji: moji, formats: :svg, sizes: [] } if @vector_source_path.nil? && @source_path.nil?
81
+ if @vector_source_path.nil? && @source_path.nil?
82
+ @download_queue << { moji: moji, formats: :svg, sizes: [] }
83
+ end
72
84
  @vector_source_path = @source_path if @vector_source_path.nil?
73
85
  src = "#{@vector_source_path}/#{moji.code}.svg"
74
86
  if File.exist? "#{src}"
75
87
  unless File.exist?("#{@cache_path}/#{moji.code}") &&
76
- FileUtils.compare_file("#{src}", "#{@cache_path}/#{moji.code}.svg")
88
+ FileUtils.compare_file("#{src}", "#{@cache_path}/#{moji.code}.svg")
77
89
  FileUtils.cp("#{src}", @cache_path)
78
90
  end
79
91
  else
80
- _cache_svg_from_net(moji)
92
+ @download_queue << { moji: moji, formats: :svg, sizes: [] }
81
93
  end
82
94
  FileUtils.cp_r src, @cache_path if File.directory? src
83
95
  end
84
96
 
85
97
  def _raster_check_copy(moji, format, sizes)
86
- @download_queue << { moji: moji, formats: [format], sizes: sizes } if @raster_source_path.nil? && @source_path.nil?
98
+ if @raster_source_path.nil? && @source_path.nil?
99
+ @download_queue << { moji: moji, formats: [format], sizes: sizes }
100
+ end
87
101
  @raster_source_path = @source_path if @raster_source_path.nil?
88
- _cache_raster_from_net(moji, format, sizes) if @raster_source_path.nil?
102
+ moji.cache(format, sizes) if @raster_source_path.nil?
89
103
  sizes.each do |size|
104
+ next if File.exist? "#{@cache_path}/#{size}/#{moji.code}.#{format}" # TODO: check checksums
90
105
  src = "#{@raster_source_path}/#{size}/#{moji.code}"
91
106
  if FileTest.exist? "#{src}.#{format}"
92
107
  FileUtils.cp("#{src}.#{format}", ("#{@cache_path}/#{size}"))
93
- else
94
- _cache_raster_from_net(moji, format, sizes)
108
+ else
109
+ @download_queue << { moji: moji, formats: [format], sizes: [size] }
95
110
  end
96
111
  FileUtils.cp_r(src, @cache_path) if File.directory? src
97
112
  end
@@ -101,36 +116,16 @@ module Emojidex
101
116
  thr = []
102
117
  @download_queue.each do |dl|
103
118
  thr << Thread.new { _cache_from_net(dl[:moji], dl[:formats], dl[:sizes]) }
104
- thr.each { |t| t.join } if thr.length >= @download_threads
119
+ thr.each(&:join) if thr.length >= @download_threads
105
120
  end
106
121
  end
107
122
 
108
123
  def _cache_from_net(moji, formats, sizes)
109
124
  formats = *formats unless formats.class == Array
110
125
  dls = []
111
- dls << Thread.new { _cache_svg_from_net(moji) } if formats.include? :svg
112
- dls << Thread.new { _cache_raster_from_net(moji, :png, sizes) } if formats.include? :png
113
- dls.each { |t| t.join }
114
- end
115
-
116
- def _cache_svg_from_net(moji)
117
- target = "#{@cache_path}/#{moji.code}.svg"
118
- if File.exist? target # check for an existing copy so we don't double downlaod
119
- return if moji.checksum?(:svg).nil? # no updates if we didn't get details
120
- # if the checksums are the same there is no reason to update
121
- return if moji.checksum?(:svg) == get_checksums(moji, [:svg])[:svg]
122
- end
123
- response = Emojidex::Service::Transactor.download("#{moji.code}.svg")
124
- File.open(target, 'wb') { |fp|
125
- fp.write(response.body) }
126
- end
127
-
128
- def _cache_raster_from_net(moji, format, sizes)
129
- sizes.each do |size|
130
- response = Emojidex::Service::Transactor.download("#{size}/#{moji.code}.#{format.to_s}")
131
- File.open("#{@cache_path}/#{size}/#{moji.code}.#{format.to_s}", 'wb') { |fp|
132
- fp.write(response.body) }
133
- end
126
+ dls << Thread.new { moji.cache(:svg) } if formats.include? :svg
127
+ dls << Thread.new { moji.cache(:png, sizes) } if formats.include? :png
128
+ dls.each(&:join)
134
129
  end
135
130
  end
136
131
  end