mogli 0.0.25 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mogli.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  module Mogli
2
-
3
2
  end
4
3
 
5
4
  require "httparty"
@@ -39,3 +38,4 @@ require "mogli/work"
39
38
  require "mogli/user"
40
39
  require "mogli/client"
41
40
  require "mogli/app_client"
41
+ require "mogli/fql_multiquery"
@@ -24,28 +24,31 @@ module Mogli
24
24
  keystr = session_keys.is_a?(Array) ?
25
25
  session_keys.join(',') : session_keys
26
26
  client = Mogli::Client.new
27
- client.post("oauth/exchange_sessions", nil,
27
+ response = client.post("oauth/exchange_sessions", nil,
28
28
  {:type => 'client_cred',
29
29
  :client_id => client_id,
30
30
  :client_secret => secret,
31
31
  :sessions => keystr})
32
+ raise_exception_if_required(response)
33
+ response
32
34
  end
33
35
 
34
36
  def get_access_token_for_application
35
37
  client = Mogli::Client.new
36
- request = client.class.post(client.api_path('oauth/access_token'),
38
+ response = client.class.post(client.api_path('oauth/access_token'),
37
39
  :body=> {
38
40
  :grant_type => 'client_credentials',
39
41
  :client_id => client_id,
40
42
  :client_secret => secret
41
43
  }
42
44
  )
43
- if (request.respond_to?(:parsed_response))
44
- request.parsed_response.split('=').last
45
- else
46
- request.to_s.split("=").last
47
- end
48
- end
45
+ raise_exception_if_required(response)
46
+ response.to_s.split("=").last
47
+ end
48
+
49
+ def raise_exception_if_required(response)
50
+ raise Mogli::Client::HTTPException if response.code != 200
51
+ end
49
52
 
50
53
  end
51
54
  end
data/lib/mogli/client.rb CHANGED
@@ -10,7 +10,7 @@ module Mogli
10
10
  include HTTParty
11
11
  include Mogli::Client::Event
12
12
  include Mogli::Client::User
13
-
13
+
14
14
  class ClientException < Exception; end
15
15
  class UnrecognizeableClassError < ClientException; end
16
16
  class QueryParseException < ClientException; end
@@ -19,6 +19,7 @@ module Mogli
19
19
  class OAuthException < ClientException; end
20
20
  # represents case that the facebook limit on posts to a feed has been exceeded
21
21
  class FeedActionRequestLimitExceeded < ClientException; end
22
+ class HTTPException < ClientException; end
22
23
 
23
24
  def api_path(path)
24
25
  "https://graph.facebook.com/#{path}"
@@ -28,6 +29,10 @@ module Mogli
28
29
  "https://api.facebook.com/method/fql.query"
29
30
  end
30
31
 
32
+ def fql_multiquery_path
33
+ "https://api.facebook.com/method/fql.multiquery"
34
+ end
35
+
31
36
  def initialize(access_token = nil,expiration=nil)
32
37
  @access_token = access_token
33
38
  # nil expiration means extended access
@@ -107,6 +112,11 @@ module Mogli
107
112
  map_data(data,klass)
108
113
  end
109
114
 
115
+ def fql_multiquery(queries)
116
+ data = self.class.post(fql_multiquery_path,:body=>default_params.merge({:queries=>queries.to_json,:format=>"json"}))
117
+ map_data(data)
118
+ end
119
+
110
120
  def get_and_map(path,klass=nil,body_args = {})
111
121
  data = self.class.get(api_path(path),:query=>default_params.merge(body_args))
112
122
  data = data.values if body_args.key?(:ids) && !data.key?('error')
@@ -183,6 +193,7 @@ module Mogli
183
193
  end
184
194
 
185
195
  def raise_error_if_necessary(data)
196
+ raise HTTPException if data.respond_to?(:code) and data.code != 200
186
197
  if data.kind_of?(Hash)
187
198
  if data.keys.size == 1 and data["error"]
188
199
  self.class.raise_error_by_type_and_message(data["error"]["type"], data["error"]["message"])
@@ -0,0 +1,43 @@
1
+ module Mogli
2
+ class FqlMultiquery
3
+ attr_reader :client, :queries, :raw_response
4
+
5
+ # Takes Mogli::Client object
6
+ def initialize(client)
7
+ @client = client
8
+ @queries = {}
9
+ end
10
+
11
+ # Adds single query to multiquery with class used to populate results
12
+ def add_named_query_for_class(query_name, query, klass)
13
+ @queries[query_name] = [query, klass]
14
+ end
15
+
16
+ # Fetch and parse results.
17
+ # Returns hash with the query names as keys, class objects as values.
18
+ # An empty or missing subquery value is returned as an empty array.
19
+ def results
20
+ parse_response @raw_response = @client.fql_multiquery(query_map)
21
+ end
22
+
23
+ protected
24
+
25
+ def query_map
26
+ @queries.each_key.inject({}) { |res,k| res[k] = @queries[k][0]; res }
27
+ end
28
+
29
+ def parse_response(response)
30
+ # Fetch each subquery and map its results to the desired class,
31
+ @queries.each_key.inject({}) do |res, query|
32
+ # Default value is empty array
33
+ res[query] = []
34
+ # Find subquery by name in response
35
+ vals = response.find{|r| r['name'] == query.to_s}
36
+ if vals && vals.has_key?('fql_result_set')
37
+ res[query] = @client.map_to_class(vals['fql_result_set'], @queries[query][1])
38
+ end
39
+ res
40
+ end
41
+ end
42
+ end
43
+ end
data/lib/mogli/user.rb CHANGED
@@ -3,7 +3,7 @@ module Mogli
3
3
  set_search_type
4
4
 
5
5
  define_properties :first_name, :last_name, :link, :about, :birthday, :gender,
6
- :email, :website, :timezone, :updated_time, :verified, :political,
6
+ :email, :website, :timezone, :updated_time, :verified, :political, :bio,
7
7
  :relationship_status, :locale, :religion, :quotes, :third_party_id
8
8
 
9
9
  def self.recognize?(hash)
@@ -16,6 +16,7 @@ module Mogli
16
16
  hash_populating_accessor :location, "Page"
17
17
  hash_populating_accessor :hometown, "Page"
18
18
  hash_populating_accessor :languages, "Page"
19
+ hash_populating_accessor :significant_other, "User"
19
20
 
20
21
  has_association :activities, "Activity"
21
22
  has_association :friends, "User"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mogli
3
3
  version: !ruby/object:Gem::Version
4
- hash: 45
4
+ hash: 43
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 25
10
- version: 0.0.25
9
+ - 26
10
+ version: 0.0.26
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mike Mangino
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-03 00:00:00 -05:00
18
+ date: 2011-03-02 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -60,6 +60,7 @@ files:
60
60
  - lib/mogli/education.rb
61
61
  - lib/mogli/event.rb
62
62
  - lib/mogli/fetching_array.rb
63
+ - lib/mogli/fql_multiquery.rb
63
64
  - lib/mogli/group.rb
64
65
  - lib/mogli/insight.rb
65
66
  - lib/mogli/insight_value.rb