kintone 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -0
  3. data/.travis.yml +2 -1
  4. data/README.md +166 -6
  5. data/kintone.gemspec +4 -2
  6. data/lib/kintone.rb +1 -0
  7. data/lib/kintone/api.rb +30 -3
  8. data/lib/kintone/api/guest.rb +17 -0
  9. data/lib/kintone/command/apis.rb +22 -0
  10. data/lib/kintone/command/app.rb +11 -0
  11. data/lib/kintone/command/guests.rb +15 -0
  12. data/lib/kintone/command/record.rb +6 -2
  13. data/lib/kintone/command/records.rb +9 -5
  14. data/lib/kintone/command/space_guests.rb +11 -0
  15. data/lib/kintone/command/space_members.rb +16 -0
  16. data/lib/kintone/command/space_thread.rb +14 -0
  17. data/lib/kintone/query.rb +146 -0
  18. data/lib/kintone/query/extension.rb +23 -0
  19. data/lib/kintone/type.rb +6 -0
  20. data/lib/kintone/type/extension/enumerable.rb +5 -0
  21. data/lib/kintone/type/extension/hash.rb +5 -0
  22. data/lib/kintone/type/extension/object.rb +5 -0
  23. data/lib/kintone/type/record.rb +11 -0
  24. data/lib/kintone/version.rb +1 -1
  25. data/spec/kintone/api/guest_spec.rb +41 -2
  26. data/spec/kintone/api_spec.rb +83 -20
  27. data/spec/kintone/command/apis_spec.rb +113 -0
  28. data/spec/kintone/command/app_spec.rb +33 -0
  29. data/spec/kintone/command/guests_spec.rb +65 -0
  30. data/spec/kintone/command/record_spec.rb +55 -37
  31. data/spec/kintone/command/records_spec.rb +50 -18
  32. data/spec/kintone/command/space_guests_spec.rb +34 -0
  33. data/spec/kintone/command/space_members_spec.rb +80 -0
  34. data/spec/kintone/command/space_spec.rb +1 -1
  35. data/spec/kintone/command/space_thread_spec.rb +52 -0
  36. data/spec/kintone/query_spec.rb +294 -0
  37. data/spec/kintone/type/record_spec.rb +38 -0
  38. data/spec/spec_helper.rb +1 -0
  39. metadata +67 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 24a441e5a7cd395f4b7e77d1ef6c8c5fc450ec57
4
- data.tar.gz: d2c412b23b6685dde86ae1e68bee11897dc1f1ed
3
+ metadata.gz: a164c300acd21a0f68fd1c1bd5c44ec1bafe48f7
4
+ data.tar.gz: 6bea016672ebf7fc90e4f488f47a81f576b1cab4
5
5
  SHA512:
6
- metadata.gz: 1e255c61c186000b3f8071555158bda3289b73e2bc4be110ca50403ac464bbbe1b86af3e6a0b302722f94f7568fe7cba4a8c4cf5734741359d86f38da0c4adf3
7
- data.tar.gz: 8ff4d97a4355fc50a22080bee96331a7c0a662567faf5755abd79a1a59b7d4ad85395646aca1885b74eb5072891ecb38c5cf9f5415be0d35481df43fef1242da
6
+ metadata.gz: 2d6fbb16fb2f20c48b1b0e726794991ea487f24f98134844fa54f6c24ac1ece0a415494633814b454be19bb50fd2d9705ca9669da4637686e4323c63bb4f15a1
7
+ data.tar.gz: 0a65774ec1a15d1efa4729cd5178445e7a52bcc2d2d4aeaeeb015a315c8d0237bcf2f17a460064722c17bd65d88daa11d7606390345a00e8105f3ecfed550f0a
@@ -24,3 +24,13 @@ Style/LineLength:
24
24
  # Configuration parameters: EnforcedStyle, SupportedStyles.
25
25
  Style/StringLiterals:
26
26
  EnforcedStyle: single_quotes
27
+
28
+ Style/WordArray:
29
+ Exclude:
30
+ - 'spec/**/**'
31
+
32
+ Style/AsciiComments:
33
+ Enabled: false
34
+
35
+ CyclomaticComplexity:
36
+ Max: 10
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
3
+ - 2.1.0
4
+ - 2.1.1
4
5
  - 2.1.2
data/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  A Ruby gem for communicating with the [kintone](https://kintone.cybozu.com/us/) REST API
4
4
 
5
+ ## Requirements
6
+
7
+ - ruby 2.1.0 or later
8
+
5
9
  ## Installation
6
10
 
7
11
  gem install kintone
@@ -24,7 +28,10 @@ api = Kintone::Api.new("example.cybozu.com", "Administrator", "cybozu")
24
28
  - [Record delete](#record_delete)
25
29
  - [Format retrieval](#format_retrieval)
26
30
  - [Permissions](#permissions)
27
- - [Space management]("space_management")
31
+ - [Space management](#space_management)
32
+ - [Guests](#guests)
33
+ - [Application information](#application_information)
34
+ - [API information](#api_information)
28
35
 
29
36
  ### <a name="record_retrieval"> Record retrieval
30
37
 
@@ -39,31 +46,139 @@ query = "updated_time > \"2012-02-03T09:00:00+0900\" and updated_time < \"2012-0
39
46
  api.records.get(app, query, fields) # => {"records" => [{...}, ...]}
40
47
  ```
41
48
 
49
+ Query helper
50
+
51
+ ```ruby
52
+ query =
53
+ Kintone::Query.new do
54
+ field(:updated_time) > "2012-02-03T09:00:00+0900"
55
+ and!
56
+ field(:updated_time) < "2012-02-03T10:00:00+0900"
57
+ order_by(:record_id)
58
+ limit(10)
59
+ offset(20)
60
+ end
61
+ query.to_s # => "updated_time > \"2012-02-03T09:00:00+0900\" and updated_time < \"2012-02-03T10:00:00+0900\" order by record_id asc limit 10 offset 20"
62
+ api.records.get(app, query, fields)
63
+
64
+ # Example
65
+ Kintone::Query.new do
66
+ field(:Created_datetime) >= last_month
67
+ and!
68
+ precede do
69
+ field(:text).like("Hello")
70
+ and!
71
+ field(:number) == 200
72
+ end
73
+ or!
74
+ precede do
75
+ field(:number) > 100
76
+ and!
77
+ field(:Created_by).in([login_user])
78
+ end
79
+ order_by(:record_id, :desc)
80
+ limit(10)
81
+ offset(20)
82
+ end
83
+ # => "Created_datetime >= LAST_MONTH() and (text like \"Hello\" and number = 200) or (number > 100 and Created_by in (LOGINUSER())) order by record_id desc limit 10 offset 20"
84
+ ```
85
+
86
+ operator symbol | query helper
87
+ --- | ---
88
+ = | field(:code) == other
89
+ != | field(:code) != other
90
+ > | field(:code) > other
91
+ < | field(:code) < other
92
+ >= | field(:code) >= other
93
+ <= | field(:code) <= other
94
+ in | field(:code).in(["A", "B"])
95
+ not in | field(:code).not_in(["A", "B"])
96
+ like | field(:code).like("Hello")
97
+ not like | field(:code).not_like("Hello")
98
+ and | and!
99
+ or | or!
100
+ () | precede do; end
101
+
102
+ function | query helper
103
+ --- | ---
104
+ LOGINUSER() | login_user
105
+ NOW() | now
106
+ TODAY() | today
107
+ THIS_MONTH() | this_month
108
+ LAST_MONTH() | last_month
109
+ THIS_YEAR() | this_year
110
+
111
+ option | query helper
112
+ --- | ---
113
+ order by | order_by(:code, :asc or :desc)
114
+ limit | limit(20)
115
+ offset | offset(30)
116
+
42
117
  ### <a name="record_register"> Record register
43
118
 
44
119
  ```ruby
45
120
  # Record register(single record)
121
+ # Use Hash
46
122
  app = 7
47
123
  record = {"number" => {"value" => "123456"}}
48
- api.record.create(app, record) # => {"id" => "100"}
124
+ api.record.register(app, record) # => {"id" => "100"}
125
+
126
+ # Use Kintone::Type::Record
127
+ app = 7
128
+ record = Kintone::Type::Record.new(number: "123456")
129
+ api.record.register(app, record) # => {"id" => "100"}
49
130
 
50
131
  # Records register(batch)
132
+ # Use Hash
51
133
  app = 7
52
- records = [{"number" => {"value" => "123456"}}, {"number" => {"value" => "7890"}}]
53
- api.records.create(app, records) # => {"ids" => ["100", "101"]}
134
+ records = [
135
+ {"number" => {"value" => "123456"}},
136
+ {"number" => {"value" => "7890"}}
137
+ ]
138
+ api.records.register(app, records) # => {"ids" => ["100", "101"]}
139
+
140
+ # Use Kintone::Type::Record
141
+ app = 7
142
+ records = [
143
+ Kintone::Type::Record.new(number: "123456"),
144
+ Kintone::Type::Record.new(number: "7890")
145
+ ]
146
+ api.records.register(app, records) # => {"ids" => ["100", "101"]}
147
+
148
+ # Deprecated
149
+ api.record.create(app, record)
150
+ api.records.create(app, records)
54
151
  ```
55
152
 
56
153
  ### <a name="record_update"> Record update
57
154
 
58
155
  ```ruby
59
156
  # Record update(single record)
157
+ # Use Hash
60
158
  app = 4; id = 1
61
159
  record = {"string_multi" => {"value" => "changed!"}}
62
160
  api.record.update(app, id, record) # => {}
63
161
 
162
+ # Use Kintone::Type::Record
163
+ app = 4; id = 1
164
+ record = Kintone::Type::Record.new({string_multi: "changed!"})
165
+ api.record.update(app, id, record) # => {}
166
+
64
167
  # Records update(batch)
168
+ # Use Hash
65
169
  app = 4
66
- records = [{"id" => 1, "string_multi" => {"value" => "abcdef"}}, {"id" => 2, "string_multi" => {"value" => "opqrstu"}}]
170
+ records = [
171
+ {"id" => 1, "record" => {"string_multi" => {"value" => "abcdef"}}},
172
+ {"id" => 2, "record" => {"string_multi" => {"value" => "opqrstu"}}}
173
+ ]
174
+ api.records.update(app, records) # => {}
175
+
176
+ # Use Kintone::Type::Record
177
+ app = 4
178
+ records = [
179
+ {id: 1, record: Kintone::Type::Record.new(string_multi: "abcdef")},
180
+ {id: 2, record: Kintone::Type::Record.new(string_multi: "opqrstu")}
181
+ ]
67
182
  api.records.update(app, records) # => {}
68
183
  ```
69
184
 
@@ -103,7 +218,7 @@ api.field_acl.update(id, rights) # => {}
103
218
  ### <a name="space_management"> Space management
104
219
 
105
220
  ```ruby
106
- # Space information reference
221
+ # Space information
107
222
  id = 1
108
223
  api.space.get(id) # => { "id" => "1", "name" => "space", "defaultThread" => "3", "isPrivate" => true, ...}
109
224
 
@@ -116,11 +231,56 @@ api.template_space.create(id, name, members, is_guest: true, fixed_member: false
116
231
  id = 1; body = "<b>awesome space!</b>"
117
232
  api.space_body.update(id, body) # => {}
118
233
 
234
+ # Space members
235
+ id = 1
236
+ members = api.space_members.get(id) # => {"members"=>[{"entity"=>{"type"=>"USER", "code"=> "user1"}, ...}, ...]}
237
+ members << {"entity" => {"type" => "GROUP", "code" => "group1"}}
238
+ members = api.space_members.update(id, members) # => {}
239
+
240
+ # Space thread update
241
+ id = 1; name = "thread name"
242
+ body = "<b>awesome thread!</b>"
243
+ api.space_thread.update(id, name: name, body: body) # => {}
244
+
245
+ # Space guests
246
+ id = 1
247
+ guests = ["hoge@example.com"]
248
+ api.guest(1).space_guests.update(id, guests) # => {}
249
+
119
250
  # Space delete
120
251
  id = 1
121
252
  api.space.delete(id) # => {}
122
253
  ```
123
254
 
255
+ ### <a name="guests"> Guests
256
+
257
+ ```ruby
258
+ # Add guest
259
+ guests = [{code: "hoge@example.com", password: "p@ssword", timezone: "Asia/Tokyo", name: "Tokyo, Saburo", ...}, ...]
260
+ api.guests.create(guests) # => {}
261
+
262
+ # delete guest
263
+ guests = ["hoge@example.com", "fuga@example.com"]
264
+ api.guests.delete(guests) # => {}
265
+ ```
266
+
267
+ ### <a name="application_information"> Application information
268
+
269
+ ```ruby
270
+ id = 4
271
+ api.app.get(id) # => {"appId" => "4", "code" => "", ...}
272
+ ```
273
+
274
+ ### <a name="api_information"> API information
275
+
276
+ ```ruby
277
+ api.apis.get # => {"baseUrl" => "https://example.cybozu.com/k/v1/", "apis" => {"records/get" => {"link" => "apis/records/get.json"}}}
278
+
279
+ api.apis.get_details_of("apis/records/get.json") # => {"id" => "GetRecords", "baseUrl" => "https://example.cybozu.com/k/v1/", ...}
280
+
281
+ api.apis.get_details_of_key("records/get") # => {"id" => "GetRecords", "baseUrl" => "https://example.cybozu.com/k/v1/", ...}
282
+ ```
283
+
124
284
  ### Other examples
125
285
 
126
286
  ```ruby
@@ -24,8 +24,10 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency 'bundler', '~> 1.5'
26
26
  spec.add_development_dependency 'rake'
27
- spec.add_development_dependency 'rspec'
28
- spec.add_development_dependency 'webmock'
27
+ spec.add_development_dependency 'rspec', '~> 3.0.0'
28
+ spec.add_development_dependency 'rubocop', '~> 0.24.1'
29
+ spec.add_development_dependency 'webmock', '~> 1.18'
29
30
  spec.add_development_dependency 'guard-rspec'
30
31
  spec.add_development_dependency 'guard-rubocop'
32
+ spec.add_development_dependency 'rspec-parameterized', '~> 0.1.2'
31
33
  end
@@ -1,5 +1,6 @@
1
1
  require 'kintone/version'
2
2
  require 'kintone/api'
3
+ require 'kintone/type'
3
4
 
4
5
  module Kintone
5
6
  # Your code goes here...
@@ -11,7 +11,13 @@ require 'kintone/command/field_acl'
11
11
  require 'kintone/command/template_space'
12
12
  require 'kintone/command/space'
13
13
  require 'kintone/command/space_body'
14
+ require 'kintone/command/space_thread'
15
+ require 'kintone/command/space_members'
16
+ require 'kintone/command/guests'
17
+ require 'kintone/command/app'
18
+ require 'kintone/command/apis'
14
19
  require 'kintone/api/guest'
20
+ require 'kintone/query'
15
21
 
16
22
  class Kintone::Api
17
23
  BASE_PATH = '/k/v1/'
@@ -37,7 +43,7 @@ class Kintone::Api
37
43
  Kintone::Api::Guest.new(space_id, self)
38
44
  end
39
45
 
40
- def get(url, params = nil)
46
+ def get(url, params = {})
41
47
  response =
42
48
  @connection.get do |request|
43
49
  request.url url
@@ -66,11 +72,12 @@ class Kintone::Api
66
72
  response.body
67
73
  end
68
74
 
69
- def delete(url, params = nil)
75
+ def delete(url, body = nil)
70
76
  response =
71
77
  @connection.delete do |request|
72
78
  request.url url
73
- request.params = params
79
+ request.headers['Content-Type'] = 'application/json'
80
+ request.body = body.to_json
74
81
  end
75
82
  response.body
76
83
  end
@@ -110,4 +117,24 @@ class Kintone::Api
110
117
  def space_body
111
118
  Kintone::Command::SpaceBody.new(self)
112
119
  end
120
+
121
+ def space_thread
122
+ Kintone::Command::SpaceThread.new(self)
123
+ end
124
+
125
+ def space_members
126
+ Kintone::Command::SpaceMembers.new(self)
127
+ end
128
+
129
+ def guests
130
+ Kintone::Command::Guests.new(self)
131
+ end
132
+
133
+ def app
134
+ Kintone::Command::App.new(self)
135
+ end
136
+
137
+ def apis
138
+ Kintone::Command::Apis.new(self)
139
+ end
113
140
  end
@@ -1,5 +1,6 @@
1
1
  require 'forwardable'
2
2
  require 'kintone/api'
3
+ require 'kintone/command/space_guests'
3
4
 
4
5
  class Kintone::Api
5
6
  class Guest
@@ -48,6 +49,22 @@ class Kintone::Api
48
49
  Kintone::Command::SpaceBody.new(self)
49
50
  end
50
51
 
52
+ def space_thread
53
+ Kintone::Command::SpaceThread.new(self)
54
+ end
55
+
56
+ def space_members
57
+ Kintone::Command::SpaceMembers.new(self)
58
+ end
59
+
60
+ def space_guests
61
+ Kintone::Command::SpaceGuests.new(self)
62
+ end
63
+
64
+ def app
65
+ Kintone::Command::App.new(self)
66
+ end
67
+
51
68
  def_delegators :@api, :get, :post, :put, :delete
52
69
  end
53
70
  end
@@ -0,0 +1,22 @@
1
+ require 'kintone/command'
2
+
3
+ class Kintone::Command::Apis < Kintone::Command
4
+ def self.path
5
+ 'apis'
6
+ end
7
+
8
+ def get
9
+ @api.get(@url)
10
+ end
11
+
12
+ def get_details_of(link)
13
+ url = Kintone::Api::BASE_PATH + link
14
+ @api.get(url)
15
+ end
16
+
17
+ def get_details_of_key(key)
18
+ response = get
19
+ link = response['apis'][key]['link']
20
+ get_details_of(link)
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ require 'kintone/command'
2
+
3
+ class Kintone::Command::App < Kintone::Command
4
+ def self.path
5
+ 'app'
6
+ end
7
+
8
+ def get(id)
9
+ @api.get(@url, id: id)
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'kintone/command'
2
+
3
+ class Kintone::Command::Guests < Kintone::Command
4
+ def self.path
5
+ 'guests'
6
+ end
7
+
8
+ def create(guests)
9
+ @api.post(@url, guests: guests)
10
+ end
11
+
12
+ def delete(guests)
13
+ @api.delete(@url, guests: guests)
14
+ end
15
+ end
@@ -9,11 +9,15 @@ class Kintone::Command::Record < Kintone::Command
9
9
  @api.get(@url, app: app, id: id)
10
10
  end
11
11
 
12
+ def register(app, record)
13
+ @api.post(@url, app: app, record: record.to_kintone)
14
+ end
15
+
12
16
  def create(app, record)
13
- @api.post(@url, app: app, record: record)
17
+ register(app, record)
14
18
  end
15
19
 
16
20
  def update(app, id, record)
17
- @api.put(@url, app: app, id: id, record: record)
21
+ @api.put(@url, app: app, id: id, record: record.to_kintone)
18
22
  end
19
23
  end