Floppy-amee 2.0.22 → 2.0.24
Sign up to get free protection for your applications and to get access to all the features.
- data/README +7 -7
- data/amee.example.yml +12 -0
- data/lib/amee.rb +1 -0
- data/lib/amee/connection.rb +6 -0
- data/lib/amee/data_category.rb +31 -2
- data/lib/amee/data_item.rb +43 -32
- data/lib/amee/data_item_value.rb +74 -3
- data/lib/amee/exceptions.rb +3 -0
- data/lib/amee/item_definition.rb +13 -2
- data/lib/amee/profile_item.rb +1 -1
- data/lib/amee/user.rb +111 -0
- data/rails/init.rb +0 -11
- metadata +4 -2
data/README
CHANGED
@@ -55,16 +55,16 @@ example:
|
|
55
55
|
|
56
56
|
config.gem "Floppy-amee", :lib => "amee", :source => "http://gems.github.com", :version => '>= 0.3.0'
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
Once that is all set up, you can use AMEE objects within Rails anywhere you like.
|
63
|
-
There is a persistent AMEE connection available called $amee, which you can pass
|
64
|
-
into the other objects to fetch data. For instance:
|
58
|
+
If you copy amee.example.yml from the gem source directory to amee.yml in your
|
59
|
+
app's config directory, a persistent AMEE connection available called $amee,
|
60
|
+
will be automatically set up for you, which you can pass into the other objects
|
61
|
+
to fetch data. For instance:
|
65
62
|
|
66
63
|
data = AMEE::Data::Category.root($amee)
|
67
64
|
|
65
|
+
If you do not use this facility, you will have to create your own connection
|
66
|
+
objects and manage them yourself.
|
67
|
+
|
68
68
|
There is a helper for ActiveRecord models which should be linked to an AMEE profile.
|
69
69
|
By adding:
|
70
70
|
|
data/amee.example.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
development:
|
2
|
+
server: stage.amee.com
|
3
|
+
username: your_amee_username
|
4
|
+
password: your_amee_password
|
5
|
+
test:
|
6
|
+
server: stage.amee.com
|
7
|
+
username: your_amee_username
|
8
|
+
password: your_amee_password
|
9
|
+
production:
|
10
|
+
server: live.amee.com
|
11
|
+
username: your_amee_username
|
12
|
+
password: your_amee_password
|
data/lib/amee.rb
CHANGED
data/lib/amee/connection.rb
CHANGED
@@ -178,6 +178,12 @@ module AMEE
|
|
178
178
|
when '401'
|
179
179
|
authenticate
|
180
180
|
return false
|
181
|
+
when '400'
|
182
|
+
if response.body.include? "would have resulted in a duplicate resource being created"
|
183
|
+
raise AMEE::DuplicateResource.new("The specified resource already exists. This is most often caused by creating an item that overlaps another in time. AMEE Response: #{response.body}")
|
184
|
+
else
|
185
|
+
raise AMEE::UnknownError.new("An error occurred while talking to AMEE: HTTP response code #{response.code}. AMEE Response: #{response.body}")
|
186
|
+
end
|
181
187
|
else
|
182
188
|
raise AMEE::UnknownError.new("An error occurred while talking to AMEE: HTTP response code #{response.code}. AMEE Response: #{response.body}")
|
183
189
|
end
|
data/lib/amee/data_category.rb
CHANGED
@@ -81,9 +81,21 @@ module AMEE
|
|
81
81
|
raise AMEE::BadData.new("Couldn't load DataCategory from XML data. Check that your URL is correct.\n#{xml}")
|
82
82
|
end
|
83
83
|
|
84
|
-
def self.get(connection, path,
|
84
|
+
def self.get(connection, path, orig_options = {})
|
85
|
+
unless orig_options.is_a?(Hash)
|
86
|
+
raise AMEE::ArgumentError.new("Third argument must be a hash of options!")
|
87
|
+
end
|
88
|
+
# Convert to AMEE options
|
89
|
+
options = orig_options.clone
|
90
|
+
if orig_options[:items_per_page]
|
91
|
+
options[:itemsPerPage] = orig_options[:items_per_page]
|
92
|
+
else
|
93
|
+
options[:itemsPerPage] = 10
|
94
|
+
end
|
95
|
+
|
85
96
|
# Load data from path
|
86
|
-
response = connection.get(path,
|
97
|
+
response = connection.get(path, options).body
|
98
|
+
|
87
99
|
# Parse data from response
|
88
100
|
if response.is_json?
|
89
101
|
cat = Category.from_json(response)
|
@@ -161,6 +173,23 @@ module AMEE
|
|
161
173
|
rescue
|
162
174
|
raise AMEE::BadData.new("Couldn't delete DataCategory. Check that your information is correct.")
|
163
175
|
end
|
176
|
+
|
177
|
+
def self.update(connection, path, options = {})
|
178
|
+
# Do we want to automatically fetch the item afterwards?
|
179
|
+
get_item = options.delete(:get_item)
|
180
|
+
get_item = true if get_item.nil?
|
181
|
+
# Go
|
182
|
+
response = connection.put(path, options)
|
183
|
+
if get_item
|
184
|
+
if response.body.empty?
|
185
|
+
return Category.get(connection, path)
|
186
|
+
else
|
187
|
+
return Category.parse(connection, response.body)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
rescue
|
191
|
+
raise AMEE::BadData.new("Couldn't update Data Category. Check that your information is correct.")
|
192
|
+
end
|
164
193
|
|
165
194
|
end
|
166
195
|
end
|
data/lib/amee/data_item.rb
CHANGED
@@ -18,7 +18,7 @@ module AMEE
|
|
18
18
|
attr_reader :item_definition
|
19
19
|
attr_reader :total_amount
|
20
20
|
attr_reader :total_amount_unit
|
21
|
-
|
21
|
+
|
22
22
|
def self.from_json(json)
|
23
23
|
# Read JSON
|
24
24
|
doc = JSON.parse(json)
|
@@ -111,6 +111,12 @@ module AMEE
|
|
111
111
|
def self.get(connection, path, options = {})
|
112
112
|
# Load data from path
|
113
113
|
response = connection.get(path, options).body
|
114
|
+
AMEE::Data::Item.parse(connection, response)
|
115
|
+
rescue
|
116
|
+
raise AMEE::BadData.new("Couldn't load DataItem. Check that your URL is correct.\n#{response}")
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.parse(connection, response)
|
114
120
|
# Parse data from response
|
115
121
|
if response.is_json?
|
116
122
|
item = Item.from_json(response)
|
@@ -121,8 +127,6 @@ module AMEE
|
|
121
127
|
item.connection = connection
|
122
128
|
# Done
|
123
129
|
return item
|
124
|
-
rescue
|
125
|
-
raise AMEE::BadData.new("Couldn't load DataItem. Check that your URL is correct.\n#{response}")
|
126
130
|
end
|
127
131
|
|
128
132
|
def self.create_batch_without_category(connection, category_path, items, options = {})
|
@@ -156,47 +160,54 @@ module AMEE
|
|
156
160
|
unless options.is_a?(Hash)
|
157
161
|
raise AMEE::ArgumentError.new("Third argument must be a hash of options!")
|
158
162
|
end
|
159
|
-
# Set dates
|
160
|
-
if options[:start_date] && connection.version < 2
|
161
|
-
options[:validFrom] = options[:start_date].amee1_date
|
162
|
-
elsif options[:start_date] && connection.version >= 2
|
163
|
-
options[:startDate] = options[:start_date].xmlschema
|
164
|
-
end
|
165
|
-
options.delete(:start_date)
|
166
|
-
if options[:end_date] && connection.version >= 2
|
167
|
-
options[:endDate] = options[:end_date].xmlschema
|
168
|
-
end
|
169
|
-
options.delete(:end_date)
|
170
|
-
if options[:duration] && connection.version >= 2
|
171
|
-
options[:duration] = "PT#{options[:duration] * 86400}S"
|
172
|
-
end
|
173
163
|
# Create a data item!
|
174
164
|
options[:newObjectType] = "DI"
|
175
165
|
# Send data to path
|
176
166
|
response = connection.post(path, options)
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
167
|
+
if response['Location']
|
168
|
+
location = response['Location'].match("http://.*?(/.*)")[1]
|
169
|
+
else
|
170
|
+
category = Category.parse(connection, response.body)
|
171
|
+
location = category.full_path + "/" + category.items[0][:path]
|
172
|
+
end
|
173
|
+
if get_item == true
|
174
|
+
get_options = {}
|
175
|
+
get_options[:format] = format if format
|
176
|
+
return AMEE::Data::Item.get(connection, location, get_options)
|
177
|
+
else
|
178
|
+
return location
|
179
|
+
end
|
190
180
|
rescue
|
191
181
|
raise AMEE::BadData.new("Couldn't create DataItem. Check that your information is correct.\n#{response}")
|
192
182
|
end
|
193
183
|
|
194
|
-
def update(options = {})
|
195
|
-
|
184
|
+
def self.update(connection, path, options = {})
|
185
|
+
# Do we want to automatically fetch the item afterwards?
|
186
|
+
get_item = options.delete(:get_item)
|
187
|
+
get_item = true if get_item.nil?
|
188
|
+
# Go
|
189
|
+
response = connection.put(path, options)
|
190
|
+
if get_item
|
191
|
+
if response.body.empty?
|
192
|
+
return Item.get(connection, path)
|
193
|
+
else
|
194
|
+
return Item.parse(connection, response.body)
|
195
|
+
end
|
196
|
+
end
|
196
197
|
rescue
|
197
198
|
raise AMEE::BadData.new("Couldn't update DataItem. Check that your information is correct.\n#{response}")
|
198
199
|
end
|
200
|
+
|
201
|
+
def update(options = {})
|
202
|
+
AMEE::Data::Item.update(connection, full_path, options)
|
203
|
+
end
|
199
204
|
|
205
|
+
def self.delete(connection, path)
|
206
|
+
connection.delete(path)
|
207
|
+
rescue
|
208
|
+
raise AMEE::BadData.new("Couldn't delete DataItem. Check that your information is correct.")
|
209
|
+
end
|
210
|
+
|
200
211
|
def value(name_or_path_or_uid)
|
201
212
|
val = values.find{ |x| x[:name] == name_or_path_or_uid || x[:path] == name_or_path_or_uid || x[:uid] == name_or_path_or_uid}
|
202
213
|
val ? val[:value] : nil
|
data/lib/amee/data_item_value.rb
CHANGED
@@ -7,6 +7,7 @@ module AMEE
|
|
7
7
|
@type = data ? data[:type] : nil
|
8
8
|
@from_profile = data ? data[:from_profile] : nil
|
9
9
|
@from_data = data ? data[:from_data] : nil
|
10
|
+
@start_date = data ? data[:start_date] : nil
|
10
11
|
super
|
11
12
|
end
|
12
13
|
|
@@ -33,6 +34,10 @@ module AMEE
|
|
33
34
|
@from_data
|
34
35
|
end
|
35
36
|
|
37
|
+
def start_date
|
38
|
+
@start_date
|
39
|
+
end
|
40
|
+
|
36
41
|
def self.from_json(json, path)
|
37
42
|
# Read JSON
|
38
43
|
doc = JSON.parse(json)['itemValue']
|
@@ -44,6 +49,7 @@ module AMEE
|
|
44
49
|
data[:path] = path.gsub(/^\/data/, '')
|
45
50
|
data[:value] = doc['value']
|
46
51
|
data[:type] = doc['itemValueDefinition']['valueDefinition']['valueType']
|
52
|
+
data[:start_date] = DateTime.parse(doc['startDate']) rescue nil
|
47
53
|
# Create object
|
48
54
|
ItemValue.new(data)
|
49
55
|
rescue
|
@@ -63,6 +69,7 @@ module AMEE
|
|
63
69
|
data[:type] = REXML::XPath.first(doc, '/Resources/DataItemValueResource/ItemValue/ItemValueDefinition/ValueDefinition/ValueType').text
|
64
70
|
data[:from_profile] = REXML::XPath.first(doc, '/Resources/DataItemValueResource/ItemValue/ItemValueDefinition/FromProfile').text == "true" ? true : false
|
65
71
|
data[:from_data] = REXML::XPath.first(doc, '/Resources/DataItemValueResource/ItemValue/ItemValueDefinition/FromData').text == "true" ? true : false
|
72
|
+
data[:start_date] = DateTime.parse(REXML::XPath.first(doc, "/Resources/DataItemValueResource/ItemValue/StartDate").text) rescue nil
|
66
73
|
# Create object
|
67
74
|
ItemValue.new(data)
|
68
75
|
rescue
|
@@ -74,6 +81,18 @@ module AMEE
|
|
74
81
|
response = connection.get(path).body
|
75
82
|
# Parse data from response
|
76
83
|
data = {}
|
84
|
+
value = ItemValue.parse(connection, response, path)
|
85
|
+
# Done
|
86
|
+
return value
|
87
|
+
rescue
|
88
|
+
raise AMEE::BadData.new("Couldn't load DataItemValue. Check that your URL is correct.")
|
89
|
+
end
|
90
|
+
|
91
|
+
def save!
|
92
|
+
response = @connection.put(full_path, :value => value).body
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.parse(connection, response, path)
|
77
96
|
if response.is_json?
|
78
97
|
value = ItemValue.from_json(response, path)
|
79
98
|
else
|
@@ -86,11 +105,63 @@ module AMEE
|
|
86
105
|
rescue
|
87
106
|
raise AMEE::BadData.new("Couldn't load DataItemValue. Check that your URL is correct.\n#{response}")
|
88
107
|
end
|
108
|
+
|
109
|
+
def self.create(data_item, options = {})
|
110
|
+
# Do we want to automatically fetch the item afterwards?
|
111
|
+
get_item = options.delete(:get_item)
|
112
|
+
get_item = true if get_item.nil?
|
113
|
+
# Store format if set
|
114
|
+
format = options[:format]
|
115
|
+
unless options.is_a?(Hash)
|
116
|
+
raise AMEE::ArgumentError.new("Third argument must be a hash of options!")
|
117
|
+
end
|
118
|
+
# Set startDate
|
119
|
+
if (options[:start_date])
|
120
|
+
options[:startDate] = options[:start_date].xmlschema
|
121
|
+
options.delete(:start_date)
|
122
|
+
end
|
123
|
+
|
124
|
+
response = data_item.connection.post(data_item.full_path, options)
|
125
|
+
location = response['Location'].match("http://.*?(/.*)")[1]
|
89
126
|
|
90
|
-
|
91
|
-
|
127
|
+
if get_item == true
|
128
|
+
get_options = {}
|
129
|
+
get_options[:format] = format if format
|
130
|
+
return AMEE::Data::ItemValue.get(data_item.connection, location)
|
131
|
+
else
|
132
|
+
return location
|
133
|
+
end
|
134
|
+
rescue
|
135
|
+
raise AMEE::BadData.new("Couldn't create DataItemValue. Check that your information is correct.")
|
92
136
|
end
|
93
137
|
|
138
|
+
def self.update(connection, path, options = {})
|
139
|
+
# Do we want to automatically fetch the item afterwards?
|
140
|
+
get_item = options.delete(:get_item)
|
141
|
+
get_item = true if get_item.nil?
|
142
|
+
# Go
|
143
|
+
response = connection.put(path, options)
|
144
|
+
if get_item
|
145
|
+
if response.body.empty?
|
146
|
+
return AMEE::Data::ItemValue.get(connection, path)
|
147
|
+
else
|
148
|
+
return AMEE::Data::ItemValue.parse(connection, response.body)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
rescue
|
152
|
+
raise AMEE::BadData.new("Couldn't update DataItemValue. Check that your information is correct.\n#{response}")
|
153
|
+
end
|
154
|
+
|
155
|
+
def update(options = {})
|
156
|
+
AMEE::Data::ItemValue.update(connection, full_path, options)
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.delete(connection, path)
|
160
|
+
connection.delete(path)
|
161
|
+
rescue
|
162
|
+
raise AMEE::BadData.new("Couldn't delete DataItemValue. Check that your information is correct.")
|
163
|
+
end
|
164
|
+
|
94
165
|
end
|
95
166
|
end
|
96
|
-
end
|
167
|
+
end
|
data/lib/amee/exceptions.rb
CHANGED
data/lib/amee/item_definition.rb
CHANGED
@@ -110,8 +110,19 @@ module AMEE
|
|
110
110
|
raise AMEE::BadData.new("Couldn't load ItemDefinition. Check that your URL is correct.\n#{response}")
|
111
111
|
end
|
112
112
|
|
113
|
-
def update(options = {})
|
114
|
-
|
113
|
+
def self.update(connection, path, options = {})
|
114
|
+
# Do we want to automatically fetch the item afterwards?
|
115
|
+
get_item = options.delete(:get_item)
|
116
|
+
get_item = true if get_item.nil?
|
117
|
+
# Go
|
118
|
+
response = connection.put(path, options)
|
119
|
+
if get_item
|
120
|
+
if response.body.empty?
|
121
|
+
return ItemDefinition.get(connection, path)
|
122
|
+
else
|
123
|
+
return ItemDefinition.parse(connection, response.body)
|
124
|
+
end
|
125
|
+
end
|
115
126
|
rescue
|
116
127
|
raise AMEE::BadData.new("Couldn't update ItemDefinition. Check that your information is correct.\n#{response}")
|
117
128
|
end
|
data/lib/amee/profile_item.rb
CHANGED
@@ -316,7 +316,7 @@ module AMEE
|
|
316
316
|
options.delete(:start_date)
|
317
317
|
if options[:end_date] && connection.version >= 2
|
318
318
|
options[:endDate] = options[:end_date].xmlschema
|
319
|
-
end
|
319
|
+
end
|
320
320
|
options.delete(:end_date)
|
321
321
|
if options[:duration] && connection.version >= 2
|
322
322
|
options[:duration] = "PT#{options[:duration] * 86400}S"
|
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/rails/init.rb
CHANGED
@@ -8,17 +8,6 @@ if File.exist?(amee_config)
|
|
8
8
|
$AMEE_CONFIG = YAML.load_file(amee_config)[RAILS_ENV]
|
9
9
|
# Create a global AMEE connection that we can use from anywhere in this app
|
10
10
|
AMEE::Rails.establish_connection($AMEE_CONFIG['server'], $AMEE_CONFIG['username'], $AMEE_CONFIG['password'])
|
11
|
-
else
|
12
|
-
# Create an example AMEE config file and save it to config/amee.yml
|
13
|
-
example_config = {}
|
14
|
-
example_config['development'] = {'server' => "stage.co2.dgen.net", 'username' => "your_amee_username", 'password' => "your_amee_password"}
|
15
|
-
example_config['production'] = {'server' => "stage.co2.dgen.net", 'username' => "your_amee_username", 'password' => "your_amee_password"}
|
16
|
-
example_config['test'] = {'server' => "stage.co2.dgen.net", 'username' => "your_amee_username", 'password' => "your_amee_password"}
|
17
|
-
File.open(amee_config, 'w') do |out|
|
18
|
-
YAML.dump(example_config, out)
|
19
|
-
end
|
20
|
-
# Inform the user that we've written a file for them
|
21
|
-
raise AMEE::ConnectionFailed.new("config/amee.yml doesn't exist. I've created one for you - please add your API keys to it.")
|
22
11
|
end
|
23
12
|
|
24
13
|
# Add AMEE extensions into ActiveRecord::Base
|
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: 2.0.
|
4
|
+
version: 2.0.24
|
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: 2009-
|
12
|
+
date: 2009-09-15 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/amee/rails.rb
|
63
63
|
- lib/amee/pager.rb
|
64
64
|
- lib/amee/item_definition.rb
|
65
|
+
- lib/amee/user.rb
|
65
66
|
- bin/ameesh
|
66
67
|
- examples/list_profiles.rb
|
67
68
|
- examples/create_profile.rb
|
@@ -70,6 +71,7 @@ files:
|
|
70
71
|
- examples/view_data_item.rb
|
71
72
|
- init.rb
|
72
73
|
- rails/init.rb
|
74
|
+
- amee.example.yml
|
73
75
|
has_rdoc: true
|
74
76
|
homepage: http://github.com/Floppy/amee-ruby
|
75
77
|
licenses:
|