freefeed 0.1.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: 316c09f0066698e8ae273c3b2247acd64a9c417918faca420bb67a9a1fcaa0cd
4
- data.tar.gz: 14676a78c8de2b40dc3dca2deb108ebeab50c0ff42f4e4b9453088b2ff36cd88
3
+ metadata.gz: 9457203e8f03e0ca98ef13de587bf1e59d479870379ccfe4a37aeadfb11ba81a
4
+ data.tar.gz: 183c2c1ec58354221199334845008b8dcda208e3e8dd3d14863d78c9a7b67af7
5
5
  SHA512:
6
- metadata.gz: 587b618465fcf09de7538c336197232eedc9f12eee4b03188a35353feacd57303c944b83b23163aeb1402a644180c09d267638acbed61904cadab52bb2bac639
7
- data.tar.gz: de4e860fd0698608044e88afd63c825bd7767c178ff5052e17fb6cc0b2a4e6d0f5131f35b2b85039aefbd23de98b5de3242357d79f1bc9bf86469f7576bf2bd5
6
+ metadata.gz: 8f6a82928de9fb559a30f7abf35e61538e0f3f7fb3ea7146cd257cff3cbf58372ecb5595bc176cf5a55b76105ff189fcbf6ab6451f518043a0070dff8bfd7f72
7
+ data.tar.gz: 197f108c5496124e4cb005cafe3560adfdf4719d68f60d413fc38c70d4aeaa4bcadb196a99a39d2a5b75b8bde248ffa1ac1ccd5ff3a82958f4a5d61ce7490125
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ *.bak
9
10
  *.gem
10
11
  .rspec_status
11
12
  Gemfile.lock
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
- # Freefeed
1
+ # Freefeed::Client
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/freefeed`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ [Freefeed](https://freefeed.net) API wrapper extracted from the [Feeder](https://frf.im) project.
6
4
 
7
5
  ## Installation
8
6
 
data/bin/purge_samples ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "pry"
5
+
6
+ PATH = File.join(File.expand_path("..", __dir__), "spec/fixtures/files")
7
+
8
+ # Object fields to replace with generic values:
9
+ #
10
+ # users
11
+ # username
12
+ # screenName
13
+ # description
14
+ #
15
+ # posts
16
+ # body
17
+ #
18
+ # comments
19
+ # body
20
+
21
+
22
+ def purge_user(data, index)
23
+ data["username"] = "user#{index}"
24
+ data["screenName"] = "User ##{index}"
25
+ data["description"] = "Sample description"
26
+ end
27
+
28
+ def purge_content(data)
29
+ data["body"] = "Sample content"
30
+ end
31
+
32
+ Dir.glob("#{PATH}/**/*.json").each do |file_name|
33
+ backup_copy = "#{file_name}.bak"
34
+ FileUtils.rm_rf(backup_copy)
35
+ FileUtils.mv(file_name, backup_copy)
36
+
37
+ data = JSON.parse(File.read(backup_copy))
38
+ next unless data.is_a?(Hash)
39
+
40
+ (data["users"] || []).each_with_index { |user, index| purge_user(user, index) }
41
+ (data["admins"] || []).each_with_index { |user, index| purge_user(user, index) }
42
+
43
+ (data["posts"] || []).each_with_index { |entity| purge_content(entity) }
44
+ (data["comments"] || []).each_with_index { |entity| purge_content(entity) }
45
+
46
+ File.open(file_name, "wt").write(JSON.pretty_generate(data))
47
+ end
data/freefeed.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.email = ["alex.musayev@gmail.com"].freeze
12
12
 
13
13
  spec.summary = "Freefeed API wrapper"
14
- spec.description = "Freefeed API wrapper"
14
+ spec.description = spec.summary
15
15
  spec.homepage = "https://github.com/dreikanter/freefeed"
16
16
  spec.license = "MIT"
17
17
 
@@ -35,8 +35,9 @@ Gem::Specification.new do |spec|
35
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
36
  spec.require_paths = ["lib"]
37
37
 
38
- spec.add_dependency "dry-initializer", ">= 3.0.2", "< 4"
39
- spec.add_dependency "http", ">= 4.2.0", "< 5"
38
+ spec.add_dependency "dry-initializer", "~> 3.0.2"
39
+ spec.add_dependency "http", "~> 4.2.0"
40
+ spec.add_dependency "mimemagic", "~> 0.3.3"
40
41
 
41
42
  spec.add_development_dependency "bundler", "~> 2.0"
42
43
  spec.add_development_dependency "pry", "~> 0.12.2"
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "freefeed/request"
4
+
5
+ module Freefeed
6
+ class AuthenticatedRequest < Request
7
+ private
8
+
9
+ def headers
10
+ super.merge(authorization: "Bearer #{client.token}")
11
+ end
12
+ end
13
+ end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "logger"
4
3
  require "dry-initializer"
5
4
  require "freefeed/constants"
6
5
  require "freefeed/v1/attachments"
7
- require "freefeed/v2/users"
6
+ require "freefeed/v1/comments"
7
+ require "freefeed/v1/posts"
8
+ require "freefeed/v2/posts"
8
9
  require "freefeed/v2/timelines"
10
+ require "freefeed/v2/users"
9
11
  require "freefeed/version"
10
12
 
11
13
  module Freefeed
@@ -13,8 +15,11 @@ module Freefeed
13
15
  extend Dry::Initializer
14
16
 
15
17
  include Freefeed::V1::Attachments
16
- include Freefeed::V2::Users
18
+ include Freefeed::V1::Comments
19
+ include Freefeed::V1::Posts
20
+ include Freefeed::V2::Posts
17
21
  include Freefeed::V2::Timelines
22
+ include Freefeed::V2::Users
18
23
 
19
24
  option :token
20
25
  option :logger, default: -> { Freefeed::LOGGER }
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "logger"
4
+
3
5
  module Freefeed
4
6
  BASE_URL = "https://freefeed.net"
5
7
  LOGGER = Logger.new(STDOUT)
@@ -30,25 +30,16 @@ module Freefeed
30
30
  end
31
31
 
32
32
  def request_params
33
- options[:params] || {}
33
+ options.slice(:json, :form, :params, :body)
34
34
  end
35
35
 
36
36
  def headers
37
- return common_headers unless authenticate?
38
- common_headers.merge(authorization: "Bearer #{client.token}")
39
- end
40
-
41
- def common_headers
42
37
  {
43
38
  accept: "*/*",
44
39
  user_agent: "#{Freefeed::Client.name}/#{Freefeed::VERSION}"
45
40
  }
46
41
  end
47
42
 
48
- def authenticate?
49
- !!(options[:auth] && client.token)
50
- end
51
-
52
43
  def user_agent
53
44
  "#{Freefeed::Client.name}/#{Freefeed::VERSION}"
54
45
  end
@@ -1,19 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "freefeed/request"
4
+ require "freefeed/authenticated_request"
5
+
3
6
  module Freefeed
4
7
  module Utils
5
8
  def authenticated_request(request_method, path, params = {})
6
- perform_request(request_method, path, params: params, auth: true)
9
+ AuthenticatedRequest.new(self, request_method, path, params).call
7
10
  end
8
11
 
9
12
  def request(request_method, path, params = {})
10
- perform_request(request_method, path, params: params, auth: false)
11
- end
12
-
13
- private
14
-
15
- def perform_request(request_method, path, options)
16
- Freefeed::Request.new(self, request_method, path, options).call
13
+ Request.new(self, request_method, path, params).call
17
14
  end
18
15
  end
19
16
  end
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "freefeed/request"
3
+ require "freefeed/utils"
4
+ require "mimemagic"
4
5
 
5
6
  module Freefeed
6
7
  module V1
7
8
  module Attachments
9
+ # @param [String, Pathname, IO] source could by a file path
10
+ # or an IO object
8
11
  def create_attachment(source)
9
12
  options = { form: { file: file(source) } }
10
13
  authenticated_request(:post, "/v1/attachments", options)
@@ -13,7 +16,12 @@ module Freefeed
13
16
  private
14
17
 
15
18
  def file(source)
16
- HTTP::FormData::File.new(source, content_type: "image/png")
19
+ HTTP::FormData::File.new(source, content_type: content_type(source))
20
+ end
21
+
22
+ def content_type(source)
23
+ return MimeMagic.by_magic(source) if source.is_a?(IO)
24
+ MimeMagic.by_path(source.to_s)
17
25
  end
18
26
  end
19
27
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "freefeed/utils"
4
+
5
+ module Freefeed
6
+ module V1
7
+ module Comments
8
+ def create_comment(comment)
9
+ authenticated_request(:post, "/v1/comments", json: comment)
10
+ end
11
+
12
+ def update_comment(id, comment)
13
+ authenticated_request(:put, "/v1/comments/#{id}", json: comment)
14
+ end
15
+
16
+ def delete_comment(id)
17
+ authenticated_request(:delete, "/v1/comments/#{id}")
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "freefeed/utils"
4
+
5
+ module Freefeed
6
+ module V1
7
+ module Posts
8
+ include Freefeed::Utils
9
+
10
+ def create_post(post)
11
+ authenticated_request(:post, "/v1/posts", json: post)
12
+ end
13
+
14
+ def update_post(id, post)
15
+ authenticated_request(:put, "/v1/posts/#{id}", json: post)
16
+ end
17
+
18
+ def delete_post(id)
19
+ authenticated_request(:delete, "/v1/posts/#{id}")
20
+ end
21
+
22
+ def like(id)
23
+ authenticated_request(:post, "/v1/posts/#{id}/like")
24
+ end
25
+
26
+ def unlike(id)
27
+ authenticated_request(:post, "/v1/posts/#{id}/unlike")
28
+ end
29
+
30
+ def hide(id)
31
+ authenticated_request(:post, "/v1/posts/#{id}/hide")
32
+ end
33
+
34
+ def unhide(id)
35
+ authenticated_request(:post, "/v1/posts/#{id}/unhide")
36
+ end
37
+
38
+ def save(id)
39
+ authenticated_request(:post, "/v1/posts/#{id}/save")
40
+ end
41
+
42
+ def unsave(id)
43
+ authenticated_request(:delete, "/v1/posts/#{id}/save")
44
+ end
45
+
46
+ def disable_comments(id)
47
+ authenticated_request(:post, "/v1/posts/#{id}/disableComments")
48
+ end
49
+
50
+ def enable_comments(id)
51
+ authenticated_request(:post, "/v1/posts/#{id}/enableComments")
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "freefeed/utils"
4
+
5
+ module Freefeed
6
+ module V2
7
+ module Posts
8
+ include Freefeed::Utils
9
+
10
+ def post(id)
11
+ authenticated_request(:get, "/v2/posts/#{id}")
12
+ end
13
+
14
+ def post_open_graph(id)
15
+ authenticated_request(:get, "/v2/posts-opengraph/#{id}")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -14,6 +14,29 @@ module Freefeed
14
14
  def everything
15
15
  request(:get, "/v2/everything")
16
16
  end
17
+
18
+ def own_timeline(filter: nil, offset: 0)
19
+ request_timeline(filter ? "filter/#{filter}" : "home", offset)
20
+ end
21
+
22
+ def timeline(username, offset: 0)
23
+ request_timeline(username, offset)
24
+ end
25
+
26
+ def comments_timeline(username, offset: 0)
27
+ request_timeline("#{username}/comments", offset)
28
+ end
29
+
30
+ def likes_timeline(username, offset: 0)
31
+ request_timeline("#{username}/likes", offset)
32
+ end
33
+
34
+ private
35
+
36
+ def request_timeline(path, offset)
37
+ params = offset.positive? ? { json: { offset: offset } } : {}
38
+ authenticated_request(:get, "/v2/timelines/#{path}", params)
39
+ end
17
40
  end
18
41
  end
19
42
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "freefeed/request"
3
+ require "freefeed/utils"
4
4
 
5
5
  module Freefeed
6
6
  module V2
@@ -8,6 +8,26 @@ module Freefeed
8
8
  def whoami
9
9
  authenticated_request(:get, "/v2/users/whoami")
10
10
  end
11
+
12
+ def blocked_by_me
13
+ authenticated_request(:get, "/v2/users/blockedByMe")
14
+ end
15
+
16
+ def unread_directs_number
17
+ authenticated_request(:get, "/v2/users/getUnreadDirectsNumber")
18
+ end
19
+
20
+ def unread_notifications_number
21
+ authenticated_request(:get, "/v2/users/getUnreadNotificationsNumber")
22
+ end
23
+
24
+ def mark_all_directs_as_read
25
+ authenticated_request(:get, "/v2/users/markAllDirectsAsRead")
26
+ end
27
+
28
+ def mark_all_notifications_as_read
29
+ authenticated_request(:post, "/v2/users/markAllNotificationsAsRead")
30
+ end
11
31
  end
12
32
  end
13
33
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Freefeed
4
- VERSION = "0.1.1"
4
+ VERSION = "0.5.0"
5
5
  end
metadata CHANGED
@@ -1,55 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freefeed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Musayev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-01 00:00:00.000000000 Z
11
+ date: 2019-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-initializer
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.0.2
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '4'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: 3.0.2
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '4'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: http
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
- - - ">="
31
+ - - "~>"
38
32
  - !ruby/object:Gem::Version
39
33
  version: 4.2.0
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '5'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
- - - ">="
38
+ - - "~>"
48
39
  - !ruby/object:Gem::Version
49
40
  version: 4.2.0
50
- - - "<"
41
+ - !ruby/object:Gem::Dependency
42
+ name: mimemagic
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
51
53
  - !ruby/object:Gem::Version
52
- version: '5'
54
+ version: 0.3.3
53
55
  - !ruby/object:Gem::Dependency
54
56
  name: bundler
55
57
  requirement: !ruby/object:Gem::Requirement
@@ -168,15 +170,20 @@ files:
168
170
  - README.md
169
171
  - Rakefile
170
172
  - bin/console
173
+ - bin/purge_samples
171
174
  - bin/setup
172
175
  - freefeed.gemspec
173
176
  - lib/freefeed.rb
177
+ - lib/freefeed/authenticated_request.rb
174
178
  - lib/freefeed/client.rb
175
179
  - lib/freefeed/constants.rb
176
180
  - lib/freefeed/error.rb
177
181
  - lib/freefeed/request.rb
178
182
  - lib/freefeed/utils.rb
179
183
  - lib/freefeed/v1/attachments.rb
184
+ - lib/freefeed/v1/comments.rb
185
+ - lib/freefeed/v1/posts.rb
186
+ - lib/freefeed/v2/posts.rb
180
187
  - lib/freefeed/v2/timelines.rb
181
188
  - lib/freefeed/v2/users.rb
182
189
  - lib/freefeed/version.rb