freefeed 0.1.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: 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