crowi-client 0.1.0
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.
- checksums.yaml +7 -0
- data/.gitignore +53 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.md +195 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/settings.yml +2 -0
- data/crowi-client.gemspec +40 -0
- data/lib/crowi-client.rb +1 -0
- data/lib/crowi/client/apireq/api_request_attachments.rb +134 -0
- data/lib/crowi/client/apireq/api_request_base.rb +104 -0
- data/lib/crowi/client/apireq/api_request_pages.rb +389 -0
- data/lib/crowi/client/client.rb +71 -0
- data/lib/crowi/client/model/crowi_attachment.rb +36 -0
- data/lib/crowi/client/model/crowi_model.rb +52 -0
- data/lib/crowi/client/model/crowi_model_base.rb +12 -0
- data/lib/crowi/client/model/crowi_page.rb +53 -0
- data/lib/crowi/client/model/crowi_page_revision.rb +34 -0
- data/lib/crowi/client/model/crowi_user.rb +35 -0
- data/lib/crowi/client/version.rb +5 -0
- metadata +167 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require 'rest-client'
|
3
|
+
require 'json'
|
4
|
+
require 'yaml'
|
5
|
+
require "easy_settings"
|
6
|
+
|
7
|
+
require 'crowi/client/apireq/api_request_pages'
|
8
|
+
require 'crowi/client/apireq/api_request_attachments'
|
9
|
+
|
10
|
+
# Crowi のクライアントクラス
|
11
|
+
class CrowiClient
|
12
|
+
include Singleton
|
13
|
+
|
14
|
+
# コンストラクタ(シングルトン)
|
15
|
+
def initialize
|
16
|
+
raise ArgumentError, 'Config url is required.' unless EasySettings['url']
|
17
|
+
raise ArgumentError, 'Config token is required.' unless EasySettings['token']
|
18
|
+
@cp_entry_point = URI.join(EasySettings['url'], '/_api/').to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
# APIリクエストを送信する
|
22
|
+
# @param [ApiRequestBase] req APIリクエスト
|
23
|
+
# @return [String] APIリクエストの応答(JSON形式)
|
24
|
+
def request(req)
|
25
|
+
req.param[:access_token] = EasySettings['token']
|
26
|
+
return req.execute URI.join(@cp_entry_point, req.entry_point).to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
# ページIDを取得する
|
30
|
+
# @param [String] path_exp ページパス
|
31
|
+
# @return [String] ページID
|
32
|
+
def page_id(path_exp: nil)
|
33
|
+
ret = request(CPApiRequestPagesList.new path_exp: path_exp)
|
34
|
+
return ret&.data&.find { |p| p.path.match(path_exp) != nil }&.id
|
35
|
+
end
|
36
|
+
|
37
|
+
# ページが存在するか調べる
|
38
|
+
# @param [String] path ページパス
|
39
|
+
# @return [true/false] ページの存在
|
40
|
+
def page_exist?(path_exp: nil)
|
41
|
+
ret = request(CPApiRequestPagesList.new path_exp: path_exp)
|
42
|
+
return ret&.ok && ret&.data&.find { |p| p.path.match(path_exp) } != nil
|
43
|
+
end
|
44
|
+
|
45
|
+
# ページに添付ファイルが存在するか調べる
|
46
|
+
# @param [String] path_exp ページパス(正規表現)
|
47
|
+
# @param [String] attachment_name 添付ファイル名
|
48
|
+
# @return [true/false] 添付ファイルの存在
|
49
|
+
def attachment_exist?(path_exp: nil, attachment_name: nil)
|
50
|
+
ret = request(CPApiRequestAttachmentsList.new page_id: page_id(path_exp: path_exp))
|
51
|
+
return ret&.ok && ret&.data&.find { |a| a.originalName == attachment_name } != nil
|
52
|
+
end
|
53
|
+
|
54
|
+
# 指定した添付ファイルのIDを取得する
|
55
|
+
# @param [String] path_exp ページパス(正規表現)
|
56
|
+
# @return [String] attachment's file name
|
57
|
+
def attachment_id(path_exp: nil, attachment_name: nil)
|
58
|
+
ret = request(CPApiRequestAttachmentsList.new page_id: page_id(path_exp: path_exp))
|
59
|
+
return ret&.data&.find { |a| a.originalName == attachment_name }&._id
|
60
|
+
end
|
61
|
+
|
62
|
+
# 指定した添付ファイル情報を取得する
|
63
|
+
# @param [String] path_exp ページパス(正規表現)
|
64
|
+
# @return [String] attachment's file name
|
65
|
+
def attachment(path_exp: nil, attachment_name: nil)
|
66
|
+
ret = request(CPApiRequestAttachmentsList.new page_id: page_id(path_exp: path_exp))
|
67
|
+
return ret&.data&.find { |a| a.originalName == attachment_name }
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'crowi/client/model/crowi_model'
|
2
|
+
|
3
|
+
# Crowi Attachment model class
|
4
|
+
class CrowiAttachment < CrowiModelBase
|
5
|
+
attr_reader :_id, :fileFormat, :fileName, :originalName, :filePath,
|
6
|
+
:creator, :page, :__v, :createdAt, :fileSize, :url
|
7
|
+
|
8
|
+
# Constractor
|
9
|
+
# @param [Hash] Attachment model shown as hash
|
10
|
+
# @todo Except running register method always called parse method.
|
11
|
+
def initialize(params = {})
|
12
|
+
init_params = {
|
13
|
+
_id: nil, fileFormat: '', fileName: '', originalName: '', filePath: nil,
|
14
|
+
creator: nil, page: '', __v: 0, createdAt: '', fileSize: 0, url: ''
|
15
|
+
}
|
16
|
+
|
17
|
+
params = init_params.merge(params.map { |k,v| [k.to_sym, v] }.to_h)
|
18
|
+
if (params[:_id] == nil)
|
19
|
+
raise ArgumentError.new('Parameters id is required.')
|
20
|
+
end
|
21
|
+
|
22
|
+
CrowiModelFactory.instance.register({
|
23
|
+
attachment_creator: Proc.new { |param| param != nil && param.is_a?(String) ? param : CrowiUser.new(param) },
|
24
|
+
attachment_createdAt: Proc.new { |date_str|
|
25
|
+
date_str != nil && DateTime.parse(date_str) },
|
26
|
+
})
|
27
|
+
maked_params = {}
|
28
|
+
params.each do |k,v|
|
29
|
+
maker = CrowiModelFactory.instance.maker('attachment_' + k.to_s)
|
30
|
+
maked_params[k] = maker.call(v)
|
31
|
+
end
|
32
|
+
super(maked_params)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
require 'crowi/client/model/crowi_model_base'
|
4
|
+
require 'crowi/client/model/crowi_page'
|
5
|
+
require 'crowi/client/model/crowi_page_revision'
|
6
|
+
require 'crowi/client/model/crowi_user'
|
7
|
+
require 'crowi/client/model/crowi_attachment'
|
8
|
+
|
9
|
+
# Crowi model factory class
|
10
|
+
# @abstract include singleton class
|
11
|
+
# @attr_reader makers Model maker list
|
12
|
+
class CrowiModelFactory
|
13
|
+
include Singleton
|
14
|
+
attr_reader :makers
|
15
|
+
|
16
|
+
# Constractor
|
17
|
+
def initialize
|
18
|
+
@makers = {}
|
19
|
+
@makers.default = Proc.new { |param|
|
20
|
+
next nil if param == nil
|
21
|
+
case param
|
22
|
+
when Array, String, Integer then
|
23
|
+
ret = param
|
24
|
+
when FalseClass then
|
25
|
+
ret = false
|
26
|
+
when TrueClass then
|
27
|
+
ret = true
|
28
|
+
end
|
29
|
+
next ret
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
# Register model maker
|
34
|
+
# @param [Hash] Model factory list
|
35
|
+
def register(makers = {})
|
36
|
+
makers.each do |model_name, model_make_proc|
|
37
|
+
unless model_make_proc.is_a?(Proc)
|
38
|
+
raise ArgumentError.new('Maker is required sub class of Class.')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@makers.merge!(makers)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Get model maker
|
45
|
+
# @param [String] model_name Model name
|
46
|
+
# @return [Proc] Model maker
|
47
|
+
def maker(model_name)
|
48
|
+
return @makers[model_name&.to_sym]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'crowi/client/model/crowi_model'
|
2
|
+
|
3
|
+
# Crowi Page model class
|
4
|
+
class CrowiPage < CrowiModelBase
|
5
|
+
GRANT_PUBLIC = 1.freeze
|
6
|
+
GRANT_RESTRICTED = 2.freeze
|
7
|
+
GRANT_SPECIFIED = 3.freeze
|
8
|
+
GRANT_OWNER = 4.freeze
|
9
|
+
|
10
|
+
STATUS_WIP = 'wip'.freeze
|
11
|
+
STATUS_PUBLISHED = 'published'.freeze
|
12
|
+
STATUS_DELETED = 'deleted'.freeze
|
13
|
+
STATUS_DEPRECATED = 'deprecated'.freeze
|
14
|
+
|
15
|
+
attr_reader :_id, :redirectTo, :updatedAt, :lastUpdateUser,
|
16
|
+
:creator, :path, :__v, :revision, :createdAt,
|
17
|
+
:commentCount, :seenUsers, :liker, :grantedUsers,
|
18
|
+
:grant, :status, :id
|
19
|
+
|
20
|
+
# Constract
|
21
|
+
# @param [Hash] params Prameters data show as Hash
|
22
|
+
# @todo Except running register method always called parse method.
|
23
|
+
def initialize(params = {})
|
24
|
+
init_params = {
|
25
|
+
_id: '', redirectTo: nil, updatedAt: '', lastUpdateUser: '',
|
26
|
+
creator: nil, path: nil, __v: 0, revision: nil, createdAt: '',
|
27
|
+
commentCount: 0, seenUsers: [], liker: [], grantedUsers: [],
|
28
|
+
grant: 0, status: '', id: ''
|
29
|
+
}
|
30
|
+
|
31
|
+
params = init_params.merge(params.map { |k,v| [k.to_sym, v] }.to_h)
|
32
|
+
if (params[:_id] == nil || params[:path] == nil || params[:id] == nil)
|
33
|
+
raise ArgumentError.new('Parameters _id, path and id are required.')
|
34
|
+
end
|
35
|
+
|
36
|
+
# @note Parameters lastUpdateUser and creator have two patterns ID only or Object.
|
37
|
+
CrowiModelFactory.instance.register({
|
38
|
+
page_updatedAt: Proc.new { |str| str != nil && DateTime.parse(str) },
|
39
|
+
page_lastUpdateUser: Proc.new { |param| param != nil && param.is_a?(String) ? param : CrowiUser.new(param) },
|
40
|
+
page_creator: Proc.new { |param| param != nil && param.is_a?(String) ? param : CrowiUser.new(param) },
|
41
|
+
page_createdAt: Proc.new { |str| str != nil && DateTime.parse(str) },
|
42
|
+
page_revision: Proc.new { |param| param != nil && CrowiPageRevision.new(param) },
|
43
|
+
})
|
44
|
+
maked_params = {}
|
45
|
+
params.each do |k,v|
|
46
|
+
maker = CrowiModelFactory.instance.maker('page_' + k.to_s)
|
47
|
+
maked_params[k] = maker.call(v)
|
48
|
+
end
|
49
|
+
super(maked_params)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'crowi/client/model/crowi_model'
|
2
|
+
|
3
|
+
# Crowi Page revision model class
|
4
|
+
class CrowiPageRevision < CrowiModelBase
|
5
|
+
attr_reader :_id, :author, :body, :path, :__v, :createdAt, :format
|
6
|
+
|
7
|
+
# Constractor
|
8
|
+
# @param [Hash] User model shown as hash
|
9
|
+
# @todo Except running register method always called parse method.
|
10
|
+
def initialize(params = {})
|
11
|
+
init_params = {
|
12
|
+
_id: '', author: nil, body: nil, path: nil, __v: 0, createdAt: nil,
|
13
|
+
format: ''
|
14
|
+
}
|
15
|
+
|
16
|
+
params = init_params.merge(params.map { |k,v| [k.to_sym, v] }.to_h)
|
17
|
+
if (params[:_id] == nil || params[:path] == nil)
|
18
|
+
raise ArgumentError.new('Parameters _id and path are required.')
|
19
|
+
end
|
20
|
+
|
21
|
+
CrowiModelFactory.instance.register({
|
22
|
+
page_revision_createdAt: Proc.new { |date_str|
|
23
|
+
date_str != nil && DateTime.parse(date_str) },
|
24
|
+
})
|
25
|
+
maked_params = {}
|
26
|
+
params.each do |k,v|
|
27
|
+
maker = CrowiModelFactory.instance.maker('page_revision_' + k.to_s)
|
28
|
+
maked_params[k] = maker.call(v)
|
29
|
+
end
|
30
|
+
super(maked_params)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'crowi/client/model/crowi_model'
|
2
|
+
|
3
|
+
# Crowi User model class
|
4
|
+
class CrowiUser < CrowiModelBase
|
5
|
+
attr_reader :_id, :email, :username, :name,
|
6
|
+
:admin, :createdAt, :status, :lang, :isGravatarEnabled
|
7
|
+
|
8
|
+
# Constractor
|
9
|
+
# @param [Hash] User model shown as hash
|
10
|
+
# @todo Except running register method always called parse method.
|
11
|
+
def initialize(params = {})
|
12
|
+
init_params = {
|
13
|
+
_id: nil, email: nil, username: nil, name: '',
|
14
|
+
admin: false, createdAt: '', status: 0, lang: '', isGravatarEnabled: false
|
15
|
+
}
|
16
|
+
|
17
|
+
params = init_params.merge(params.map { |k,v| [k.to_sym, v] }.to_h)
|
18
|
+
if (params[:_id] == nil || params[:email] == nil || params[:username] == nil)
|
19
|
+
raise ArgumentError.new('Parameters id and email and name are required.')
|
20
|
+
end
|
21
|
+
|
22
|
+
CrowiModelFactory.instance.register({
|
23
|
+
user_createdAt: Proc.new { |date_str|
|
24
|
+
date_str != nil && DateTime.parse(date_str) },
|
25
|
+
})
|
26
|
+
maked_params = {}
|
27
|
+
params.each do |k,v|
|
28
|
+
maker = CrowiModelFactory.instance.maker('user_' + k.to_s)
|
29
|
+
maked_params[k] = maker.call(v)
|
30
|
+
end
|
31
|
+
super(maked_params)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crowi-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryu Sato
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.15'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.15'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-json_matcher
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rest-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: json
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: easy_settings
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.1'
|
111
|
+
description: crowi-client is client of crowi with use API.
|
112
|
+
email:
|
113
|
+
- ryu@weseek.co.jp
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".travis.yml"
|
121
|
+
- CODE_OF_CONDUCT.md
|
122
|
+
- Gemfile
|
123
|
+
- LICENSE
|
124
|
+
- LICENSE.txt
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- bin/console
|
128
|
+
- bin/setup
|
129
|
+
- config/settings.yml
|
130
|
+
- crowi-client.gemspec
|
131
|
+
- lib/crowi-client.rb
|
132
|
+
- lib/crowi/client/apireq/api_request_attachments.rb
|
133
|
+
- lib/crowi/client/apireq/api_request_base.rb
|
134
|
+
- lib/crowi/client/apireq/api_request_pages.rb
|
135
|
+
- lib/crowi/client/client.rb
|
136
|
+
- lib/crowi/client/model/crowi_attachment.rb
|
137
|
+
- lib/crowi/client/model/crowi_model.rb
|
138
|
+
- lib/crowi/client/model/crowi_model_base.rb
|
139
|
+
- lib/crowi/client/model/crowi_page.rb
|
140
|
+
- lib/crowi/client/model/crowi_page_revision.rb
|
141
|
+
- lib/crowi/client/model/crowi_user.rb
|
142
|
+
- lib/crowi/client/version.rb
|
143
|
+
homepage: https://github.com/ryu-sato/crowi-client
|
144
|
+
licenses:
|
145
|
+
- MIT
|
146
|
+
metadata: {}
|
147
|
+
post_install_message:
|
148
|
+
rdoc_options: []
|
149
|
+
require_paths:
|
150
|
+
- lib
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
requirements: []
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 2.7.6
|
164
|
+
signing_key:
|
165
|
+
specification_version: 4
|
166
|
+
summary: Client of crowi
|
167
|
+
test_files: []
|