arena 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|