emoji_differ 0.1.0.alpha3 → 0.1.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b645b57f4051dec99c198715af8f7b72f434d387
4
- data.tar.gz: 7e17307a7dca363e16419ca5bac8ab522f205a7b
3
+ metadata.gz: 7b31b878e80391ad4307cb311e12f4a528f28970
4
+ data.tar.gz: bdb2d22d20fdfdfe506abaf9bac7ef4f28afe889
5
5
  SHA512:
6
- metadata.gz: f8bb1c7df3e177c1b5c3f5f5e5b17ee7074cbeb663145ae73181e709170364a016b0cd8471ce286c41f6158c4f7b3cdcf01e42457ee9365473415162783a89c8
7
- data.tar.gz: 68d7e5198fbf21a57918a1c6fd2476e7cbc387e80abb06c02e32b2d8c45f6590a571b87601ff5e478f80fa4645e751c3a72716c5163029e9717782b9b4100f90
6
+ metadata.gz: 60ba91374af393b9b69e6b60969fa8619b75f34f528183fb85d766916272041d2bc7440631b68c46b72c6218ad53a0b35124fce87f1276e1f2e9806f0a327a10
7
+ data.tar.gz: e79a98f8b2d8c79e25969e576c9cc27130426a0588ca0c0c0963e07d0758be8db7d8fb58718ea64472a563956e94fd5e6be9e1046595cce542ae7f807ab46c70
data/Gemfile.lock CHANGED
@@ -1,14 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- emoji_differ (0.1.0.alpha2)
5
- json (> 0)
4
+ emoji_differ (0.1.0.beta)
6
5
 
7
6
  GEM
8
7
  remote: https://rubygems.org/
9
8
  specs:
10
9
  diff-lcs (1.3)
11
- json (2.1.0)
10
+ dotenv (2.6.0)
12
11
  rake (10.5.0)
13
12
  rspec (3.8.0)
14
13
  rspec-core (~> 3.8.0)
@@ -30,6 +29,7 @@ PLATFORMS
30
29
 
31
30
  DEPENDENCIES
32
31
  bundler (~> 2.0)
32
+ dotenv (~> 2.6)
33
33
  emoji_differ!
34
34
  rake (~> 10.0)
35
35
  rspec (~> 3.0)
data/README.md CHANGED
@@ -22,7 +22,24 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ Either set `SLACK_API_TOKEN` env variable or create a `.slack_token` file in your home directory, then try the gem:
26
+
27
+ require 'emoji_differ'
28
+ # update file on disk with current emoji in your team
29
+ EmojiDiffer.save
30
+
31
+ Get current emoji as an `EmojiDiffer::List` of `EmojiDiffer::Emoji` instances, for programmatic use:
32
+
33
+ EmojiDiffer.current
34
+
35
+ Some time later ...
36
+
37
+ # returns an EmojiDiffer::List of EmojiDiffer::Emoji instances, for programmatic use
38
+ EmojiDiffer.new_emoji
39
+ # outputs new emoji since the last time .save_emoji was called, in :name: format for pasting into slack
40
+ EmojiDiffer.new_emoji.to_s
41
+ EmojiDiffer.clear
42
+ EmojiDiffer.save
26
43
 
27
44
  ## Development
28
45
 
@@ -0,0 +1,22 @@
1
+ module EmojiDiffer
2
+ class Config
3
+ attr_writer :token, :cache_location
4
+
5
+ def initialize
6
+ @token = nil
7
+ @cache_location = nil
8
+ end
9
+
10
+ def read_token_file
11
+ @file_token ||= File.exists?('.slack_token') ? File.read('.slack_token') : nil
12
+ end
13
+
14
+ def token
15
+ @token || ENV['SLACK_API_TOKEN'] || read_token_file
16
+ end
17
+
18
+ def cache_location
19
+ @cache_location || ENV['EMOJI_CACHE_LOCATION'] || 'emoji_cache'
20
+ end
21
+ end
22
+ end
@@ -1,8 +1,7 @@
1
1
  module EmojiDiffer
2
- class Emoji < Struct.new(:name, :picture_link)
3
-
2
+ class Emoji < Struct.new(:name, :picture_link, :timestamp)
4
3
  def to_s
5
- name
4
+ ":#{name}:"
6
5
  end
7
6
  end
8
7
  end
@@ -3,21 +3,44 @@ require "emoji_differ/emoji"
3
3
 
4
4
  module EmojiDiffer
5
5
  class List
6
- def initialize(jsonb)
7
- @emojis = transform(jsonb).map { |name, picture_link| EmojiDiffer::Emoji.new(name, picture_link) }
6
+ include Enumerable
7
+
8
+ def initialize(json)
9
+ @parsed = parse(json)
10
+ @emojis = transform
8
11
  end
9
12
 
10
13
  def to_s
11
14
  @emojis.to_s
12
15
  end
13
16
 
17
+ def each
18
+ @emojis.each do |emoji|
19
+ yield emoji
20
+ end
21
+ end
22
+
23
+ def length
24
+ @emojis.length
25
+ end
26
+
14
27
  def to_json
15
- raise "Unimplemented"
28
+ JSON.generate(parsed) #cheeky eh
16
29
  end
17
30
 
18
31
  private
19
- def transform(jsonb)
20
- JSON.parse(jsonb)["emoji"]
32
+ def parse(json)
33
+ JSON.parse(json)
34
+ end
35
+
36
+ attr_reader :parsed
37
+
38
+ def timestamp
39
+ parsed['cache_ts'].to_f
40
+ end
41
+
42
+ def transform
43
+ parsed['emoji'].map { |name, picture_link| EmojiDiffer::Emoji.new(name, picture_link, timestamp) }
21
44
  end
22
45
  end
23
46
  end
@@ -5,19 +5,24 @@ module EmojiDiffer
5
5
  class SlackApi < Struct.new(:token)
6
6
  API_ENDPOINT = 'https://slack.com/api/emoji.list'
7
7
 
8
- def emoji
9
- uri = URI(API_ENDPOINT)
10
- uri.query = URI.encode_www_form({
11
- token: token,
12
- })
13
-
14
- handle = Net::HTTP.get_response(uri)
8
+ def raw_response
9
+ @raw_response ||= Net::HTTP.get_response(uri).tap do |handle|
10
+ if !handle.is_a?(Net::HTTPSuccess)
11
+ raise "Slack API is out of business today, #{handle.inspect}"
12
+ end
13
+ end
14
+ end
15
15
 
16
- if !handle.is_a?(Net::HTTPSuccess)
17
- raise "Slack API is out of business today, #{handle.inspect}"
16
+ def uri
17
+ URI(API_ENDPOINT).tap do |uri|
18
+ uri.query = URI.encode_www_form({
19
+ token: token,
20
+ })
18
21
  end
22
+ end
19
23
 
20
- EmojiDiffer::List.new(handle.body)
24
+ def emoji
25
+ EmojiDiffer::List.new(raw_response.body)
21
26
  end
22
27
  end
23
28
  end
@@ -1,3 +1,3 @@
1
1
  module EmojiDiffer
2
- VERSION = "0.1.0.alpha3"
2
+ VERSION = "0.1.0.beta"
3
3
  end
data/lib/emoji_differ.rb CHANGED
@@ -1,10 +1,47 @@
1
1
  require "emoji_differ/version"
2
2
  require "emoji_differ/slack_api"
3
+ require 'emoji_differ/config'
3
4
 
4
5
  module EmojiDiffer
5
6
  class Error < StandardError; end
6
-
7
- def self.current_emoji(slack_token)
8
- EmojiDiffer::SlackApi.new(slack_token).emoji
7
+ def self.config
8
+ @config ||= EmojiDiffer::Config.new
9
+ if block_given?
10
+ yield @config
11
+ else
12
+ @config
13
+ end
14
+ end
15
+
16
+ def self.current
17
+ @current ||= EmojiDiffer::SlackApi.new(config.token).emoji
18
+ end
19
+
20
+ def self.new_emoji
21
+ current.reject {|x| load.map(&:name).include?(x.name) }.map(&:to_s).join(" ")
22
+ end
23
+
24
+ def self.save
25
+ File.open(config.cache_location, 'w') do |f|
26
+ f.print EmojiDiffer::SlackApi.new(config.token).emoji.to_json
27
+ end
28
+ end
29
+
30
+ def self.read_nb_chunk(io)
31
+ io.read_nonblock(8000)
32
+ rescue IO::WaitReadable
33
+ IO.select([io])
34
+ retry
35
+ end
36
+
37
+ def self.load
38
+ File.open(config.cache_location, 'r') do |f|
39
+ contents = ''
40
+
41
+ while !f.eof? && (chunk = read_nb_chunk(f))
42
+ contents += chunk
43
+ end
44
+ EmojiDiffer::List.new(contents)
45
+ end
9
46
  end
10
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emoji_differ
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.alpha3
4
+ version: 0.1.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin George
@@ -89,6 +89,7 @@ files:
89
89
  - bin/setup
90
90
  - emoji_differ.gemspec
91
91
  - lib/emoji_differ.rb
92
+ - lib/emoji_differ/config.rb
92
93
  - lib/emoji_differ/emoji.rb
93
94
  - lib/emoji_differ/list.rb
94
95
  - lib/emoji_differ/slack_api.rb