akamaized 0.0.6 → 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.
data/.gitignore CHANGED
@@ -2,3 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ conf
6
+ config/*
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in akamaized.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem "rspec", "~> 2.0.0"
8
+ end
@@ -1,2 +1,2 @@
1
- require "akamaized/exceptions"
2
- require "akamaized/connections"
1
+ require "akamaized/exception"
2
+ require "akamaized/connection"
@@ -8,23 +8,23 @@ module Akamaized
8
8
 
9
9
  def initialize(opts = {})
10
10
  opts = {
11
- username: nil,
12
- password: nil,
13
- host: nil,
14
- base_dir: nil
11
+ "username" => "",
12
+ "password" => "",
13
+ "host" => "",
14
+ "base_dir" => ""
15
15
  }.merge(opts)
16
16
 
17
- self.username = opts[:username]
18
- self.password = opts[:password]
19
- self.host = opts[:host]
20
- self.base_dir = opts[:base_dir]
17
+ self.username = opts["username"]
18
+ self.password = opts["password"]
19
+ self.host = opts["host"]
20
+ self.base_dir = opts["base_dir"]
21
21
  end
22
22
 
23
23
  end
24
24
 
25
25
  class Connection
26
26
 
27
- include AkamaizedException
27
+ include Exception
28
28
 
29
29
  def initialize(config = {})
30
30
  @config = Config.new(config)
@@ -38,16 +38,21 @@ module Akamaized
38
38
  @connection.passive = true
39
39
  @connection.login(@config.username, @config.password)
40
40
  @connection.chdir(@config.base_dir) if @config.base_dir
41
- rescue Exception => e
42
- raise connection_error
41
+ rescue IOError, SystemCallError, Net::FTPError => e
42
+ raise ConnectionError.new(e.message)
43
43
  end
44
44
  end
45
45
 
46
46
 
47
47
  # Check to see if a file
48
48
  def exists?(file, location = nil)
49
- @connection.chdir(location) unless location.nil?
50
- !@connection.nlist(file).empty?
49
+ begin
50
+ @connection.chdir(location) unless location.nil?
51
+ !@connection.nlst(file).empty?
52
+ rescue Net::FTPPermError => e
53
+ return false if e.message.include?("not exist")
54
+ raise
55
+ end
51
56
  end
52
57
 
53
58
 
@@ -55,19 +60,15 @@ module Akamaized
55
60
  # Will raise an exception if unable to push the file up
56
61
  # or the file is empty after upload (0 bytes)
57
62
  def put(file, location = nil)
58
- Tempfile.open(file) do |temp|
59
- temp.write(yield)
60
- temp.flush
61
-
62
- @connection.chdir(location) unless location.nil?
63
-
64
- @connection.put(temp.path, "#{file}.new")
65
- @connection.rename("#{file}.new", file)
66
-
67
- temp.close
68
-
69
- raise put_error(file) if !exists?(file, location)
70
- end
63
+ @connection.chdir(location) unless location.nil?
64
+ @connection.put(file, File.basename(file))
65
+ end
66
+
67
+
68
+ # Get a file off of the server
69
+ def get(remote, local, location = nil)
70
+ @connection.chdir(location) unless location.nil?
71
+ @connection.get(remote, "#{local}/#{File.basename(remote)}")
71
72
  end
72
73
 
73
74
 
@@ -86,7 +87,7 @@ module Akamaized
86
87
  # Calls the delete method, however, will raise an exception if there was an issue
87
88
  # whereas "delete" itself will swallow all errors
88
89
  def delete!(file, location = nil)
89
- raise delete_error(file) unless delete(file, location)
90
+ raise DeleteError.new(file) unless delete(file, location)
90
91
  end
91
92
 
92
93
  end
@@ -0,0 +1,37 @@
1
+ module Akamaized
2
+
3
+ module Exception
4
+
5
+ class DeleteError < StandardError
6
+ def initialize(file)
7
+ @file = file
8
+ end
9
+
10
+ def message
11
+ "unable to delete the file at #{@file}"
12
+ end
13
+ end
14
+
15
+ class PutError < StandardError
16
+ def initialize(file)
17
+ @file = file
18
+ end
19
+
20
+ def message
21
+ "unable to push file at #{file}"
22
+ end
23
+ end
24
+
25
+ class ConnectionError < StandardError
26
+ def initialize(message)
27
+ @message = message
28
+ end
29
+
30
+ def message
31
+ "Unable to connect to Akamai. Please check your authentication credentials and internet cable. Message: #{@message}"
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -1,3 +1,3 @@
1
1
  module Akamaized
2
- VERSION = "0.0.6"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,47 @@
1
+ require "spec_helper"
2
+ require "yaml"
3
+
4
+ # This test requires the following files/directories
5
+ # config/akamai.yml
6
+ # config/test-file.txt
7
+ # config/downloads/
8
+
9
+ describe Akamaized do
10
+
11
+ before(:each) do
12
+ @config = YAML::load(File.open(File.expand_path("../../config/akamai.yml", __FILE__)))
13
+ end
14
+
15
+ it "should not connect without valid credentials" do
16
+ expect {Akamaized::Connection.new}.to raise_error(Akamaized::Exception::ConnectionError)
17
+ end
18
+
19
+ it "should connect with valid credentials" do
20
+ expect {Akamaized::Connection.new(@config)}.to_not raise_error
21
+ end
22
+
23
+ it "should not allow changing directories to directories that do not exist" do
24
+ @config["base_dir"] = "this/directory/does/not/exist"
25
+ expect {Akamaized::Connection.new(@config)}.to raise_error(Akamaized::Exception::ConnectionError)
26
+ end
27
+
28
+ it "should not be able to find a file that does not exist" do
29
+ connection = Akamaized::Connection.new(@config)
30
+ connection.exists?("a-file-that-does-not-exist.no-file").should == false
31
+ end
32
+
33
+ it "should put the file up on the server" do
34
+ connection = Akamaized::Connection.new(@config)
35
+ connection.delete("test-file.txt")
36
+ connection.exists?("test-file.txt").should == false
37
+ connection.put(File.expand_path("../../config/test-file.txt", __FILE__))
38
+ connection.exists?("test-file.txt").should == true
39
+ connection.get("test-file.txt", File.expand_path("../../config/downloads/", __FILE__))
40
+ File.exists?(File.expand_path("../../config/downloads/test-file.txt", __FILE__))
41
+
42
+ IO.read(File.expand_path("../../config/downloads/test-file.txt", __FILE__)).should == IO.read(File.expand_path("../../config//test-file.txt", __FILE__))
43
+ connection.delete("test-file.txt")
44
+ connection.exists?("test-file.txt").should == false
45
+ end
46
+
47
+ end
@@ -0,0 +1,6 @@
1
+ require "rspec"
2
+ require "akamaized"
3
+
4
+ Rspec.configure do |c|
5
+ c.mock_with :rspec
6
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: akamaized
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.6
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Brandon Hansen, Eric Casequin
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-28 00:00:00 -07:00
13
+ date: 2011-03-29 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -29,9 +29,11 @@ files:
29
29
  - Rakefile
30
30
  - akamaized.gemspec
31
31
  - lib/akamaized.rb
32
- - lib/akamaized/connections.rb
33
- - lib/akamaized/exceptions.rb
32
+ - lib/akamaized/connection.rb
33
+ - lib/akamaized/exception.rb
34
34
  - lib/akamaized/version.rb
35
+ - spec/connection_spec.rb
36
+ - spec/spec_helper.rb
35
37
  has_rdoc: true
36
38
  homepage: https://github.com/ready4god2513/Akamaized
37
39
  licenses: []
@@ -60,5 +62,6 @@ rubygems_version: 1.6.2
60
62
  signing_key:
61
63
  specification_version: 3
62
64
  summary: Manage data and files on Akamai's CDN
63
- test_files: []
64
-
65
+ test_files:
66
+ - spec/connection_spec.rb
67
+ - spec/spec_helper.rb
@@ -1,19 +0,0 @@
1
- module Akamaized
2
-
3
- module AkamaizedException
4
-
5
- def delete_error(file)
6
- "unable to delete the file at #{file}"
7
- end
8
-
9
- def put_error(file)
10
- "unable to push file at #{file}"
11
- end
12
-
13
- def connection_error
14
- "unable to connect to Akamai. Please check your authentication credentials"
15
- end
16
-
17
- end
18
-
19
- end