emoji_differ 0.1.0.alpha3 → 0.1.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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