arena 0.1.3 → 0.2.1

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.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/lint.yml +14 -0
  3. data/.github/workflows/test.yml +14 -0
  4. data/.rubocop.yml +12 -0
  5. data/.rubocop_todo.yml +63 -0
  6. data/Gemfile +12 -0
  7. data/README.md +1 -1
  8. data/Rakefile +9 -4
  9. data/arena.gemspec +16 -18
  10. data/lib/arena/account.rb +9 -7
  11. data/lib/arena/api.rb +42 -40
  12. data/lib/arena/base.rb +6 -5
  13. data/lib/arena/block.rb +5 -3
  14. data/lib/arena/cache/adaptor/generic.rb +3 -1
  15. data/lib/arena/cache/adaptor/null.rb +4 -2
  16. data/lib/arena/cache/adaptor/padrino.rb +3 -1
  17. data/lib/arena/cache/adaptor/rails.rb +7 -5
  18. data/lib/arena/cache.rb +11 -9
  19. data/lib/arena/channel.rb +8 -6
  20. data/lib/arena/channel_feed.rb +9 -8
  21. data/lib/arena/client.rb +27 -17
  22. data/lib/arena/comment.rb +7 -5
  23. data/lib/arena/configurable.rb +15 -13
  24. data/lib/arena/connectable.rb +21 -13
  25. data/lib/arena/connection.rb +6 -4
  26. data/lib/arena/core_ext/string.rb +7 -3
  27. data/lib/arena/creatable.rb +3 -3
  28. data/lib/arena/default.rb +9 -7
  29. data/lib/arena/entities/attachment.rb +4 -2
  30. data/lib/arena/entities/avatar.rb +8 -6
  31. data/lib/arena/entities/embed.rb +7 -5
  32. data/lib/arena/entities/image.rb +7 -2
  33. data/lib/arena/entities/provider.rb +2 -0
  34. data/lib/arena/entities/source.rb +2 -0
  35. data/lib/arena/entities/version.rb +2 -0
  36. data/lib/arena/entity.rb +2 -0
  37. data/lib/arena/error/cache_error.rb +4 -2
  38. data/lib/arena/error.rb +2 -0
  39. data/lib/arena/feed.rb +19 -18
  40. data/lib/arena/group.rb +6 -4
  41. data/lib/arena/results.rb +3 -1
  42. data/lib/arena/search_results.rb +16 -11
  43. data/lib/arena/story.rb +18 -15
  44. data/lib/arena/summary.rb +4 -2
  45. data/lib/arena/user.rb +12 -10
  46. data/lib/arena/user_feed.rb +9 -8
  47. data/lib/arena/version.rb +3 -1
  48. data/lib/arena.rb +12 -14
  49. data/test/cassettes/Arena/channel/handles_a_400_error_that_returns_JSON.yml +39 -0
  50. data/test/cassettes/Arena/channel/handles_a_400_error_that_returns_nil.yml +36 -0
  51. data/test/cassettes/Arena/channel/handles_a_403_error.yml +39 -0
  52. data/test/lib/arena/api_test.rb +23 -0
  53. data/test/lib/arena/version_test.rb +4 -4
  54. data/test/test_helper.rb +5 -1
  55. metadata +19 -73
  56. data/.travis.yml +0 -6
data/lib/arena/user.rb CHANGED
@@ -1,22 +1,24 @@
1
- require "arena/base"
2
- require "arena/creatable"
3
- require "arena/entity"
4
- require "arena/entities/avatar"
1
+ # frozen_string_literal: true
2
+
3
+ require 'arena/base'
4
+ require 'arena/creatable'
5
+ require 'arena/entity'
6
+ require 'arena/entities/avatar'
5
7
 
6
8
  module Arena
7
9
  class User < Arena::Base
8
10
  include Arena::Creatable
9
11
 
10
12
  attr_reader :id, :slug, :username, :first_name, :last_name,
11
- :full_name, :avatar, :email, :channel_count, :following_count,
12
- :profile_id, :follower_count, :initials
13
+ :full_name, :avatar, :email, :channel_count, :following_count,
14
+ :profile_id, :follower_count, :initials
13
15
 
14
16
  def _class
15
- @attrs["class"]
17
+ @attrs['class']
16
18
  end
17
19
 
18
20
  def avatar_image
19
- Arena::Entity::Avatar.new(@attrs["avatar_image"]) if !@attrs["avatar_image"].nil?
21
+ Arena::Entity::Avatar.new(@attrs['avatar_image']) unless @attrs['avatar_image'].nil?
20
22
  end
21
- end # User
22
- end # Arena
23
+ end
24
+ end
@@ -1,21 +1,22 @@
1
- require "arena/base"
2
- require "arena/story"
1
+ # frozen_string_literal: true
2
+
3
+ require 'arena/base'
4
+ require 'arena/story'
3
5
 
4
6
  module Arena
5
7
  class UserFeed < Arena::Base
6
8
  attr_reader :type, :limit, :total, :offset, :range_start, :range_end
7
9
 
8
10
  def stories
9
- @stories ||= @attrs["items"].collect { |item| Arena::Story.new(item) } if stories?
11
+ @stories ||= @attrs['items'].collect { |item| Arena::Story.new(item) } if stories?
10
12
  end
11
13
 
12
14
  alias items stories
13
15
 
14
- private
16
+ private
15
17
 
16
18
  def stories?
17
- !@attrs["items"].nil?
19
+ !@attrs['items'].nil?
18
20
  end
19
-
20
- end # Feed
21
- end # Arena
21
+ end
22
+ end
data/lib/arena/version.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Arena
2
- VERSION = "0.1.3"
4
+ VERSION = '0.2.1'
3
5
 
4
6
  def self.version
5
7
  VERSION
data/lib/arena.rb CHANGED
@@ -1,8 +1,10 @@
1
- require "arena/version"
1
+ # frozen_string_literal: true
2
2
 
3
- load "arena/client.rb"
4
- load "arena/default.rb"
5
- load "arena/configurable.rb"
3
+ require 'arena/version'
4
+
5
+ require 'arena/client'
6
+ require 'arena/default'
7
+ require 'arena/configurable'
6
8
 
7
9
  module Arena
8
10
  class << self
@@ -13,19 +15,15 @@ module Arena
13
15
  # @return [Arena::Client]
14
16
  #
15
17
  def client
16
- if @client
17
- @client
18
- else
19
- @client = Arena::Client.new(options)
20
- end
18
+ @client || @client = Arena::Client.new(options)
21
19
  end
22
20
 
23
- private
21
+ private
24
22
 
25
- def method_missing(method, *args, &block)
26
- self.client.send(method, *args, &block)
23
+ def method_missing(method, ...)
24
+ client.send(method, ...)
27
25
  end
28
- end # self
29
- end # Arena
26
+ end
27
+ end
30
28
 
31
29
  Arena.setup
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.are.na/v2/channels/delightfully-absurd
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 403
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Sat, 11 Oct 2025 20:29:37 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Cache-Control:
28
+ - max-age=604800, private
29
+ Server:
30
+ - cloudflare
31
+ Vary:
32
+ - Origin
33
+ Via:
34
+ - 2.0 heroku-router
35
+ body:
36
+ encoding: UTF-8
37
+ string: '{"code":400,"message":"Internal Server Error","description":"Something went wrong."}'
38
+ recorded_at: Sat, 11 Oct 2025 20:29:37 GMT
39
+ recorded_with: VCR 6.3.1
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.are.na/v2/channels/delightfully-absurd
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 403
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Sat, 11 Oct 2025 20:29:37 GMT
23
+ Content-Type:
24
+ - text/plain; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Cache-Control:
28
+ - max-age=604800, private
29
+ Server:
30
+ - cloudflare
31
+ Vary:
32
+ - Origin
33
+ Via:
34
+ - 2.0 heroku-router
35
+ recorded_at: Sat, 11 Oct 2025 20:29:37 GMT
36
+ recorded_with: VCR 6.3.1
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.are.na/v2/channels/delightfully-absurd
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 403
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Sat, 11 Oct 2025 20:29:37 GMT
23
+ Content-Type:
24
+ - text/plain; charset=utf-8
25
+ Transfer-Encoding:
26
+ - chunked
27
+ Cache-Control:
28
+ - max-age=604800, private
29
+ Server:
30
+ - cloudflare
31
+ Vary:
32
+ - Origin
33
+ Via:
34
+ - 2.0 heroku-router
35
+ body:
36
+ encoding: UTF-8
37
+ string: 'Forbidden'
38
+ recorded_at: Sat, 11 Oct 2025 20:29:37 GMT
39
+ recorded_with: VCR 6.3.1
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../test_helper'
2
4
 
3
5
  describe Arena do
@@ -5,5 +7,26 @@ describe Arena do
5
7
  it 'returns a channel' do
6
8
  assert_kind_of Arena::Channel, Arena.channel('delightfully-absurd')
7
9
  end
10
+
11
+ it 'handles a 403 error' do
12
+ error = assert_raises Arena::Error do
13
+ Arena.channel('delightfully-absurd')
14
+ end
15
+ assert_equal '403: Forbidden', error.message
16
+ end
17
+
18
+ it 'handles a 400 error that returns JSON' do
19
+ error = assert_raises Arena::Error do
20
+ Arena.channel('delightfully-absurd')
21
+ end
22
+ assert_equal '400: Internal Server Error - Something went wrong.', error.message
23
+ end
24
+
25
+ it 'handles a 400 error that returns nil' do
26
+ error = assert_raises Arena::Error do
27
+ Arena.channel('delightfully-absurd')
28
+ end
29
+ assert_equal '403: Unexpected Error', error.message
30
+ end
8
31
  end
9
32
  end
@@ -1,9 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../test_helper'
2
4
 
3
5
  describe Arena do
4
-
5
- it "must be defined" do
6
- Arena::VERSION.wont_be_nil
6
+ it 'must be defined' do
7
+ _(Arena::VERSION).wont_be_nil
7
8
  end
8
-
9
9
  end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ ENV['MT_COMPAT'] = 'true'
4
+
1
5
  require 'minitest/autorun'
2
- require File.expand_path('../../lib/arena.rb', __FILE__)
6
+ require File.expand_path('../lib/arena.rb', __dir__)
3
7
 
4
8
  require 'webmock'
5
9
  require 'vcr'
metadata CHANGED
@@ -1,73 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arena
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - dzuc
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-03 00:00:00.000000000 Z
11
+ date: 2025-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: webmock
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: minitest-vcr
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: json
14
+ name: httparty
71
15
  requirement: !ruby/object:Gem::Requirement
72
16
  requirements:
73
17
  - - ">="
@@ -81,7 +25,7 @@ dependencies:
81
25
  - !ruby/object:Gem::Version
82
26
  version: '0'
83
27
  - !ruby/object:Gem::Dependency
84
- name: httparty
28
+ name: json
85
29
  requirement: !ruby/object:Gem::Requirement
86
30
  requirements:
87
31
  - - ">="
@@ -101,8 +45,11 @@ executables: []
101
45
  extensions: []
102
46
  extra_rdoc_files: []
103
47
  files:
48
+ - ".github/workflows/lint.yml"
49
+ - ".github/workflows/test.yml"
104
50
  - ".gitignore"
105
- - ".travis.yml"
51
+ - ".rubocop.yml"
52
+ - ".rubocop_todo.yml"
106
53
  - Gemfile
107
54
  - LICENSE
108
55
  - README.md
@@ -147,14 +94,18 @@ files:
147
94
  - lib/arena/user.rb
148
95
  - lib/arena/user_feed.rb
149
96
  - lib/arena/version.rb
97
+ - test/cassettes/Arena/channel/handles_a_400_error_that_returns_JSON.yml
98
+ - test/cassettes/Arena/channel/handles_a_400_error_that_returns_nil.yml
99
+ - test/cassettes/Arena/channel/handles_a_403_error.yml
150
100
  - test/cassettes/Arena/channel/returns_a_channel.yml
151
101
  - test/lib/arena/api_test.rb
152
102
  - test/lib/arena/version_test.rb
153
103
  - test/test_helper.rb
154
104
  homepage: https://www.are.na/
155
105
  licenses: []
156
- metadata: {}
157
- post_install_message:
106
+ metadata:
107
+ rubygems_mfa_required: 'true'
108
+ post_install_message:
158
109
  rdoc_options: []
159
110
  require_paths:
160
111
  - lib
@@ -162,20 +113,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
113
  requirements:
163
114
  - - ">="
164
115
  - !ruby/object:Gem::Version
165
- version: '0'
116
+ version: '3.0'
166
117
  required_rubygems_version: !ruby/object:Gem::Requirement
167
118
  requirements:
168
119
  - - ">="
169
120
  - !ruby/object:Gem::Version
170
121
  version: '0'
171
122
  requirements: []
172
- rubyforge_project:
173
- rubygems_version: 2.6.8
174
- signing_key:
123
+ rubygems_version: 3.5.16
124
+ signing_key:
175
125
  specification_version: 4
176
126
  summary: Wrapper for Arena's API
177
- test_files:
178
- - test/cassettes/Arena/channel/returns_a_channel.yml
179
- - test/lib/arena/api_test.rb
180
- - test/lib/arena/version_test.rb
181
- - test/test_helper.rb
127
+ test_files: []
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- rvm:
2
- - 2.5.0
3
-
4
- language: ruby
5
-
6
- cache: bundler