leeno 0.0.2

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,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ leeno-
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in leeno.gemspec
4
+ gem 'faraday'
5
+ gem 'faraday_middleware'
6
+
7
+ group :test do
8
+ gem 'mocktra'
9
+ end
10
+
11
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 soplana
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,78 @@
1
+ # Leeno
2
+
3
+ ラクガキサービスLeeno( http://leeno.jp/ )のAPIを利用する為のgemです
4
+
5
+
6
+ ## Installation
7
+
8
+ $ git clone git@github.com:soplana/leeno.git
9
+ $ cd Leeno
10
+ $ gem build leeno.gemspec
11
+ $ rake install
12
+ $ irb
13
+
14
+ irb(main):001:0> require "leeno"
15
+ => true
16
+ irb(main):003:0> Leeno::Api::History.find("1cz", 1).to_json
17
+ => {:canvas_id=>"1cz", :history_id=>1 ... :update_date=>"2012-05-08T15:52:39+09:00"}}
18
+
19
+
20
+ ## Usage
21
+
22
+ ### Canvasを取得する
23
+ ---
24
+ # Canvas#find success
25
+ > Leeno::Api::Canvas.find("1cz")
26
+ => #<Leeno::Model::Canvas:0x00000 ... >
27
+ # Canvas#find not found
28
+ > Leeno::Api::Canvas.find(0)
29
+ => nil
30
+
31
+ # Canvas#find! success
32
+ > Leeno::Api::Canvas.find("1cz")
33
+ => #<Leeno::Model::Canvas:0x00000 ... >
34
+ # Canvas#find! not found
35
+ > Leeno::Api::Canvas.find(0)
36
+ Leeno::DocumentNotFound: Leeno::Model::Canvas: Data Not Found
37
+
38
+ ### Historyを取得する
39
+ ---
40
+ > Leeno::Api::History.find("1cz", 1)
41
+ => #<Leeno::Model::History:0x00000 ... >
42
+
43
+ ### Canvasに紐づくHistoryを全て取得する
44
+ ---
45
+ > Leeno::Api::Canvas.find("1cz").histories
46
+ => [#<Leeno::Model::History:0x00000 ... >
47
+
48
+ # History#find_histories success
49
+ > Leeno::Api::History.find_histories("1cz")
50
+ => [#<Leeno::Model::History:0x00000 ... >
51
+ # History#find_histories not found
52
+ > Leeno::Api::History.find_histories(0)
53
+ => []
54
+
55
+ # History#find_histories! success
56
+ > Leeno::Api::History.find_histories!("1cz")
57
+ => [#<Leeno::Model::History:0x00000 ... >
58
+ # History#find_histories! not found
59
+ > Leeno::Api::History.find_histories!(0)
60
+ Leeno::DocumentNotFound: Leeno::Model::History: Data Not Found
61
+
62
+ ### HistoryのParent(編集元History)を取得する
63
+ ---
64
+ > Leeno::Api::History.find("1cz", 2).parent
65
+ => #<Leeno::Model::History:0x00000 ... >
66
+
67
+ ### HistoryのChildren(派生History)を取得する
68
+ ---
69
+ > Leeno::Api::History.find("1cz", 2).children
70
+ => [#<Leeno::Model::History:0x0000 ... >]
71
+
72
+ ### json形式に変換する
73
+ ---
74
+ > Leeno::Api::Canvas.find("1cz").to_json
75
+ => {:canvas_id=>"1cz", ... :update_date=>"2012-05-08T15:52:39+09:00"}
76
+
77
+ > Leeno::Api::Canvas.find("1cz").histories.to_json
78
+ => [{:canvas_id=>"1cz", ... :update_date=>"2012-05-08T15:52:39+09:00"}]
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/leeno/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["soplana"]
6
+ gem.email = ["sonosheet.jp@gmail.com"]
7
+ gem.description = %q{LeenoAPI client for Ruby}
8
+ gem.summary = %q{LeenoAPI client for Ruby}
9
+ gem.homepage = "https://github.com/soplana/leeno"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "leeno"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Leeno::VERSION
17
+
18
+ gem.add_dependency "faraday", "~>0.8.0"
19
+ gem.add_dependency "faraday_middleware", "~>0.8.7"
20
+
21
+ end
@@ -0,0 +1,13 @@
1
+ require "leeno/version"
2
+ require 'leeno/extention/array'
3
+ require 'leeno/api/base'
4
+ require 'leeno/api/canvas'
5
+ require 'leeno/api/history'
6
+ require 'leeno/model/base'
7
+ require 'leeno/model/canvas'
8
+ require 'leeno/model/history'
9
+
10
+ module Leeno
11
+ class LeenoError < RuntimeError; end
12
+ class DocumentNotFound < LeenoError; end
13
+ end
@@ -0,0 +1,78 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+
4
+ module Leeno::Api
5
+ class Base
6
+ include Leeno
7
+ DOMAIN = 'http://leeno.jp'
8
+
9
+ @@conn = Faraday.new(:url => DOMAIN) do |builder|
10
+ builder.request :url_encoded
11
+ builder.adapter :net_http
12
+ builder.response :json
13
+ end
14
+
15
+ private
16
+ class << self
17
+ def url; raise; end
18
+ def default_options; raise; end
19
+
20
+ def model_class
21
+ eval(self.to_s.gsub(/Api/, "Model"))
22
+ end
23
+
24
+ def set_options! options
25
+ @@options = default_options.merge(options)
26
+ end
27
+
28
+ def search_show options, throws=false
29
+ set_options!(options)
30
+ throws ? request_show! : request_show
31
+ end
32
+
33
+ def search_index options, throws=false
34
+ set_options!(options)
35
+ throws ? request_index! : request_index
36
+ end
37
+
38
+ def request_show
39
+ result = get(url[:show])
40
+ result.nil? ? nil : model_class.new(result)
41
+ end
42
+
43
+ def request_index
44
+ results = get(url[:index])
45
+ return Leeno::Array.new if results.nil?
46
+ Leeno::Array.new results.map{|result| model_class.new(result)}
47
+ end
48
+
49
+ def request_show!
50
+ model_class.new get(url[:show], true)
51
+ end
52
+
53
+ def request_index!
54
+ results = get(url[:index], true)
55
+ Leeno::Array.new results.map{|result| model_class.new(result)}
56
+ end
57
+
58
+ def get url, throws=false
59
+ data = @@conn.get(url, @@options).body
60
+ return ( throws ? result_set!(data) : result_set(data) )
61
+ end
62
+
63
+ def result_set! data
64
+ return data['result'] if success?(data)
65
+ raise Leeno::DocumentNotFound.new("#{model_class}: #{data['message']}")
66
+ end
67
+
68
+ def result_set data
69
+ return data['result'] if success?(data)
70
+ return nil
71
+ end
72
+
73
+ def success? data
74
+ data['status'] == 'ok'
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,27 @@
1
+ class Leeno::Api::Canvas < Leeno::Api::Base
2
+ class << self
3
+ def find id, options={}
4
+ return nil if id.nil?
5
+ search_show({canvas_id: id.to_s}.merge(options))
6
+ end
7
+
8
+ def find! id, options={}
9
+ raise(Leeno::DocumentNotFound.new("#{model_class}: id NilClass")) if id.nil?
10
+ search_show({canvas_id: id.to_s}.merge(options), true)
11
+ end
12
+
13
+ private
14
+ def url
15
+ return {
16
+ show: "/api/canvas.json",
17
+ index: "/api/canvases.json"
18
+ }
19
+ end
20
+
21
+ def default_options
22
+ return {
23
+ tag: true
24
+ }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ class Leeno::Api::History < Leeno::Api::Base
2
+ class << self
3
+ def find c_id, h_id, options={}
4
+ return nil if (c_id.nil? || h_id.nil?)
5
+ search_show({canvas_id: c_id.to_s, history_id: h_id.to_s}.merge(options))
6
+ end
7
+
8
+ def find! c_id, h_id, options={}
9
+ raise(Leeno::DocumentNotFound.new("#{model_class}: canvas_id or history_id NilClass")) if (c_id.nil? || h_id.nil?)
10
+ search_show({canvas_id: c_id.to_s, history_id: h_id.to_s}.merge(options), true)
11
+ end
12
+
13
+ def find_histories id, options={}
14
+ return Leeno::Array.new if id.nil?
15
+ search_index({canvas_id: id.to_s}.merge(options))
16
+ end
17
+
18
+ def find_histories! id, options={}
19
+ raise(Leeno::DocumentNotFound.new("#{model_class}: id NilClass")) if id.nil?
20
+ search_index({canvas_id: id.to_s}.merge(options), true)
21
+ end
22
+
23
+ private
24
+ def url
25
+ return {
26
+ show: "/api/history.json",
27
+ index: "/api/histories.json"
28
+ }
29
+ end
30
+
31
+ def default_options
32
+ return {
33
+ canvas: true,
34
+ parent: true,
35
+ children: true
36
+ }
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ class Leeno::Array < Array
2
+ def initialize list=[]
3
+ super(list)
4
+ end
5
+
6
+ def to_json
7
+ map &:to_json
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ module Leeno::Model
2
+ class Base
3
+ def initialize data
4
+ self.class::FIELDS.each do |field|
5
+ value = (field.to_s =~ /_date$/ ? Time.new(data[field.to_s]) : data[field.to_s])
6
+ self.__send__("#{field}=", value)
7
+ end
8
+ end
9
+
10
+ def exclude_options!
11
+ @exclude_options = true
12
+ return self
13
+ end
14
+
15
+ def include_options!
16
+ @exclude_options = false
17
+ return self
18
+ end
19
+
20
+ def exclude_options?
21
+ return !!@exclude_options
22
+ end
23
+
24
+ def to_json
25
+ self.class::FIELDS.inject({}){|hash, field| hash[field] = self.__send__("#{field}");hash }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ include Leeno
2
+
3
+ class Leeno::Model::Canvas < Model::Base
4
+ FIELDS = [
5
+ :canvas_id,
6
+ :title,
7
+ :name,
8
+ :width,
9
+ :height,
10
+ :tags,
11
+ :total_history,
12
+ :total_favorite,
13
+ :create_date,
14
+ :update_date
15
+ ]
16
+ attr_accessor *FIELDS
17
+ def initialize data={}
18
+ super(data)
19
+ end
20
+
21
+ def histories
22
+ @histories ||= Leeno::Array.new( Api::History.find_histories(canvas_id) )
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ include Leeno
2
+
3
+ class Leeno::Model::History < Model::Base
4
+ FIELDS = [
5
+ :canvas_id,
6
+ :history_id,
7
+ :parent_id,
8
+ :image_large,
9
+ :image_small,
10
+ :image_thumb,
11
+ :create_date,
12
+ :update_date
13
+ ]
14
+ attr_accessor *FIELDS
15
+ def initialize data={}
16
+ super(data)
17
+ @canvas = Model::Canvas.new(data["canvas"]) unless data["canvas"].nil?
18
+ @parent = Model::History.new(data["parent"]) unless data["parent"].nil?
19
+ @children = Leeno::Array.new(data["children"].map{|h|Model::History.new(h)}) unless data["children"].nil?
20
+ end
21
+
22
+ def canvas
23
+ @canvas ||= Api::Canvas.find(canvas_id)
24
+ end
25
+
26
+ def parent
27
+ return nil if (parent_id.nil? || parent_id.to_i == 0)
28
+ @parent ||= Api::History.find(canvas_id, parent_id)
29
+ end
30
+
31
+ def children
32
+ @children ||= Leeno::Array.new(Api::History.find(canvas_id, history_id).children)
33
+ end
34
+
35
+ end
@@ -0,0 +1,3 @@
1
+ module Leeno
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,46 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__))
3
+ include Leeno::Api
4
+
5
+
6
+ describe Canvas do
7
+
8
+ describe "#model_class" do
9
+ it "ModelClassが取得出来る事" do
10
+ Canvas.model_class.should == Leeno::Model::Canvas
11
+ end
12
+ end
13
+
14
+ describe "#find" do
15
+ it "第一引数にnilで結果が取得出来ない事" do
16
+ Canvas.find(nil).should == nil
17
+ end
18
+
19
+ it "API経由でデータが取得出来る事" do
20
+ success!
21
+ Canvas.find("1cz").class.should == Leeno::Model::Canvas
22
+ end
23
+
24
+ it "データの取得が出来ない場合、nilが返される事" do
25
+ error!
26
+ Canvas.find(0).should == nil
27
+ end
28
+ end
29
+
30
+ describe "#find!" do
31
+ it "第一引数にnilで結果が取得出来ない事" do
32
+ proc{Canvas.find!(nil)}.should raise_error(Leeno::DocumentNotFound)
33
+ end
34
+
35
+ it "API経由でデータが取得出来る事" do
36
+ success!
37
+ Canvas.find!("1cz").class.should == Leeno::Model::Canvas
38
+ end
39
+
40
+ it "データの取得が出来ない場合、DocumentNotFoundが返される事" do
41
+ error!
42
+ proc{Canvas.find!(0)}.should raise_error(Leeno::DocumentNotFound)
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,96 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__))
3
+ include Leeno::Api
4
+
5
+
6
+ describe History do
7
+
8
+ describe "#model_class" do
9
+ it "ModelClassが取得出来る事" do
10
+ History.model_class.should == Leeno::Model::History
11
+ end
12
+ end
13
+
14
+ describe "#find" do
15
+ it "第一引数,第二引数にnilで結果が取得出来ない事" do
16
+ History.find(nil, nil).should == nil
17
+ end
18
+
19
+ it "第二引数にnilで結果が取得出来ない事" do
20
+ History.find("1cz", nil).should == nil
21
+ end
22
+
23
+ it "データの取得が出来ない場合、nilが返される事" do
24
+ error!
25
+ History.find(0, 0).should == nil
26
+ end
27
+
28
+ it "API経由でデータが取得出来る事" do
29
+ success!
30
+ History.find("1cz", 1).class.should == Leeno::Model::History
31
+ end
32
+ end
33
+
34
+ describe "#find!" do
35
+ it "第一引数,第二引数にnilで結果が取得出来ない事" do
36
+ proc{History.find!(nil, nil)}.should raise_error(Leeno::DocumentNotFound)
37
+ end
38
+
39
+ it "第二引数にnilで結果が取得出来ない事" do
40
+ proc{History.find!("1cz", nil)}.should raise_error(Leeno::DocumentNotFound)
41
+ end
42
+
43
+ it "データの取得が出来ない場合、nilが返される事" do
44
+ error!
45
+ proc{History.find!(0, 0)}.should raise_error(Leeno::DocumentNotFound)
46
+ end
47
+
48
+ it "API経由でデータが取得出来る事" do
49
+ success!
50
+ History.find!("1cz", 1).class.should == Leeno::Model::History
51
+ end
52
+ end
53
+
54
+ describe "#find_histories" do
55
+ it "第一引数にnilで結果が取得出来ない事" do
56
+ History.find_histories(nil).should == Leeno::Array.new
57
+ end
58
+
59
+ it "データの取得が出来ない場合、Leeno::Arrayが返される事" do
60
+ error!
61
+ History.find_histories(0).should == Leeno::Array.new
62
+ end
63
+
64
+ it "結果が二件取得出来る事" do
65
+ success!
66
+ History.find_histories("1cz").size.should == 2
67
+ end
68
+
69
+ it "history_id: 1, 2が取得出来ている事" do
70
+ success!
71
+ History.find_histories("1cz").map(&:history_id).should == [1,2]
72
+ end
73
+ end
74
+
75
+ describe "#find_histories!" do
76
+ it "第一引数にnilで結果が取得出来ない事" do
77
+ proc{History.find_histories!(nil)}.should raise_error(Leeno::DocumentNotFound)
78
+ end
79
+
80
+ it "データの取得が出来ない場合、nilが返される事" do
81
+ error!
82
+ proc{History.find_histories!(0)}.should raise_error(Leeno::DocumentNotFound)
83
+ end
84
+
85
+ it "結果が二件取得出来る事" do
86
+ success!
87
+ History.find_histories!("1cz").size.should == 2
88
+ end
89
+
90
+ it "history_id: 1, 2が取得出来ている事" do
91
+ success!
92
+ History.find_histories!("1cz").map(&:history_id).should == [1,2]
93
+ end
94
+ end
95
+ end
96
+
@@ -0,0 +1,13 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__))
3
+
4
+ describe Array do
5
+
6
+ describe ".to_json" do
7
+ it "castされること" do
8
+ history_success!
9
+ history = Leeno::Api::History.find("1cz", 1)
10
+ history.children.to_json.map(&:class).uniq.should == [Hash]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,52 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__))
3
+ include Leeno::Model
4
+
5
+ describe Canvas do
6
+ before do
7
+ success!
8
+ @canvas = Leeno::Api::Canvas.find("1cz")
9
+ end
10
+
11
+ describe "インスタンス変数が正しく設定されていること" do
12
+ it do
13
+ @canvas.instance_variables.should == [:@canvas_id, :@title, :@name, :@width, :@height, :@tags, :@total_history, :@total_favorite, :@create_date, :@update_date]
14
+ end
15
+ end
16
+
17
+ describe ".histories" do
18
+ before do
19
+ success!
20
+ end
21
+
22
+ it "Model::Historyクラスの配列が取得できること" do
23
+ histories = Leeno::Api::Canvas.find("1cz").histories
24
+ histories.map(&:class).uniq.should == [Leeno::Model::History]
25
+ end
26
+
27
+ it "@historiesがnilであること" do
28
+ canvas = Leeno::Api::Canvas.find("1cz")
29
+ canvas.instance_eval{@histories}.should be_nil
30
+ end
31
+
32
+ it ".historiesを呼び出したら@historiesに結果が代入されること" do
33
+ canvas = Leeno::Api::Canvas.find("1cz")
34
+ histories = canvas.histories
35
+ canvas.instance_eval{@histories}.should == histories
36
+ end
37
+ end
38
+
39
+ describe ".to_json" do
40
+ it "インスタンス変数 => 値形式に変換されること" do
41
+ success!
42
+ canvas = Leeno::Api::Canvas.find("1cz")
43
+ canvas.to_json.keys.should == canvas.instance_variables.map{|i|i.to_s.sub(/@/,"").to_sym}
44
+ end
45
+
46
+ it ".histories" do
47
+ success!
48
+ histories = Leeno::Api::Canvas.find("1cz").histories
49
+ histories.to_json.map(&:class).uniq.should == [Hash]
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,118 @@
1
+ # -*- encoding: UTF-8 -*-
2
+ require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__))
3
+ include Leeno::Model
4
+
5
+ describe History do
6
+
7
+ describe "インスタンス変数が正しく設定されていること" do
8
+ context "関連情報を取得しないクエリの場合" do
9
+ before do
10
+ success!
11
+ @history = Leeno::Api::History.find("1cz", 1)
12
+ end
13
+
14
+ it "正しく設定されていること" do
15
+ @history.instance_variables.should == [:@canvas_id, :@history_id, :@parent_id, :@image_large, :@image_small, :@image_thumb, :@create_date, :@update_date]
16
+ end
17
+
18
+ it "@canvasがnilである事" do
19
+ @history.instance_eval{@canvas}.should be_nil
20
+ end
21
+
22
+ it "@parentがnilである事" do
23
+ @history.instance_eval{@parent}.should be_nil
24
+ end
25
+ end
26
+
27
+ context "関連情報を取得するクエリの場合" do
28
+ before do
29
+ history_success!
30
+ @history = Leeno::Api::History.find("1cz", 1)
31
+ end
32
+
33
+ it "正しく設定されていること" do
34
+ @history.instance_variables.should == [:@canvas_id, :@history_id, :@parent_id, :@image_large, :@image_small, :@image_thumb, :@create_date, :@update_date, :@canvas, :@parent, :@children]
35
+ end
36
+
37
+ it "@canvasにModel::Canvasクラスが設定されている事" do
38
+ @history.instance_eval{@canvas}.class.should == Leeno::Model::Canvas
39
+ end
40
+
41
+ it "@parentにModel::Historyクラスが設定されている事" do
42
+ @history.instance_eval{@parent}.class.should == Leeno::Model::History
43
+ end
44
+
45
+ it "@childrenにModel::Historyクラスの配列が設定されている事" do
46
+ @history.instance_eval{@children}.map(&:class).uniq.should == [Leeno::Model::History]
47
+ end
48
+ end
49
+ end
50
+
51
+ describe ".canvas" do
52
+ before do
53
+ success!
54
+ @history = Leeno::Api::History.find("1cz", 1)
55
+ end
56
+
57
+ it "canvas(Model::Canvas)が取得出来ること" do
58
+ @history.canvas.class.should == Leeno::Model::Canvas
59
+ end
60
+ end
61
+
62
+ describe ".parent" do
63
+ before do
64
+ success!
65
+ @history = Leeno::Api::History.find("1cz", 1)
66
+ end
67
+
68
+ it "parent(Model::History)が取得出来ること" do
69
+ @history.parent.class.should == Leeno::Model::History
70
+ end
71
+ end
72
+
73
+ describe ".children" do
74
+ before do
75
+ history_success!
76
+ @history = Leeno::Api::History.find("1cz", 1)
77
+ end
78
+
79
+ it "配列が取得出来ること" do
80
+ @history.children.class.should == Leeno::Array
81
+ end
82
+
83
+ it "children(Model::History)が取得出来ること" do
84
+ @history.children.first.class.should == Leeno::Model::History
85
+ end
86
+
87
+ it "ネストしたModel::Historyの@childrenはnilであること" do
88
+ child = @history.children.first
89
+ child.instance_eval{@children}.should be_nil
90
+ end
91
+
92
+ it "ネストしたModel::Historyで一度.childrenを呼び出せばその後@childrenを参照すること" do
93
+ child = @history.children.first
94
+ children = child.children
95
+ child.instance_eval{@children}.should == children
96
+ end
97
+ end
98
+
99
+ describe ".to_json" do
100
+ it "インスタンス変数 => 値形式に変換されること" do
101
+ success!
102
+ history = Leeno::Api::History.find("1cz", 1)
103
+ history.to_json.keys.should == history.instance_variables.map{|i|i.to_s.sub(/@/,"").to_sym}
104
+ end
105
+
106
+ it "インスタンス変数 => 値形式に変換されること[ parent ]" do
107
+ history_success!
108
+ history = Leeno::Api::History.find("1cz", 1).parent
109
+ history.to_json.keys.should == history.instance_variables.map{|i|i.to_s.sub(/@/,"").to_sym}
110
+ end
111
+
112
+ it "インスタンス変数 => 値形式に変換されること[ children ]" do
113
+ history_success!
114
+ history = Leeno::Api::History.find("1cz", 1).children.first
115
+ history.to_json.keys.should == history.instance_variables.map{|i|i.to_s.sub(/@/,"").to_sym}
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ require "rubygems"
3
+ require 'mocktra'
4
+ require 'leeno'
5
+ #require 'rspec/rails'
6
+
7
+
8
+ def success!
9
+ Mocktra('leeno.jp') do
10
+ get '/api/canvas.json' do
11
+ return '{"result":{"canvas_id":"1cz","title":"\u30bf\u30a4\u30c8\u30eb\u7121\u3057","name":"\u540d\u7121\u3057\u3055\u3093","width":600,"height":400,"total_history":50,"total_favorite":0,"create_date":"2012-03-28T15:03:47+09:00","update_date":"2012-05-08T15:52:39+09:00"},"status":"ok","message":""}'
12
+ end
13
+ get '/api/history.json' do
14
+ return '{"result":{"history_id":2,"parent_id":1,"canvas_id":"158","image_large":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-2/image.png","image_small":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-2/image_thumb.png","image_thumb":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-2/image_small_thumb.png","create_date":"2012-03-04T00:31:54+09:00","update_date":"2012-05-01T00:38:04+09:00"},"status":"ok","message":""}'
15
+ end
16
+ get '/api/histories.json' do
17
+ return '{"result":[{"history_id":1,"parent_id":null,"canvas_id":"158","image_large":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-1/image.png","image_small":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-1/image_thumb.png","image_thumb":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-1/image_small_thumb.png","create_date":"2012-03-04T00:31:54+09:00","update_date":"2012-05-01T00:38:04+09:00"},{"history_id":2,"parent_id":1,"canvas_id":"158","image_large":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-2/image.png","image_small":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-2/image_thumb.png","image_thumb":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/158-2/image_small_thumb.png","create_date":"2012-03-04T00:31:54+09:00","update_date":"2012-05-01T00:38:04+09:00"}],"status":"ok","message":""}'
18
+ end
19
+ end
20
+ end
21
+
22
+ def error!
23
+ Mocktra('leeno.jp') do
24
+ get '/api/canvas.json' do
25
+ return '{"result":"","status":"error","message":"Data Not Found"}'
26
+ end
27
+ get '/api/history.json' do
28
+ return '{"result":"","status":"error","message":"Data Not Found"}'
29
+ end
30
+ get '/api/histories.json' do
31
+ return '{"result":"","status":"error","message":"Data Not Found"}'
32
+ end
33
+ end
34
+ end
35
+
36
+ def history_success!
37
+ Mocktra('leeno.jp') do
38
+ get '/api/canvas.json' do
39
+ return '{"result":{"canvas_id":"1cz","title":"\u30bf\u30a4\u30c8\u30eb\u7121\u3057","name":"\u540d\u7121\u3057\u3055\u3093","width":600,"height":400,"total_history":50,"total_favorite":0,"create_date":"2012-03-28T15:03:47+09:00","update_date":"2012-05-08T15:52:39+09:00"},"status":"ok","message":""}'
40
+ end
41
+ get '/api/history.json' do
42
+ return '{"result":{"history_id":2,"parent_id":1,"canvas_id":"1g3","image_large":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-2/image.png","image_small":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-2/image_thumb.png","image_thumb":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-2/image_small_thumb.png","create_date":"2012-05-30T20:08:10+09:00","update_date":"2012-05-30T20:08:10+09:00","canvas":{"canvas_id":"1g3","title":"\u306b\u3082\u3064\u305f\u3061\u3081\u3082","name":"nanany_k","width":600,"height":400,"total_history":3,"total_favorite":0,"create_date":"2012-05-30T11:28:16+09:00","update_date":"2012-05-31T00:37:36+09:00"},"parent":{"history_id":1,"parent_id":null,"canvas_id":"1g3","image_large":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-1/image.png","image_small":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-1/image_thumb.png","image_thumb":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-1/image_small_thumb.png","create_date":"2012-05-30T11:28:16+09:00","update_date":"2012-05-30T11:28:16+09:00"},"children":[{"history_id":3,"parent_id":2,"canvas_id":"1g3","image_large":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-3/image.png","image_small":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-3/image_thumb.png","image_thumb":"http://s3-ap-northeast-1.amazonaws.com/leeno/c/1g3-3/image_small_thumb.png","create_date":"2012-05-31T00:37:36+09:00","update_date":"2012-05-31T00:37:36+09:00"}]},"status":"ok","message":""}'
43
+ end
44
+ end
45
+ end
46
+
47
+ $LOAD_PATH << File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leeno
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - soplana
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-31 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: &2156470500 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2156470500
25
+ - !ruby/object:Gem::Dependency
26
+ name: faraday_middleware
27
+ requirement: &2156469960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 0.8.7
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2156469960
36
+ description: LeenoAPI client for Ruby
37
+ email:
38
+ - sonosheet.jp@gmail.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - .gitignore
44
+ - Gemfile
45
+ - LICENSE
46
+ - README.md
47
+ - Rakefile
48
+ - leeno.gemspec
49
+ - lib/leeno.rb
50
+ - lib/leeno/api/base.rb
51
+ - lib/leeno/api/canvas.rb
52
+ - lib/leeno/api/history.rb
53
+ - lib/leeno/extention/array.rb
54
+ - lib/leeno/model/base.rb
55
+ - lib/leeno/model/canvas.rb
56
+ - lib/leeno/model/history.rb
57
+ - lib/leeno/version.rb
58
+ - spec/api/canvas_spec.rb
59
+ - spec/api/history_spec.rb
60
+ - spec/extention/array.rb
61
+ - spec/model/canvas_spec.rb
62
+ - spec/model/history_spec.rb
63
+ - spec/spec_helper.rb
64
+ homepage: https://github.com/soplana/leeno
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.17
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: LeenoAPI client for Ruby
88
+ test_files:
89
+ - spec/api/canvas_spec.rb
90
+ - spec/api/history_spec.rb
91
+ - spec/extention/array.rb
92
+ - spec/model/canvas_spec.rb
93
+ - spec/model/history_spec.rb
94
+ - spec/spec_helper.rb