Class: Surely::Uploader

Inherits:
Object
  • Object
show all
Defined in:
lib/surely/uploader.rb

Instance Method Summary collapse

Constructor Details

#initialize(env, settings, directory) ⇒ Uploader

Returns a new instance of Uploader.



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/surely/uploader.rb', line 3

def initialize(env, settings, directory)
  @access_token  = settings['access_token']
  @refresh_token = settings['refresh_token']
  @imgur_client_id  = settings['imgur_client_id']
  @imgur_client_secret = settings['imgur_client_secret']

  @imgur = Faraday.new(url: 'https://api.imgur.com') do |c|
    c.request :multipart
    c.request :url_encoded
    c.adapter :net_http
  end

  @env = env
  @settings = settings
  @directory = directory
end

Instance Method Details

#add_client!Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/surely/uploader.rb', line 52

def add_client!
  return true if @imgur_client_id && @imgur_client_secret

  puts 'Create an imgur application here: https://api.imgur.com/oauth2/addclient'
  print 'Enter your application client_id: '
  @imgur_client_id = STDIN.gets.chomp
  print 'Enter your application client_secret: '
  @imgur_client_secret = STDIN.gets.chomp

  save_settings
end

#authorize!Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/surely/uploader.rb', line 64

def authorize!
  return true if @access_token && @refresh_token

  system "open 'https://api.imgur.com/oauth2/authorize?client_id=#{@imgur_client_id}&response_type=token'"
  print 'Enter your access_token: '
  access_token = STDIN.gets.chomp
  print 'Enter your refresh_token: '
  refresh_token = STDIN.gets.chomp
  update_tokens('access_token' => access_token, 'refresh_token' => refresh_token)
end

#callbackObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/surely/uploader.rb', line 93

def callback
  @callback ||= lambda do |modified, added, removed|
    if added.any?
      Raad::Logger.info 'Uploading... '
      refresh_token!

      if uploaded_file = upload_file(added.first)
        Raad::Logger.info "Done! Uploaded #{uploaded_file['link']}"
        system "say -v 'Fred' 'Uploaded'"
        IO.popen('pbcopy', 'w+') { |f| f << uploaded_file['link'].chomp }
      end
    end
  end
end

#refresh_token!Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/surely/uploader.rb', line 75

def refresh_token!
  response = @imgur.post '/oauth2/token' do |r|
    r.body = {
      refresh_token: @refresh_token,
      client_id: @imgur_client_id,
      client_secret: @imgur_client_secret,
      grant_type: 'refresh_token'
    }
  end

  if response.success?
    token_data = MultiJson.load(response.body)
    update_tokens(token_data)
  end

  response
end

#save_settingsObject



41
42
43
44
45
46
47
48
49
50
# File 'lib/surely/uploader.rb', line 41

def save_settings
  @settings = @settings.merge({
    'imgur_client_id' => @imgur_client_id,
    'imgur_client_secret' => @imgur_client_secret,
    'access_token' => @access_token,
    'refresh_token' => @refresh_token,
  })

  File.open("#{@env['HOME']}/.surely.yml", 'w') { |f| f << @settings.to_yaml }
end

#update_tokens(token_data) ⇒ Object



35
36
37
38
39
# File 'lib/surely/uploader.rb', line 35

def update_tokens(token_data)
  @access_token = token_data['access_token']
  @refresh_token = token_data['refresh_token']
  save_settings
end

#upload_file(file) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/surely/uploader.rb', line 20

def upload_file(file)
  file = Faraday::UploadIO.new(file, "image/#{file.split(/\./).last}")

  response = @imgur.post '/3/image' do |r|
    r.headers['Authorization'] = "Bearer #{@access_token}"
    r.body = { image: file }
  end

  if response.success?
    MultiJson.load(response.body)['data']
  else
    nil
  end
end