kintone 0.0.5 → 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.
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