gyaazle 0.0.2 → 0.1.0

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: cd7758c9dbc613c89561a922691f28b624aef943
4
- data.tar.gz: 453f8c594fa93bcfb9055cbe774734f1c219dbcf
3
+ metadata.gz: e9fcb4b5a8c115bc19de388ee9a16611d396208a
4
+ data.tar.gz: dcb1e78fdd812a5c080ec784c799c0a2bb398ed2
5
5
  SHA512:
6
- metadata.gz: 341020bcb4d18d26ee6605bb4d08642314a01ecf97fd96f4a0d1dfa6fe133a61f52bc8168e4fab640e5050765c478dcdf7fa50796921a001fe4bd04b95f276be
7
- data.tar.gz: 0abe5cbe6dd9ddbe15340a7d17b2ad755c8e97091c3846a86b45bb2021d7ca9ff1967cd108e32b5e31067a801d7e60b5602056dce17e0ccffa0ad6028ab16be2
6
+ metadata.gz: 7432d5148cbb9d3e868dc1877d777270f15007f588665a233b6b4cc215b22d16660c67718cc286b94165b29c41ca6cc6619c94c3e66d7fdb4f66123b8fa83364
7
+ data.tar.gz: 1d19d6a111e70dc291fbca2b8b26d6288ce39e7e4bccb0d02a053a7695c11c9cea843797a569408cc3af4f32f28274438d6bb9d32d9a1e12f09331af9cecbf2e
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
5
+ - 2.0.0
6
+
7
+ script:
8
+ - bundle exec rspec -c
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in gyaazle.gemspec
4
4
  gemspec
5
+
6
+ gem 'coveralls', :require => false
7
+ gem 'json', '~> 1.7.7'
8
+
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Build Status](https://travis-ci.org/uu59/gyaazle.png?branch=master)](https://travis-ci.org/uu59/gyaazle)
2
+ [![Coverage Status](https://coveralls.io/repos/uu59/gyaazle/badge.png?branch=master)](https://coveralls.io/r/uu59/gyaazle)
3
+
1
4
  # Gyaazle
2
5
 
3
6
  Gyazo like image uploader that upload image(s) to Google Drive.
data/gyaazle.gemspec CHANGED
@@ -26,4 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "pry"
27
27
  spec.add_development_dependency "bundler", "~> 1.3"
28
28
  spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "rspec"
30
+ spec.add_development_dependency "simplecov"
31
+ spec.add_development_dependency "webmock"
29
32
  end
data/lib/gyaazle/cli.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Gyaazle
2
2
  class CLI
3
+ attr_reader :config, :client
4
+
3
5
  def initialize(argv)
4
6
  @argv = argv
5
7
  @opts = Trollop.options(@argv) do
@@ -35,19 +37,19 @@ TEXT
35
37
  end
36
38
 
37
39
  def upload
38
- if @config.load.nil? || @config.load[:refresh_token].nil?
39
- credentials = initialize_tokens
40
- else
41
- @client.refresh_token!
42
- credentials = @client.credentials
43
- end
40
+ check_credentials!
41
+
44
42
  @argv.each do |file|
45
- fileobj = @client.upload(file)
46
- puts "#{file}: #{fileobj[:alternateLink]}"
43
+ fileobj = client.upload(file)
44
+ puts "#{file}:"
45
+ puts " * url: #{fileobj[:alternateLink]}"
46
+ puts " * download: #{fileobj[:downloadUrl]}"
47
+ puts " * deep link: https://drive.google.com/uc?export=view&id=#{fileobj[:id]}"
48
+ puts
47
49
  if @opts[:open]
48
50
  Launchy.open fileobj[:alternateLink]
49
51
  end
50
- @client.set_permissions(fileobj[:id])
52
+ client.set_permissions(fileobj[:id])
51
53
  end
52
54
  end
53
55
 
@@ -64,21 +66,28 @@ TEXT
64
66
  end
65
67
 
66
68
  def edit_config
67
- system(ENV["EDITOR"], @config.file)
68
- puts "Updated!"
69
+ system(ENV["EDITOR"], config.file)
69
70
  end
70
71
 
71
- def initialize_tokens
72
- tokens = @client.get_tokens(authorize)
73
- @config.save(tokens)
72
+ def initialize_tokens(verifier = nil)
73
+ tokens = client.get_tokens(verifier || authorize)
74
+ config.save(tokens)
74
75
  tokens
75
76
  end
76
77
 
77
78
  def authorize
78
79
  puts "Open this link by your browser, and authorize"
79
- puts @client.authorize_url
80
+ puts client.authorize_url
80
81
  print "Paste code here: "
81
82
  STDIN.gets.strip
82
83
  end
84
+
85
+ def check_credentials!
86
+ if config.load.nil? || config.load[:refresh_token].nil?
87
+ initialize_tokens(authorize)
88
+ else
89
+ client.refresh_token!
90
+ end
91
+ end
83
92
  end
84
93
  end
@@ -1,30 +1,19 @@
1
1
  module Gyaazle
2
2
  class Client
3
- attr_reader :client, :config
3
+ attr_reader :agent, :config
4
4
 
5
5
  def initialize(config)
6
6
  @config = config
7
- @client = HTTPClient.new
8
- end
9
-
10
- def authorize(code)
11
- json = client.post_content("https://accounts.google.com/o/oauth2/token", {
12
- :code => code,
13
- :client_id => config.id,
14
- :client_secret => config.secret,
15
- :redirect_uri => "urn:ietf:wg:oauth:2.0:oob",
16
- :grant_type => "authorization_code",
17
- })
18
- MultiJson.load(json, :symbolize_keys => true)
7
+ @agent = HTTPClient.new
19
8
  end
20
9
 
21
10
  def authorize_url
22
11
  url = "https://accounts.google.com/o/oauth2/auth?client_id=#{config.id}&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/drive"
23
- Nokogiri::HTML.parse(client.get(url).body).at('a').attributes["href"].to_s
12
+ Nokogiri::HTML.parse(agent.get(url).body).at('a').attributes["href"].to_s
24
13
  end
25
14
 
26
15
  def get_tokens(verifier)
27
- client.post_content("https://accounts.google.com/o/oauth2/token",{
16
+ agent.post_content("https://accounts.google.com/o/oauth2/token",{
28
17
  :code => verifier,
29
18
  :client_id => config.id,
30
19
  :client_secret => config.secret,
@@ -34,7 +23,7 @@ module Gyaazle
34
23
  end
35
24
 
36
25
  def refresh_token!
37
- json = client.post("https://accounts.google.com/o/oauth2/token", {
26
+ json = agent.post("https://accounts.google.com/o/oauth2/token", {
38
27
  :refresh_token => credentials[:refresh_token],
39
28
  :client_id => config.id,
40
29
  :client_secret => config.secret,
@@ -59,11 +48,11 @@ module Gyaazle
59
48
  },
60
49
  ]
61
50
 
62
- response = client.post(
51
+ response = agent.post(
63
52
  'https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart',
64
53
  body,
65
54
  {
66
- "Authorization" => "#{credentials[:token_type]} #{credentials[:access_token]}",
55
+ "Authorization" => authorization_header_value,
67
56
  "Content-Type" => "multipart/related; boundary=___#{Time.now.to_f}___",
68
57
  }
69
58
  )
@@ -81,33 +70,37 @@ module Gyaazle
81
70
  :additionalRoles => ["commenter"],
82
71
  }
83
72
  )
84
- client.post_content(
73
+ agent.post_content(
85
74
  "https://www.googleapis.com/drive/v2/files/#{file_id}/permissions",
86
75
  json,
87
76
  {
88
- "Authorization" => "#{credentials[:token_type]} #{credentials[:access_token]}",
77
+ "Authorization" => authorization_header_value,
89
78
  'Content-Type' => 'application/json;charset=utf-8',
90
79
  }
91
80
  )
92
81
  end
93
82
 
94
- def get(file_id)
95
- json = client.get(
83
+ def get_file_info(file_id)
84
+ json = agent.get(
96
85
  "https://www.googleapis.com/drive/v2/files/#{file_id}",
97
- {},
86
+ nil,
98
87
  {
99
- "Authorization" => "#{credentials[:token_type]} #{credentials[:access_token]}",
88
+ "Authorization" => authorization_header_value,
100
89
  }
101
90
  ).body
102
91
 
103
92
  MultiJson.load(json, :symbolize_keys => true)
104
93
  end
105
94
 
95
+ def authorization_header_value
96
+ "#{credentials[:token_type]} #{credentials[:access_token]}"
97
+ end
98
+
106
99
  def folder_id
107
100
  id = credentials[:folder_id]
108
101
  return create_folder("Gyaazle") unless id
109
102
 
110
- folder = get(id)
103
+ folder = get_file_info(id)
111
104
  if !folder[:id] || folder[:labels][:trashed]
112
105
  create_folder("Gyaazle")
113
106
  else
@@ -116,7 +109,7 @@ module Gyaazle
116
109
  end
117
110
 
118
111
  def create_folder(name)
119
- json = client.post_content(
112
+ json = agent.post_content(
120
113
  "https://www.googleapis.com/drive/v2/files",
121
114
  MultiJson.dump({
122
115
  :title => name,
@@ -124,7 +117,7 @@ module Gyaazle
124
117
  :parents => [{:id => "root"}],
125
118
  }),
126
119
  {
127
- "Authorization" => "#{credentials[:token_type]} #{credentials[:access_token]}",
120
+ "Authorization" => authorization_header_value,
128
121
  'Content-Type' => 'application/json;charset=utf-8',
129
122
  }
130
123
  )
@@ -3,15 +3,12 @@ module Gyaazle
3
3
  CLIENT_ID = "810975313441.apps.googleusercontent.com"
4
4
  CLIENT_SECRET = "0CJJ4jT2jcUsCWDrsHvXmARs"
5
5
 
6
- attr_reader :id, :secret, :file
6
+ attr_reader :id, :secret
7
7
 
8
8
  def initialize(file = nil)
9
9
  @id = CLIENT_ID
10
10
  @secret = CLIENT_SECRET
11
11
  @file = file
12
- dir = File.dirname(@file)
13
- FileUtils.mkdir_p(dir) unless File.directory?(dir)
14
- FileUtils.touch(file) unless File.exists?(file)
15
12
  end
16
13
 
17
14
  def save(json)
@@ -27,5 +24,12 @@ module Gyaazle
27
24
  def load
28
25
  MultiJson.load(File.read(file), :symbolize_keys => true) rescue nil
29
26
  end
27
+
28
+ def file
29
+ dir = File.dirname(@file)
30
+ FileUtils.mkdir_p(dir) unless File.directory?(dir)
31
+ FileUtils.touch(@file) unless File.exists?(@file)
32
+ @file
33
+ end
30
34
  end
31
35
  end
@@ -1,3 +1,3 @@
1
1
  module Gyaazle
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,115 @@
1
+ # -- coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Gyaazle::CLI do
6
+ let(:cli) { Gyaazle::CLI.new([]) }
7
+
8
+ describe "ensure oauth token" do
9
+ before do
10
+ cli.stub(:authorize).and_return("verification code")
11
+ end
12
+
13
+ it "invoke #check_credentials! before #upload" do
14
+ cli.should_receive(:check_credentials!)
15
+ cli.run!
16
+ end
17
+
18
+ context "config file does not exists" do
19
+ before do
20
+ cli.config.stub(:load).and_return(nil)
21
+ end
22
+
23
+ it "invoke #initialize_tokens" do
24
+ cli.should_receive(:initialize_tokens)
25
+ cli.run!
26
+ end
27
+ end
28
+
29
+ context "config file is sane" do
30
+ before do
31
+ cli.config.stub(:load).and_return(:client_id => "id", :client_secret => "secret", :refresh_token => "refresh")
32
+ end
33
+
34
+ it "invoke #refresh_token!" do
35
+ cli.client.should_receive(:refresh_token!)
36
+ cli.run!
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "options" do
42
+ context "-e" do
43
+ let(:cli) { Gyaazle::CLI.new(%w!-e!) }
44
+ before do
45
+ cli.stub(:edit_config)
46
+ end
47
+
48
+ it "invoke #edit_config" do
49
+ cli.should_receive(:edit_config)
50
+ cli.run!
51
+ end
52
+
53
+ it "not invoke #upload and #check_credentials!" do
54
+ cli.should_not_receive(:check_credentials!)
55
+ cli.should_not_receive(:upload)
56
+ cli.run!
57
+ end
58
+ end
59
+
60
+ context "--config filepath" do
61
+ let(:file) { File.join("/tmp", rand.to_s) }
62
+ let(:cli) { Gyaazle::CLI.new(%W!--config #{file}!) }
63
+
64
+ it "set config file" do
65
+ cli.config.file.should == file
66
+ File.unlink(file) if File.exists?(file)
67
+ end
68
+ end
69
+
70
+ context "--capture" do
71
+ let(:cli) { Gyaazle::CLI.new(%W!--capture!) }
72
+ before do
73
+ cli.stub(:upload)
74
+ end
75
+
76
+ it "invoke #capture" do
77
+ cli.should_receive(:capture)
78
+ cli.run!
79
+ end
80
+ end
81
+ end
82
+
83
+ describe "#initialize_tokens" do
84
+ let(:token) { {:foo => 1, :bar => 44} }
85
+
86
+ it "save response to config file" do
87
+ cli.client.stub(:get_tokens).and_return(token)
88
+ cli.initialize_tokens("code")
89
+ cli.config.load.should == token
90
+ end
91
+ end
92
+
93
+ describe "#upload" do
94
+ let(:files) { %w!foo.jpg! }
95
+ let(:cli) { Gyaazle::CLI.new(files) }
96
+
97
+ before do
98
+ cli.stub(:check_credentials!)
99
+
100
+ @orig_stdout = $stdout
101
+ $stdout = File.new("/dev/null", "w")
102
+ end
103
+
104
+ after do
105
+ $stdout = @orig_stdout
106
+ end
107
+
108
+ it "invoke client.upload" do
109
+ cli.client.should_receive(:upload).with(files.first).and_return(:alternateLink => "dummy")
110
+ cli.client.should_receive(:set_permissions)
111
+ cli.upload
112
+ end
113
+ end
114
+ end
115
+
@@ -0,0 +1,143 @@
1
+ # -- coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Gyaazle::Client do
6
+ let(:file) { File.expand_path("../tmp/dummy_conf.json", __FILE__) }
7
+ let(:config) { Gyaazle::Config.new(file) }
8
+ let(:client) { Gyaazle::Client.new(config) }
9
+ let(:folder_id) { "ididid" }
10
+
11
+ before do
12
+ config.save(:foo => 1)
13
+ end
14
+
15
+ after do
16
+ File.unlink(file) if File.exists?(file)
17
+ end
18
+
19
+ describe "#credentials" do
20
+ it "return hash with symbol key" do
21
+ client.credentials.class.should == Hash
22
+ client.credentials.keys.all?{|key| key.class == Symbol}.should be_true
23
+ end
24
+ end
25
+
26
+ describe "#folder_id" do
27
+ context "Gyaazle folder does exists" do
28
+ before do
29
+ config.update(:folder_id => folder_id)
30
+ client.stub(:get_file_info).and_return({
31
+ :id => folder_id,
32
+ :labels => {
33
+ :trashed => false
34
+ }
35
+ })
36
+ end
37
+
38
+ it "invoke #create_folder" do
39
+ client.should_not_receive(:create_folder)
40
+ client.folder_id.should == folder_id
41
+ end
42
+ end
43
+
44
+ context "Gyaazle folder does not exists" do
45
+ before do
46
+ config.update(:folder_id => nil)
47
+ end
48
+
49
+ it "invoke #create_folder" do
50
+ client.should_receive(:create_folder)
51
+ client.folder_id
52
+ end
53
+ end
54
+
55
+ context "Gyaazle folder is in trash" do
56
+ before do
57
+ config.update(:folder_id => folder_id)
58
+ client.stub(:get_file_info).and_return({
59
+ :id => folder_id,
60
+ :labels => {
61
+ :trashed => true
62
+ }
63
+ })
64
+ end
65
+
66
+ it "invoke #create_folder" do
67
+ client.should_receive(:create_folder)
68
+ client.folder_id
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "#get_file_info" do
74
+ let(:response) { {:folder_id => folder_id, :labels => {:trashed => false}} }
75
+ before do
76
+ @requset = stub_request(:get, "https://www.googleapis.com/drive/v2/files/#{folder_id}").with(
77
+ :headers => {
78
+ "Authorization" => client.authorization_header_value
79
+ }
80
+ ).to_return(
81
+ :body => MultiJson.dump(response)
82
+ )
83
+ end
84
+
85
+ it "GET www.googleapis.com with folder_id" do
86
+ client.get_file_info(folder_id)
87
+ WebMock.should have_requested(:get, "https://www.googleapis.com/drive/v2/files/#{folder_id}")
88
+ end
89
+
90
+ it "return response as object" do
91
+ client.get_file_info(folder_id).should == response
92
+ end
93
+ end
94
+
95
+ describe "#create_folder" do
96
+ let(:new_folder_id) { "foobardir" }
97
+ let(:new_folder_name) { "Gyaazle" }
98
+
99
+ before do
100
+ @request = stub_request(:post, "https://www.googleapis.com/drive/v2/files").with(
101
+ :headers => {
102
+ "Authorization" => client.authorization_header_value
103
+ }
104
+ ).to_return(
105
+ :body => MultiJson.dump(:id => new_folder_id)
106
+ )
107
+ end
108
+
109
+ it "POST www.googleapis.com with new_folder_name" do
110
+ client.create_folder(new_folder_name)
111
+ WebMock.should have_requested(:post, "https://www.googleapis.com/drive/v2/files").with{|req| req.body[new_folder_name] }
112
+ end
113
+
114
+ it "config[:folder_id] should update" do
115
+ client.create_folder(new_folder_name)
116
+ config.load[:folder_id].should == new_folder_id
117
+ end
118
+
119
+ it "return new folder_id" do
120
+ client.create_folder(new_folder_name).should == new_folder_id
121
+ end
122
+ end
123
+
124
+ describe "#refresh_token!" do
125
+ let(:access_token) { "ACCESS_TOKEN" }
126
+ before do
127
+ @request = stub_request(:post, "https://accounts.google.com/o/oauth2/token").to_return(
128
+ :body => MultiJson.dump(:access_token => access_token)
129
+ )
130
+ end
131
+
132
+ it "POST accounts.google.com" do
133
+ client.refresh_token!
134
+ WebMock.should have_requested(:post, "https://accounts.google.com/o/oauth2/token")
135
+ end
136
+
137
+ it "update access token" do
138
+ client.refresh_token!
139
+ config.load[:access_token].should == access_token
140
+ end
141
+ end
142
+ end
143
+
@@ -0,0 +1,57 @@
1
+ # -- coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe Gyaazle::Config do
6
+ let(:file) { File.expand_path("../tmp/dummy_conf.json", __FILE__) }
7
+ let(:config) { Gyaazle::Config.new(file) }
8
+
9
+ after do
10
+ File.unlink(file) if File.exists?(file)
11
+ end
12
+
13
+ describe "#load" do
14
+ it "return nil if config file does not exists" do
15
+ File.unlink(file) if File.exists?(file)
16
+ config.load.should be_nil
17
+ end
18
+
19
+ it "return nil if config file invalid json" do
20
+ File.open(file, "w"){|f| f.write "invalid json here" }
21
+ config.load.should be_nil
22
+ end
23
+
24
+ it "return object with symbol keys" do
25
+ obj = {"foo" => 1, :bar => 2}
26
+ File.open(file, "w"){|f| f.write MultiJson.dump(obj) }
27
+ config.load.should == {:foo => 1, :bar => 2}
28
+ end
29
+ end
30
+
31
+ describe "#save" do
32
+ it "write string to config file" do
33
+ str = "str"
34
+ config.save(str)
35
+ File.read(file).should == str
36
+ end
37
+
38
+ it "dump object to config file" do
39
+ obj = {"foo" => "bar"}
40
+ config.save(obj)
41
+ File.read(file).should == MultiJson.dump(obj, :pretty => true)
42
+ end
43
+ end
44
+
45
+ describe "#update" do
46
+ before do
47
+ @obj = {:foo => 1, :bar => 2}
48
+ config.save(@obj)
49
+ end
50
+
51
+ it "save an object that merged" do
52
+ diff = {:foo => 66, :baz => 3}
53
+ config.update(diff)
54
+ config.load.should == {:foo => 66, :bar => 2, :baz => 3}
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,31 @@
1
+ # -- coding: utf-8
2
+
3
+ require "rubygems"
4
+ require "bundler/setup"
5
+
6
+ require "simplecov"
7
+ require 'coveralls'
8
+ Coveralls.wear!
9
+
10
+ if ENV["COVERAGE"]
11
+ # Coveralls overwrite NilFomatter
12
+ SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
13
+ SimpleCov.start do
14
+ add_filter "/spec/"
15
+ end
16
+ end
17
+ Bundler.require :default, :test
18
+ require "rspec-expectations"
19
+ require "rspec/matchers/built_in/be"
20
+ require "webmock/rspec"
21
+
22
+ Dir["./spec/support/**/*.rb"].each{|file| require file }
23
+
24
+
25
+ require File.expand_path("../../lib/gyaazle.rb", __FILE__)
26
+
27
+ RSpec.configure do |config|
28
+ end
29
+ # -- coding: utf-8
30
+
31
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gyaazle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - uu59
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-24 00:00:00.000000000 Z
11
+ date: 2013-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -122,6 +122,48 @@ dependencies:
122
122
  - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
125
167
  description: Gyazo like image uploader to Google Drive
126
168
  email:
127
169
  - k@uu59.org
@@ -131,6 +173,7 @@ extensions: []
131
173
  extra_rdoc_files: []
132
174
  files:
133
175
  - .gitignore
176
+ - .travis.yml
134
177
  - Gemfile
135
178
  - LICENSE.txt
136
179
  - README.md
@@ -142,6 +185,10 @@ files:
142
185
  - lib/gyaazle/client.rb
143
186
  - lib/gyaazle/config.rb
144
187
  - lib/gyaazle/version.rb
188
+ - spec/gyaazle_cli_spec.rb
189
+ - spec/gyaazle_client_spec.rb
190
+ - spec/gyaazle_config_spec.rb
191
+ - spec/spec_helper.rb
145
192
  homepage: https://github.com/uu59/gyaazle
146
193
  licenses:
147
194
  - MIT
@@ -166,5 +213,9 @@ rubygems_version: 2.0.2
166
213
  signing_key:
167
214
  specification_version: 4
168
215
  summary: Gyazo like image uploader to Google Drive
169
- test_files: []
216
+ test_files:
217
+ - spec/gyaazle_cli_spec.rb
218
+ - spec/gyaazle_client_spec.rb
219
+ - spec/gyaazle_config_spec.rb
220
+ - spec/spec_helper.rb
170
221
  has_rdoc: