mushikago-sdk 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,6 @@
1
1
  require 'singleton'
2
2
  module Mushikago
3
+ # Mushikago SDK for Rubyの各設定
3
4
  class Config
4
5
  include Singleton
5
6
 
@@ -39,6 +40,7 @@ module Mushikago
39
40
  add_option :secret_key, ENV['MUSHIKAGO_SECRET_KEY'] || ENV['MUSHIKAGO_SECRET_ACCESS_KEY']
40
41
  add_option :tombo_endpoint, 'tombo.mushikago.org'
41
42
 
43
+ # @private
42
44
  private
43
45
  def supplied
44
46
  @supplied ||= {}
@@ -2,6 +2,7 @@ require 'net/http'
2
2
  require 'json'
3
3
  module Mushikago
4
4
  module Http
5
+ # Mushikagoサービスに接続するクライアント
5
6
  class Client
6
7
  # @return [String] api_key
7
8
  attr_reader :api_key
@@ -2,6 +2,7 @@ require 'net/http'
2
2
  require 'cgi'
3
3
  module Mushikago
4
4
  module Http
5
+ # MushikagoサービスのHTTPリクエストを表すクラス
5
6
  class Request
6
7
  # @return [Hash] headers
7
8
  attr_reader :headers
@@ -25,19 +26,26 @@ module Mushikago
25
26
  @http_method = new_http_request.method
26
27
  end
27
28
 
29
+ # @param [String] key パラメータのキー
30
+ # @param [String] value パラメータの値
28
31
  def set_param key, value
29
32
  params[key] = value
30
33
  end
31
34
 
35
+ # @param [String] key パラメータのキー
36
+ # @return [String] パラメータの値
32
37
  def get_param key
33
38
  param = params.detect{|p| p[0] == key}
34
39
  param ? param[1] : nil
35
40
  end
36
41
 
42
+ # @return [String] URLエンコードされ、&で接続されたパラメータの文字列
37
43
  def url_encoded_params
38
44
  params.sort.collect{|pp| pp.map{|p| encode p}.join('=')}.join('&')
39
45
  end
40
46
 
47
+ # HTTPリクエストオブジェクトに変換する
48
+ # @return [Net::HTTPRequest] HTTPリクエスト
41
49
  def to_http_request
42
50
  http_request = new_http_request
43
51
  headers.each do |key, value|
@@ -47,17 +55,29 @@ module Mushikago
47
55
  return http_request
48
56
  end
49
57
 
58
+ # @private
59
+ # @return [Net::HTTPRequest] HTTPリクエスト
50
60
  protected
51
61
  def new_http_request
52
62
  Net::HTTP::Get.new("#{path}?#{url_encoded_params}")
53
63
  end
54
64
 
65
+ # URLエンコードされた文字列を取得する
66
+ # @private
67
+ # @param [String] s URLエンコード対象の文字列
68
+ # @return [String] URLエンコードされた文字列
55
69
  private
56
70
  def encode s
57
71
  CGI.escape(s).gsub('+', '%20')
58
72
  end
59
73
 
60
74
  class << self
75
+ # リクエストパラメータへのアクセサを定義する
76
+ # @param [String] name パラメータ名
77
+ # @yield [value] アクセサを通して渡された値を変換するブロック
78
+ # @yieldreturn [Object] 変換された値
79
+ # @example
80
+ # add_param :price do |v| v.to_i end
61
81
  def add_param name, &transform
62
82
  attr_accessor name
63
83
  define_method("#{name}=") do |value|
@@ -1,6 +1,9 @@
1
1
  module Mushikago
2
2
  module Tombo
3
+ # キャプチャリクエスト
3
4
  class CaptureRequest < Request
5
+ def method_name; 'capture.json' end
6
+
4
7
  add_param :url
5
8
  add_param :image_format
6
9
  add_param :image_quality do |v| v.to_i.to_s end
@@ -20,10 +23,10 @@ module Mushikago
20
23
  self.image_quality = options[:image_quality] if options.has_key?(:image_quality)
21
24
  self.thumbnail = options[:thumbnail] if options.has_key?(:thumbnail)
22
25
  self.tags = options[:tags] if options.has_key?(:tags)
23
- @path = "/#{api_version}/capture.json"
24
26
  @headers['Content-type'] = 'application/x-www-form-urlencoded; charset=utf-8'
25
27
  end
26
28
 
29
+ # @private
27
30
  def new_http_request
28
31
  Net::HTTP::Post.new(path)
29
32
  end
@@ -1,6 +1,9 @@
1
1
  module Mushikago
2
2
  module Tombo
3
+ # キャプチャ一覧取得リクエスト
3
4
  class CapturesRequest < Request
5
+ def method_name; 'captures.json' end
6
+
4
7
  add_param :id
5
8
  add_param :limit
6
9
  add_param :offset
@@ -20,7 +23,6 @@ module Mushikago
20
23
  self.offset = options[:offset] if options.has_key?(:offset)
21
24
  self.domain = options[:domain] if options.has_key?(:domain)
22
25
  self.tag = options[:tag] if options.has_key?(:tag)
23
- @path = "/#{api_version}/captures.json"
24
26
  end
25
27
  end
26
28
  end
@@ -1,6 +1,9 @@
1
1
  module Mushikago
2
2
  module Tombo
3
+ # Deleteリクエスト
3
4
  class DeleteRequest < Request
5
+ def method_name; 'delete.json' end
6
+
4
7
  add_param :id
5
8
 
6
9
  # @param [String] id 画像のID
@@ -8,9 +11,9 @@ module Mushikago
8
11
  def initialize id, options={}
9
12
  super(options)
10
13
  self.id = id
11
- @path = "/#{api_version}/delete.json"
12
14
  end
13
15
 
16
+ # @private
14
17
  def new_http_request
15
18
  Net::HTTP::Delete.new("#{path}?#{url_encoded_params}")
16
19
  end
@@ -1,10 +1,12 @@
1
1
  module Mushikago
2
2
  module Tombo
3
+ # API使用状況取得リクエスト
3
4
  class InfoRequest < Request
5
+ def method_name; 'info.json' end
6
+
4
7
  # @param [Hash] options リクエストのオプション
5
8
  def initialize options={}
6
9
  super(options)
7
- @path = "/#{api_version}/info.json"
8
10
  end
9
11
  end
10
12
  end
@@ -1,19 +1,31 @@
1
1
  module Mushikago
2
2
  module Tombo
3
+ # Tomboのリクエストを表す抽象クラス
3
4
  class Request < Mushikago::Http::Request
4
5
  include Mushikago::Auth::Signature
5
6
 
7
+ # @param [Hash] options オプション
8
+ # @option options [String] :endpoint('tombo.mushikago.org') Tomboのエンドポイント
6
9
  def initialize options={}
7
10
  super()
8
11
  endpoint = options[:endpoint] || Mushikago.config.tombo_endpoint
9
12
  host, port = endpoint.split(':')
10
- self.host = host
11
- self.port = port if port
13
+ @host = host
14
+ @port = port if port
15
+ @path = "/#{api_version}/#{method_name}"
12
16
  end
13
17
 
18
+ # @private
19
+ private
14
20
  def api_version
15
21
  1
16
22
  end
23
+
24
+ # @private
25
+ private
26
+ def method_name
27
+ ''
28
+ end
17
29
  end
18
30
  end
19
31
  end
@@ -1,3 +1,4 @@
1
1
  module Mushikago
2
- VERSION = '0.1.4'
2
+ # Mushikago SDK for Ruby のバージョン
3
+ VERSION = '0.1.5'
3
4
  end
@@ -1,5 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
+ class SampleRequest < Mushikago::Http::Request
4
+ add_param :sample1
5
+ add_param :sample2 do |v| v.to_i end
6
+ add_param :sample3 do |v| 'sample3' end
7
+ end
8
+
3
9
  describe Mushikago::Http::Request do
4
10
  before :all do
5
11
  @request = Mushikago::Http::Request.new
@@ -38,5 +44,23 @@ describe Mushikago::Http::Request do
38
44
  subject{ @request.to_http_request }
39
45
  it{ should be_a_kind_of(Net::HTTPRequest) }
40
46
  end
47
+
48
+ context 'extend with add_param' do
49
+ before :all do
50
+ @request = SampleRequest.new
51
+ @request.sample1 = 'hoge'
52
+ @request.sample2 = '20'
53
+ @request.sample3 = 'fuga'
54
+ end
55
+
56
+ subject{ @request }
57
+
58
+ it{ should respond_to(:sample1, :sample1=) }
59
+ it{ should respond_to(:sample2, :sample2=) }
60
+
61
+ it{ subject.sample1.should == 'hoge' }
62
+ it{ subject.sample2.should == 20 }
63
+ it{ subject.sample3.should == 'sample3' }
64
+ end
41
65
  end
42
66
 
@@ -7,8 +7,6 @@ describe Mushikago::Tombo::Request do
7
7
 
8
8
  subject{ @request }
9
9
 
10
- it{ should respond_to(:api_version) }
11
- it{ subject.api_version.should == 1 }
12
10
  it{ subject.host.should == Mushikago.config.tombo_endpoint }
13
11
 
14
12
  context 'construct with options' do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mushikago-sdk
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
9
+ - 5
10
+ version: 0.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Toru Matsuoka