aliyun-mqs 0.0.3 → 0.1.1

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.
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe Aliyun::Mqs::Request do
4
+
5
+ describe "Reqest methods" do
6
+ specify "get" do
7
+ expect(RestClient).to receive(:get) do |*args|
8
+ path, headers = *args
9
+ expect(path).to eq("http://owner-id.mqs-region.aliyuncs.com/path")
10
+ expect(headers).to be_a(Hash)
11
+ end
12
+
13
+ Aliyun::Mqs::Request.get("/path")
14
+ end
15
+
16
+ specify "get with params" do
17
+ expect(RestClient).to receive(:get) do |*args|
18
+ path, headers = *args
19
+ expect(path).to eq("http://owner-id.mqs-region.aliyuncs.com/path?a=1")
20
+ expect(headers).to be_a(Hash)
21
+ end
22
+
23
+ Aliyun::Mqs::Request.get("/path", params:{a:1})
24
+ end
25
+
26
+ specify "get with mqs_headers" do
27
+ expect(RestClient).to receive(:get) do |*args|
28
+ path, headers = *args
29
+ expect(path).to eq("http://owner-id.mqs-region.aliyuncs.com/path")
30
+ expect(headers.slice("x-mqs-1")).to eq("x-mqs-1"=>"1")
31
+ end
32
+
33
+ Aliyun::Mqs::Request.get("/path", mqs_headers:{"x-mqs-1"=>"1"})
34
+ end
35
+
36
+ specify "delete" do
37
+ expect(RestClient).to receive(:delete) do |*args|
38
+ path, headers = *args
39
+ expect(path).to eq("http://owner-id.mqs-region.aliyuncs.com/path")
40
+ expect(headers).to be_a(Hash)
41
+ end
42
+
43
+ Aliyun::Mqs::Request.delete("/path")
44
+ end
45
+
46
+ specify "post with content" do
47
+ expect(RestClient).to receive(:post) do |*args|
48
+ path, body, headers = *args
49
+ expect(path).to eq("http://owner-id.mqs-region.aliyuncs.com/path")
50
+ expect(body).not_to be_empty
51
+ expect(headers).to be_a(Hash)
52
+ end
53
+
54
+ Aliyun::Mqs::Request.post("/path"){|request| request.content "content"}
55
+ end
56
+
57
+ specify "put with content" do
58
+ expect(RestClient).to receive(:put) do |*args|
59
+ path, body, headers = *args
60
+ expect(path).to eq("http://owner-id.mqs-region.aliyuncs.com/path")
61
+ expect(body).not_to be_empty
62
+ expect(headers).to be_a(Hash)
63
+ end
64
+
65
+ Aliyun::Mqs::Request.put("/path"){|request| request.content "content"}
66
+ end
67
+ end
68
+
69
+ specify "has default x-mqs-version header" do
70
+ expect(subject.mqs_headers).to eq("x-mqs-version" => "2014-07-08")
71
+ end
72
+
73
+ specify "has default content namespace when content is set" do
74
+ subject.content("content", attr1: 1, attr2: 2)
75
+ xml = Hash.from_xml(subject.body)
76
+
77
+ expect(subject.content_type).to eq("text/xml;charset=utf-8")
78
+ expect(xml["content"]["xmlns"]).to eq("http://mqs.aliyuncs.com/doc/v1/")
79
+ expect(subject.content_length).not_to be_nil
80
+ expect(subject.content_md5).not_to be_nil
81
+ end
82
+
83
+ end
@@ -0,0 +1,17 @@
1
+ require 'rspec'
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
4
+ require 'aliyun/mqs'
5
+
6
+ Dir[File.join(File.dirname(__FILE__), "../spec/support/**/*.rb")].sort.each {|f| require f}
7
+ RSpec.configure do |config|
8
+ config.color = true
9
+ config.mock_with :rspec
10
+ end
11
+
12
+ Aliyun::Mqs.configure do |config|
13
+ config.access_id = 'access-id'
14
+ config.key = "key"
15
+ config.region = 'region'
16
+ config.owner_id = 'owner-id'
17
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aliyun-mqs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - mgampkay
8
+ - skinnyworm
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-08-19 00:00:00.000000000 Z
12
+ date: 2014-12-14 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: nokogiri
@@ -38,20 +39,48 @@ dependencies:
38
39
  - - ">="
39
40
  - !ruby/object:Gem::Version
40
41
  version: '4.1'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rest-client
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: thor
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
41
70
  - !ruby/object:Gem::Dependency
42
71
  name: bundler
43
72
  requirement: !ruby/object:Gem::Requirement
44
73
  requirements:
45
- - - "~>"
74
+ - - ">="
46
75
  - !ruby/object:Gem::Version
47
- version: '1.7'
76
+ version: '0'
48
77
  type: :development
49
78
  prerelease: false
50
79
  version_requirements: !ruby/object:Gem::Requirement
51
80
  requirements:
52
- - - "~>"
81
+ - - ">="
53
82
  - !ruby/object:Gem::Version
54
- version: '1.7'
83
+ version: '0'
55
84
  - !ruby/object:Gem::Dependency
56
85
  name: rake
57
86
  requirement: !ruby/object:Gem::Requirement
@@ -66,25 +95,61 @@ dependencies:
66
95
  - - "~>"
67
96
  - !ruby/object:Gem::Version
68
97
  version: '10.0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: pry
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
69
126
  description: Non-official SDK for Aliyun MQS
70
127
  email:
71
128
  - mgampkay@gmail.com
72
- executables: []
129
+ - askinnyworm@gmail.com
130
+ executables:
131
+ - mqs
73
132
  extensions: []
74
133
  extra_rdoc_files: []
75
134
  files:
76
135
  - ".gitignore"
136
+ - ".travis.yml"
77
137
  - Gemfile
78
138
  - LICENSE.txt
79
139
  - README.md
80
140
  - Rakefile
81
141
  - aliyun-mqs.gemspec
142
+ - bin/mqs
82
143
  - lib/aliyun/mqs.rb
83
- - lib/aliyun/mqs/configuration.rb
84
- - lib/aliyun/mqs/http.rb
144
+ - lib/aliyun/mqs/cli.rb
145
+ - lib/aliyun/mqs/message.rb
85
146
  - lib/aliyun/mqs/queue.rb
86
- - lib/aliyun/mqs/response.rb
147
+ - lib/aliyun/mqs/request.rb
87
148
  - lib/aliyun/mqs/version.rb
149
+ - spec/lib/aliyun/mqs/message_spec.rb
150
+ - spec/lib/aliyun/mqs/queue_spec.rb
151
+ - spec/lib/aliyun/mqs/request_spec.rb
152
+ - spec/spec_helper.rb
88
153
  homepage: https://github.com/mgampkay/aliyun-mqs
89
154
  licenses:
90
155
  - MIT
@@ -109,4 +174,9 @@ rubygems_version: 2.2.2
109
174
  signing_key:
110
175
  specification_version: 4
111
176
  summary: Ruby SDK for Aliyun MQS (non-official)
112
- test_files: []
177
+ test_files:
178
+ - spec/lib/aliyun/mqs/message_spec.rb
179
+ - spec/lib/aliyun/mqs/queue_spec.rb
180
+ - spec/lib/aliyun/mqs/request_spec.rb
181
+ - spec/spec_helper.rb
182
+ has_rdoc:
@@ -1,8 +0,0 @@
1
- module Aliyun
2
- module Mqs
3
- class Configuration
4
- attr_accessor :access_key_id, :access_key_secret, :access_region
5
- attr_accessor :access_owner_id
6
- end
7
- end
8
- end
@@ -1,58 +0,0 @@
1
- require 'base64'
2
- require 'date'
3
- require 'digest'
4
- require 'net/http'
5
- require 'uri'
6
-
7
- module Aliyun
8
- module Mqs
9
- module Http
10
- Version = '2014-07-08'
11
- ContentType = 'text/xml;utf-8'
12
-
13
- def send_request(verb, request_uri, body = '')
14
- uri = URI.parse(request_uri)
15
- content_md5 = Base64::encode64(Digest::MD5.hexdigest body).chop
16
- gmt_date = DateTime.now.httpdate
17
- mqs_headers = {'x-mqs-version' => Version}
18
- headers = {'Host' => uri.host,
19
- 'Date' => gmt_date,
20
- 'Content-Type' => ContentType,
21
- 'Content-MD5' => content_md5
22
- }
23
- headers.merge! mqs_headers
24
- resource = uri.path + (uri.query != nil ? '?' + uri.query : '')
25
- headers['Authorization'] = sign_header(verb, content_md5, gmt_date, mqs_headers, resource)
26
-
27
- http = Net::HTTP.new(uri.host, uri.port)
28
-
29
- case verb.downcase
30
- when 'get'
31
- request = Net::HTTP::Get.new(uri.request_uri)
32
- when 'post'
33
- request = Net::HTTP::Post.new(uri.request_uri)
34
- request.body = body
35
- when 'delete'
36
- request = Net::HTTP::Delete.new(uri.request_uri)
37
- when 'put'
38
- request = Net::HTTP::Put.new(uri.request_uri)
39
- request.body = body
40
- end
41
- request.initialize_http_header(headers)
42
- response = http.request(request)
43
- Response.new(self, response)
44
- end
45
-
46
- def sign_header(verb, content_md5, gmt_date, mqs_headers = {}, resources = '/')
47
- header = ''
48
- mqs_headers.sort.each do |k,v|
49
- header << k.downcase + ':'+ v + "\n"
50
- end
51
- sign = sprintf "%s\n%s\n%s\n%s\n%s%s", verb, content_md5, ContentType, gmt_date, header, resources
52
- sign = Base64::encode64(Digest::HMAC.digest(sign, Mqs.configuration.access_key_secret, Digest::SHA1)).chop
53
- "MQS #{Mqs.configuration.access_key_id}:#{sign}"
54
- end
55
-
56
- end
57
- end
58
- end
@@ -1,46 +0,0 @@
1
- require 'nokogiri'
2
- require 'active_support/core_ext/string/inflections'
3
-
4
- module Aliyun
5
- module Mqs
6
-
7
- class Response
8
-
9
- def initialize(queue, response)
10
- @queue = queue
11
- @success = (response.code =~ /^20./) == 0
12
- if response.body
13
- begin
14
- xml_to_attribute(response.body)
15
- end
16
- end
17
- end
18
-
19
- def success?
20
- @success
21
- end
22
-
23
- def delete
24
- @queue.delete self
25
- end
26
-
27
- private
28
-
29
- def xml_to_attribute(xml)
30
- Nokogiri::XML(xml).root.children.each do |child|
31
- if child.element?
32
- name = child.name.underscore
33
- value = child.content.to_s
34
- value = Time.at(value.to_f / 1000) if name.end_with?('_time')
35
- define_singleton_method name do
36
- instance_variable_get ('@' + name)
37
- end
38
- self.instance_variable_set('@' + name, value)
39
- end
40
- end
41
- end
42
-
43
- end
44
-
45
- end
46
- end