Floppy-amee 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +2 -2
- data/bin/ameesh +0 -0
- data/lib/amee/connection.rb +61 -40
- data/lib/amee/data_item.rb +2 -2
- data/lib/amee/data_item_value.rb +9 -1
- data/lib/amee/exceptions.rb +6 -0
- data/lib/amee/profile.rb +9 -5
- data/lib/amee/shell.rb +24 -6
- data/lib/amee/version.rb +1 -1
- metadata +2 -2
data/README
CHANGED
@@ -35,11 +35,11 @@ this interface yet.
|
|
35
35
|
|
36
36
|
== RAILS
|
37
37
|
|
38
|
-
This gem can be used as a Rails plugin. You can either extract it into
|
38
|
+
This gem can also be used as a Rails plugin. You can either extract it into
|
39
39
|
vendor/plugins, or use the new-style config.gem command in environment.rb. For
|
40
40
|
example:
|
41
41
|
|
42
|
-
config.gem "Floppy-amee", :lib => "amee", :source => "http://gems.github.com"
|
42
|
+
config.gem "Floppy-amee", :lib => "amee", :source => "http://gems.github.com", :version => '>= 0.3.0'
|
43
43
|
|
44
44
|
The first time you run your app after installing the gem, a config/amee.yml file
|
45
45
|
will be created. You should edit this file and add your AMEE username and
|
data/bin/ameesh
CHANGED
File without changes
|
data/lib/amee/connection.rb
CHANGED
@@ -9,19 +9,14 @@ module AMEE
|
|
9
9
|
@password = password
|
10
10
|
@auth_token = nil
|
11
11
|
@use_json_if_available = use_json_if_available
|
12
|
-
|
12
|
+
if (@username || @password) && !valid?
|
13
|
+
raise "Must specify both username and password for authenticated access"
|
14
|
+
end
|
13
15
|
# Make connection to server
|
14
16
|
@http = Net::HTTP.new(@server)
|
15
17
|
#@http.set_debug_output($stdout)
|
16
|
-
@http.start
|
17
|
-
rescue SocketError
|
18
|
-
raise AMEE::ConnectionFailed.new("Connection failed. Check server name or network connection.")
|
19
18
|
end
|
20
19
|
|
21
|
-
def finalize
|
22
|
-
@http.finish
|
23
|
-
end
|
24
|
-
|
25
20
|
def valid?
|
26
21
|
!((@username || @password) ? (@username.nil? || @password.nil? || @server.nil?) : @server.nil?)
|
27
22
|
end
|
@@ -35,46 +30,32 @@ module AMEE
|
|
35
30
|
end
|
36
31
|
|
37
32
|
def get(path)
|
38
|
-
|
39
|
-
|
40
|
-
get['authToken'] = @auth_token
|
41
|
-
get['Accept'] = content_type
|
42
|
-
response = @http.request(get)
|
43
|
-
# Handle 404s
|
44
|
-
raise AMEE::NotFound.new("URL doesn't exist on server.") if response.code == '404'
|
45
|
-
# If request fails, authenticate and try again
|
46
|
-
if authentication_failed?(response)
|
47
|
-
authenticate
|
48
|
-
get['authToken'] = @auth_token
|
49
|
-
response = @http.request(get)
|
50
|
-
end
|
51
|
-
yield response.body if block_given?
|
52
|
-
response.body
|
33
|
+
# Send request
|
34
|
+
do_request(Net::HTTP::Get.new(path))
|
53
35
|
end
|
54
36
|
|
55
37
|
def post(path, data = {})
|
56
|
-
|
38
|
+
# Create POST request
|
57
39
|
post = Net::HTTP::Post.new(path)
|
58
|
-
post['authToken'] = @auth_token
|
59
|
-
post['Accept'] = content_type
|
60
|
-
# Add data params to body
|
61
40
|
body = []
|
62
41
|
data.each_pair do |key, value|
|
63
42
|
body << "#{key}=#{value}"
|
64
43
|
end
|
65
44
|
post.body = body.join '&'
|
66
45
|
# Send request
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
46
|
+
do_request(post)
|
47
|
+
end
|
48
|
+
|
49
|
+
def put(path, data = {})
|
50
|
+
# Create PUT request
|
51
|
+
put = Net::HTTP::Put.new(path)
|
52
|
+
body = []
|
53
|
+
data.each_pair do |key, value|
|
54
|
+
body << "#{key}=#{value}"
|
75
55
|
end
|
76
|
-
|
77
|
-
|
56
|
+
put.body = body.join '&'
|
57
|
+
# Send request
|
58
|
+
do_request(put)
|
78
59
|
end
|
79
60
|
|
80
61
|
def authenticate
|
@@ -87,7 +68,9 @@ module AMEE
|
|
87
68
|
post['Accept'] = content_type
|
88
69
|
response = @http.request(post)
|
89
70
|
@auth_token = response['authToken']
|
90
|
-
|
71
|
+
unless authenticated?
|
72
|
+
raise AMEE::AuthFailed.new("Authentication failed. Please check your username and password.")
|
73
|
+
end
|
91
74
|
end
|
92
75
|
|
93
76
|
protected
|
@@ -96,9 +79,47 @@ module AMEE
|
|
96
79
|
(@use_json_if_available && defined?(JSON)) ? 'application/json' : 'application/xml'
|
97
80
|
end
|
98
81
|
|
99
|
-
def
|
100
|
-
response.code
|
82
|
+
def response_ok?(response)
|
83
|
+
case response.code
|
84
|
+
when '200'
|
85
|
+
return true
|
86
|
+
when '403'
|
87
|
+
raise AMEE::PermissionDenied.new("You do not have permission to perform the requested operation")
|
88
|
+
when '401'
|
89
|
+
authenticate
|
90
|
+
return false
|
91
|
+
else
|
92
|
+
raise AMEE::UnknownError.new("An error occurred while talking to AMEE: HTTP response code #{response.code}")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def do_request(request)
|
97
|
+
# Open HTTP connection
|
98
|
+
@http.start
|
99
|
+
# Do request
|
100
|
+
begin
|
101
|
+
response = send_request(request)
|
102
|
+
end while !response_ok?(response)
|
103
|
+
# Return body of response
|
104
|
+
return response.body
|
105
|
+
rescue SocketError
|
106
|
+
raise AMEE::ConnectionFailed.new("Connection failed. Check server name or network connection.")
|
107
|
+
ensure
|
108
|
+
# Close HTTP connection
|
109
|
+
@http.finish if @http.started?
|
101
110
|
end
|
102
111
|
|
112
|
+
def send_request(request)
|
113
|
+
request['authToken'] = @auth_token
|
114
|
+
request['Accept'] = content_type
|
115
|
+
response = @http.request(request)
|
116
|
+
# Handle 404s
|
117
|
+
if response.code == '404'
|
118
|
+
raise AMEE::NotFound.new("URL doesn't exist on server.")
|
119
|
+
end
|
120
|
+
# Done
|
121
|
+
response
|
122
|
+
end
|
123
|
+
|
103
124
|
end
|
104
125
|
end
|
data/lib/amee/data_item.rb
CHANGED
data/lib/amee/data_item_value.rb
CHANGED
@@ -21,6 +21,10 @@ module AMEE
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
def value=(val)
|
25
|
+
@value = val
|
26
|
+
end
|
27
|
+
|
24
28
|
def from_profile?
|
25
29
|
@from_profile
|
26
30
|
end
|
@@ -79,10 +83,14 @@ module AMEE
|
|
79
83
|
value.connection = connection
|
80
84
|
# Done
|
81
85
|
return value
|
82
|
-
rescue
|
86
|
+
rescue
|
83
87
|
raise AMEE::BadData.new("Couldn't load DataItemValue. Check that your URL is correct.")
|
84
88
|
end
|
85
89
|
|
90
|
+
def save!
|
91
|
+
response = @connection.put(full_path, :value => value)
|
92
|
+
end
|
93
|
+
|
86
94
|
end
|
87
95
|
end
|
88
96
|
end
|
data/lib/amee/exceptions.rb
CHANGED
@@ -9,10 +9,16 @@ module AMEE
|
|
9
9
|
class AuthRequired < Exception
|
10
10
|
end
|
11
11
|
|
12
|
+
class PermissionDenied < Exception
|
13
|
+
end
|
14
|
+
|
12
15
|
class ConnectionFailed < Exception
|
13
16
|
end
|
14
17
|
|
15
18
|
class NotFound < Exception
|
16
19
|
end
|
17
20
|
|
21
|
+
class UnknownError < Exception
|
22
|
+
end
|
23
|
+
|
18
24
|
end
|
data/lib/amee/profile.rb
CHANGED
@@ -41,6 +41,8 @@ module AMEE
|
|
41
41
|
end
|
42
42
|
# Done
|
43
43
|
return profiles
|
44
|
+
rescue
|
45
|
+
raise AMEE::BadData.new("Couldn't load Profile list.")
|
44
46
|
end
|
45
47
|
|
46
48
|
def self.create(connection)
|
@@ -78,12 +80,14 @@ module AMEE
|
|
78
80
|
# Done
|
79
81
|
return profile
|
80
82
|
end
|
83
|
+
rescue
|
84
|
+
raise AMEE::BadData.new("Couldn't create Profile.")
|
81
85
|
end
|
82
86
|
|
83
|
-
def delete
|
84
|
-
# Create new profile
|
85
|
-
response = connection.delete(full_path)
|
86
|
-
end
|
87
|
+
# def delete
|
88
|
+
# # Create new profile
|
89
|
+
# response = connection.delete(full_path)
|
90
|
+
# end
|
87
91
|
|
88
92
|
end
|
89
|
-
end
|
93
|
+
end
|
data/lib/amee/shell.rb
CHANGED
@@ -5,11 +5,18 @@ module AMEE
|
|
5
5
|
puts "AMEE shell - version #{AMEE::VERSION::STRING}"
|
6
6
|
puts "--------------------------"
|
7
7
|
puts "Commands:"
|
8
|
-
puts " ls
|
9
|
-
puts "
|
10
|
-
puts "
|
11
|
-
puts "
|
12
|
-
puts "
|
8
|
+
puts " ls"
|
9
|
+
puts " - display contents of current category."
|
10
|
+
puts " cd 'path'"
|
11
|
+
puts " - change category. Path must be a quoted string. You can use things like '/data', '..', or 'subcategory'."
|
12
|
+
puts " pwd"
|
13
|
+
puts " - display current category path."
|
14
|
+
puts " cat 'name'"
|
15
|
+
puts " - display contents of data item called 'name' within the current category."
|
16
|
+
puts " set_value 'item_name', 'value_name', value"
|
17
|
+
puts " - set the value 'value_name' inside 'item_name' to value."
|
18
|
+
puts " amee_help"
|
19
|
+
puts " - display this help text."
|
13
20
|
end
|
14
21
|
|
15
22
|
def ls
|
@@ -51,10 +58,21 @@ module AMEE
|
|
51
58
|
end
|
52
59
|
nil
|
53
60
|
end
|
54
|
-
|
61
|
+
|
62
|
+
def set_value(item, name, value)
|
63
|
+
item = @@category.items.detect { |i| i[:path].match("^#{item}") }
|
64
|
+
fullpath = "#{@@category.full_path}/#{item[:path]}/#{name}"
|
65
|
+
itemval = AMEE::Data::ItemValue.get($connection, fullpath)
|
66
|
+
itemval.value = value
|
67
|
+
itemval.save!
|
68
|
+
end
|
69
|
+
|
55
70
|
end
|
56
71
|
end
|
57
72
|
|
73
|
+
dir = File.dirname(__FILE__) + "/.."
|
74
|
+
$LOAD_PATH << dir unless $LOAD_PATH.include?(dir)
|
75
|
+
|
58
76
|
require 'rubygems'
|
59
77
|
require 'amee'
|
60
78
|
include AMEE::Shell
|
data/lib/amee/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Floppy-amee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Smith
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08-
|
12
|
+
date: 2008-08-29 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|