arena 0.0.9 → 0.1.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.
- data/.gitignore +1 -0
- data/README.md +16 -1
- data/lib/arena.rb +8 -7
- data/lib/arena/account.rb +26 -0
- data/lib/arena/api.rb +47 -11
- data/lib/arena/block.rb +4 -20
- data/lib/arena/cache.rb +25 -0
- data/lib/arena/cache/adaptor/generic.rb +11 -0
- data/lib/arena/cache/adaptor/null.rb +13 -0
- data/lib/arena/cache/adaptor/padrino.rb +13 -0
- data/lib/arena/cache/adaptor/rails.rb +26 -0
- data/lib/arena/channel.rb +22 -7
- data/lib/arena/client.rb +9 -12
- data/lib/arena/comment.rb +19 -0
- data/lib/arena/configurable.rb +10 -6
- data/lib/arena/connectable.rb +21 -4
- data/lib/arena/connection.rb +10 -0
- data/lib/arena/core_ext/string.rb +1 -3
- data/lib/arena/default.rb +15 -6
- data/lib/arena/entities/avatar.rb +13 -0
- data/lib/arena/entities/embed.rb +4 -5
- data/lib/arena/entities/image.rb +1 -1
- data/lib/arena/error/cache_error.rb +10 -0
- data/lib/arena/feed.rb +36 -0
- data/lib/arena/group.rb +21 -0
- data/lib/arena/search_results.rb +13 -10
- data/lib/arena/story.rb +31 -0
- data/lib/arena/summary.rb +11 -0
- data/lib/arena/user.rb +13 -7
- data/lib/arena/version.rb +1 -1
- metadata +17 -3
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -18,9 +18,24 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
Register an application at http://dev.are.na
|
20
20
|
|
21
|
-
### Configure for personal use
|
21
|
+
### Configure for personal use (optional; be aware this grants access to everything your account has access to)
|
22
22
|
```ruby
|
23
23
|
Arena.configure do |config|
|
24
24
|
config.access_token = 'XXXXXXXXXXXXX'
|
25
25
|
end
|
26
26
|
```
|
27
|
+
|
28
|
+
### Simple usage example
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
@channel = Arena.channel(params[:id])
|
32
|
+
```
|
33
|
+
|
34
|
+
```erb
|
35
|
+
<% @channel.contents.each do |connectable| %>
|
36
|
+
<%= connectable.title %>
|
37
|
+
<% if connectable.has_image? %>
|
38
|
+
<img src="<%= connectable.image.display.url %>" alt="<%= connectable.title %>" />
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
41
|
+
```
|
data/lib/arena.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require "arena/version"
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
|
3
|
+
load "arena/client.rb"
|
4
|
+
load "arena/default.rb"
|
5
|
+
load "arena/configurable.rb"
|
5
6
|
|
6
7
|
module Arena
|
7
8
|
class << self
|
@@ -10,6 +11,7 @@ module Arena
|
|
10
11
|
# Delegate to a Arena::Client
|
11
12
|
#
|
12
13
|
# @return [Arena::Client]
|
14
|
+
#
|
13
15
|
def client
|
14
16
|
if @client
|
15
17
|
@client
|
@@ -23,8 +25,7 @@ module Arena
|
|
23
25
|
def method_missing(method, *args, &block)
|
24
26
|
self.client.send(method, *args, &block)
|
25
27
|
end
|
28
|
+
end # self
|
29
|
+
end # Arena
|
26
30
|
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
Arena.setup
|
31
|
+
Arena.setup
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "arena/base"
|
2
|
+
require "arena/user"
|
3
|
+
|
4
|
+
module Arena
|
5
|
+
class Account < Arena::Base
|
6
|
+
def user
|
7
|
+
@user ||= Arena::User.new(@attrs["user"])
|
8
|
+
end
|
9
|
+
|
10
|
+
def channels
|
11
|
+
@channels ||= @attrs["channels"].collect { |channel| Arena::Channel.new(channel) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def help_channels
|
15
|
+
@help_channels ||= @attrs["help_channels"].collect { |channel| Arena::Channel.new(channel) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def following_channel_ids
|
19
|
+
@following_channel_ids ||= @attrs["following_ids"]["channels"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def following_user_ids
|
23
|
+
@following_user_ids ||= @attrs["following_ids"]["users"]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/arena/api.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require "arena/user"
|
2
|
+
require "arena/block"
|
3
|
+
require "arena/channel"
|
4
|
+
require "arena/results"
|
5
|
+
require "arena/search_results"
|
6
|
+
require "arena/account"
|
7
|
+
require "arena/comment"
|
8
|
+
require "arena/feed"
|
6
9
|
|
7
10
|
module Arena
|
8
11
|
module API
|
@@ -46,6 +49,11 @@ module Arena
|
|
46
49
|
object_from_response(Arena::Block, :get, "/blocks/#{id}", options)
|
47
50
|
end
|
48
51
|
|
52
|
+
# Returns Block comments
|
53
|
+
def block_comments(id, options={})
|
54
|
+
collection_from_response(Arena::Comment, :get, "/blocks/#{id}/comments", "comments", options)
|
55
|
+
end
|
56
|
+
|
49
57
|
# Returns a User representation
|
50
58
|
def user(id, options={})
|
51
59
|
object_from_response(Arena::User, :get, "/users/#{id}", options)
|
@@ -56,18 +64,47 @@ module Arena
|
|
56
64
|
object_from_response(Arena::ChannelResults, :get, "/users/#{id}/channels", options)
|
57
65
|
end
|
58
66
|
|
67
|
+
# Full representation of the account endpoint
|
68
|
+
def account(options={})
|
69
|
+
require_authentication!
|
70
|
+
|
71
|
+
object_from_response(Arena::Account, :get, "/accounts", options)
|
72
|
+
end
|
73
|
+
|
59
74
|
# All of the authenticated user's Channels
|
60
75
|
def account_channels(options={})
|
76
|
+
require_authentication!
|
77
|
+
|
61
78
|
object_from_response(Arena::ChannelResults, :get, "/accounts/channels", options)
|
62
79
|
end
|
63
80
|
|
81
|
+
# Returns the authenticated user's settings
|
82
|
+
def settings(options={})
|
83
|
+
require_authentication!
|
84
|
+
|
85
|
+
object_from_response(Arena::User, :get, "/accounts/settings", options)
|
86
|
+
end
|
87
|
+
|
64
88
|
# Returns a Search object with an Array for Channels, Blocks and Users
|
65
|
-
def search(query,
|
66
|
-
|
89
|
+
def search(query, options={})
|
90
|
+
path = options[:kind].nil? ? "/search/?q=#{query}" : "/search/#{options[:kind]}/?q=#{query}"
|
91
|
+
|
92
|
+
object_from_response(Arena::SearchResults, :get, path, options)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Returns a Feed object with an arry of Stories
|
96
|
+
def feed(options={})
|
97
|
+
require_authentication!
|
98
|
+
|
99
|
+
object_from_response(Arena::Feed, :get, "/feed", options)
|
67
100
|
end
|
68
101
|
|
69
102
|
private
|
70
103
|
|
104
|
+
def require_authentication!
|
105
|
+
# todo: Raise error if key missing
|
106
|
+
end
|
107
|
+
|
71
108
|
def object_from_response(klass, request_method, url, options={})
|
72
109
|
response = send(request_method.to_sym, url, options)
|
73
110
|
klass.new(response)
|
@@ -77,9 +114,8 @@ module Arena
|
|
77
114
|
array.collect { |element| klass.new(element) }
|
78
115
|
end
|
79
116
|
|
80
|
-
def collection_from_response(klass, request_method, url, options={}
|
117
|
+
def collection_from_response(klass, request_method, url, selector, options={})
|
81
118
|
collection_from_array(klass, send(request_method.to_sym, url, options)[selector])
|
82
119
|
end
|
83
|
-
|
84
|
-
|
85
|
-
end
|
120
|
+
end # API
|
121
|
+
end # Arena
|
data/lib/arena/block.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'arena/base'
|
2
|
+
require 'arena/creatable'
|
3
|
+
require 'arena/connectable'
|
2
4
|
require 'arena/entity'
|
3
5
|
require 'arena/entities/source'
|
4
6
|
require 'arena/entities/image'
|
5
7
|
require 'arena/entities/attachment'
|
6
8
|
require 'arena/entities/embed'
|
7
|
-
require 'arena/creatable'
|
8
|
-
require 'arena/connectable'
|
9
9
|
|
10
10
|
module Arena
|
11
11
|
class Block < Arena::Base
|
@@ -15,10 +15,6 @@ module Arena
|
|
15
15
|
attr_reader :id, :title, :generated_title, :state, :comment_count, :content,
|
16
16
|
:content_html, :description, :description_html
|
17
17
|
|
18
|
-
def user
|
19
|
-
@user ||= Arena::User.new(@attrs['user'])
|
20
|
-
end
|
21
|
-
|
22
18
|
def _class
|
23
19
|
@_class ||= @attrs['class']
|
24
20
|
end
|
@@ -28,7 +24,7 @@ module Arena
|
|
28
24
|
end
|
29
25
|
|
30
26
|
def source
|
31
|
-
@source ||= Arena::Entity::Source.new(@attrs['source'])
|
27
|
+
@source ||= Arena::Entity::Source.new(@attrs['source']) if !@attrs['source'].nil?
|
32
28
|
end
|
33
29
|
|
34
30
|
def image
|
@@ -42,18 +38,6 @@ module Arena
|
|
42
38
|
def embed
|
43
39
|
@embed ||= Arena::Entity::Embed.new(@attrs['embed']) if has_embed?
|
44
40
|
end
|
45
|
-
|
46
|
-
def connections
|
47
|
-
@connections ||= @attrs['connections'].collect { |channel| Arena::Channel.new(channel) }
|
48
|
-
end
|
49
|
-
|
50
|
-
# Detect optional portions of the response
|
51
|
-
[:image, :attachment, :embed].each do |kind|
|
52
|
-
define_method "has_#{kind}?" do
|
53
|
-
!@attrs[kind.to_s].nil?
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
41
|
end
|
58
42
|
|
59
43
|
class Text < Block; end
|
@@ -61,4 +45,4 @@ module Arena
|
|
61
45
|
class Link < Block; end
|
62
46
|
class Media < Block; end
|
63
47
|
class Attachment < Block; end
|
64
|
-
end
|
48
|
+
end
|
data/lib/arena/cache.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "arena/cache/adaptor/rails"
|
2
|
+
require "arena/cache/adaptor/padrino"
|
3
|
+
require "arena/cache/adaptor/null"
|
4
|
+
|
5
|
+
module Arena
|
6
|
+
module Cache
|
7
|
+
class << self
|
8
|
+
def adapt_to
|
9
|
+
if defined?(Rails)
|
10
|
+
"Rails"
|
11
|
+
elsif defined?(Padrino)
|
12
|
+
"Padrino"
|
13
|
+
else
|
14
|
+
"Null"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Delegate to the appropriate cache engine
|
19
|
+
#
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
"Arena::Cache::Adaptor::#{adapt_to}".constantize.send(method, *args, &block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "arena/cache/adaptor/generic"
|
2
|
+
|
3
|
+
module Arena
|
4
|
+
module Cache
|
5
|
+
module Adaptor
|
6
|
+
class Rails < Arena::Cache::Adaptor::Generic
|
7
|
+
def self.method_missing(method, *args, &block)
|
8
|
+
# Brittle/ugly but works for the time being
|
9
|
+
#
|
10
|
+
key = args.present? ? "arena_#{method}_#{args.first}" : "arena_#{method}"
|
11
|
+
cache = Rails.cache.read(key)
|
12
|
+
|
13
|
+
if cache.nil?
|
14
|
+
object = args.present? ? Arena.send(method, args.first) : Arena.send(method)
|
15
|
+
|
16
|
+
Rails.cache.write(key, object, expires_in: Arena.expires_in)
|
17
|
+
|
18
|
+
cache = Rails.cache.read(key)
|
19
|
+
end
|
20
|
+
|
21
|
+
cache
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/arena/channel.rb
CHANGED
@@ -13,10 +13,6 @@ module Arena
|
|
13
13
|
:slug, :length, :kind, :status, :user_id, :total_pages,
|
14
14
|
:current_page, :per, :follower_count
|
15
15
|
|
16
|
-
def user
|
17
|
-
@user ||= Arena::User.new(@attrs['user'])
|
18
|
-
end
|
19
|
-
|
20
16
|
def _class
|
21
17
|
@attrs['class']
|
22
18
|
end
|
@@ -29,15 +25,34 @@ module Arena
|
|
29
25
|
@contents ||= @attrs['contents'].collect { |object| "Arena::#{object['class']}".constantize.new(object) }
|
30
26
|
end
|
31
27
|
|
28
|
+
def contents_updated_at
|
29
|
+
# todo
|
30
|
+
end
|
31
|
+
|
32
|
+
def connection_count
|
33
|
+
@connection_count ||= contents.collect(&:connections).flatten.size
|
34
|
+
end
|
35
|
+
|
32
36
|
def collaborators
|
33
37
|
@collaborators ||= @attrs['collaborators'].collect { |user| Arena::User.new(user) }
|
34
38
|
end
|
35
39
|
|
40
|
+
def contributors
|
41
|
+
@contributors ||= contents.collect(&:user).uniq(&:id)
|
42
|
+
end
|
43
|
+
|
44
|
+
def flat_connections
|
45
|
+
@flat_connections ||= contents.collect(&:connections).flatten.compact.uniq(&:id)
|
46
|
+
end
|
47
|
+
|
36
48
|
%w(image text link media attachment channel).each do |kind|
|
37
49
|
define_method "#{kind}s" do
|
38
50
|
contents.select { |connectable| connectable._class.downcase == kind }
|
39
51
|
end
|
40
52
|
end
|
41
|
-
|
42
|
-
|
43
|
-
|
53
|
+
|
54
|
+
def blocks
|
55
|
+
contents.select { |connectable| connectable._base_class == "Block" }
|
56
|
+
end
|
57
|
+
end # Channel < Arena::Base
|
58
|
+
end # Arena
|
data/lib/arena/client.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require "arena/configurable"
|
2
|
+
require "arena/error"
|
3
|
+
require "arena/api"
|
4
|
+
require "httparty"
|
5
|
+
require "json"
|
6
6
|
|
7
7
|
module Arena
|
8
|
-
|
9
8
|
class Client
|
10
9
|
include HTTParty
|
11
10
|
include Arena::Configurable
|
@@ -18,6 +17,7 @@ module Arena
|
|
18
17
|
end
|
19
18
|
|
20
19
|
# Performs HTTP GET POST PUT and DELETE requests
|
20
|
+
#
|
21
21
|
%w(get post put delete).each do |method|
|
22
22
|
define_method method do |path, options={}|
|
23
23
|
options = { query: options, headers: set_headers }
|
@@ -30,9 +30,9 @@ module Arena
|
|
30
30
|
|
31
31
|
def set_headers
|
32
32
|
if !@access_token.nil?
|
33
|
-
{
|
33
|
+
{ "Authorization" => "Bearer #{@access_token}" }
|
34
34
|
elsif !@auth_token.nil?
|
35
|
-
{
|
35
|
+
{ "X-AUTH-TOKEN" => @auth_token }
|
36
36
|
else
|
37
37
|
{ }
|
38
38
|
end
|
@@ -52,12 +52,9 @@ module Arena
|
|
52
52
|
|
53
53
|
raise Arena::Error.new(error_message(parsed)) if error?(response)
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
parsed
|
57
56
|
rescue JSON::ParserError, TypeError
|
58
57
|
nil
|
59
58
|
end
|
60
|
-
|
61
59
|
end
|
62
|
-
|
63
60
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "arena/base"
|
2
|
+
require "arena/user"
|
3
|
+
require "arena/creatable"
|
4
|
+
|
5
|
+
module Arena
|
6
|
+
class Comment < Arena::Base
|
7
|
+
include Arena::Creatable
|
8
|
+
|
9
|
+
attr_reader :id, :commentable_id, :commentable_type, :body
|
10
|
+
|
11
|
+
def _class
|
12
|
+
@_class ||= @attrs["class"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def user
|
16
|
+
@user ||= Arena::User.new(@attrs["user"])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/arena/configurable.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
module Arena
|
2
2
|
module Configurable
|
3
3
|
attr_accessor :base_domain,
|
4
|
-
:api_version
|
4
|
+
:api_version,
|
5
|
+
:use_caching,
|
6
|
+
:expires_in
|
5
7
|
|
6
8
|
attr_writer :application_id,
|
7
9
|
:application_secret,
|
@@ -16,15 +18,18 @@ module Arena
|
|
16
18
|
:application_id,
|
17
19
|
:application_secret,
|
18
20
|
:access_token,
|
19
|
-
:auth_token
|
21
|
+
:auth_token,
|
22
|
+
:use_caching,
|
23
|
+
:expires_in
|
20
24
|
]
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
24
|
-
# Allows configuration options
|
25
|
-
#
|
28
|
+
# Allows configuration options to be set in a block
|
29
|
+
#
|
26
30
|
def configure
|
27
31
|
yield self
|
32
|
+
|
28
33
|
self
|
29
34
|
end
|
30
35
|
|
@@ -32,6 +37,7 @@ module Arena
|
|
32
37
|
Arena::Configurable.keys.each do |key|
|
33
38
|
instance_variable_set(:"@#{key}", Arena::Default.options[key])
|
34
39
|
end
|
40
|
+
|
35
41
|
self
|
36
42
|
end
|
37
43
|
|
@@ -39,10 +45,8 @@ module Arena
|
|
39
45
|
|
40
46
|
private
|
41
47
|
|
42
|
-
# @return [Hash]
|
43
48
|
def options
|
44
49
|
Hash[Arena::Configurable.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
|
45
50
|
end
|
46
|
-
|
47
51
|
end
|
48
52
|
end
|
data/lib/arena/connectable.rb
CHANGED
@@ -2,6 +2,9 @@ require 'time'
|
|
2
2
|
|
3
3
|
module Arena
|
4
4
|
module Connectable
|
5
|
+
def user
|
6
|
+
@user ||= Arena::User.new(@attrs['user']) if !@attrs['user'].nil?
|
7
|
+
end
|
5
8
|
|
6
9
|
%w(position selected connection_id).each do |method|
|
7
10
|
define_method method do
|
@@ -16,6 +19,21 @@ module Arena
|
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
22
|
+
# Detect optional portions of the response
|
23
|
+
%w(image attachment embed).each do |kind|
|
24
|
+
define_method "has_#{kind}?" do
|
25
|
+
!@attrs[kind.to_s].nil?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def is_block?
|
30
|
+
_base_class == "Block"
|
31
|
+
end
|
32
|
+
|
33
|
+
def connections
|
34
|
+
@connections ||= @attrs['connections'].collect { |channel| Arena::Channel.new(channel) } if !@attrs['connections'].nil?
|
35
|
+
end
|
36
|
+
|
19
37
|
def connected_at
|
20
38
|
@connected_at ||= Time.parse(@attrs['connected_at']) if connected?
|
21
39
|
end
|
@@ -29,7 +47,7 @@ module Arena
|
|
29
47
|
'id' => @attrs['connected_by_user_id'],
|
30
48
|
'username' => @attrs['connected_by_username'],
|
31
49
|
'full_name' => @attrs['connected_by_username']
|
32
|
-
})
|
50
|
+
}) if connected?
|
33
51
|
end
|
34
52
|
|
35
53
|
private
|
@@ -37,6 +55,5 @@ module Arena
|
|
37
55
|
def connected?
|
38
56
|
!@attrs['connected_at'].nil?
|
39
57
|
end
|
40
|
-
|
41
|
-
|
42
|
-
end
|
58
|
+
end # Connectable
|
59
|
+
end # Arena
|
data/lib/arena/default.rb
CHANGED
@@ -2,9 +2,10 @@ module Arena
|
|
2
2
|
module Default
|
3
3
|
BASE_DOMAIN = "api.are.na" unless defined? BASE_DOMAIN
|
4
4
|
API_VERSION = "v2" unless defined? API_VERSION
|
5
|
+
USE_CACHING = false unless defined? USE_CACHING
|
6
|
+
EXPIRES_IN = 600 unless defined? EXPIRES_IN # 10 minutes
|
5
7
|
|
6
8
|
class << self
|
7
|
-
# @return [Hash]
|
8
9
|
def options
|
9
10
|
Hash[Arena::Configurable.keys.map{|key| [key, send(key)]}]
|
10
11
|
end
|
@@ -18,20 +19,28 @@ module Arena
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def application_id
|
21
|
-
ENV[
|
22
|
+
ENV["APPLICATION_ID"]
|
22
23
|
end
|
23
24
|
|
24
25
|
def application_secret
|
25
|
-
ENV[
|
26
|
+
ENV["APPLICATION_SECRET"]
|
26
27
|
end
|
27
28
|
|
28
29
|
def access_token
|
29
|
-
ENV[
|
30
|
+
ENV["APPLICATION_SECRET"]
|
30
31
|
end
|
31
32
|
|
32
33
|
def auth_token
|
33
|
-
ENV[
|
34
|
+
ENV["AUTH_TOKEN"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def use_caching
|
38
|
+
USE_CACHING
|
39
|
+
end
|
40
|
+
|
41
|
+
def expires_in
|
42
|
+
EXPIRES_IN
|
34
43
|
end
|
35
44
|
end
|
36
45
|
end
|
37
|
-
end
|
46
|
+
end
|
data/lib/arena/entities/embed.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require 'arena/entities/version'
|
1
|
+
require "arena/entity"
|
3
2
|
|
4
3
|
module Arena
|
5
4
|
class Entity
|
6
5
|
class Embed < Arena::Entity
|
7
6
|
attr_reader :embed, :url, :type, :title, :author_name, :author_url,
|
8
7
|
:source_url, :thumbnail_url, :width, :height, :html
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
8
|
+
end # Embed
|
9
|
+
end # Entity
|
10
|
+
end # Arena
|
data/lib/arena/entities/image.rb
CHANGED
@@ -9,7 +9,7 @@ module Arena
|
|
9
9
|
|
10
10
|
attr_reader :filename, :content_type
|
11
11
|
|
12
|
-
%w(thumb display original).each do |method|
|
12
|
+
%w(thumb square display large original).each do |method|
|
13
13
|
define_method method do
|
14
14
|
instance_variable_set("@#{method}", Arena::Entity::Version.new(@attrs[method])) unless instance_variable_get "@#{method}"
|
15
15
|
instance_variable_get "@#{method}"
|
data/lib/arena/feed.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require "arena/base"
|
2
|
+
require "arena/story"
|
3
|
+
require "arena/group"
|
4
|
+
|
5
|
+
module Arena
|
6
|
+
class Feed < Arena::Base
|
7
|
+
attr_reader :type, :limit, :total, :offset, :range_start, :range_end
|
8
|
+
|
9
|
+
def stories
|
10
|
+
@stories ||= @attrs["items"].collect { |item| Arena::Story.new(item) } if stories?
|
11
|
+
end
|
12
|
+
|
13
|
+
alias items stories
|
14
|
+
|
15
|
+
def groups
|
16
|
+
if stories?
|
17
|
+
groups = items.group_by do |item|
|
18
|
+
target = "#{item.target.id}_" if !item.target.nil?
|
19
|
+
|
20
|
+
"#{item.user.id}_#{target}#{item.action.gsub(' ', '_')}"
|
21
|
+
end
|
22
|
+
|
23
|
+
@groups ||=
|
24
|
+
groups.collect { |key, stories| Arena::Group.new(key, stories) }.
|
25
|
+
sort_by { |group| group.summary.indicative.created_at }.reverse!
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def stories?
|
32
|
+
!@attrs["items"].nil?
|
33
|
+
end
|
34
|
+
|
35
|
+
end # Feed
|
36
|
+
end # Arena
|
data/lib/arena/group.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "arena/story"
|
2
|
+
require "arena/summary"
|
3
|
+
|
4
|
+
module Arena
|
5
|
+
class Group
|
6
|
+
attr_reader :id, :stories
|
7
|
+
|
8
|
+
def initialize(id, stories)
|
9
|
+
@id = id
|
10
|
+
@stories = stories
|
11
|
+
end
|
12
|
+
|
13
|
+
def created_at
|
14
|
+
@created_at ||= stories.first.created_at
|
15
|
+
end
|
16
|
+
|
17
|
+
def summary
|
18
|
+
@summary ||= Arena::Summary.new(stories)
|
19
|
+
end
|
20
|
+
end # Group
|
21
|
+
end # Arena
|
data/lib/arena/search_results.rb
CHANGED
@@ -1,14 +1,17 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require "arena/core_ext/string"
|
2
|
+
require "arena/base"
|
3
|
+
require "arena/channel"
|
4
|
+
require "arena/user"
|
5
|
+
require "arena/block"
|
6
6
|
|
7
7
|
module Arena
|
8
8
|
class SearchResults < Arena::Base
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
attr_reader :term,
|
10
|
+
:per,
|
11
|
+
:current_page,
|
12
|
+
:total_pages,
|
13
|
+
:length,
|
14
|
+
:authenticated
|
12
15
|
|
13
16
|
%w(user channel block).each do |method|
|
14
17
|
define_method "#{method}s" do
|
@@ -18,5 +21,5 @@ module Arena
|
|
18
21
|
instance_variable_get "@#{method}s"
|
19
22
|
end
|
20
23
|
end
|
21
|
-
end
|
22
|
-
end
|
24
|
+
end # SearchResults
|
25
|
+
end # Arena
|
data/lib/arena/story.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require "arena/base"
|
2
|
+
require "arena/creatable"
|
3
|
+
require "arena/user"
|
4
|
+
require "arena/block"
|
5
|
+
require "arena/channel"
|
6
|
+
require "arena/connection"
|
7
|
+
|
8
|
+
module Arena
|
9
|
+
class Story < Arena::Base
|
10
|
+
include Arena::Creatable
|
11
|
+
|
12
|
+
attr_reader :id, :action, :bulletin_id, :connector, :created_at
|
13
|
+
|
14
|
+
def user
|
15
|
+
@user ||= Arena::User.new(@attrs["user"])
|
16
|
+
end
|
17
|
+
|
18
|
+
%w(item target parent).each do |method|
|
19
|
+
define_method method do
|
20
|
+
if !@attrs[method].nil?
|
21
|
+
type = "#{method}_type"
|
22
|
+
|
23
|
+
instance_variable_set("@#{method}",
|
24
|
+
"Arena::#{@attrs[type]}".constantize.new(@attrs[method])
|
25
|
+
) unless instance_variable_get "@#{method}"
|
26
|
+
instance_variable_get "@#{method}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end # Story
|
31
|
+
end # Arena
|
data/lib/arena/user.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "arena/base"
|
2
|
+
require "arena/creatable"
|
3
|
+
require "arena/entity"
|
4
|
+
require "arena/entities/avatar"
|
3
5
|
|
4
6
|
module Arena
|
5
7
|
class User < Arena::Base
|
6
8
|
include Arena::Creatable
|
7
9
|
|
8
10
|
attr_reader :id, :slug, :username, :first_name, :last_name,
|
9
|
-
|
10
|
-
|
11
|
+
:full_name, :avatar, :email, :channel_count, :following_count,
|
12
|
+
:profile_id, :follower_count, :initials
|
11
13
|
|
12
14
|
def _class
|
13
|
-
@attrs[
|
15
|
+
@attrs["class"]
|
14
16
|
end
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
def avatar_image
|
19
|
+
Arena::Entity::Avatar.new(@attrs["avatar_image"]) if !@attrs["avatar_image"].nil?
|
20
|
+
end
|
21
|
+
end # User
|
22
|
+
end # Arena
|
data/lib/arena/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arena
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -73,17 +73,26 @@ files:
|
|
73
73
|
- Rakefile
|
74
74
|
- arena.gemspec
|
75
75
|
- lib/arena.rb
|
76
|
+
- lib/arena/account.rb
|
76
77
|
- lib/arena/api.rb
|
77
78
|
- lib/arena/base.rb
|
78
79
|
- lib/arena/block.rb
|
80
|
+
- lib/arena/cache.rb
|
81
|
+
- lib/arena/cache/adaptor/generic.rb
|
82
|
+
- lib/arena/cache/adaptor/null.rb
|
83
|
+
- lib/arena/cache/adaptor/padrino.rb
|
84
|
+
- lib/arena/cache/adaptor/rails.rb
|
79
85
|
- lib/arena/channel.rb
|
80
86
|
- lib/arena/client.rb
|
87
|
+
- lib/arena/comment.rb
|
81
88
|
- lib/arena/configurable.rb
|
82
89
|
- lib/arena/connectable.rb
|
90
|
+
- lib/arena/connection.rb
|
83
91
|
- lib/arena/core_ext/string.rb
|
84
92
|
- lib/arena/creatable.rb
|
85
93
|
- lib/arena/default.rb
|
86
94
|
- lib/arena/entities/attachment.rb
|
95
|
+
- lib/arena/entities/avatar.rb
|
87
96
|
- lib/arena/entities/embed.rb
|
88
97
|
- lib/arena/entities/image.rb
|
89
98
|
- lib/arena/entities/provider.rb
|
@@ -91,8 +100,13 @@ files:
|
|
91
100
|
- lib/arena/entities/version.rb
|
92
101
|
- lib/arena/entity.rb
|
93
102
|
- lib/arena/error.rb
|
103
|
+
- lib/arena/error/cache_error.rb
|
104
|
+
- lib/arena/feed.rb
|
105
|
+
- lib/arena/group.rb
|
94
106
|
- lib/arena/results.rb
|
95
107
|
- lib/arena/search_results.rb
|
108
|
+
- lib/arena/story.rb
|
109
|
+
- lib/arena/summary.rb
|
96
110
|
- lib/arena/user.rb
|
97
111
|
- lib/arena/version.rb
|
98
112
|
- test/lib/arena/version_test.rb
|
@@ -117,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
131
|
version: '0'
|
118
132
|
requirements: []
|
119
133
|
rubyforge_project:
|
120
|
-
rubygems_version: 1.8.
|
134
|
+
rubygems_version: 1.8.25
|
121
135
|
signing_key:
|
122
136
|
specification_version: 3
|
123
137
|
summary: Wrapper for Arena's API
|