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.
@@ -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,12 @@
1
+ # Crowi model base class
2
+ class CrowiModelBase
3
+
4
+ # Constractor
5
+ def initialize(params = {})
6
+ params.each do |k,v|
7
+ instance_variable_set(:"@#{k}", v)
8
+ end
9
+ end
10
+
11
+ end
12
+
@@ -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
+
@@ -0,0 +1,5 @@
1
+ module Crowi
2
+ module Client
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
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: []