Class: Surely::Uploader
- Inherits:
-
Object
- Object
- Surely::Uploader
- Defined in:
- lib/surely/uploader.rb
Instance Method Summary collapse
- #add_client! ⇒ Object
- #authorize! ⇒ Object
- #callback ⇒ Object
-
#initialize(env, settings, directory) ⇒ Uploader
constructor
A new instance of Uploader.
- #refresh_token! ⇒ Object
- #save_settings ⇒ Object
- #update_tokens(token_data) ⇒ Object
- #upload_file(file) ⇒ Object
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 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 |
#callback ⇒ Object
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_settings ⇒ Object
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 |