mirror of
https://github.com/nov/fb_graph2
synced 2023-03-27 23:22:15 -04:00
fixed a bug with parsing message_tags
This commit is contained in:
parent
24f6fa5dca
commit
977a4196c2
290 changed files with 27 additions and 8033 deletions
24
fb_graph2.original/.gitignore
vendored
24
fb_graph2.original/.gitignore
vendored
|
@ -1,24 +0,0 @@
|
||||||
*.gem
|
|
||||||
*.rbc
|
|
||||||
.bundle
|
|
||||||
.config
|
|
||||||
.yardoc
|
|
||||||
Gemfile.lock
|
|
||||||
InstalledFiles
|
|
||||||
_yardoc
|
|
||||||
coverage
|
|
||||||
doc/
|
|
||||||
lib/bundler/man
|
|
||||||
pkg
|
|
||||||
rdoc
|
|
||||||
spec/reports
|
|
||||||
test/tmp
|
|
||||||
test/version_tmp
|
|
||||||
tmp
|
|
||||||
*.bundle
|
|
||||||
*.so
|
|
||||||
*.o
|
|
||||||
*.a
|
|
||||||
mkmf.log
|
|
||||||
wiki
|
|
||||||
samples
|
|
|
@ -1,2 +0,0 @@
|
||||||
--color
|
|
||||||
--format=documentation
|
|
|
@ -1,3 +0,0 @@
|
||||||
rvm:
|
|
||||||
- 2.0.0
|
|
||||||
- 2.1.2
|
|
|
@ -1,4 +0,0 @@
|
||||||
source 'https://rubygems.org'
|
|
||||||
|
|
||||||
# Specify your gem's dependencies in fb_graph2.gemspec
|
|
||||||
gemspec
|
|
|
@ -1,22 +0,0 @@
|
||||||
Copyright (c) 2014 nov matake
|
|
||||||
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
@ -1,29 +0,0 @@
|
||||||
# FbGraph2
|
|
||||||
|
|
||||||
Similar to [fb_graph gem](https://github.com/nov/fb_graph), but supports Graph API v2.0+.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Add this line to your application's Gemfile:
|
|
||||||
|
|
||||||
gem 'fb_graph2'
|
|
||||||
|
|
||||||
And then execute:
|
|
||||||
|
|
||||||
$ bundle
|
|
||||||
|
|
||||||
Or install it yourself as:
|
|
||||||
|
|
||||||
$ gem install fb_graph2
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
See [fb_graph2 Wiki](https://github.com/nov/fb_graph2/wiki).
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
1. Fork it ( https://github.com/[my-github-username]/fb_graph2/fork )
|
|
||||||
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
||||||
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
||||||
4. Push to the branch (`git push origin my-new-feature`)
|
|
||||||
5. Create a new Pull Request
|
|
|
@ -1,18 +0,0 @@
|
||||||
require 'bundler/gem_tasks'
|
|
||||||
|
|
||||||
require 'rspec/core/rake_task'
|
|
||||||
RSpec::Core::RakeTask.new(:spec)
|
|
||||||
|
|
||||||
namespace :coverage do
|
|
||||||
desc 'Open coverage report'
|
|
||||||
task :report do
|
|
||||||
require 'simplecov'
|
|
||||||
`open '#{File.join SimpleCov.coverage_path, 'index.html'}'`
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
task :spec do
|
|
||||||
Rake::Task[:'coverage:report'].invoke unless ENV['TRAVIS_RUBY_VERSION']
|
|
||||||
end
|
|
||||||
|
|
||||||
task default: :spec
|
|
|
@ -1 +0,0 @@
|
||||||
0.5.0
|
|
|
@ -1,26 +0,0 @@
|
||||||
Gem::Specification.new do |gem|
|
|
||||||
gem.name = 'fb_graph2'
|
|
||||||
gem.version = File.read('VERSION').delete("\n\r")
|
|
||||||
gem.authors = ['nov matake']
|
|
||||||
gem.email = ['nov@matake.jp']
|
|
||||||
gem.summary = %q{Facebook Graph API v2.0 Wrapper in Ruby}
|
|
||||||
gem.description = %q{Facebook Graph API v2.0 Wrapper in Ruby}
|
|
||||||
gem.homepage = 'https://github.com/nov/fb_graph2'
|
|
||||||
gem.license = 'MIT'
|
|
||||||
|
|
||||||
gem.files = `git ls-files -z`.split("\x0")
|
|
||||||
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
||||||
gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
|
|
||||||
gem.require_paths = ['lib']
|
|
||||||
|
|
||||||
gem.add_runtime_dependency 'httpclient', '>= 2.4'
|
|
||||||
gem.add_runtime_dependency 'rack-oauth2', '>= 1.0'
|
|
||||||
gem.add_runtime_dependency 'url_safe_base64'
|
|
||||||
gem.add_runtime_dependency 'multi_json'
|
|
||||||
gem.add_runtime_dependency 'activesupport', '>= 3.2'
|
|
||||||
gem.add_development_dependency 'rake'
|
|
||||||
gem.add_development_dependency 'simplecov'
|
|
||||||
gem.add_development_dependency 'webmock'
|
|
||||||
gem.add_development_dependency 'rspec'
|
|
||||||
gem.add_development_dependency 'rspec-its'
|
|
||||||
end
|
|
|
@ -1,56 +0,0 @@
|
||||||
require 'active_support'
|
|
||||||
require 'active_support/core_ext'
|
|
||||||
require 'rack/oauth2'
|
|
||||||
|
|
||||||
module FbGraph2
|
|
||||||
mattr_accessor :root_url, :api_version, :gem_version, :logger, :debugging, :_http_config_, :object_classes
|
|
||||||
|
|
||||||
self.root_url = 'https://graph.facebook.com'
|
|
||||||
self.api_version = 'v2.0'
|
|
||||||
self.gem_version = File.read(File.join(__dir__, '../VERSION')).delete("\n\r")
|
|
||||||
self.logger = Logger.new(STDOUT)
|
|
||||||
self.logger.progname = 'FbGraph2'
|
|
||||||
self.object_classes = Array.new
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def debugging?
|
|
||||||
!!self.debugging
|
|
||||||
end
|
|
||||||
def debug!
|
|
||||||
Rack::OAuth2.debug!
|
|
||||||
self.debugging = true
|
|
||||||
end
|
|
||||||
|
|
||||||
def http_client(access_token = nil)
|
|
||||||
_http_client_ = HTTPClient.new(
|
|
||||||
agent_name: "FbGraph2 (#{gem_version})"
|
|
||||||
)
|
|
||||||
_http_client_.request_filter.delete_if do |filter|
|
|
||||||
filter.is_a? HTTPClient::WWWAuth
|
|
||||||
end
|
|
||||||
_http_client_.request_filter << RequestFilter::Authenticator.new(access_token) if access_token.present?
|
|
||||||
_http_client_.request_filter << RequestFilter::Debugger.new if self.debugging?
|
|
||||||
_http_config_.try(:call, _http_client_)
|
|
||||||
_http_client_
|
|
||||||
end
|
|
||||||
def http_config(&block)
|
|
||||||
Rack::OAuth2.http_config &block unless Rack::OAuth2.http_config
|
|
||||||
self._http_config_ ||= block
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
require 'fb_graph2/exception'
|
|
||||||
require 'fb_graph2/attribute_assigner'
|
|
||||||
require 'fb_graph2/node'
|
|
||||||
require 'fb_graph2/collection'
|
|
||||||
require 'fb_graph2/searchable'
|
|
||||||
require 'fb_graph2/edge'
|
|
||||||
[
|
|
||||||
'.',
|
|
||||||
'request_filter'
|
|
||||||
].each do |dir|
|
|
||||||
Dir[File.join(__dir__, 'fb_graph2', dir, '*.rb')].each do |file|
|
|
||||||
require file
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,21 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Achievement < Node
|
|
||||||
include Edge::Comments
|
|
||||||
include Edge::Likes::LikeeContext
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [:type, :no_feed_story],
|
|
||||||
time: [:publish_time],
|
|
||||||
app: [:application],
|
|
||||||
user: [:from],
|
|
||||||
custom: [:data]
|
|
||||||
)
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
super
|
|
||||||
if attributes.include? :data
|
|
||||||
self.data = attributes[:data]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,11 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class AchievementType < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:type, :title, :url, :description, :is_scraped],
|
|
||||||
time: [:updated_time, :created_time],
|
|
||||||
picture: [:image],
|
|
||||||
app: [:application],
|
|
||||||
custom: [:data, :context]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,16 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Album < Node
|
|
||||||
include Edge::Comments
|
|
||||||
include Edge::Likes::LikeeContext
|
|
||||||
include Edge::Picture
|
|
||||||
include Edge::Photos
|
|
||||||
include Edge::SharedPosts
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [:can_upload, :count, :cover_photo, :description, :link, :location, :name, :privacy, :type],
|
|
||||||
time: [:created_time, :updated_time],
|
|
||||||
user: [:from],
|
|
||||||
page: [:place]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,45 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class App < Node
|
|
||||||
include Edge::Achievements
|
|
||||||
include Edge::AppLinkHosts
|
|
||||||
include Edge::AppEventTypes
|
|
||||||
include Edge::Banned
|
|
||||||
include Edge::Groups
|
|
||||||
include Edge::Permissions
|
|
||||||
include Edge::Picture
|
|
||||||
include Edge::Roles::AppContext
|
|
||||||
include Edge::Scores
|
|
||||||
include Edge::StaticResources
|
|
||||||
include Edge::Subscriptions
|
|
||||||
include Edge::TestUsers
|
|
||||||
include Edge::Translations
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [
|
|
||||||
:android_key_hash, :app_domains, :auth_dialog_data_help_url, :auth_dialog_headline,
|
|
||||||
:auth_dialog_perms_explanation, :auth_referral_enabled, :auth_referral_extended_perms,
|
|
||||||
:auth_referral_friend_perms, :auth_referral_user_perms, :canvas_fluid_height, :canvas_fluid_width,
|
|
||||||
:canvas_url, :category, :company, :contact_email, :creator_uid, :daily_active_users, :daily_active_users_rank,
|
|
||||||
:deauth_callback_url, :description, :hosting_url, :icon_url, :ios_bundle_id, :iphone_app_store_id,
|
|
||||||
:link, :logo_url, :mobile_web_url, :monthly_active_users, :monthly_active_users_rank, :name,
|
|
||||||
:namespace, :page_tab_default_name, :page_tab_url, :privacy_policy_url, :secure_canvas_url,
|
|
||||||
:secure_page_tab_url, :server_ip_whitelist, :social_discovery, :subcategory, :terms_of_service_url,
|
|
||||||
:user_support_email, :user_support_url, :website_url, :weekly_active_users
|
|
||||||
],
|
|
||||||
timestamp: [:created_time],
|
|
||||||
custom: [
|
|
||||||
:auth_referral_default_activity_privacy, :auth_referral_response_type, :context, :migrations,
|
|
||||||
:object_store_urls, :restrictions
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
super
|
|
||||||
# TODO: handle custom attributes.
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.app(access_token)
|
|
||||||
new(:app).authenticate access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,33 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class AppLinkHost < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:name, :canonical_url],
|
|
||||||
custom: [:ios, :iphone, :ipad, :android, :windows_phone, :web]
|
|
||||||
)
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
super
|
|
||||||
[:ios, :iphone, :ipad, :android, :windows_phone].each do |link_attr|
|
|
||||||
if attributes.include? link_attr
|
|
||||||
self.send :"#{link_attr}=", collect_links(attributes, link_attr)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def collect_links(attributes, link_attr)
|
|
||||||
Collection.new(attributes[link_attr]).collect! do |link|
|
|
||||||
klass = case link_attr
|
|
||||||
when :ios, :iphone, :ipad
|
|
||||||
Struct::AppLink::Native::IOS
|
|
||||||
when :android
|
|
||||||
Struct::AppLink::Native::Android
|
|
||||||
when :windows_phone
|
|
||||||
Struct::AppLink::Native::WindowsPhone
|
|
||||||
end
|
|
||||||
klass.new link
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,103 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
module AttributeAssigner
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
extend ClassMethods
|
|
||||||
attr_accessor :raw_attributes
|
|
||||||
cattr_accessor :registered_attributes
|
|
||||||
end
|
|
||||||
|
|
||||||
module ClassMethods
|
|
||||||
def register_attributes(attributes)
|
|
||||||
self.registered_attributes = attributes
|
|
||||||
send :attr_accessor, *attributes.values.flatten
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def assign(attributes)
|
|
||||||
Array(self.class.registered_attributes).each do |type, keys|
|
|
||||||
keys.each do |key|
|
|
||||||
if attributes.include? key
|
|
||||||
raw = attributes[key]
|
|
||||||
value = case type
|
|
||||||
when :raw
|
|
||||||
raw
|
|
||||||
when :int_flag
|
|
||||||
raw == 1
|
|
||||||
when :date
|
|
||||||
Date.strptime raw, '%m/%d/%Y' rescue raw
|
|
||||||
when :time
|
|
||||||
Time.parse raw rescue raw
|
|
||||||
when :timestamp
|
|
||||||
Time.at raw
|
|
||||||
when :actions
|
|
||||||
Collection.new(raw).collect! do |_raw_|
|
|
||||||
Struct::Action.new _raw_
|
|
||||||
end
|
|
||||||
when :album
|
|
||||||
Album.new raw[:id], raw
|
|
||||||
when :app
|
|
||||||
App.new raw[:id], raw
|
|
||||||
when :comment
|
|
||||||
Comment.new raw[:id], raw
|
|
||||||
when :group
|
|
||||||
Group.new raw[:id], raw
|
|
||||||
when :image_sources
|
|
||||||
Collection.new(raw).collect! do |_raw_|
|
|
||||||
Struct::ImageSource.new _raw_
|
|
||||||
end
|
|
||||||
when :messages
|
|
||||||
Collection.new(raw).collect! do |_raw_|
|
|
||||||
Message.new _raw_[:id], _raw_
|
|
||||||
end
|
|
||||||
when :page
|
|
||||||
Page.new raw[:id], raw
|
|
||||||
when :pages
|
|
||||||
Collection.new(raw).collect! do |_raw_|
|
|
||||||
Page.new _raw_[:id], _raw_
|
|
||||||
end
|
|
||||||
when :photo
|
|
||||||
Photo.new raw[:id], raw
|
|
||||||
when :picture
|
|
||||||
Struct::Picture.new raw[:data]
|
|
||||||
when :profile
|
|
||||||
as_profile raw
|
|
||||||
when :profiles
|
|
||||||
Collection.new(raw).collect! do |_raw_|
|
|
||||||
as_profile _raw_
|
|
||||||
end
|
|
||||||
when :user
|
|
||||||
User.new raw[:id], raw
|
|
||||||
when :users
|
|
||||||
Collection.new(raw).collect! do |_raw_|
|
|
||||||
User.new _raw_[:id], _raw_
|
|
||||||
end
|
|
||||||
else
|
|
||||||
# NOTE: handle these attributes in each class
|
|
||||||
next
|
|
||||||
end
|
|
||||||
self.send :"#{key}=", value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def as_profile(raw)
|
|
||||||
klass = if raw.include? :namespace
|
|
||||||
App
|
|
||||||
elsif raw.include? :category
|
|
||||||
Page
|
|
||||||
elsif raw.include? :start_time
|
|
||||||
Event
|
|
||||||
elsif raw.include? :owner
|
|
||||||
Group
|
|
||||||
else
|
|
||||||
User
|
|
||||||
end
|
|
||||||
klass.new raw[:id], raw
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,59 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Auth < Rack::OAuth2::Client
|
|
||||||
class Grant
|
|
||||||
class FbExchangeToken < Rack::OAuth2::Client::Grant
|
|
||||||
attr_required :fb_exchange_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize(client_id, client_secret, options = {})
|
|
||||||
super options.merge(
|
|
||||||
identifier: client_id,
|
|
||||||
secret: client_secret,
|
|
||||||
host: URI.parse(FbGraph2.root_url).host,
|
|
||||||
authorization_endpoint: '/oauth/authorize',
|
|
||||||
token_endpoint: '/oauth/access_token'
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def fb_exchange_token=(access_token)
|
|
||||||
@grant = Grant::FbExchangeToken.new(
|
|
||||||
fb_exchange_token: access_token
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def access_token!(options = {})
|
|
||||||
super options.merge(
|
|
||||||
client_auth_method: :body
|
|
||||||
)
|
|
||||||
rescue Rack::OAuth2::Client::Error => e
|
|
||||||
raise Exception.detect(e.status, e.response)
|
|
||||||
end
|
|
||||||
|
|
||||||
def debug_token!(input_token)
|
|
||||||
token_metadata = TokenMetadata.new
|
|
||||||
token_metadata.authenticate access_token!
|
|
||||||
token_metadata.fetch(
|
|
||||||
input_token: input_token.to_s
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def from_cookie(cookie)
|
|
||||||
token = case cookie
|
|
||||||
when String
|
|
||||||
cookie
|
|
||||||
else
|
|
||||||
cookie["fbsr_#{identifier}"]
|
|
||||||
end
|
|
||||||
from_signed_request token
|
|
||||||
end
|
|
||||||
|
|
||||||
def from_signed_request(token)
|
|
||||||
SignedRequest.new(token).verify! self
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Dir[File.join(__dir__, 'auth/*.rb')].each do |file|
|
|
||||||
require file
|
|
||||||
end
|
|
|
@ -1,54 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Collection < Array
|
|
||||||
attr_accessor :before, :after, :next, :previous, :total_count, :summary
|
|
||||||
|
|
||||||
def initialize(collection = [])
|
|
||||||
collection = normalize collection
|
|
||||||
paginate collection[:paging]
|
|
||||||
summarize collection[:summary]
|
|
||||||
replace Array(collection[:data])
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def normalize(collection)
|
|
||||||
case collection
|
|
||||||
when Hash
|
|
||||||
collection
|
|
||||||
when Array
|
|
||||||
{
|
|
||||||
data: collection,
|
|
||||||
count: collection.size
|
|
||||||
}
|
|
||||||
else
|
|
||||||
raise ArgumentError.new("Invalid collection")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def paginate(paging)
|
|
||||||
cursors = paging.try(:[], :cursors)
|
|
||||||
self.before = cursors.try(:[], :before)
|
|
||||||
self.after = cursors.try(:[], :after)
|
|
||||||
self.next = params_in paging.try(:[], :next)
|
|
||||||
self.previous = params_in paging.try(:[], :previous)
|
|
||||||
end
|
|
||||||
|
|
||||||
def summarize(summary)
|
|
||||||
self.summary = summary
|
|
||||||
self.total_count = summary.try(:[], :total_count)
|
|
||||||
if summary.try(:[], :updated_time)
|
|
||||||
self.summary[:updated_time] = Time.parse summary[:updated_time]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def params_in(url)
|
|
||||||
if url
|
|
||||||
Rack::Utils.parse_nested_query(
|
|
||||||
URI.parse(url).query
|
|
||||||
).inject({}) do |params, (key, value)|
|
|
||||||
params.merge! key => value
|
|
||||||
end.with_indifferent_access
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,20 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Comment < Node
|
|
||||||
include Edge::Comments
|
|
||||||
include Edge::Likes::LikeeContext
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [:can_comment, :can_remove, :comment_count, :like_count, :message, :user_likes, :is_hidden, :can_hide],
|
|
||||||
time: [:created_time],
|
|
||||||
user: [:from],
|
|
||||||
comment: [:parent],
|
|
||||||
profiles: [:message_tags],
|
|
||||||
custom: [:attachment]
|
|
||||||
)
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
super
|
|
||||||
# TODO: handle custom attributes.
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Domain < Node
|
|
||||||
include Edge::Insights
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [:name]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,39 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge < Collection
|
|
||||||
attr_accessor :owner, :edge, :params, :options, :collection
|
|
||||||
delegate :summary, :total_count, to: :collection
|
|
||||||
|
|
||||||
def initialize(owner, edge, params = {}, options = {})
|
|
||||||
self.owner = owner
|
|
||||||
self.edge = edge
|
|
||||||
self.params = params
|
|
||||||
self.options = options
|
|
||||||
self.collection = options.delete(:collection) || Collection.new
|
|
||||||
replace collection
|
|
||||||
end
|
|
||||||
|
|
||||||
def next(_options_ = {})
|
|
||||||
if collection.next.present?
|
|
||||||
owner.send edge, options.merge(collection.next).merge(_options_)
|
|
||||||
elsif collection.after.present?
|
|
||||||
owner.send edge, options.merge(after: collection.after).merge(_options_)
|
|
||||||
else
|
|
||||||
self.class.new owner, edge
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def previous(_options_ = {})
|
|
||||||
if self.collection.previous.present?
|
|
||||||
owner.send edge, options.merge(collection.previous).merge(_options_)
|
|
||||||
elsif collection.before.present?
|
|
||||||
owner.send edge, options.merge(before: collection.before).merge(_options_)
|
|
||||||
else
|
|
||||||
self.class.new owner, edge
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Dir[File.join(__dir__, 'edge/*.rb')].each do |file|
|
|
||||||
require file
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Accounts
|
|
||||||
def accounts(params = {})
|
|
||||||
pages = self.edge :accounts, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate page[:access_token]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Achievements
|
|
||||||
def achievements(params = {})
|
|
||||||
achievements = self.edge :achievements, params
|
|
||||||
achievements.collect! do |achievement|
|
|
||||||
Achievement.new(achievement[:id], achievement).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Activities
|
|
||||||
def activities(params = {})
|
|
||||||
pages = self.edge :activities, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Admins
|
|
||||||
def admins(params = {})
|
|
||||||
users = self.edge :admins, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def admin?(user, params = {})
|
|
||||||
users = self.edge :admins, params, edge_scope: user
|
|
||||||
users.present?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Albums
|
|
||||||
def albums(params = {})
|
|
||||||
albums = self.edge :albums, params
|
|
||||||
albums.collect! do |album|
|
|
||||||
Album.new(album[:id], album).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def album!(params = {})
|
|
||||||
album = self.post params, edge: :albums
|
|
||||||
Album.new(album[:id], params.merge(album)).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module AppEventTypes
|
|
||||||
def app_event_types(params = {})
|
|
||||||
types = self.edge :app_event_types, params
|
|
||||||
types.collect! do |type|
|
|
||||||
Struct::AppEventType.new type
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module AppLinkHosts
|
|
||||||
def app_link_hosts(params = {})
|
|
||||||
hosts = self.edge :app_link_hosts, params
|
|
||||||
hosts.collect! do |host|
|
|
||||||
AppLinkHost.new(hosts[:id], hosts).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,22 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module AppRequests
|
|
||||||
def app_requests(params = {})
|
|
||||||
requests = self.edge :apprequests, params
|
|
||||||
requests.collect! do |request|
|
|
||||||
Request.new(request[:id], request).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
alias_method :apprequests, :app_requests
|
|
||||||
|
|
||||||
def app_request!(params = {})
|
|
||||||
response = self.post params, edge: :apprequests
|
|
||||||
if request = response[:request]
|
|
||||||
response[:request] = Request.new(request[:id], request).authenticate self.access_token
|
|
||||||
end
|
|
||||||
response
|
|
||||||
end
|
|
||||||
alias_method :apprequest!, :app_request!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Applications
|
|
||||||
def applications(params = {})
|
|
||||||
apps = self.edge :applications, params, edge_scope: :developer
|
|
||||||
apps.collect! do |app|
|
|
||||||
App.new(app[:id], app).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Attending
|
|
||||||
def attending(params = {})
|
|
||||||
users = self.edge :attending, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,29 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Banned
|
|
||||||
def banned(params = {})
|
|
||||||
users = self.edge :banned, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def banned?(user, params = {})
|
|
||||||
users = self.edge :banned, params, edge_scope: user
|
|
||||||
users.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def ban!(user, params = {})
|
|
||||||
self.post params.merge(
|
|
||||||
uid: Util.as_identifier(user)
|
|
||||||
), edge: :banned
|
|
||||||
end
|
|
||||||
|
|
||||||
def unban!(user, params = {})
|
|
||||||
self.delete params.merge(
|
|
||||||
uid: Util.as_identifier(user)
|
|
||||||
), edge: :banned
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,29 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Blocked
|
|
||||||
def blocked(params = {})
|
|
||||||
users = self.edge :blocked, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def blocked?(user, params = {})
|
|
||||||
users = self.edge :blocked, params, edge_scope: user
|
|
||||||
users.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def block!(user, params = {})
|
|
||||||
self.post params.merge(
|
|
||||||
user: Util.as_identifier(user)
|
|
||||||
), edge: :blocked
|
|
||||||
end
|
|
||||||
|
|
||||||
def unblock!(user, params = {})
|
|
||||||
self.delete params.merge(
|
|
||||||
user: Util.as_identifier(user)
|
|
||||||
), edge: :blocked
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Books
|
|
||||||
def books(params = {})
|
|
||||||
pages = self.edge :books, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,28 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Comments
|
|
||||||
def assign(attributes)
|
|
||||||
super
|
|
||||||
if attributes.include? :comments
|
|
||||||
@_cached_comments = Collection.new attributes[:comments]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def comments(params = {})
|
|
||||||
comments = if @_cached_comments.present? && params.blank?
|
|
||||||
@_cached_comments
|
|
||||||
else
|
|
||||||
self.edge :comments, params
|
|
||||||
end
|
|
||||||
comments.collect! do |comment|
|
|
||||||
Comment.new(comment[:id], comment).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def comment!(params = {})
|
|
||||||
comment = self.post params, edge: :comments
|
|
||||||
Comment.new(comment[:id], params.merge(comment)).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Declined
|
|
||||||
def declined(params = {})
|
|
||||||
users = self.edge :declined, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Dispute
|
|
||||||
def dispute!(params = {})
|
|
||||||
self.post params, edge: :dispute
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Docs
|
|
||||||
def docs(params = {})
|
|
||||||
docs = self.edge :docs, params
|
|
||||||
docs.collect! do |doc|
|
|
||||||
GroupDoc.new(doc[:id], doc).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Events
|
|
||||||
def events(*args)
|
|
||||||
params = args.extract_options!
|
|
||||||
events = self.edge :events, params, edge_scope: args.first
|
|
||||||
events.collect! do |event|
|
|
||||||
Event.new(event[:id], event).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Family
|
|
||||||
def family(params = {})
|
|
||||||
users = self.edge :family, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Feed
|
|
||||||
def feed(params = {})
|
|
||||||
posts = self.edge :feed, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def feed!(params = {})
|
|
||||||
post = self.post params, edge: :feed
|
|
||||||
Post.new(post[:id], params.merge(post)).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Files
|
|
||||||
def files(params = {})
|
|
||||||
files = self.edge :files, params
|
|
||||||
files.collect! do |file|
|
|
||||||
Struct::GroupFile.new file
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module FriendLists
|
|
||||||
def friend_lists(params = {})
|
|
||||||
friend_lists = self.edge :friendlists, params
|
|
||||||
friend_lists.collect! do |friend_list|
|
|
||||||
FriendList.new(friend_list[:id], friend_list).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
alias_method :friendlists, :friend_lists
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Friends
|
|
||||||
def friends(params = {})
|
|
||||||
users = self.edge :friends, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def friend?(user, params = {})
|
|
||||||
users = self.edge :friends, params, edge_scope: user
|
|
||||||
users.present?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Games
|
|
||||||
def games(params = {})
|
|
||||||
pages = self.edge :games, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module GlobalBrandChildren
|
|
||||||
def global_brand_children(params = {})
|
|
||||||
pages = self.edge :global_brand_children, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Groups
|
|
||||||
def groups(params = {})
|
|
||||||
groups = self.edge :groups, params
|
|
||||||
groups.collect! do |group|
|
|
||||||
Group.new(group[:id], group).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Home
|
|
||||||
def home(params = {})
|
|
||||||
posts = self.edge :home, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Inbox
|
|
||||||
def inbox(params = {})
|
|
||||||
threads = self.edge :inbox, params
|
|
||||||
threads.collect! do |thread|
|
|
||||||
Thread.new(thread[:id], thread).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Insights
|
|
||||||
def insights(params = {})
|
|
||||||
insights = self.edge :insights, params
|
|
||||||
insights.collect! do |insight|
|
|
||||||
Insight.new(insight[:id], insight).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Interests
|
|
||||||
def interests(params = {})
|
|
||||||
pages = self.edge :interests, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module InvitableFriends
|
|
||||||
def invitable_friends(params = {})
|
|
||||||
invitable_friends = self.edge :invitable_friends, params
|
|
||||||
invitable_friends.collect! do |friend|
|
|
||||||
Struct::Friend.new friend
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Invited
|
|
||||||
def invited(params = {})
|
|
||||||
users = self.edge :invited, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,47 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Likes
|
|
||||||
module LikerContext
|
|
||||||
def likes(params = {})
|
|
||||||
pages = self.edge :likes, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def liked?(page, params = {})
|
|
||||||
pages = self.edge :likes, params, edge_scope: page
|
|
||||||
pages.present?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module LikeeContext
|
|
||||||
def assign(attributes)
|
|
||||||
super
|
|
||||||
if attributes.include? :likes
|
|
||||||
@_cached_likes = Collection.new attributes[:likes]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def likes(params = {})
|
|
||||||
users = if @_cached_likes.present? && params.blank?
|
|
||||||
@_cached_likes
|
|
||||||
else
|
|
||||||
self.edge :likes, params
|
|
||||||
end
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def like!(params = {})
|
|
||||||
self.post params, edge: :likes
|
|
||||||
end
|
|
||||||
|
|
||||||
def unlike!(params = {})
|
|
||||||
self.delete params, edge: :likes
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Links
|
|
||||||
def links(params = {})
|
|
||||||
posts = self.edge :links, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Locations
|
|
||||||
def locations(params = {})
|
|
||||||
pages = self.edge :locations, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: add, delete and update locations
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Maybe
|
|
||||||
def maybe(params = {})
|
|
||||||
users = self.edge :maybe, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Members
|
|
||||||
def members(params = {})
|
|
||||||
users = self.edge :members, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Milestones
|
|
||||||
def milestones(params = {})
|
|
||||||
milestones = self.edge :milestones, params
|
|
||||||
milestones.collect! do |milestone|
|
|
||||||
Milestone.new(milestone[:id], milestone).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Movies
|
|
||||||
def movies(params = {})
|
|
||||||
pages = self.edge :movies, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Music
|
|
||||||
def music(params = {})
|
|
||||||
pages = self.edge :music, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Noreply
|
|
||||||
def noreply(params = {})
|
|
||||||
users = self.edge :noreply, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Notifications
|
|
||||||
def notifications(params = {})
|
|
||||||
notifications = self.edge :notifications, params
|
|
||||||
notifications.collect! do |notification|
|
|
||||||
Notification.new notification[:id], notification
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def notification!(params = {})
|
|
||||||
self.post params, edge: :notifications
|
|
||||||
end
|
|
||||||
alias_method :notify!, :notification!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Offers
|
|
||||||
def offers(params = {})
|
|
||||||
offers = self.edge :offers, params
|
|
||||||
offers.collect! do |offer|
|
|
||||||
Offer.new(offer[:id], offer).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def offer!(params = {})
|
|
||||||
offer = self.post params, edge: :offers
|
|
||||||
Offer.new(offer[:id], params.merge(offer)).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Outbox
|
|
||||||
def outbox(params = {})
|
|
||||||
threads = self.edge :outbox, params
|
|
||||||
threads.collect! do |thread|
|
|
||||||
Thread.new(thread[:id], thread).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module PaymentTransactions
|
|
||||||
def payment_transactions(params = {})
|
|
||||||
payments = self.edge :payment_transactions, params
|
|
||||||
payments.collect! do |payment|
|
|
||||||
Payment.new(payment[:id], payment).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Permissions
|
|
||||||
def permissions(params = {})
|
|
||||||
permissions = self.edge :permissions, params
|
|
||||||
permissions.collect! do |permission|
|
|
||||||
Struct::Permission.new permission
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,18 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Photos
|
|
||||||
def photos(*args)
|
|
||||||
params = args.extract_options!
|
|
||||||
photos = self.edge :photos, params, edge_scope: args.first
|
|
||||||
photos.collect! do |photo|
|
|
||||||
Photo.new(photo[:id], photo).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def photo!(params = {})
|
|
||||||
photo = self.post params, edge: :photos
|
|
||||||
Photo.new(photo[:id], params.merge(photo)).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Picture
|
|
||||||
def picture(*args)
|
|
||||||
params = args.extract_options!
|
|
||||||
params[:type] = args.first if args.first
|
|
||||||
picture = self.get params.merge(redirect: false), edge: :picture
|
|
||||||
Struct::Picture.new picture[:data]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Pokes
|
|
||||||
def pokes(params = {})
|
|
||||||
pokes = self.edge :pokes, params
|
|
||||||
pokes.collect! do |poke|
|
|
||||||
Struct::Poke.new poke
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Posts
|
|
||||||
def posts(params = {})
|
|
||||||
posts = self.edge :posts, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module PromotablePosts
|
|
||||||
def promotable_posts(params = {})
|
|
||||||
posts = self.edge :promotable_posts, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Refunds
|
|
||||||
def refund!(params = {})
|
|
||||||
self.post params, edge: :refund
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,41 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Roles
|
|
||||||
module AppContext
|
|
||||||
def roles(params = {})
|
|
||||||
roles = self.edge :roles, params
|
|
||||||
roles.collect! do |role|
|
|
||||||
Struct::Role.new role
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def role!(user, params = {})
|
|
||||||
self.post params.merge(
|
|
||||||
user: Util.as_identifier(user)
|
|
||||||
), edge: :roles
|
|
||||||
end
|
|
||||||
|
|
||||||
def unrole!(user, params = {})
|
|
||||||
self.post params.merge(
|
|
||||||
user: Util.as_identifier(user)
|
|
||||||
), edge: :roles
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module PageContext
|
|
||||||
def roles(*args)
|
|
||||||
params = args.extract_options!
|
|
||||||
users = self.edge :roles, params, edge_scope: args.first
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
if args.first.present?
|
|
||||||
users.first
|
|
||||||
else
|
|
||||||
users
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Scores
|
|
||||||
def scores(params = {})
|
|
||||||
scores = self.edge :scores, params
|
|
||||||
scores.collect! do |score|
|
|
||||||
Struct::Score.new score
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Settings
|
|
||||||
def settings(params = {})
|
|
||||||
settings = self.edge :settings, params
|
|
||||||
settings.collect! do |setting|
|
|
||||||
Struct::Setting.new setting
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module SharedPosts
|
|
||||||
def shared_posts(params = {})
|
|
||||||
posts = self.edge :sharedposts, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
alias_method :sharedposts, :shared_posts
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module StaticResources
|
|
||||||
def static_resources(params = {})
|
|
||||||
resources = self.edge :staticresources, params
|
|
||||||
resources.collect! do |resource|
|
|
||||||
Struct::StaticResource.new resource
|
|
||||||
end
|
|
||||||
end
|
|
||||||
alias_method :staticresources, :static_resources
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Statuses
|
|
||||||
def statuses(params = {})
|
|
||||||
posts = self.edge :statuses, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Subscriptions
|
|
||||||
def subscriptions(params = {})
|
|
||||||
subscriptions = self.edge :subscriptions, params
|
|
||||||
subscriptions.collect! do |subscription|
|
|
||||||
Struct::Subscription.new subscription
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module TaggableFriends
|
|
||||||
def taggable_friends(params = {})
|
|
||||||
taggable_friends = self.edge :taggable_friends, params
|
|
||||||
taggable_friends.collect! do |friend|
|
|
||||||
Struct::Friend.new friend
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Tagged
|
|
||||||
def tagged(params = {})
|
|
||||||
posts = self.edge :tagged, params
|
|
||||||
posts.collect! do |post|
|
|
||||||
Post.new(post[:id], post).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module TaggedPlaces
|
|
||||||
def tagged_places(params = {})
|
|
||||||
place_tags = self.edge :tagged_places, params
|
|
||||||
place_tags.collect! do |place_tag|
|
|
||||||
PlaceTag.new(place_tag[:id], place_tag).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Tags
|
|
||||||
def tags(params = {})
|
|
||||||
users = self.edge :tags, params
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# NOTE: available both for create & update
|
|
||||||
def tag!(params = {})
|
|
||||||
self.post params, edge: :tags
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Television
|
|
||||||
def television(params = {})
|
|
||||||
pages = self.edge :television, params
|
|
||||||
pages.collect! do |page|
|
|
||||||
Page.new(page[:id], page).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,12 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module TestUsers
|
|
||||||
def test_users(params = {})
|
|
||||||
users = self.edge :accounts, params, edge_scope: :'test-users'
|
|
||||||
users.collect! do |user|
|
|
||||||
User.new(user[:id], user)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Translations
|
|
||||||
def translations(params = {})
|
|
||||||
translations = self.edge :translations, params
|
|
||||||
translations.collect! do |translation|
|
|
||||||
Translation.new(translation[:id], translation).authenticate self.authenticate
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def translation!(params = {})
|
|
||||||
self.post params, edge: :translations
|
|
||||||
end
|
|
||||||
alias_method :translate!, :translation!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,18 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Edge
|
|
||||||
module Videos
|
|
||||||
def videos(*args)
|
|
||||||
params = args.extract_options!
|
|
||||||
videos = self.edge :videos, params, edge_scope: args.first
|
|
||||||
videos.collect! do |video|
|
|
||||||
Video.new(video[:id], video).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def video!(params = {})
|
|
||||||
video = self.post params, edge: :videos
|
|
||||||
Video.new(video[:id], params.merge(video)).authenticate self.access_token
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,23 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Event < Node
|
|
||||||
include Edge::Attending
|
|
||||||
include Edge::Declined
|
|
||||||
include Edge::Feed
|
|
||||||
include Edge::Invited
|
|
||||||
include Edge::Maybe
|
|
||||||
include Edge::Noreply
|
|
||||||
include Edge::Picture
|
|
||||||
include Edge::Photos
|
|
||||||
include Edge::Videos
|
|
||||||
extend Searchable
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [:description, :is_date_only, :location, :name, :privacy, :ticket_uri, :timezone],
|
|
||||||
time: [:end_time, :start_time, :updated_time],
|
|
||||||
page: [:venue],
|
|
||||||
profile: [:owner],
|
|
||||||
group: [:parent_group],
|
|
||||||
photo: [:cover]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,81 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Exception < StandardError
|
|
||||||
attr_accessor :status, :type, :code
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def detect(status, body = {}, headers = {})
|
|
||||||
error = body[:error]
|
|
||||||
message = error.try(:[], :message)
|
|
||||||
klass = detect_from_header(headers, error) || detect_from_status(status)
|
|
||||||
if klass
|
|
||||||
klass.new message, error
|
|
||||||
else
|
|
||||||
new status, message, error
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def detect_from_status(status)
|
|
||||||
case status
|
|
||||||
when 400
|
|
||||||
BadRequest
|
|
||||||
when 401
|
|
||||||
Unauthorized
|
|
||||||
when 404
|
|
||||||
NotFound
|
|
||||||
when 500
|
|
||||||
InternalServerError
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def detect_from_header(headers, error)
|
|
||||||
key, value = headers.detect do |name, value|
|
|
||||||
name.upcase == "WWW-Authenticate".upcase
|
|
||||||
end || return
|
|
||||||
matched, klass = ERROR_HEADER_MATCHERS.detect do |matcher, klass_name|
|
|
||||||
matcher =~ value
|
|
||||||
end || return
|
|
||||||
klass
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize(status, message, error = {})
|
|
||||||
super message
|
|
||||||
self.status = status
|
|
||||||
self.type = error[:type]
|
|
||||||
self.code = error[:code]
|
|
||||||
end
|
|
||||||
|
|
||||||
class BadRequest < Exception
|
|
||||||
def initialize(message, details = {})
|
|
||||||
super 400, message, details
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Unauthorized < Exception
|
|
||||||
def initialize(message, details = {})
|
|
||||||
super 401, message, details
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class NotFound < Exception
|
|
||||||
def initialize(message, details = {})
|
|
||||||
super 404, message, details
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class InternalServerError < Exception
|
|
||||||
def initialize(message, details = {})
|
|
||||||
super 500, message, details
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class InvalidToken < Unauthorized; end
|
|
||||||
class InvalidRequest < BadRequest; end
|
|
||||||
|
|
||||||
ERROR_HEADER_MATCHERS = {
|
|
||||||
/not_found/ => NotFound,
|
|
||||||
/invalid_token/ => InvalidToken,
|
|
||||||
/invalid_request/ => InvalidRequest
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,7 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class FriendList < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:name, :list_type]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,21 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Group < Node
|
|
||||||
include Edge::Docs
|
|
||||||
include Edge::Events
|
|
||||||
include Edge::Feed
|
|
||||||
include Edge::Files
|
|
||||||
include Edge::Members
|
|
||||||
extend Searchable
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [
|
|
||||||
:description, :email, :icon, :link, :name, :privacy,
|
|
||||||
# NOTE: in groups edge context
|
|
||||||
:administrator, :bookmark_order, :unread
|
|
||||||
],
|
|
||||||
time: [:updated_time],
|
|
||||||
profile: [:owner, :parent],
|
|
||||||
photo: [:cover]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class GroupDoc < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:subject, :message, :icon, :revision, :can_edit, :can_delete],
|
|
||||||
time: [:created_time, :updated_time],
|
|
||||||
profile: [:from]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Insight < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:name, :description, :title, :period],
|
|
||||||
custom: [:values]
|
|
||||||
)
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
super
|
|
||||||
self.values = attributes[:values].collect(&:with_indifferent_access)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Message < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:message],
|
|
||||||
time: [:created_time],
|
|
||||||
profile: [:from]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Milestone < Node
|
|
||||||
include Edge::Comments
|
|
||||||
include Edge::Likes::LikeeContext
|
|
||||||
include Edge::Photos
|
|
||||||
|
|
||||||
register_attributes(
|
|
||||||
raw: [:title, :description],
|
|
||||||
time: [:created_time, :updated_time, :start_time, :end_time],
|
|
||||||
page: [:from]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,125 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Node
|
|
||||||
attr_accessor :id, :access_token, :raw_attributes
|
|
||||||
alias_method :identifier, :id
|
|
||||||
|
|
||||||
def self.inherited(klass)
|
|
||||||
klass.send :include, AttributeAssigner
|
|
||||||
FbGraph2.object_classes << klass
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
self.id = id
|
|
||||||
self.raw_attributes = attributes
|
|
||||||
assign attributes if respond_to? :assign
|
|
||||||
authenticate attributes[:access_token] if attributes.include? :access_token
|
|
||||||
end
|
|
||||||
|
|
||||||
def authenticate(access_token)
|
|
||||||
self.access_token = access_token
|
|
||||||
self
|
|
||||||
end
|
|
||||||
|
|
||||||
def fetch(params = {}, options = {})
|
|
||||||
attributes = get params, options
|
|
||||||
self.class.new(attributes[:id], attributes).authenticate access_token
|
|
||||||
end
|
|
||||||
|
|
||||||
def edge(edge, params = {}, options = {})
|
|
||||||
Edge.new(
|
|
||||||
self,
|
|
||||||
edge,
|
|
||||||
params,
|
|
||||||
options.merge(
|
|
||||||
collection: edge_for(edge, params, options)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def edges
|
|
||||||
@edges ||= self.class.included_modules.select do |_module_|
|
|
||||||
_module_.name =~ /FbGraph2::Edge/
|
|
||||||
end.collect(&:instance_methods).flatten.sort
|
|
||||||
end
|
|
||||||
|
|
||||||
def update(params = {}, options = {})
|
|
||||||
post params, options
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy(params = {}, options = {})
|
|
||||||
delete params, options
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def http_client
|
|
||||||
FbGraph2.http_client(access_token)
|
|
||||||
end
|
|
||||||
|
|
||||||
def get(params = {}, options = {})
|
|
||||||
handle_response do
|
|
||||||
http_client.get build_endpoint(options), build_params(params)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def post(params = {}, options = {})
|
|
||||||
handle_response do
|
|
||||||
http_client.post build_endpoint(options), build_params(params)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def delete(params = {}, options = {})
|
|
||||||
handle_response do
|
|
||||||
http_client.delete build_endpoint(options), build_params(params)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def edge_for(edge, params = {}, options = {})
|
|
||||||
collection = get params, options.merge(edge: edge)
|
|
||||||
Collection.new collection
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_endpoint(options = {})
|
|
||||||
File.join [
|
|
||||||
File.join(
|
|
||||||
FbGraph2.root_url,
|
|
||||||
options[:api_version] || FbGraph2.api_version,
|
|
||||||
id.to_s
|
|
||||||
),
|
|
||||||
options[:edge],
|
|
||||||
Util.as_identifier(options[:edge_scope])
|
|
||||||
].compact.collect(&:to_s)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_params(params = {})
|
|
||||||
if params.present?
|
|
||||||
if params.include? :fields
|
|
||||||
params[:fields] = Array(params[:fields]).join(',')
|
|
||||||
end
|
|
||||||
params
|
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_response
|
|
||||||
response = yield
|
|
||||||
_response_ = MultiJson.load response.body
|
|
||||||
_response_ = _response_.with_indifferent_access if _response_.respond_to? :with_indifferent_access
|
|
||||||
case response.status
|
|
||||||
when 200...300
|
|
||||||
if _response_.respond_to?(:include?) && _response_.include?(:success)
|
|
||||||
_response_[:success]
|
|
||||||
else
|
|
||||||
_response_
|
|
||||||
end
|
|
||||||
else
|
|
||||||
raise Exception.detect(response.status, _response_, response.headers)
|
|
||||||
end
|
|
||||||
rescue MultiJson::DecodeError
|
|
||||||
raise Exception.new(response.status, "Unparsable Response: #{response.body}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,17 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Notification < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:title, :link, :unread],
|
|
||||||
time: [:created_time, :updated_time],
|
|
||||||
profile: [:from],
|
|
||||||
user: [:to],
|
|
||||||
app: [:application],
|
|
||||||
custom: [:object]
|
|
||||||
)
|
|
||||||
|
|
||||||
def initialize(id, attributes = {})
|
|
||||||
super
|
|
||||||
# TODO: handle custom attributes.
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Offer < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:claim_limit, :coupon_type, :image_url, :redemption_code, :redemption_link, :terms, :title, :message],
|
|
||||||
time: [:created_time, :expiration_time],
|
|
||||||
page: [:from]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
module FbGraph2
|
|
||||||
class Order < Node
|
|
||||||
register_attributes(
|
|
||||||
raw: [:amount, :country, :from, :refund_reason_code, :status],
|
|
||||||
time: [:created_time, :updated_time],
|
|
||||||
app: [:application]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue