amee 2.0.25
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +19 -0
- data/README +106 -0
- data/amee.example.yml +12 -0
- data/bin/ameesh +30 -0
- data/examples/create_profile.rb +27 -0
- data/examples/create_profile_item.rb +33 -0
- data/examples/list_profiles.rb +29 -0
- data/examples/view_data_category.rb +40 -0
- data/examples/view_data_item.rb +37 -0
- data/init.rb +1 -0
- data/lib/amee.rb +63 -0
- data/lib/amee/connection.rb +236 -0
- data/lib/amee/data_category.rb +196 -0
- data/lib/amee/data_item.rb +218 -0
- data/lib/amee/data_item_value.rb +167 -0
- data/lib/amee/data_object.rb +11 -0
- data/lib/amee/drill_down.rb +102 -0
- data/lib/amee/exceptions.rb +27 -0
- data/lib/amee/item_definition.rb +158 -0
- data/lib/amee/object.rb +21 -0
- data/lib/amee/pager.rb +59 -0
- data/lib/amee/profile.rb +108 -0
- data/lib/amee/profile_category.rb +514 -0
- data/lib/amee/profile_item.rb +374 -0
- data/lib/amee/profile_item_value.rb +106 -0
- data/lib/amee/profile_object.rb +20 -0
- data/lib/amee/rails.rb +82 -0
- data/lib/amee/shell.rb +90 -0
- data/lib/amee/user.rb +111 -0
- data/lib/amee/version.rb +10 -0
- data/rails/init.rb +12 -0
- metadata +104 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module AMEE
|
2
|
+
module Profile
|
3
|
+
class Object < AMEE::Object
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@profile_uid = options[:profile_uid]
|
7
|
+
@profile_date = options[:profile_date]
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :profile_uid
|
12
|
+
attr_reader :profile_date
|
13
|
+
|
14
|
+
def full_path
|
15
|
+
"/profiles#{'/' if @profile_uid}#{@profile_uid}#{@path}"
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/amee/rails.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
module AMEE
|
2
|
+
module Rails
|
3
|
+
|
4
|
+
def self.connection(options = {})
|
5
|
+
Connection.global(options)
|
6
|
+
end
|
7
|
+
|
8
|
+
class Connection
|
9
|
+
def self.global(options = {})
|
10
|
+
unless @connection
|
11
|
+
@connection = self.connect($AMEE_CONFIG['server'], $AMEE_CONFIG['username'], $AMEE_CONFIG['password'], options)
|
12
|
+
# Also store as $amee for backwards compatibility, though this is now deprecated
|
13
|
+
$amee = @connection
|
14
|
+
end
|
15
|
+
@connection
|
16
|
+
end
|
17
|
+
protected
|
18
|
+
def self.connect(server, username, password, options)
|
19
|
+
connection = AMEE::Connection.new(server, username, password, options)
|
20
|
+
connection.authenticate
|
21
|
+
return connection
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.included(base)
|
26
|
+
base.extend ClassMethods
|
27
|
+
end
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
def has_amee_profile(options = {})
|
31
|
+
# Include the instance methods for creation and desctruction
|
32
|
+
include InstanceMethods
|
33
|
+
# Install callbacks
|
34
|
+
before_validation_on_create :amee_create
|
35
|
+
alias_method_chain :save, :amee
|
36
|
+
before_destroy :amee_destroy
|
37
|
+
# Check that this object has an AMEE profile UID when saving
|
38
|
+
validates_presence_of :amee_profile
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module InstanceMethods
|
43
|
+
|
44
|
+
def save_with_amee
|
45
|
+
save_without_amee && amee_save
|
46
|
+
end
|
47
|
+
|
48
|
+
def amee_create
|
49
|
+
# Create profile
|
50
|
+
profile = AMEE::Profile::Profile.create(amee_connection)
|
51
|
+
self.amee_profile = profile.uid
|
52
|
+
end
|
53
|
+
|
54
|
+
def amee_save
|
55
|
+
# This is only here to be overridden
|
56
|
+
return true
|
57
|
+
end
|
58
|
+
|
59
|
+
def amee_destroy
|
60
|
+
# Delete profile
|
61
|
+
AMEE::Profile::Profile.delete(amee_connection, amee_profile)
|
62
|
+
rescue
|
63
|
+
puts "Couldn't remove profile #{amee_profile}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def amee_connection
|
67
|
+
# Should be overridden by code which doesn't use the global AMEE connection
|
68
|
+
AMEE::Rails.connection
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
if Object.const_defined?("ActionController")
|
77
|
+
class ActionController::Base
|
78
|
+
def global_amee_connection(options={})
|
79
|
+
AMEE::Rails.connection(options)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/amee/shell.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
module AMEE
|
2
|
+
module Shell
|
3
|
+
|
4
|
+
def amee_help
|
5
|
+
puts "AMEE shell - version #{AMEE::VERSION::STRING}"
|
6
|
+
puts "--------------------------"
|
7
|
+
puts "Commands:"
|
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."
|
20
|
+
end
|
21
|
+
|
22
|
+
def ls
|
23
|
+
puts "Categories:"
|
24
|
+
@@category.children.each do |c|
|
25
|
+
puts " - #{c[:path]}"
|
26
|
+
end
|
27
|
+
puts "Items:"
|
28
|
+
@@category.items.each do |i|
|
29
|
+
puts " - #{i[:path]} (#{i[:label]})"
|
30
|
+
end
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def pwd
|
35
|
+
@@category.full_path
|
36
|
+
end
|
37
|
+
|
38
|
+
def cd(path)
|
39
|
+
if path == '..'
|
40
|
+
path_components = @@category.full_path.split('/')
|
41
|
+
path = path_components.first(path_components.size - 1).join('/')
|
42
|
+
elsif !path.match(/^\/.*/)
|
43
|
+
path = @@category.full_path + '/' + path
|
44
|
+
end
|
45
|
+
@@category = AMEE::Data::Category.get($connection, path)
|
46
|
+
@@category.full_path
|
47
|
+
end
|
48
|
+
|
49
|
+
def cat(name)
|
50
|
+
item = @@category.items.detect { |i| i[:path].match("^#{name}") }
|
51
|
+
fullpath = "#{@@category.full_path}/#{item[:path]}"
|
52
|
+
item = AMEE::Data::Item.get($connection, fullpath)
|
53
|
+
puts fullpath
|
54
|
+
puts "Label: #{item.label}"
|
55
|
+
puts "Values:"
|
56
|
+
item.values.each do |v|
|
57
|
+
puts " - #{v[:name]}: #{v[:value]}"
|
58
|
+
end
|
59
|
+
nil
|
60
|
+
end
|
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
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
dir = File.dirname(__FILE__) + "/.."
|
74
|
+
$LOAD_PATH << dir unless $LOAD_PATH.include?(dir)
|
75
|
+
|
76
|
+
require 'rubygems'
|
77
|
+
require 'amee'
|
78
|
+
include AMEE::Shell
|
79
|
+
|
80
|
+
# Set up connection
|
81
|
+
$connection = AMEE::Connection.new(ENV['AMEE_SERVER'], ENV['AMEE_USERNAME'], ENV['AMEE_PASSWORD'])
|
82
|
+
|
83
|
+
if $connection.valid?
|
84
|
+
# Change to root of data api to get going
|
85
|
+
cd '/data'
|
86
|
+
# Display AMEE details
|
87
|
+
amee_help
|
88
|
+
else
|
89
|
+
puts "Can't connect to AMEE - please check details"
|
90
|
+
end
|
data/lib/amee/user.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
module AMEE
|
2
|
+
module Admin
|
3
|
+
|
4
|
+
class User < AMEE::Object
|
5
|
+
|
6
|
+
attr_reader :username
|
7
|
+
attr_reader :name
|
8
|
+
attr_reader :email
|
9
|
+
attr_reader :api_version
|
10
|
+
attr_reader :status
|
11
|
+
|
12
|
+
def initialize(data = {})
|
13
|
+
@username = data[:username]
|
14
|
+
@name = data[:name]
|
15
|
+
@email = data[:email]
|
16
|
+
@status = data[:status]
|
17
|
+
@api_version = data[:api_version].to_f rescue nil
|
18
|
+
@environment_uid = data[:environment_uid]
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.parse(connection, response)
|
23
|
+
# Parse data from response
|
24
|
+
if response.is_json?
|
25
|
+
user = User.from_json(response)
|
26
|
+
else
|
27
|
+
user = User.from_xml(response)
|
28
|
+
end
|
29
|
+
# Store connection in object for future use
|
30
|
+
user.connection = connection
|
31
|
+
# Done
|
32
|
+
return user
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.from_json(json)
|
36
|
+
# Read JSON
|
37
|
+
doc = JSON.parse(json)
|
38
|
+
data = {}
|
39
|
+
data[:environment_uid] = doc['user']['environment']['uid']
|
40
|
+
data[:uid] = doc['user']['uid']
|
41
|
+
data[:created] = DateTime.parse(doc['user']['created'])
|
42
|
+
data[:modified] = DateTime.parse(doc['user']['modified'])
|
43
|
+
data[:username] = doc['user']['username']
|
44
|
+
data[:name] = doc['user']['name']
|
45
|
+
data[:email] = doc['user']['email']
|
46
|
+
data[:api_version] = doc['user']['apiVersion']
|
47
|
+
data[:status] = doc['user']['status']
|
48
|
+
# Create object
|
49
|
+
User.new(data)
|
50
|
+
rescue
|
51
|
+
raise AMEE::BadData.new("Couldn't load User from JSON. Check that your URL is correct.\n#{json}")
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.from_xml(xml)
|
55
|
+
# Parse data from response into hash
|
56
|
+
doc = REXML::Document.new(xml)
|
57
|
+
data = {}
|
58
|
+
data[:environment_uid] = REXML::XPath.first(doc, "//Environment/@uid").to_s
|
59
|
+
data[:uid] = REXML::XPath.first(doc, "//User/@uid").to_s
|
60
|
+
data[:created] = DateTime.parse(REXML::XPath.first(doc, "//User/@created").to_s)
|
61
|
+
data[:modified] = DateTime.parse(REXML::XPath.first(doc, "//User/@modified").to_s)
|
62
|
+
data[:username] = REXML::XPath.first(doc, "//User/Username").text
|
63
|
+
data[:name] = REXML::XPath.first(doc, "//User/Name").text
|
64
|
+
data[:email] = REXML::XPath.first(doc, "//User/Email").text
|
65
|
+
data[:api_version] = REXML::XPath.first(doc, "//User/ApiVersion").text
|
66
|
+
data[:status] = REXML::XPath.first(doc, "//User/Status").text
|
67
|
+
# Create object
|
68
|
+
User.new(data)
|
69
|
+
rescue
|
70
|
+
raise AMEE::BadData.new("Couldn't load User from XML. Check that your URL is correct.\n#{xml}")
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.get(connection, path, options = {})
|
74
|
+
# Load data from path
|
75
|
+
response = connection.get(path, options).body
|
76
|
+
# Parse response
|
77
|
+
User.parse(connection, response)
|
78
|
+
rescue
|
79
|
+
raise AMEE::BadData.new("Couldn't load User. Check that your URL is correct.\n#{response}")
|
80
|
+
end
|
81
|
+
|
82
|
+
def update(options = {})
|
83
|
+
connection.put(full_path, options).body
|
84
|
+
AMEE::Admin::User.get(connection, full_path)
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.create(connection, environment_uid, options = {})
|
88
|
+
unless options.is_a?(Hash)
|
89
|
+
raise AMEE::ArgumentError.new("Second argument must be a hash of options!")
|
90
|
+
end
|
91
|
+
# Send data
|
92
|
+
response = connection.post("/environments/#{environment_uid}/users", options).body
|
93
|
+
# Parse response
|
94
|
+
User.parse(connection, response)
|
95
|
+
rescue
|
96
|
+
raise AMEE::BadData.new("Couldn't create User. Check that your information is correct.\n#{response}")
|
97
|
+
end
|
98
|
+
|
99
|
+
def delete
|
100
|
+
connection.delete(full_path)
|
101
|
+
rescue
|
102
|
+
raise AMEE::BadData.new("Couldn't delete User. Check that your information is correct.")
|
103
|
+
end
|
104
|
+
|
105
|
+
def full_path
|
106
|
+
"/environments/#{@environment_uid}/users/#{uid}"
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/amee/version.rb
ADDED
data/rails/init.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'amee'
|
2
|
+
require 'amee/rails'
|
3
|
+
|
4
|
+
# Load config/amee.yml
|
5
|
+
amee_config = "#{RAILS_ROOT}/config/amee.yml"
|
6
|
+
if File.exist?(amee_config)
|
7
|
+
# Load config
|
8
|
+
$AMEE_CONFIG = YAML.load_file(amee_config)[RAILS_ENV]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Add AMEE extensions into ActiveRecord::Base
|
12
|
+
ActiveRecord::Base.class_eval { include AMEE::Rails } if Object.const_defined?("ActiveRecord")
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: amee
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.25
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Smith
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-01 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: json
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description:
|
36
|
+
email: james@floppy.org.uk
|
37
|
+
executables:
|
38
|
+
- ameesh
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- README
|
45
|
+
- COPYING
|
46
|
+
- lib/amee.rb
|
47
|
+
- lib/amee/connection.rb
|
48
|
+
- lib/amee/data_item.rb
|
49
|
+
- lib/amee/exceptions.rb
|
50
|
+
- lib/amee/profile.rb
|
51
|
+
- lib/amee/profile_object.rb
|
52
|
+
- lib/amee/profile_category.rb
|
53
|
+
- lib/amee/profile_item.rb
|
54
|
+
- lib/amee/profile_item_value.rb
|
55
|
+
- lib/amee/version.rb
|
56
|
+
- lib/amee/data_category.rb
|
57
|
+
- lib/amee/data_item_value.rb
|
58
|
+
- lib/amee/data_object.rb
|
59
|
+
- lib/amee/object.rb
|
60
|
+
- lib/amee/shell.rb
|
61
|
+
- lib/amee/drill_down.rb
|
62
|
+
- lib/amee/rails.rb
|
63
|
+
- lib/amee/pager.rb
|
64
|
+
- lib/amee/item_definition.rb
|
65
|
+
- lib/amee/user.rb
|
66
|
+
- bin/ameesh
|
67
|
+
- examples/list_profiles.rb
|
68
|
+
- examples/create_profile.rb
|
69
|
+
- examples/create_profile_item.rb
|
70
|
+
- examples/view_data_category.rb
|
71
|
+
- examples/view_data_item.rb
|
72
|
+
- init.rb
|
73
|
+
- rails/init.rb
|
74
|
+
- amee.example.yml
|
75
|
+
has_rdoc: true
|
76
|
+
homepage: http://github.com/Floppy/amee-ruby
|
77
|
+
licenses: []
|
78
|
+
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
89
|
+
version:
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: "0"
|
95
|
+
version:
|
96
|
+
requirements: []
|
97
|
+
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.3.5
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: Ruby interface to the AMEE carbon calculator
|
103
|
+
test_files: []
|
104
|
+
|