notion-sdk-ruby 0.4.1 → 0.5.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 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