hackerdude-aws 2.3.25 → 2.3.26

Sign up to get free protection for your applications and to get access to all the features.
data/lib/aws.rb CHANGED
@@ -27,4 +27,4 @@ require 'sdb/right_sdb_interface'
27
27
  require 'acf/right_acf_interface'
28
28
  require 'elb/elb_interface'
29
29
  require 'rds/rds'
30
- require 'alexa/alexa'
30
+
@@ -51,40 +51,6 @@ unless defined? ActiveSupport
51
51
  constant
52
52
  end
53
53
 
54
- # By default, +camelize+ converts strings to UpperCamelCase. If the argument to +camelize+
55
- # is set to <tt>:lower</tt> then +camelize+ produces lowerCamelCase.
56
- #
57
- # +camelize+ will also convert '/' to '::' which is useful for converting paths to namespaces.
58
- #
59
- # Examples:
60
- # "active_record".camelize # => "ActiveRecord"
61
- # "active_record".camelize(:lower) # => "activeRecord"
62
- # "active_record/errors".camelize # => "ActiveRecord::Errors"
63
- # "active_record/errors".camelize(:lower) # => "activeRecord::Errors"
64
- def camelize(lower_case_and_underscored_word=self, first_letter_in_uppercase = true)
65
- if first_letter_in_uppercase
66
- lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
67
- else
68
- lower_case_and_underscored_word.first.downcase + camelize(lower_case_and_underscored_word)[1..-1]
69
- end
70
- end
71
-
72
- # The reverse of +camelize+. Makes an underscored, lowercase form from the expression in the string.
73
- #
74
- # Changes '::' to '/' to convert namespaces to paths.
75
- #
76
- # Examples:
77
- # "ActiveRecord".underscore # => "active_record"
78
- # "ActiveRecord::Errors".underscore # => active_record/errors
79
- def underscore
80
- self.to_s.gsub(/::/, '/').
81
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
82
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
83
- tr("-", "_").
84
- downcase
85
- end
86
-
87
-
88
54
  end
89
55
 
90
56
 
metadata CHANGED
@@ -1,24 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hackerdude-aws
3
3
  version: !ruby/object:Gem::Version
4
- hash: 49
4
+ hash: 55
5
5
  prerelease: false
6
6
  segments:
7
7
  - 2
8
8
  - 3
9
- - 25
10
- version: 2.3.25
9
+ - 26
10
+ version: 2.3.26
11
11
  platform: ruby
12
12
  authors:
13
13
  - Travis Reeder
14
14
  - Chad Arimura
15
15
  - RightScale
16
- - David Martinez
17
16
  autorequire:
18
17
  bindir: bin
19
18
  cert_chain: []
20
19
 
21
- date: 2010-11-17 00:00:00 -08:00
20
+ date: 2010-12-13 00:00:00 -08:00
22
21
  default_executable:
23
22
  dependencies:
24
23
  - !ruby/object:Gem::Dependency
@@ -77,7 +76,7 @@ dependencies:
77
76
  version: "0"
78
77
  type: :runtime
79
78
  version_requirements: *id004
80
- description: AWS Ruby Library for interfacing with Amazon Web Services. Alexa-experimental branch.
79
+ description: AWS Ruby Library for interfacing with Amazon Web Services.
81
80
  email: travis@appoxy.com
82
81
  executables: []
83
82
 
@@ -87,7 +86,6 @@ extra_rdoc_files:
87
86
  - README.markdown
88
87
  files:
89
88
  - lib/acf/right_acf_interface.rb
90
- - lib/alexa/alexa.rb
91
89
  - lib/aws.rb
92
90
  - lib/awsbase/aws_response_array.rb
93
91
  - lib/awsbase/benchmark_fix.rb
@@ -107,8 +105,6 @@ files:
107
105
  - README.markdown
108
106
  - test/acf/test_acf.rb
109
107
  - test/acf/test_helper.rb
110
- - test/alexa/test_alexa.rb
111
- - test/alexa/test_helper.rb
112
108
  - test/ec2/test_ec2.rb
113
109
  - test/ec2/test_helper.rb
114
110
  - test/ec2/test_mon.rb
@@ -126,12 +122,12 @@ files:
126
122
  - test/test_credentials.rb
127
123
  - test/ts_right_aws.rb
128
124
  has_rdoc: true
129
- homepage: http://github.com/hackerdude/aws/
125
+ homepage: http://github.com/appoxy/aws/
130
126
  licenses: []
131
127
 
132
128
  post_install_message:
133
- rdoc_options:
134
- - --charset=UTF-8
129
+ rdoc_options: []
130
+
135
131
  require_paths:
136
132
  - lib
137
133
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -158,12 +154,10 @@ rubyforge_project:
158
154
  rubygems_version: 1.3.7
159
155
  signing_key:
160
156
  specification_version: 3
161
- summary: AWS Ruby Library for interfacing with Amazon Web Services. Hackerdude branch including Alexa (Experimental).
157
+ summary: AWS Ruby Library for interfacing with Amazon Web Services.
162
158
  test_files:
163
159
  - test/acf/test_acf.rb
164
160
  - test/acf/test_helper.rb
165
- - test/alexa/test_alexa.rb
166
- - test/alexa/test_helper.rb
167
161
  - test/ec2/test_ec2.rb
168
162
  - test/ec2/test_helper.rb
169
163
  - test/ec2/test_mon.rb
@@ -1,239 +0,0 @@
1
- module Aws
2
- class Alexa
3
- include AwsBaseInterface
4
- DEFAULT_HOST = "awis.amazonaws.com"
5
- DEFAULT_PATH = "/"
6
- API_VERSION = "2005-07-11"
7
- DEFAULT_PROTOCOL = 'http'
8
- DEFAULT_PORT = 80
9
-
10
- VALID_URLINFO_RESPONSE_GROUPS = [
11
- :related_links,
12
- :categories,
13
- :rank,
14
- :rank_by_country,
15
- :rank_by_city,
16
- :usage_stats,
17
- :contact_info,
18
- :adult_content,
19
- :speed,
20
- :language,
21
- :keywords,
22
- :owned_domains,
23
- :links_in_count,
24
- :site_data
25
- ]
26
- # TODO - the docs mentions :popups on the meta groups, but it's not on the response group. Oversight? Check to see if that kind of info is being passed
27
-
28
- VALID_CATEGORY_BROWSE_RESPONSE_GROUPS = [ :categories,
29
- :related_categories,
30
- :language_categories,
31
- :letter_bars
32
- ]
33
-
34
- META_GROUPS = {
35
- :related=>[:related_links, :categories],
36
- :traffic_data=>[:rank, :usage_stats],
37
- :content_data=>[:site_data, :adult_content, :popups, :speed, :language]
38
- }
39
- @@bench = AwsBenchmarkingBlock.new
40
- def self.bench_xml
41
- @@bench.xml
42
- end
43
- def self.bench_ec2
44
- @@bench.service
45
- end
46
-
47
- @@api = ENV['ALEXA_API_VERSION'] || API_VERSION
48
- def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
49
- init({ :name => 'ALEXA',
50
- :default_host => ENV['ALEXA_URL'] ? URI.parse(ENV['ALEXA_URL']).host : DEFAULT_HOST,
51
- :default_port => ENV['ALEXA_URL'] ? URI.parse(ENV['ALEXA_URL']).port : DEFAULT_PORT,
52
- :default_service => ENV['ALEXA_URL'] ? URI.parse(ENV['ALEXA_URL']).path : DEFAULT_PATH,
53
- :default_protocol => ENV['ALEXA_URL'] ? URI.parse(ENV['ALEXA_URL']).scheme : DEFAULT_PROTOCOL,
54
- :api_version => API_VERSION },
55
- aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'] ,
56
- aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
57
- params)
58
- # EC2 doesn't really define any transient errors to retry, and in fact,
59
- # when they return a 503 it is usually for 'request limit exceeded' which
60
- # we most certainly should not retry. So let's pare down the list of
61
- # retryable errors to InternalError only (see AwsBase for the default
62
- # list)
63
- amazon_problems = ['InternalError']
64
- end
65
-
66
- def generate_request(action, params={}) #:nodoc:
67
- service_hash = {"Action" => action,
68
- "AWSAccessKeyId" => @aws_access_key_id,
69
- "Version" => @@api }
70
- service_hash.update(params)
71
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :get, @params[:server], @params[:service])
72
-
73
- # use POST method if the length of the query string is too large
74
- if service_params.size > 2000
75
- if signature_version == '2'
76
- # resign the request because HTTP verb is included into signature
77
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :post, @params[:server], @params[:service])
78
- end
79
- request = Net::HTTP::Post.new(@params[:service])
80
- request.body = service_params
81
- request['Content-Type'] = 'application/x-www-form-urlencoded'
82
- else
83
- request = Net::HTTP::Get.new("#{@params[:service]}?#{service_params}")
84
- end
85
- # prepare output hash
86
- { :request => request,
87
- :server => @params[:server],
88
- :port => @params[:port],
89
- :protocol => @params[:protocol] }
90
- end
91
-
92
- def request_info(request, parser) #:nodoc:
93
- thread = @params[:multi_thread] ? Thread.current : Thread.main
94
- thread[:ec2_connection] ||= Rightscale::HttpConnection.new(:exception => AwsError, :logger => @logger)
95
- request_info_impl(thread[:ec2_connection], @@bench, request, parser)
96
- end
97
-
98
- # Quickly return the alexa URL info, (rank only)
99
- #
100
- # Example:
101
- # alexa_rank("http://www.yahoo.com")[:rank][:text] # 4
102
- def alexa_rank(url, params={}, cache_for = nil)
103
- result = alexa_url_info(url, {:response_groups=>:rank})
104
- return result[:url_info_response][:response][:url_info_result][:alexa][:traffic_data]
105
- end
106
-
107
- # Retrieves the Alexa URL info for a URL.
108
- # By default it returns every response group.
109
- # Override response_groups to set your own.
110
- #
111
- # Example:
112
- # alexa_url_info("http://www.google.com")[:url_info_response]..
113
- def alexa_url_info(url, opts={}, cache_for=nil, parser = QAlexaUrlInfoParser)
114
- options = {:response_groups=>VALID_URLINFO_RESPONSE_GROUPS}.merge(opts)
115
- request_hash = {}
116
- request_hash['Url'] = url
117
- request_hash['ResponseGroup'] = response_groups_to_param(options[:response_groups])
118
- params.each do |key, val|
119
- request_hash.merge! hash_params(key, (val.is_a?(Array) ? val : [val]))
120
- end
121
- link = generate_request('UrlInfo', request_hash)
122
- request_cache_or_info(cache_for, link, parser, @@bench, cache_for)
123
- rescue Exception
124
- on_exception
125
- end
126
-
127
- # Returns a list of subcategories inside a category
128
- #
129
- def alexa_category_browse(path, opts={}, cache_for=nil, parser = QAlexaUrlInfoParser)
130
- options = {:response_groups=>VALID_CATEGORY_BROWSE_RESPONSE_GROUPS}.merge(opts)
131
- request_hash = {}
132
- request_hash['Path'] = path
133
- request_hash['ResponseGroup'] = response_groups_to_param(options[:response_groups])
134
- params.each do |key, val|
135
- request_hash.merge! hash_params(key, (val.is_a?(Array) ? val : [val]))
136
- end
137
- link = generate_request('CategoryBrowse', request_hash)
138
- request_cache_or_info(cache_for, link, parser, @@bench, cache_for)
139
- rescue Exception
140
- on_exception
141
- end
142
-
143
- # Returns a list of category listings
144
- def alexa_category_listings(path, cache_for=nil, parser = QAlexaUrlInfoParser)
145
- request_hash = {}
146
- request_hash['Path'] = path
147
- request_hash['ResponseGroup'] = "Listings"
148
- params.each do |key, val|
149
- request_hash.merge! hash_params(key, (val.is_a?(Array) ? val : [val]))
150
- end
151
- link = generate_request('CategoryListings', request_hash)
152
- request_cache_or_info(cache_for, link, parser, @@bench, cache_for)
153
- rescue Exception
154
- on_exception
155
- end
156
-
157
- def alexa_sites_linking_in(path, cache_for, parser = QAlexaUrlInfoParser)
158
- request_hash = {}
159
- request_hash['Path'] = path
160
- request_hash['ResponseGroup'] = "SitesLinkingIn"
161
- params.each do |key, val|
162
- request_hash.merge! hash_params(key, (val.is_a?(Array) ? val : [val]))
163
- end
164
- link = generate_request('CategoryListings', request_hash)
165
- request_cache_or_info(cache_for, link, parser, @@bench, cache_for)
166
- rescue Exception
167
- on_exception
168
- end
169
-
170
- def alexa_traffic_history
171
- throw ArgumentError.new("Not Implemented. Sorry!")
172
- end
173
-
174
- private
175
-
176
- def response_groups_to_param(groups)
177
- actual_groups = groups.is_a?(Array) ? groups : [groups]
178
- actual_groups.collect{|g| g.to_s.camelize }.join(",")
179
- end
180
-
181
- end
182
-
183
- class QAlexaElementHash < Hash
184
- attr_accessor :finalized
185
- def last
186
- self
187
- end
188
- def to_s
189
- return has_key?(:text) ? self[:text] : super.to_s
190
- end
191
- end
192
-
193
- class QAlexaUrlInfoParser < AwsParser
194
-
195
- def initialize(args)
196
- super(args)
197
- @result = {}
198
- end
199
-
200
- def tagstart(name, attr)
201
- item = current_item(name)
202
- _attr = attr.dup
203
- _attr.delete("xmlns:aws")
204
- item.merge!(_attr)
205
- end
206
-
207
- def tagend(name)
208
- element = current_item(name)
209
- element[:text] = @text.strip
210
- element.finalized = true
211
- end
212
-
213
- def current_item(name)
214
- outer = @result
215
- inner = nil
216
- path_array = @xmlpath.split('/')
217
- path_array << name
218
- path_array.collect{|s| s.sub('aws:','')}.each{|_xpath_element|
219
- name_sym = symbol_for(_xpath_element)
220
- inner = outer[name_sym] || QAlexaElementHash.new
221
- inner = inner.last # Sometimes we may get an array.
222
- if inner.finalized
223
- old_inner = inner
224
- inner = QAlexaElementHash.new
225
- outer[name_sym] = [old_inner, inner]
226
- end
227
- outer[name_sym] = inner if ! outer.has_key?(name_sym)
228
- outer = inner
229
- }
230
- return inner.nil? ? outer : inner
231
- end
232
-
233
- def symbol_for(name)
234
- sym_name = name.sub('aws:','').underscore.to_sym
235
- end
236
-
237
- end
238
-
239
- end
@@ -1,53 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
- require 'pp'
3
- require File.dirname(__FILE__) + '/../test_credentials.rb'
4
-
5
- require 'ruby-debug'
6
- Debugger.start
7
-
8
- # Tests the Alexa AWS implementation
9
- # Note this is very preliminary code. The code just spits back hashes
10
- # and it has no concept of types just yet. The parser can
11
- # be overriden on the calls if you need stronger types and must
12
- # have something right away.
13
- class TestAlexa < Test::Unit::TestCase
14
-
15
- def setup
16
- TestCredentials.get_credentials
17
- @alexa = Aws::Alexa.new(TestCredentials.aws_access_key_id,
18
- TestCredentials.aws_secret_access_key)
19
- end
20
-
21
- # Quick rank request
22
- def test_rank
23
- return
24
- TestCredentials.get_credentials
25
- rank = @alexa.alexa_rank("http://www.youtube.com")
26
- assert ! rank.empty?
27
- assert ! rank[:rank][:text].blank?
28
- assert rank[:rank][:text].to_i > 0
29
- assert ! rank[:data_url][:text].blank?
30
- end
31
-
32
- def test_alexa_urlinfo
33
- TestCredentials.get_credentials
34
- result = @alexa.alexa_url_info("http://www.yahoo.com")
35
- assert result[:url_info_response][:response][:url_info_result][:alexa][:contact_info][:company_stock_ticker][:text] == "YHOO"
36
- end
37
-
38
- def test_alexa_category_browse
39
- TestCredentials.get_credentials
40
- category_browse = @alexa.alexa_category_browse("Top/Computers/Software/Operating_Systems")
41
- assert ! category_browse.empty?
42
- assert ! category_browse[:category_browse_response][:response][:category_browse_result][:alexa][:category_browse][:categories][:category].first[:path][:text].blank?
43
-
44
- end
45
-
46
- def test_alexa_category_listings
47
- TestCredentials.get_credentials
48
- category_browse = @alexa.alexa_category_listings("Top/Computers/Software/Operating_Systems")
49
- assert ! category_browse.empty?
50
- assert category_browse[:category_listings_response][:response][:category_listings_result][:alexa][:category_listings][:listings][:listing].length > 0
51
- end
52
-
53
- end
@@ -1,2 +0,0 @@
1
- require 'test/unit'
2
- require File.dirname(__FILE__) + '/../../lib/aws'