readwise 0.2.0 → 0.4.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: 77088f2664c1f2d285ed893bd5ef67d313971e75bfafcd5eaebb6f2e05177e62
4
- data.tar.gz: 472f2d70b184549e9be6232399f821e5b7f99a24f964d716fcec913ec7cae5bb
3
+ metadata.gz: 766eb82d68f06591b6e05211877532619182404c3aa29c24720de5cd1788ad0a
4
+ data.tar.gz: 70b4affa8b2e46271fb1d690e00328be10e1fcbb5fd6a3d5ae08135947818671
5
5
  SHA512:
6
- metadata.gz: 1fd02d43c7ee4d4e5a47582abc46eecd25c1df344bc848df2b56bac9f6290a5a6e814432443d8f6884a6066b04713f166a3db1b022122edbf9fc0e68fdfd413b
7
- data.tar.gz: 0e261d0744c012b2b0b9d80b77f1ee5b8e22f5e908681b41d8b0aef587771abc3d66244d4eb869ba1336dad4bf0ac3dd638c1d782f37ed18b9bcf82d1f2b6710
6
+ metadata.gz: f6b8cda492331d61352a83bc01732fee2d30191419b226327334daf4c00338afe6876bfb5b806318506bc42a5706f826225a2c917dcaf17a0172d9c12cc3cd08
7
+ data.tar.gz: 7b2e849cc2bff772ebe84c7b93cb0b7bdf9c506c9bce80a79754554590a537717c39882f6b04faa8e43105b5eac20598fd89f1a39002746d8212557a4bdaf42d
@@ -0,0 +1,39 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ "main" ]
13
+ pull_request:
14
+ branches: [ "main" ]
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ test:
21
+
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ matrix:
25
+ ruby-version: ['2.6', '2.7', '3.0', '3.1', '3.2']
26
+
27
+ steps:
28
+ - uses: actions/checkout@v3
29
+ - name: Set up Ruby
30
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
31
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby-version }}
35
+ # bundler-cache: true # runs 'bundle install' and caches installed gems automatically
36
+ - name: Install deps
37
+ run: bundle install
38
+ - name: Run tests
39
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -46,7 +46,7 @@ build-iPhoneSimulator/
46
46
 
47
47
  # for a library or gem, you might want to ignore these files since the code is
48
48
  # intended to run in multiple environments; otherwise, check them in:
49
- # Gemfile.lock
49
+ Gemfile.lock
50
50
  # .ruby-version
51
51
  # .ruby-gemset
52
52
 
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.4.0] - 2023-03-19
6
+
7
+ - Add `get_highlight` client method ([#10](https://github.com/andjosh/readwise-ruby/pull/10) from [@ajistrying](https://github.com/ajistrying))
8
+
9
+ ## [0.3.0] - 2023-02-28
10
+
11
+ - Change `Tag` from hash to struct ([#6](https://github.com/andjosh/readwise-ruby/pull/6) from [@ajistrying](https://github.com/ajistrying))
12
+
5
13
  ## [0.2.0] - 2023-02-20
6
14
 
7
15
  - Add support for `Book.note` ([#4](https://github.com/andjosh/readwise-ruby/pull/4))
data/README.md CHANGED
@@ -37,7 +37,7 @@ puts books.first.highlights.map(&:text) # highlights are Readwise::Highlight str
37
37
 
38
38
  ## Development
39
39
 
40
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
40
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
41
41
 
42
42
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
43
43
 
@@ -1,12 +1,15 @@
1
1
  require 'json'
2
2
  require 'net/http'
3
- require_relative 'book.rb'
4
- require_relative 'highlight.rb'
3
+ require_relative 'book'
4
+ require_relative 'highlight'
5
+ require_relative 'tag'
5
6
 
6
7
  module Readwise
7
8
  class Client
8
9
  class Error < StandardError; end
9
10
 
11
+ BASE_URL = "https://readwise.io/api/v2/"
12
+
10
13
  def initialize(token: nil)
11
14
  raise ArgumentError unless token
12
15
  @token = token.to_s
@@ -20,6 +23,14 @@ module Readwise
20
23
  raise NotImplementedError
21
24
  end
22
25
 
26
+ def get_highlight(highlight_id:)
27
+ url = BASE_URL + 'highlights/' + highlight_id
28
+
29
+ res = get_readwise_request(url)
30
+
31
+ transform_highlight(res)
32
+ end
33
+
23
34
  def export(updated_after: nil, book_ids: [])
24
35
  resp = export_page(updated_after: updated_after, book_ids: book_ids)
25
36
  next_page_cursor = resp[:next_page_cursor]
@@ -48,30 +59,10 @@ module Readwise
48
59
  readwise_url: item['readwise_url'],
49
60
  source: item['source'],
50
61
  source_url: item['source_url'],
51
- tags: item['book_tags'],
62
+ tags: item['book_tags'].map { |tag| transform_tag(tag) },
52
63
  title: item['title'],
53
64
  unique_url: item['unique_url'],
54
- highlights: item['highlights'].map do |highlight|
55
- Highlight.new(
56
- book_id: highlight['book_id'].to_s,
57
- color: highlight['color'],
58
- created_at: highlight['created_at'],
59
- end_location: highlight['end_location'],
60
- external_id: highlight['external_id'],
61
- highlight_id: highlight['id'].to_s,
62
- highlighted_at: highlight['highlighted_at'],
63
- is_discard: highlight['is_discard'],
64
- is_favorite: highlight['is_favorite'],
65
- location: highlight['location'],
66
- location_type: highlight['location_type'],
67
- note: highlight['note'],
68
- readwise_url: highlight['readwise_url'],
69
- tags: highlight['tags'],
70
- text: highlight['text'],
71
- updated_at: highlight['updated_at'],
72
- url: highlight['url'],
73
- )
74
- end
65
+ highlights: item['highlights'].map { |highlight| transform_highlight(highlight) },
75
66
  )
76
67
  end
77
68
  {
@@ -85,16 +76,52 @@ module Readwise
85
76
  params['updatedAfter'] = updated_after if updated_after
86
77
  params['ids'] = book_ids if book_ids.any?
87
78
  params['pageCursor'] = page_cursor if page_cursor
88
- url = 'https://readwise.io/api/v2/export/?' + URI.encode_www_form(params)
89
- export_uri = URI.parse(url)
90
- export_req = Net::HTTP::Get.new(export_uri)
91
- export_req['Authorization'] = "Token #{@token}"
92
- export_res = Net::HTTP.start(export_uri.hostname, export_uri.port, use_ssl: true) do |http|
93
- http.request(export_req)
94
- end
95
- raise Error, 'Export request failed' unless export_res.is_a?(Net::HTTPSuccess)
79
+ url = BASE_URL + 'export/?' + URI.encode_www_form(params)
80
+
81
+ get_readwise_request(url)
96
82
 
97
- JSON.parse(export_res.body)
83
+ end
84
+
85
+ def transform_highlight(res)
86
+ Highlight.new(
87
+ book_id: res['book_id'].to_s,
88
+ color: res['color'],
89
+ created_at: res['created_at'],
90
+ end_location: res['end_location'],
91
+ external_id: res['external_id'],
92
+ highlight_id: res['id'].to_s,
93
+ highlighted_at: res['highlighted_at'],
94
+ is_discard: res['is_discard'],
95
+ is_favorite: res['is_favorite'],
96
+ location: res['location'],
97
+ location_type: res['location_type'],
98
+ note: res['note'],
99
+ readwise_url: res['readwise_url'],
100
+ tags: res['tags'].map { |tag| transform_tag(tag) },
101
+ text: res['text'],
102
+ updated_at: res['updated_at'],
103
+ url: res['url'],
104
+ )
105
+ end
106
+
107
+ def transform_tag(res)
108
+ Tag.new(
109
+ tag_id: res['id'].to_s,
110
+ name: res['name'],
111
+ )
112
+ end
113
+
114
+ def get_readwise_request(url)
115
+ uri = URI.parse(url)
116
+ req = Net::HTTP::Get.new(uri)
117
+ req['Authorization'] = "Token #{@token}"
118
+ res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
119
+ http.request(req)
120
+ end
121
+
122
+ raise Error, 'Export request failed' unless res.is_a?(Net::HTTPSuccess)
123
+
124
+ JSON.parse(res.body)
98
125
  end
99
126
  end
100
127
  end
@@ -0,0 +1,8 @@
1
+ module Readwise
2
+ Tag = Struct.new(
3
+ 'ReadwiseTag',
4
+ :tag_id,
5
+ :name,
6
+ keyword_init: true
7
+ )
8
+ end
@@ -1,3 +1,3 @@
1
1
  module Readwise
2
- VERSION = "0.2.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/readwise.gemspec CHANGED
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
37
  spec.require_paths = ["lib"]
38
38
 
39
- spec.add_development_dependency "bundler", "~> 2.4.4"
39
+ spec.add_development_dependency "bundler", "~> 2.2"
40
40
  spec.add_development_dependency "rake", "~> 10.0"
41
41
  spec.add_development_dependency "rspec", "~> 3.0"
42
42
  spec.add_development_dependency "rspec-file_fixtures", "~> 0.1.6"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: readwise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Beckman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-20 00:00:00.000000000 Z
11
+ date: 2023-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.4
19
+ version: '2.2'
20
20
  type: :development
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: 2.4.4
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -74,11 +74,11 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - ".github/FUNDING.yml"
77
+ - ".github/workflows/ruby.yml"
77
78
  - ".gitignore"
78
79
  - CHANGELOG.md
79
80
  - CODE_OF_CONDUCT.md
80
81
  - Gemfile
81
- - Gemfile.lock
82
82
  - LICENSE.txt
83
83
  - README.md
84
84
  - Rakefile
@@ -88,6 +88,7 @@ files:
88
88
  - lib/readwise/book.rb
89
89
  - lib/readwise/client.rb
90
90
  - lib/readwise/highlight.rb
91
+ - lib/readwise/tag.rb
91
92
  - lib/readwise/version.rb
92
93
  - readwise.gemspec
93
94
  homepage: https://github.com/andjosh/readwise-ruby
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  - !ruby/object:Gem::Version
114
115
  version: '0'
115
116
  requirements: []
116
- rubygems_version: 3.4.2
117
+ rubygems_version: 3.4.7
117
118
  signing_key:
118
119
  specification_version: 4
119
120
  summary: Readwise API client
data/Gemfile.lock DELETED
@@ -1,38 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- readwise (0.2.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- diff-lcs (1.5.0)
10
- rake (10.5.0)
11
- rspec (3.12.0)
12
- rspec-core (~> 3.12.0)
13
- rspec-expectations (~> 3.12.0)
14
- rspec-mocks (~> 3.12.0)
15
- rspec-core (3.12.0)
16
- rspec-support (~> 3.12.0)
17
- rspec-expectations (3.12.2)
18
- diff-lcs (>= 1.2.0, < 2.0)
19
- rspec-support (~> 3.12.0)
20
- rspec-file_fixtures (0.1.6)
21
- rspec (~> 3.0)
22
- rspec-mocks (3.12.2)
23
- diff-lcs (>= 1.2.0, < 2.0)
24
- rspec-support (~> 3.12.0)
25
- rspec-support (3.12.0)
26
-
27
- PLATFORMS
28
- ruby
29
-
30
- DEPENDENCIES
31
- bundler (~> 2.4.4)
32
- rake (~> 10.0)
33
- readwise!
34
- rspec (~> 3.0)
35
- rspec-file_fixtures (~> 0.1.6)
36
-
37
- BUNDLED WITH
38
- 2.4.4