facebook-graphclient 0.2 → 0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'facebook-graphclient'
3
- s.version = '0.2'
4
- s.date = '2010-05-24'
3
+ s.version = '0.3'
4
+ s.date = '2010-12-12'
5
5
  s.summary = "A simple library for Facebook's new Graph API"
6
6
  s.description = "A bare-bones implementation of Facebook's new Graph API"
7
7
 
@@ -9,6 +9,7 @@ require 'rack'
9
9
 
10
10
  module Facebook
11
11
  GRAPH_URL = 'https://graph.facebook.com'
12
+ API_URL = 'https://api.facebook.com/method/'
12
13
 
13
14
  class GraphClient
14
15
 
@@ -21,14 +22,13 @@ module Facebook
21
22
  @secret = facebook_settings[:secret]
22
23
 
23
24
  @cookie = get_user_cookie facebook_settings[:cookies]
24
-
25
25
  @access_token = facebook_settings[:access_token] || @cookie['access_token']
26
-
27
26
  @session = Patron::Session.new
28
27
  end
29
28
 
30
29
  def get_user_cookie cookies
31
30
  if cookies and cookie = cookies["fbs_#{@app_id}"]
31
+ cookie = cookie[1..-2] if cookie[0..0] == '"'
32
32
  Rack::Utils.parse_nested_query(cookie)
33
33
  else
34
34
  {}
@@ -43,10 +43,10 @@ module Facebook
43
43
  ]
44
44
  end
45
45
 
46
- def api action, method, query_params = nil
46
+ def api action, method, query_params = {}
47
47
  query_params[:access_token] ||= @access_token
48
-
49
48
  query_string = '?' + query_params.map { |k,v| "#{k}=#{v}" }.join("&") unless query_params.empty?
49
+ query_string ||= ''
50
50
 
51
51
  tries = 0
52
52
  begin
@@ -105,7 +105,7 @@ module Facebook
105
105
  def valid?
106
106
  return false if @cookie.nil?
107
107
 
108
- unless @is_valid
108
+ if @is_valid.nil?
109
109
  vars = @cookie.dup
110
110
 
111
111
  good_sig = vars.delete 'sig'
@@ -128,5 +128,65 @@ module Facebook
128
128
  def params
129
129
  valid? ? @params : {}
130
130
  end
131
+
132
+ def rest(method, opts = {})
133
+ if method == 'photos.upload'
134
+ image = opts.delete :image
135
+ end
136
+
137
+ opts = { :api_key => self.api_key,
138
+ :call_id => Time.now.to_f,
139
+ :format => 'JSON',
140
+ :v => '1.0',
141
+ :access_token => @access_token,
142
+ :session_key => %w[ photos.upload ].include?(method) ? nil : params[:session_key],
143
+ :method => method }.merge(opts)
144
+
145
+ args = opts.map{ |k,v|
146
+ next nil unless v
147
+
148
+ "#{k}=" + case v
149
+ when Hash
150
+ Yajl::Encoder.encode(v)
151
+ when Array
152
+ if k == :tags
153
+ Yajl::Encoder.encode(v)
154
+ else
155
+ v.join(',')
156
+ end
157
+ else
158
+ v.to_s
159
+ end
160
+ }.compact.sort
161
+
162
+ sig = Digest::MD5.hexdigest(args.join+self.secret)
163
+
164
+ if method == 'photos.upload'
165
+ data = MimeBoundary
166
+ data += opts.merge(:sig => sig).inject('') do |buf, (key, val)|
167
+ if val
168
+ buf << (MimePart % [key, val])
169
+ else
170
+ buf
171
+ end
172
+ end
173
+ data += MimeImage % ['upload.jpg', 'jpg', image.respond_to?(:read) ? image.read : image]
174
+ else
175
+ data = Array["sig=#{sig}", *args.map{|a| a.gsub('&','%26').gsub('+','%2B') }].join('&')
176
+ end
177
+
178
+ raw_response = @session.post(API_URL + method, data)
179
+
180
+ json = ["false", '', nil].include?(raw_response.body) ? '{}' : raw_response.body
181
+ response = Yajl::Parser.parse(json)
182
+
183
+ if response.is_a?(Hash) and response.has_key?('error_code')
184
+ error = FacebookError.new(response['error_msg'])
185
+ error.data = response
186
+ raise error
187
+ else
188
+ response
189
+ end
190
+ end
131
191
  end
132
192
  end
metadata CHANGED
@@ -1,11 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: facebook-graphclient
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 13
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 2
8
- version: "0.2"
8
+ - 3
9
+ version: "0.3"
9
10
  platform: ruby
10
11
  authors:
11
12
  - Jesse Farmer
@@ -13,16 +14,18 @@ autorequire:
13
14
  bindir: bin
14
15
  cert_chain: []
15
16
 
16
- date: 2010-05-24 00:00:00 -07:00
17
+ date: 2010-12-12 00:00:00 -08:00
17
18
  default_executable:
18
19
  dependencies:
19
20
  - !ruby/object:Gem::Dependency
20
21
  name: yajl-ruby
21
22
  prerelease: false
22
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
23
25
  requirements:
24
26
  - - ">="
25
27
  - !ruby/object:Gem::Version
28
+ hash: 3
26
29
  segments:
27
30
  - 0
28
31
  version: "0"
@@ -32,9 +35,11 @@ dependencies:
32
35
  name: patron
33
36
  prerelease: false
34
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
35
39
  requirements:
36
40
  - - ">="
37
41
  - !ruby/object:Gem::Version
42
+ hash: 3
38
43
  segments:
39
44
  - 0
40
45
  version: "0"
@@ -44,9 +49,11 @@ dependencies:
44
49
  name: rack
45
50
  prerelease: false
46
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
47
53
  requirements:
48
54
  - - ">="
49
55
  - !ruby/object:Gem::Version
56
+ hash: 3
50
57
  segments:
51
58
  - 0
52
59
  version: "0"
@@ -75,23 +82,27 @@ rdoc_options: []
75
82
  require_paths:
76
83
  - lib
77
84
  required_ruby_version: !ruby/object:Gem::Requirement
85
+ none: false
78
86
  requirements:
79
87
  - - ">="
80
88
  - !ruby/object:Gem::Version
89
+ hash: 3
81
90
  segments:
82
91
  - 0
83
92
  version: "0"
84
93
  required_rubygems_version: !ruby/object:Gem::Requirement
94
+ none: false
85
95
  requirements:
86
96
  - - ">="
87
97
  - !ruby/object:Gem::Version
98
+ hash: 3
88
99
  segments:
89
100
  - 0
90
101
  version: "0"
91
102
  requirements: []
92
103
 
93
104
  rubyforge_project:
94
- rubygems_version: 1.3.6
105
+ rubygems_version: 1.3.7
95
106
  signing_key:
96
107
  specification_version: 3
97
108
  summary: A simple library for Facebook's new Graph API