logs_tf 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.autotest ADDED
@@ -0,0 +1 @@
1
+ require "autotest/bundler"
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in logs_tf.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,43 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ logs_tf (0.0.0)
5
+ faraday (~> 0.8.0)
6
+ multipart-post (~> 1.1.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ ZenTest (4.9.0)
12
+ coderay (1.0.8)
13
+ diff-lcs (1.1.3)
14
+ faraday (0.8.5)
15
+ multipart-post (~> 1.1)
16
+ method_source (0.8.1)
17
+ multipart-post (1.1.5)
18
+ pry (0.9.11.4)
19
+ coderay (~> 1.0.5)
20
+ method_source (~> 0.8)
21
+ slop (~> 3.4)
22
+ pry-nav (0.2.3)
23
+ pry (~> 0.9.10)
24
+ rspec (2.12.0)
25
+ rspec-core (~> 2.12.0)
26
+ rspec-expectations (~> 2.12.0)
27
+ rspec-mocks (~> 2.12.0)
28
+ rspec-core (2.12.2)
29
+ rspec-expectations (2.12.1)
30
+ diff-lcs (~> 1.1.3)
31
+ rspec-mocks (2.12.2)
32
+ slop (3.4.3)
33
+ vcr (2.4.0)
34
+
35
+ PLATFORMS
36
+ ruby
37
+
38
+ DEPENDENCIES
39
+ ZenTest (~> 4.9.0)
40
+ logs_tf!
41
+ pry-nav (~> 0.2.3)
42
+ rspec (~> 2.12.0)
43
+ vcr (~> 2.4.0)
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ Logs.tf
2
+ =======
3
+
4
+ Gem for the logs.tf API
@@ -0,0 +1,20 @@
1
+ module LogsTF
2
+
3
+ class Log
4
+
5
+ attr_accessor :file, :map_name, :title, :api_key
6
+
7
+ def initialize(file, map_name = "", title = "", api_key = LogsTF::API_KEY)
8
+ @file = file
9
+ @map_name = map_name
10
+ @title = title
11
+ @api_key = api_key
12
+ end
13
+
14
+ def filename
15
+ File.basename(file)
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,104 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module LogsTF
5
+
6
+ class Upload
7
+
8
+ attr_accessor :log, :logs_tf_url, :api_key, :response, :response_body
9
+
10
+ def initialize(log, logs_tf_url = 'http://logs.tf')
11
+ @log = log
12
+ @logs_tf_url = logs_tf_url
13
+ end
14
+
15
+ def send
16
+ @response = connection.post('/upload', post_options)
17
+ if request_success?
18
+ if !upload_success?
19
+ raise_logs_tf_error
20
+ end
21
+ else
22
+ raise RequestError, response.body
23
+ end
24
+ end
25
+
26
+ def url
27
+ logs_tf_url + response_body["url"]
28
+ end
29
+
30
+ def raise_logs_tf_error
31
+ error_class = case error
32
+ when "Invalid log file"
33
+ InvalidLogError
34
+ when "No file"
35
+ MissingLogError
36
+ when "Not authenticated"
37
+ NotAuthenticatedError
38
+ when "Invalid API key"
39
+ InvalidAPIKeyError
40
+ end
41
+
42
+ raise error_class, response_body["error"]
43
+ end
44
+
45
+ private
46
+
47
+ def response_body
48
+ @response_body ||= JSON.parse(response.body)
49
+ end
50
+
51
+ def upload_success?
52
+ response_body["success"] == true
53
+ end
54
+
55
+ def request_success?
56
+ response.status == 200
57
+ end
58
+
59
+ def error
60
+ response_body["error"]
61
+ end
62
+
63
+ def post_options
64
+ { :key => api_key,
65
+ :title => title,
66
+ :map => map_name,
67
+ :logfile => logfile }
68
+ end
69
+
70
+ def logfile
71
+ Faraday::UploadIO.new(log.file, "text/plain", log.filename)
72
+ end
73
+
74
+ def title
75
+ log.title
76
+ end
77
+
78
+ def map_name
79
+ log.map_name
80
+ end
81
+
82
+ def api_key
83
+ log.api_key
84
+ end
85
+
86
+ def connection
87
+ Faraday.new(:url => logs_tf_url + '/upload') do |conn|
88
+ conn.request :multipart
89
+ conn.request :url_encoded
90
+ conn.adapter :net_http
91
+ end
92
+ end
93
+
94
+ class Error < StandardError; end
95
+ class RequestError < Error; end
96
+ class InvalidLogError < Error; end
97
+ class MissingLogError < Error; end
98
+ class NotAuthenticatedError < Error; end
99
+ class InvalidAPIKeyError < Error; end
100
+
101
+ end
102
+
103
+
104
+ end
@@ -0,0 +1,3 @@
1
+ module LogsTF
2
+ VERSION = "0.0.1"
3
+ end
data/lib/logs_tf.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "logs_tf/version"
2
+ require "logs_tf/log"
3
+ require "logs_tf/upload"
4
+
5
+ module LogsTF
6
+ end
data/logs_tf.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/logs_tf/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'logs_tf'
6
+ gem.version = LogsTF::VERSION
7
+ gem.date = '2013-02-10'
8
+ gem.summary = "Logs.tf"
9
+ gem.description = "A gem to interface with the logs.tf API"
10
+ gem.authors = ["Arie"]
11
+ gem.email = 'rubygems@ariekanarie.nl'
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.require_paths = ["lib"]
15
+ gem.homepage = 'http://github.com/Arie/logs_tf'
16
+
17
+ gem.add_dependency "faraday", "~> 0.8.0"
18
+ gem.add_dependency "multipart-post", "~> 1.1.0"
19
+
20
+ gem.add_development_dependency "vcr", "~> 2.4.0"
21
+ gem.add_development_dependency "pry-nav", "~> 0.2.3"
22
+ gem.add_development_dependency "rspec", "~> 2.12.0"
23
+ gem.add_development_dependency "ZenTest", "~> 4.9.0"
24
+ end