notion-sdk-ruby 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 264919d7cc99bb5460d6a900a69b5c4875f93e523f518f2ec30b965af04e0b7e
4
- data.tar.gz: 790b82c77a361b0b04f5715d4e545c695e3f8ea11696dda5d234ff8ea74ea7e3
3
+ metadata.gz: b40512cee112cf660970e4dc0f41d9b2396435c0d0af1b4d360ab17d643fcce6
4
+ data.tar.gz: 05d7805fdafc25fc3537a4853e61f136c9fbcc49a404559c55288b157c989b0c
5
5
  SHA512:
6
- metadata.gz: 525cb12a872f7e9d950f9e8c3f1faf928c5cb0e54a8dfa950895e01898c9eaaf4d40242db33d41954ef08bca139be192225cd5ea67c2da118e828f647825911f
7
- data.tar.gz: 3baf444a17c65f6c859018ea6ef8d95c45b16dbfa88e9941282de746f89554102fed5c290a840abcd9f0423da65574ff725f918a6185aa2f32ac3787e6e99b63
6
+ metadata.gz: '08740b69d9ecdcba0c13e0401095cff74fdfa0be56993061bce45b89b9f8b5d42bbbe1d02dc04e5554b021b1b27b0bc8c183a9c425fb00ed9be6bcc4d84cc184'
7
+ data.tar.gz: 327b799e2eeb70ed8b1a48296853972579749baeba824f05f10ba506388b1527f1eecb6ad7f774918259bd4bf673748525bfdc56ae7da08787aa266d5b9344bf
data/Gemfile.lock CHANGED
@@ -1,29 +1,55 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- notion-sdk-ruby (0.4.1)
5
- httparty (~> 0.18.1)
4
+ notion-sdk-ruby (0.5.0)
5
+ faraday (~> 1.8)
6
+ faraday_middleware (~> 1.1)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ activesupport (6.1.4.1)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
16
+ zeitwerk (~> 2.3)
10
17
  addressable (2.7.0)
11
18
  public_suffix (>= 2.0.2, < 5.0)
12
19
  ast (2.4.2)
13
20
  coderay (1.1.3)
21
+ concurrent-ruby (1.1.9)
14
22
  crack (0.4.5)
15
23
  rexml
16
24
  diff-lcs (1.4.4)
17
25
  dotenv (2.7.6)
26
+ faraday (1.8.0)
27
+ faraday-em_http (~> 1.0)
28
+ faraday-em_synchrony (~> 1.0)
29
+ faraday-excon (~> 1.1)
30
+ faraday-httpclient (~> 1.0.1)
31
+ faraday-net_http (~> 1.0)
32
+ faraday-net_http_persistent (~> 1.1)
33
+ faraday-patron (~> 1.0)
34
+ faraday-rack (~> 1.0)
35
+ multipart-post (>= 1.2, < 3)
36
+ ruby2_keywords (>= 0.0.4)
37
+ faraday-em_http (1.0.0)
38
+ faraday-em_synchrony (1.0.0)
39
+ faraday-excon (1.1.0)
40
+ faraday-httpclient (1.0.1)
41
+ faraday-net_http (1.0.1)
42
+ faraday-net_http_persistent (1.2.0)
43
+ faraday-patron (1.0.0)
44
+ faraday-rack (1.0.0)
45
+ faraday_middleware (1.1.0)
46
+ faraday (~> 1.0)
18
47
  hashdiff (1.0.1)
19
- httparty (0.18.1)
20
- mime-types (~> 3.0)
21
- multi_xml (>= 0.5.2)
48
+ i18n (1.8.10)
49
+ concurrent-ruby (~> 1.0)
22
50
  method_source (1.0.0)
23
- mime-types (3.3.1)
24
- mime-types-data (~> 3.2015)
25
- mime-types-data (3.2021.0901)
26
- multi_xml (0.6.0)
51
+ minitest (5.14.4)
52
+ multipart-post (2.1.1)
27
53
  parallel (1.20.1)
28
54
  parser (3.0.1.1)
29
55
  ast (~> 2.4.1)
@@ -63,22 +89,27 @@ GEM
63
89
  rubocop (>= 1.7.0, < 2.0)
64
90
  rubocop-ast (>= 0.4.0)
65
91
  ruby-progressbar (1.11.0)
92
+ ruby2_keywords (0.0.5)
66
93
  standard (1.1.1)
67
94
  rubocop (= 1.14.0)
68
95
  rubocop-performance (= 1.11.2)
69
96
  standardrb (1.0.0)
70
97
  standard
98
+ tzinfo (2.0.4)
99
+ concurrent-ruby (~> 1.0)
71
100
  unicode-display_width (2.0.0)
72
101
  webmock (3.12.2)
73
102
  addressable (>= 2.3.6)
74
103
  crack (>= 0.3.2)
75
104
  hashdiff (>= 0.4.0, < 2.0.0)
105
+ zeitwerk (2.4.2)
76
106
 
77
107
  PLATFORMS
78
108
  ruby
79
109
  x64-mingw32
80
110
 
81
111
  DEPENDENCIES
112
+ activesupport (~> 6.1)
82
113
  dotenv (~> 2.7)
83
114
  notion-sdk-ruby!
84
115
  pry (~> 0.14.1)
@@ -1,5 +1,6 @@
1
1
  module Notion
2
2
  class Client
3
+ include RequestClient
3
4
  include Operations::Search
4
5
 
5
6
  def initialize(token:, notion_version: "2021-08-16")
@@ -0,0 +1,4 @@
1
+ module Notion
2
+ class Block < OpenStruct
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Notion
2
+ class Database < OpenStruct
3
+ end
4
+ end
@@ -0,0 +1,27 @@
1
+ module Notion
2
+ class List
3
+ attr_reader :data, :next_cursor, :has_more
4
+
5
+ def initialize(response_body)
6
+ @data = response_body["results"].map do |d|
7
+ get_model(d["object"]).new(d)
8
+ end
9
+
10
+ @next_cursor = response_body["next_cursor"]
11
+ @has_more = response_body["has_more"]
12
+ end
13
+
14
+ def get_model(object_name)
15
+ case object_name
16
+ when "block"
17
+ Block
18
+ when "database"
19
+ Database
20
+ when "page"
21
+ Page
22
+ when "user"
23
+ User
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ module Notion
2
+ class Page < OpenStruct
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Notion
2
+ class User < OpenStruct
3
+ end
4
+ end
@@ -1,8 +1,11 @@
1
1
  module Notion
2
2
  module Operations
3
3
  module Search
4
+ include RequestClient
5
+
4
6
  def search(body)
5
- RequestClient.active_client.post("/v1/search", body: body.to_json)
7
+ response = post("/v1/search", body.to_json)
8
+ List.new(response.body)
6
9
  end
7
10
  end
8
11
  end
@@ -1,49 +1,44 @@
1
1
  module Notion
2
- class RequestClient
3
- include HTTParty
4
-
5
- base_uri "https://api.notion.com"
6
- headers "Content-Type": "application/json"
7
-
8
- def self.active_client
9
- RequestClient.new(Notion.config)
2
+ module RequestClient
3
+ def get(*args)
4
+ handle_request(:get, *args)
10
5
  end
11
6
 
12
- def initialize(config)
13
- self.class.headers Authorization: "Bearer #{config.api_token}"
14
- self.class.headers "Notion-Version": config.notion_version
7
+ def post(*args)
8
+ handle_request(:post, *args)
15
9
  end
16
10
 
17
- def get(*args, &block)
18
- response = self.class.get(*args, &block)
19
- raise_on_failure(response)
11
+ def patch(*args)
12
+ handle_request(:patch, *args)
20
13
  end
21
14
 
22
- def post(*args, &block)
23
- response = self.class.post(*args, &block)
24
- raise_on_failure(response)
15
+ def delete(*args)
16
+ handle_request(:delete, *args)
25
17
  end
26
18
 
27
- def patch(*args, &block)
28
- response = self.class.patch(*args, &block)
29
- raise_on_failure(response)
30
- end
31
-
32
- def put(*args, &block)
33
- response = self.class.put(*args, &block)
34
- raise_on_failure(response)
35
- end
19
+ private
36
20
 
37
- def delete(*args, &block)
38
- response = self.class.delete(*args, &block)
39
- raise_on_failure(response)
21
+ def handle_request(method, *args)
22
+ faraday_client.public_send(method, *args)
23
+ rescue Faraday::ClientError => error
24
+ error_details = JSON.parse(error.response[:body])
25
+ raise ErrorFactory.create(error_details)
26
+ rescue JSON::ParserError => error
27
+ raise NotionError.new(error.message)
40
28
  end
41
29
 
42
- def raise_on_failure(response)
43
- if response.success?
44
- response
45
- else
46
- raise ErrorFactory.create(response)
30
+ def faraday_client
31
+ @faraday_client ||= Faraday.new(
32
+ url: "https://api.notion.com",
33
+ headers: {
34
+ "Content-Type" => "application/json",
35
+ "Notion-Version" => Notion.config.notion_version,
36
+ "Authorization" => "Bearer #{Notion.config.api_token}"
37
+ }
38
+ ) do |f|
39
+ f.request :json
40
+ f.response :json
41
+ f.use Faraday::Response::RaiseError
47
42
  end
48
43
  end
49
44
  end
@@ -1,25 +1,33 @@
1
1
  module Notion
2
2
  class Blocks
3
+ include RequestClient
4
+
3
5
  def children
4
6
  Children.new
5
7
  end
6
8
 
7
9
  def retrieve(block_id)
8
- RequestClient.active_client.get("/v1/blocks/#{block_id}")
10
+ response = get("/v1/blocks/#{block_id}")
11
+ Block.new(response.body)
9
12
  end
10
13
 
11
14
  def update(block_id, body)
12
- RequestClient.active_client.patch("/v1/blocks/#{block_id}", body: body.to_json)
15
+ response = patch("/v1/blocks/#{block_id}", body.to_json)
16
+ Block.new(response.body)
13
17
  end
14
18
  end
15
19
 
16
20
  class Children
21
+ include RequestClient
22
+
17
23
  def list(block_id, query: {})
18
- RequestClient.active_client.get("/v1/blocks/#{block_id}/children", query: query)
24
+ response = get("/v1/blocks/#{block_id}/children", query: query)
25
+ List.new(response.body)
19
26
  end
20
27
 
21
28
  def append(block_id, body)
22
- RequestClient.active_client.patch("/v1/blocks/#{block_id}/children", body: body.to_json)
29
+ response = patch("/v1/blocks/#{block_id}/children", body.to_json)
30
+ Block.new(response.body)
23
31
  end
24
32
  end
25
33
  end
@@ -1,25 +1,32 @@
1
1
  module Notion
2
2
  class Databases
3
+ include RequestClient
4
+
3
5
  def retrieve(id)
4
- RequestClient.active_client.get("/v1/databases/#{id}")
6
+ response = get("/v1/databases/#{id}")
7
+ Database.new(response.body)
5
8
  end
6
9
 
7
10
  # DEPRECATED
8
11
  def list
9
12
  warn "DEPRECATED: client.databases.list is deprecated."
10
- RequestClient.active_client.get("/v1/databases")
13
+ response = get("/v1/databases")
14
+ List.new(response.body)
11
15
  end
12
16
 
13
17
  def query(id, body)
14
- RequestClient.active_client.post("/v1/databases/#{id}/query", body: body.to_json)
18
+ response = post("/v1/databases/#{id}/query", body.to_json)
19
+ List.new(response.body)
15
20
  end
16
21
 
17
22
  def create(body)
18
- RequestClient.active_client.post("/v1/databases", body: body.to_json)
23
+ response = post("/v1/databases", body.to_json)
24
+ Database.new(response.body)
19
25
  end
20
26
 
21
27
  def update(id, body)
22
- RequestClient.active_client.patch("/v1/databases/#{id}", body: body.to_json)
28
+ response = patch("/v1/databases/#{id}", body.to_json)
29
+ Database.new(response.body)
23
30
  end
24
31
  end
25
32
  end
@@ -1,15 +1,20 @@
1
1
  module Notion
2
2
  class Pages
3
+ include RequestClient
4
+
3
5
  def retrieve(id)
4
- RequestClient.active_client.get("/v1/pages/#{id}")
6
+ response = get("/v1/pages/#{id}")
7
+ Page.new(response.body)
5
8
  end
6
9
 
7
10
  def create(body)
8
- RequestClient.active_client.post("/v1/pages", body: body.to_json)
11
+ response = post("/v1/pages", body.to_json)
12
+ Page.new(response.body)
9
13
  end
10
14
 
11
15
  def update(id, body)
12
- RequestClient.active_client.patch("/v1/pages/#{id}", body: body.to_json)
16
+ response = patch("/v1/pages/#{id}", body.to_json)
17
+ Page.new(response.body)
13
18
  end
14
19
  end
15
20
  end
@@ -1,11 +1,15 @@
1
1
  module Notion
2
2
  class Users
3
+ include RequestClient
4
+
3
5
  def list
4
- RequestClient.active_client.get("/v1/users")
6
+ response = get("/v1/users")
7
+ List.new(response.body)
5
8
  end
6
9
 
7
10
  def retrieve(id)
8
- RequestClient.active_client.get("/v1/users/#{id}")
11
+ response = get("/v1/users/#{id}")
12
+ User.new(response.body)
9
13
  end
10
14
  end
11
15
  end
@@ -1,3 +1,3 @@
1
1
  module Notion
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,17 +1,23 @@
1
- require "httparty"
1
+ require "faraday"
2
+ require "faraday_middleware"
2
3
  require "forwardable"
4
+ require "ostruct"
3
5
 
4
6
  require "notion-sdk-ruby/version"
5
-
6
7
  require "notion-sdk-ruby/config"
8
+ require "notion-sdk-ruby/request_client"
7
9
  require "notion-sdk-ruby/resources/blocks"
8
10
  require "notion-sdk-ruby/resources/databases"
9
11
  require "notion-sdk-ruby/resources/pages"
10
12
  require "notion-sdk-ruby/resources/users"
11
13
  require "notion-sdk-ruby/operations/search"
12
14
  require "notion-sdk-ruby/error"
13
- require "notion-sdk-ruby/request_client"
14
15
  require "notion-sdk-ruby/client"
16
+ require "notion-sdk-ruby/models/user"
17
+ require "notion-sdk-ruby/models/list"
18
+ require "notion-sdk-ruby/models/block"
19
+ require "notion-sdk-ruby/models/database"
20
+ require "notion-sdk-ruby/models/page"
15
21
 
16
22
  module Notion
17
23
  @config = Config.new
@@ -26,7 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- spec.add_dependency "httparty", "~> 0.18.1"
29
+ spec.add_dependency "faraday", "~> 1.8"
30
+ spec.add_dependency "faraday_middleware", "~> 1.1"
30
31
 
31
32
  spec.add_development_dependency "rake", "~> 12.0"
32
33
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -34,4 +35,5 @@ Gem::Specification.new do |spec|
34
35
  spec.add_development_dependency "webmock", "~> 3.12"
35
36
  spec.add_development_dependency "pry", "~> 0.14.1"
36
37
  spec.add_development_dependency "dotenv", "~> 2.7"
38
+ spec.add_development_dependency "activesupport", "~> 6.1"
37
39
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notion-sdk-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Graham Marlow
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2021-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: httparty
14
+ name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.18.1
19
+ version: '1.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.18.1
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '2.7'
125
+ - !ruby/object:Gem::Dependency
126
+ name: activesupport
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '6.1'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '6.1'
111
139
  description:
112
140
  email:
113
141
  - mgmarlow@hey.com
@@ -131,6 +159,11 @@ files:
131
159
  - lib/notion-sdk-ruby/client.rb
132
160
  - lib/notion-sdk-ruby/config.rb
133
161
  - lib/notion-sdk-ruby/error.rb
162
+ - lib/notion-sdk-ruby/models/block.rb
163
+ - lib/notion-sdk-ruby/models/database.rb
164
+ - lib/notion-sdk-ruby/models/list.rb
165
+ - lib/notion-sdk-ruby/models/page.rb
166
+ - lib/notion-sdk-ruby/models/user.rb
134
167
  - lib/notion-sdk-ruby/operations/search.rb
135
168
  - lib/notion-sdk-ruby/request_client.rb
136
169
  - lib/notion-sdk-ruby/resources/blocks.rb