logs_tf 0.0.1

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.
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