iij-sakagura 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2f0e9914792d60a8a94d92e248be4b945f6b1469
4
+ data.tar.gz: a69aaebf85e23074e4bbea328b85bb82f20eec61
5
+ SHA512:
6
+ metadata.gz: 1756a605bc87ca0a9af42d7a0ee2387740f31b7a61e493b317ad8cf782899a8d32a010a3070d657a0e930807aeda1875842bb64bcdd59e08c44b2eafb316380f
7
+ data.tar.gz: d56f3e5808480d3dd5d0f98aa1cbd5db58d9c544bd61860c84bd3d88d0b7fc1d6c5dfe5007c71a633b6e5b6e3088f84bbb540baf0cfbff67ca36d97148a8c5e2
data/Gemfile CHANGED
@@ -10,7 +10,7 @@ group :test do
10
10
  gem 'simplecov', :require => false
11
11
  gem 'simplecov-rcov', :require => false
12
12
  gem 'webmock'
13
- gem 'vcr', '~> 2.8.0'
13
+ gem 'vcr', '~> 2.9.2'
14
14
  end
15
15
 
16
16
  gemspec
data/iij-sakagura.gemspec CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "json"
22
- spec.add_dependency "faraday"
23
- spec.add_dependency "faraday_middleware"
22
+ spec.add_dependency "faraday", [">= 0.8.0", "< 0.10"]
23
+ spec.add_dependency "faraday_middleware", [">= 0.9.0", "< 0.10"]
24
24
  end
@@ -49,7 +49,9 @@ module IIJ
49
49
  end
50
50
  end
51
51
 
52
- Faraday.register_middleware :response, :iij_sakagura_raise_error => RaiseError
52
+ if Faraday::Response.respond_to? :register_middleware
53
+ Faraday::Response.register_middleware :iij_sakagura_raise_error => RaiseError
54
+ end
53
55
  end
54
56
  end
55
57
  end
@@ -23,8 +23,12 @@ module IIJ
23
23
  @app.call(env)
24
24
  end
25
25
 
26
+ def current_time
27
+ Time.now
28
+ end
29
+
26
30
  def required_params
27
- expire = Time.now + @expire_after
31
+ expire = current_time + @expire_after
28
32
 
29
33
  {
30
34
  "AccessKeyId" => @access_key,
@@ -64,7 +68,10 @@ module IIJ
64
68
  params.sort_by{|k,v| k}.map{|k,v| escape(k.to_s) + "=" + escape(v.to_s) }.join('&')
65
69
  end
66
70
  end
67
- Faraday.register_middleware :request, :signature_v2 => SignatureV2
71
+
72
+ if Faraday::Request.respond_to? :register_middleware
73
+ Faraday::Request.register_middleware :signature_v2 => SignatureV2
74
+ end
68
75
  end
69
76
  end
70
77
  end
@@ -1,5 +1,5 @@
1
1
  module IIJ
2
2
  module Sakagura
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
data/spec/helper.rb CHANGED
@@ -13,8 +13,24 @@ require 'webmock/rspec'
13
13
 
14
14
  WebMock.disable_net_connect!
15
15
 
16
+ module RequestMiddlewareExampleGroup
17
+ def self.included(base)
18
+ base.let(:endpoint) { "http://api.example.jp/1/" }
19
+ base.let(:connection) { Faraday.new :url => endpoint }
20
+ base.let(:middleware) { described_class.new(lambda{|env| env }, *middleware_options) }
21
+ end
22
+
23
+ def process(method = :get, &block)
24
+ middleware.call(make_env(method, &block))
25
+ end
26
+
27
+ def make_env(method = :get, &block)
28
+ connection.build_request(method, &block).to_env(connection)
29
+ end
30
+ end
31
+
16
32
  RSpec.configure do |config|
17
- config.treat_symbols_as_metadata_keys_with_true_values = true
33
+ config.include RequestMiddlewareExampleGroup, :type => :request_middleware
18
34
  end
19
35
 
20
36
  require 'vcr'
@@ -0,0 +1,81 @@
1
+ require 'helper'
2
+ require 'iij/sakagura/core/middleware/signature_v2'
3
+
4
+ describe IIJ::Sakagura::Core::Middleware::SignatureV2, type: :request_middleware do
5
+ def middleware_options
6
+ [
7
+ {
8
+ endpoint: endpoint,
9
+ access_key: access_key,
10
+ secret_key: secret_key,
11
+ expire_after: expire_after
12
+ }
13
+ ]
14
+ end
15
+
16
+ let(:endpoint) { "https://api.example.jp/json" }
17
+ let(:access_key) { "0123456789abcdefghij" }
18
+ let(:secret_key) { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN" }
19
+ let(:expire_after) { 3600 }
20
+
21
+ before do
22
+ expect_any_instance_of(described_class).to receive(:current_time).and_return( Time.utc(2013, 10, 1) )
23
+ end
24
+
25
+ shared_examples_for "valid signature" do
26
+ let(:result) do
27
+ process(:post) do |req|
28
+ req.body = params
29
+ end
30
+ end
31
+ let(:signature) do
32
+ digest = OpenSSL::HMAC.digest(OpenSSL::Digest::SHA256.new, secret_key, string_to_sign)
33
+ Base64.encode64(digest).chomp
34
+ end
35
+
36
+ it { expect(result[:body]['Signature']).to eq(signature) }
37
+ end
38
+
39
+ describe "#call" do
40
+ context "simple request" do
41
+ let(:params) do
42
+ {
43
+ "Action" => "Test",
44
+ "APIVersion" => "20130901"
45
+ }
46
+ end
47
+ let(:string_to_sign) do
48
+ [
49
+ "POST",
50
+ "api.example.jp",
51
+ "/json",
52
+ "APIVersion=20130901&AccessKeyId=#{access_key}&Action=Test&Expire=2013-10-01T01%3A00%3A00Z&SignatureMethod=HmacSHA256&SignatureVersion=2"
53
+ ].join("\n")
54
+ end
55
+
56
+ it_should_behave_like "valid signature"
57
+ end
58
+
59
+ context "long list param" do
60
+ let(:params) do
61
+ init = {
62
+ "Action" => "Test",
63
+ "APIVersion" => "20130901"
64
+ }
65
+ (1..10).inject(init) {|h, i| h["Param.#{i}"] = i; h }
66
+ end
67
+
68
+ let(:string_to_sign) do
69
+ param_str = "Param.1=1&Param.10=10&Param.2=2&Param.3=3&Param.4=4&Param.5=5&Param.6=6&Param.7=7&Param.8=8&Param.9=9"
70
+
71
+ [
72
+ "POST",
73
+ "api.example.jp",
74
+ "/json",
75
+ "APIVersion=20130901&AccessKeyId=#{access_key}&Action=Test&Expire=2013-10-01T01%3A00%3A00Z&#{param_str}&SignatureMethod=HmacSHA256&SignatureVersion=2"
76
+ ].join("\n")
77
+ end
78
+ it_should_behave_like "valid signature"
79
+ end
80
+ end
81
+ end
@@ -31,7 +31,7 @@ describe IIJ::Sakagura::Core::QueryClient do
31
31
  let(:signed_at) { Time.gm(2013, 10, 1) }
32
32
  let(:expire_after) { 3600 }
33
33
  before do
34
- Time.stub(:now).and_return(signed_at)
34
+ expect(Time).to receive(:now).and_return(signed_at)
35
35
  end
36
36
 
37
37
  let(:client) do
metadata CHANGED
@@ -1,64 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iij-sakagura
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Takahiro HIMURA
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-12-13 00:00:00.000000000 Z
11
+ date: 2014-08-06 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: faraday
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
- version: '0'
33
+ version: 0.8.0
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '0.10'
38
37
  type: :runtime
39
38
  prerelease: false
40
39
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
40
  requirements:
43
- - - ! '>='
41
+ - - ">="
44
42
  - !ruby/object:Gem::Version
45
- version: '0'
43
+ version: 0.8.0
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.10'
46
47
  - !ruby/object:Gem::Dependency
47
48
  name: faraday_middleware
48
49
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
50
  requirements:
51
- - - ! '>='
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: 0.9.0
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.10'
54
57
  type: :runtime
55
58
  prerelease: false
56
59
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
60
  requirements:
59
- - - ! '>='
61
+ - - ">="
60
62
  - !ruby/object:Gem::Version
61
- version: '0'
63
+ version: 0.9.0
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '0.10'
62
67
  description: IIJ API platform (Sakagura) SDK
63
68
  email:
64
69
  - taka@himura.jp
@@ -66,7 +71,7 @@ executables: []
66
71
  extensions: []
67
72
  extra_rdoc_files: []
68
73
  files:
69
- - .gitignore
74
+ - ".gitignore"
70
75
  - Gemfile
71
76
  - LICENSE.txt
72
77
  - README.md
@@ -87,6 +92,7 @@ files:
87
92
  - spec/cassettes/IIJ_Sakagura_GP_Client/_gp_service_code_list/returns_service_code_list.yml
88
93
  - spec/cassettes/IIJ_Sakagura_GP_GP/_service_code_list/.yml
89
94
  - spec/helper.rb
95
+ - spec/iij/sakagura/core/middleware/signature_v2_spec.rb
90
96
  - spec/iij/sakagura/core/query_client_spec.rb
91
97
  - spec/iij/sakagura/gp/client_spec.rb
92
98
  - spec/iij/sakagura/gp/gp_spec.rb
@@ -94,32 +100,32 @@ files:
94
100
  homepage: https://github.com/iij/ruby-iij-sakagura
95
101
  licenses:
96
102
  - MIT
103
+ metadata: {}
97
104
  post_install_message:
98
105
  rdoc_options: []
99
106
  require_paths:
100
107
  - lib
101
108
  required_ruby_version: !ruby/object:Gem::Requirement
102
- none: false
103
109
  requirements:
104
- - - ! '>='
110
+ - - ">="
105
111
  - !ruby/object:Gem::Version
106
112
  version: '0'
107
113
  required_rubygems_version: !ruby/object:Gem::Requirement
108
- none: false
109
114
  requirements:
110
- - - ! '>='
115
+ - - ">="
111
116
  - !ruby/object:Gem::Version
112
117
  version: '0'
113
118
  requirements: []
114
119
  rubyforge_project:
115
- rubygems_version: 1.8.23
120
+ rubygems_version: 2.2.2
116
121
  signing_key:
117
- specification_version: 3
122
+ specification_version: 4
118
123
  summary: IIJ API platform (Sakagura) SDK
119
124
  test_files:
120
125
  - spec/cassettes/IIJ_Sakagura_GP_Client/_gp_service_code_list/returns_service_code_list.yml
121
126
  - spec/cassettes/IIJ_Sakagura_GP_GP/_service_code_list/.yml
122
127
  - spec/helper.rb
128
+ - spec/iij/sakagura/core/middleware/signature_v2_spec.rb
123
129
  - spec/iij/sakagura/core/query_client_spec.rb
124
130
  - spec/iij/sakagura/gp/client_spec.rb
125
131
  - spec/iij/sakagura/gp/gp_spec.rb