Skip to content

Commit

Permalink
more comprehensive tests for dashboard api changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Raphomet authored and mmangino committed Feb 25, 2010
1 parent c0b0218 commit 15b19ea
Show file tree
Hide file tree
Showing 3 changed files with 323 additions and 80 deletions.
35 changes: 28 additions & 7 deletions lib/facebooker/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -497,26 +497,47 @@ def to_s

### NEW DASHBOARD API STUFF

# facebook_session.user.dashboard_count
def dashboard_count
session.post('facebook.dashboard.getCount', { :uid => uid })
session.post('facebook.dashboard.getCount', :uid => uid)
end

# facebook_session.user.dashboard_count = 5
def dashboard_count=(new_count)
session.post('facebook.dashboard.setCount', { :uid => uid, :count => new_count })
session.post('facebook.dashboard.setCount', :uid => uid, :count => new_count)
end

# facebook_session.user.dashboard_increment_count
def dashboard_increment_count
session.post('facebook.dashboard.incrementCount', { :uid => uid })
session.post('facebook.dashboard.incrementCount', :uid => uid)
end

# facebook_session.user.dashboard_decrement_count
def dashboard_decrement_count
session.post('facebook.dashboard.decrementCount', { :uid => uid })
session.post('facebook.dashboard.decrementCount', :uid => uid)
end

# TODO: test
# The following methods are not bound to a specific user but do relate to Users in general,
# so I've made them into class methods.

# Facebooker::User.dashboard_multi_get_count ['1234', '5678']
def self.dashboard_multi_get_count(*uids)
uids.flatten!
Facebooker::Session.create.post("facebook.dashboard.multiGetCount",:uids => uids)
Facebooker::Session.create.post("facebook.dashboard.multiGetCount", :uids => uids.flatten)
end

# Facebooker::User.dashboard_multi_set_count({ '1234' => '11', '5678' => '22' })
def self.dashboard_multi_set_count(ids)
Facebooker::Session.create.post("facebook.dashboard.multiSetCount", :ids => ids.to_json)
end

# Facebooker::User.dashboard_multi_increment_count ['1234', '5678']
def self.dashboard_multi_increment_count(*uids)
Facebooker::Session.create.post("facebook.dashboard.multiIncrementCount", :uids => uids.flatten.to_json)
end

# Facebooker::User.dashboard_multi_decrement_count ['1234', '5678']
def self.dashboard_multi_decrement_count(*uids)
Facebooker::Session.create.post("facebook.dashboard.multiDecrementCount", :uids => uids.flatten.to_json)
end

def get_news(news_ids=nil)
Expand Down
164 changes: 92 additions & 72 deletions lib/facebooker/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,40 @@ def self.hashinate(response_element)
hash
end #do |hash, child|
end

def self.hash_by_key_or_value_for(element)
if element.children.size == 0
{ element['key'] => nil }
elsif element.children.size == 1 && element.children.first.text?
{ element['key'] => element.content.strip }
else
hashinate_by_key(element)
end
end

def self.hashinate_by_key(response_element)
response_element.children.reject{|c| c.text? }.inject({}) do |hash, child|
# If the node hasn't any child, and is not a list, we want empty strings, not empty hashes,
# except if attributes['nil'] == true
hash[child['key']] =
if (child['nil'] == 'true')
nil
elsif (child.children.size == 1 && child.children.first.text?) || (child.children.size == 0 && child['list'] != 'true')
anonymous_field_from(child, hash) || child.content.strip
elsif child['list'] == 'true' && child.children.all? { |subchild| subchild['key'].nil? }
child.children.reject{|c| c.text? }.map { |subchild| hash_by_key_or_value_for(subchild)}
elsif child['list'] == 'true'
hash_by_key_or_value_for(child)
# child.children.reject{|c| c.text? }.map { |subchild| hash_by_key_or_value_for(subchild)}
else
child.children.reject{|c| c.text? }.inject({}) do |subhash, subchild|
subhash[subchild['key']] = hash_by_key_or_value_for(subchild)
subhash
end
end #if (child.attributes)
hash
end #do |hash, child|
end

def self.booleanize(response)
response == "1" ? true : false
Expand Down Expand Up @@ -660,126 +694,106 @@ def self.process(data)
end
end

class DashboardMultiSetCount < Parser
def self.process(data)
hashinate_by_key(element('dashboard_multiSetCount_response', data))
end
end

class DashboardMultiIncrementCount < Parser
def self.process(data)
hashinate_by_key(element('dashboard_multiIncrementCount_response', data))
end
end

class DashboardMultiDecrementCount < Parser
def self.process(data)
hashinate_by_key(element('dashboard_multiDecrementCount_response', data))
end
end

class DashboardAddGlobalNews < Parser
def self.process(data)
puts data
element('dashboard_addGlobalNews_response', data).content.strip
end
end

# Currently, always returns all
class DashboardGetGlobalNews < Parser
def self.process(data)
ret = {}
element('dashboard_getGlobalNews_response', data).children.reject { |child| child.text? }.each do |news_list|
info = {}

if image_node = news_list.css('[key=image]')
info[:image] = image_node.first.content
end

if image_node = news_list.css('[key=time]')
info[:time] = image_node.first.content
end

news_items = []
news_nodes = news_list.css('dashboard_getGlobalNews_response_elt_elt_elt')
news_nodes.each do |news_item|
news = {}
news[:message] = news_item.css('[key=message]').first.content
action_link = news_item.css('[key=action_link]')
if action_link.size > 0
news[:action_link] = {
:href => action_link.css('[key=href]').first.content,
:text => action_link.css('[key=text]').first.content
}
end
news_items << news
end
info[:news] = news_items

ret[news_list['key']] = info
end
ret
puts data
hashinate_by_key(element('dashboard_getGlobalNews_response', data))
end
end

class DashboardClearGlobalNews < Parser
def self.process(data)
ret = {}
element('dashboard_clearGlobalNews_response', data).children.select { |child| child.name == 'dashboard_clearGlobalNews_response_elt' }.each do |child|
ret[child['key']] = (child.text == 1)
end
ret
puts data
hashinate_by_key(element('dashboard_clearGlobalNews_response', data))
end
end

class DashboardAddNews < Parser
def self.process(data)
puts data
element('dashboard_addNews_response', data).content.strip
end
end

class DashboardGetNews < Parser
def self.process(data)
ret = {}
element('dashboard_getNews_response', data).children.reject { |child| child.text? }.each do |news_list|
info = {}

if image_node = news_list.css('[key=image]')
info[:image] = image_node.first.content
end

if image_node = news_list.css('[key=time]')
info[:time] = image_node.first.content
end

news_items = []
news_nodes = news_list.css('dashboard_getNews_response_elt_elt_elt')
news_nodes.each do |news_item|
news = {}
news[:message] = news_item.css('[key=message]').first.content
action_link = news_item.css('[key=action_link]')
if action_link.size > 0
news[:action_link] = {
:href => action_link.css('[key=href]').first.content,
:text => action_link.css('[key=text]').first.content
}
end
news_items << news
end
info[:news] = news_items

ret[news_list['key']] = info
end
ret
puts data
hashinate_by_key(element('dashboard_getNews_response', data))
end
end

class DashboardClearNews < Parser
def self.process(data)
ret = {}
element('dashboard_clearNews_response', data).children.select { |child| child.name == 'dashboard_clearNews_response_elt' }.each do |child|
ret[child['key']] = (child.text == 1)
end
ret
puts data
hashinate_by_key(element('dashboard_clearNews_response', data))
end
end

class DashboardMultiAddNews < Parser
def self.process(data)
puts data
hashinate_by_key(element('dashboard_multiAddNews_response', data))
end
end

class DashboardMultiClearNews < Parser
def self.process(data)
puts data
hashinate_by_key(element('dashboard_multiClearNews_response', data))
end
end

class DashboardMultiGetNews < Parser
def self.process(data)
puts data
hashinate_by_key(element('dashboard_multiGetNews_response', data))
end
end

class DashboardPublishActivity < Parser
def self.process(data)
puts data
element('dashboard_publishActivity_response', data).content.strip
end
end

class DashboardRemoveActivity < Parser
def self.process(data)
puts data
hashinate_by_key(element('dashboard_removeActivity_response', data))
end
end

class DashboardGetActivity < Parser
def self.process(data)
puts data
hashinate_by_key(element('dashboard_getActivity_response', data))
end
end

Expand Down Expand Up @@ -930,12 +944,18 @@ class Parser
'facebook.dashboard.incrementCount' => DashboardIncrementCount,
'facebook.dashboard.decrementCount' => DashboardDecrementCount,
'facebook.dashboard.multiGetCount' => DashboardMultiGetCount,
'facebook.dashboard.multiSetCount' => DashboardMultiSetCount,
'facebook.dashboard.multiIncrementCount' => DashboardMultiIncrementCount,
'facebook.dashboard.multiDecrementCount' => DashboardMultiDecrementCount,
'facebook.dashboard.addGlobalNews' => DashboardAddGlobalNews,
'facebook.dashboard.getGlobalNews' => DashboardGetGlobalNews,
'facebook.dashboard.clearGlobalNews' => DashboardClearGlobalNews,
'facebook.dashboard.addNews' => DashboardAddNews,
'facebook.dashboard.getNews' => DashboardGetNews,
'facebook.dashboard.clearNews' => DashboardClearNews,
'facebook.dashboard.multiAddNews' => DashboardMultiAddNews,
'facebook.dashboard.multiGetNews' => DashboardMultiGetNews,
'facebook.dashboard.multiClearNews' => DashboardMultiClearNews,
'facebook.dashboard.publishActivity' => DashboardPublishActivity,
'facebook.dashboard.removeActivity' => DashboardRemoveActivity,
'facebook.dashboard.getActivity' => DashboardGetActivity
Expand Down
Loading

0 comments on commit 15b19ea

Please sign in to comment.