fql 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.markdown +23 -0
  3. data/Rakefile +38 -0
  4. data/lib/fql.rb +63 -0
  5. data/lib/fql/exception.rb +11 -0
  6. data/lib/fql/query.rb +25 -0
  7. data/lib/fql/version.rb +3 -0
  8. data/lib/tasks/fql_tasks.rake +4 -0
  9. data/test/dummy/README.rdoc +261 -0
  10. data/test/dummy/Rakefile +7 -0
  11. data/test/dummy/app/assets/javascripts/application.js +15 -0
  12. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  13. data/test/dummy/app/controllers/application_controller.rb +3 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  16. data/test/dummy/config.ru +4 -0
  17. data/test/dummy/config/application.rb +63 -0
  18. data/test/dummy/config/boot.rb +10 -0
  19. data/test/dummy/config/database.yml +25 -0
  20. data/test/dummy/config/environment.rb +5 -0
  21. data/test/dummy/config/environments/development.rb +37 -0
  22. data/test/dummy/config/environments/production.rb +67 -0
  23. data/test/dummy/config/environments/test.rb +37 -0
  24. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  25. data/test/dummy/config/initializers/inflections.rb +15 -0
  26. data/test/dummy/config/initializers/mime_types.rb +5 -0
  27. data/test/dummy/config/initializers/secret_token.rb +7 -0
  28. data/test/dummy/config/initializers/session_store.rb +8 -0
  29. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  30. data/test/dummy/config/locales/en.yml +5 -0
  31. data/test/dummy/config/routes.rb +58 -0
  32. data/test/dummy/public/404.html +26 -0
  33. data/test/dummy/public/422.html +26 -0
  34. data/test/dummy/public/500.html +25 -0
  35. data/test/dummy/public/favicon.ico +0 -0
  36. data/test/dummy/script/rails +6 -0
  37. data/test/fql/query_test.rb +32 -0
  38. data/test/fql_test.rb +71 -0
  39. data/test/test_helper.rb +15 -0
  40. metadata +211 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+ require 'fql/query'
3
+
4
+ class FqlQueryTest < ActiveSupport::TestCase
5
+ test "truth" do
6
+ assert_kind_of Class, Fql::Query
7
+ end
8
+
9
+ test "can create single query without using hash" do
10
+ assert_nothing_raised do
11
+ query = Fql::Query.new "SELECT uid2 FROM friend WHERE uid1=me()"
12
+ query.compose
13
+ end
14
+ end
15
+
16
+
17
+ test 'multiquery gets composed properly' do
18
+ multi_query = {
19
+ all_friends: "SELECT uid2 FROM friend WHERE uid1=me()",
20
+ my_name: "SELECT name FROM user WHERE uid=me()"
21
+ }
22
+ query = Fql::Query.new multi_query
23
+
24
+ actual = query.compose
25
+ expected = "{" +
26
+ "'all_friends':'SELECT uid2 FROM friend WHERE uid1=me()'," +
27
+ "'my_name':'SELECT name FROM user WHERE uid=me()'" +
28
+ "}"
29
+
30
+ assert_equal expected, actual
31
+ end
32
+ end
data/test/fql_test.rb ADDED
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+ require 'fakeweb'
3
+ require 'json'
4
+
5
+ class FqlTest < ActiveSupport::TestCase
6
+ EXCEPTIONS = {
7
+ oauth: '{
8
+ "error": {
9
+ "message": "An access token is required to request this resource.",
10
+ "type": "OAuthException",
11
+ "code": 104
12
+ }
13
+ }'
14
+ }
15
+
16
+
17
+ test "creates valid uri for fql query" do
18
+ multi_query = {
19
+ all_friends: "SELECT uid2 FROM friend WHERE uid1=me()",
20
+ my_name: "SELECT name FROM user WHERE uid=me()"
21
+ }
22
+ fql_query = Fql::Query.new multi_query
23
+
24
+ actual = Fql.make_url(fql_query).request_uri
25
+ expected = "/fql?q="+
26
+ "%7B'all_friends':" +
27
+ "'SELECT%20uid2%20FROM%20friend%20WHERE%20uid1=me()'," +
28
+ "'my_name':'SELECT%20name%20FROM%20user%20WHERE%20uid=me()'%7D"
29
+
30
+ assert_equal expected, actual
31
+ end
32
+
33
+ test "should correctly parse json response when using single query" do
34
+ query = "SELECT uid2 FROM friend WHERE uid1=me()"
35
+ mocked_response = '{"data":[{"uid2":"1"},{"uid2": "2"}]}'
36
+
37
+ assert_executes_query_correctly(query, mocked_response)
38
+ end
39
+
40
+ test "should correctly parse json response when using multiple queries" do
41
+ multi_query = {
42
+ all_friends: "SELECT uid2 FROM friend WHERE uid1=me()",
43
+ my_name: "SELECT name FROM user WHERE uid=me()"
44
+ }
45
+ mocked_response = '{"data":['+
46
+ '{"name":"all_friends","fql_result_set":[{"uid2":"1"},{"uid2":"2"}]},' +
47
+ '{"name":"my_name","fql_result_set":[{"name":"Some user"}]}]}'
48
+
49
+ assert_executes_query_correctly(multi_query, mocked_response)
50
+ end
51
+
52
+ test "raise a Fql::Exception when something goes wrong" do
53
+ facebook_should_respond_with EXCEPTIONS[:oauth]
54
+
55
+ assert_raise Fql::Exception do
56
+ Fql.execute('SELECT uid2 FROM friend WHERE uid1=me()')
57
+ end
58
+ end
59
+
60
+ def assert_executes_query_correctly(query, mocked_json_response)
61
+ facebook_should_respond_with mocked_json_response
62
+ actual = Fql.execute(query)
63
+ expected = ActiveSupport::JSON.decode(mocked_json_response)["data"]
64
+ assert_equal expected, actual
65
+ end
66
+
67
+ def facebook_should_respond_with(body, method = :any)
68
+ FakeWeb.register_uri(method, %r|graph\.facebook\.com|, :body => body)
69
+ end
70
+
71
+ end
@@ -0,0 +1,15 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
metadata ADDED
@@ -0,0 +1,211 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fql
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Maarten Claes
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: multi_json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.2.6
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.6
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: fakeweb
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rb-fsevent
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: guard-test
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Allows you to easily use FQL in Ruby.
111
+ email:
112
+ - maartencls@gmail.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - lib/fql/exception.rb
118
+ - lib/fql/query.rb
119
+ - lib/fql/version.rb
120
+ - lib/fql.rb
121
+ - lib/tasks/fql_tasks.rake
122
+ - MIT-LICENSE
123
+ - Rakefile
124
+ - README.markdown
125
+ - test/dummy/app/assets/javascripts/application.js
126
+ - test/dummy/app/assets/stylesheets/application.css
127
+ - test/dummy/app/controllers/application_controller.rb
128
+ - test/dummy/app/helpers/application_helper.rb
129
+ - test/dummy/app/views/layouts/application.html.erb
130
+ - test/dummy/config/application.rb
131
+ - test/dummy/config/boot.rb
132
+ - test/dummy/config/database.yml
133
+ - test/dummy/config/environment.rb
134
+ - test/dummy/config/environments/development.rb
135
+ - test/dummy/config/environments/production.rb
136
+ - test/dummy/config/environments/test.rb
137
+ - test/dummy/config/initializers/backtrace_silencers.rb
138
+ - test/dummy/config/initializers/inflections.rb
139
+ - test/dummy/config/initializers/mime_types.rb
140
+ - test/dummy/config/initializers/secret_token.rb
141
+ - test/dummy/config/initializers/session_store.rb
142
+ - test/dummy/config/initializers/wrap_parameters.rb
143
+ - test/dummy/config/locales/en.yml
144
+ - test/dummy/config/routes.rb
145
+ - test/dummy/config.ru
146
+ - test/dummy/public/404.html
147
+ - test/dummy/public/422.html
148
+ - test/dummy/public/500.html
149
+ - test/dummy/public/favicon.ico
150
+ - test/dummy/Rakefile
151
+ - test/dummy/README.rdoc
152
+ - test/dummy/script/rails
153
+ - test/fql/query_test.rb
154
+ - test/fql_test.rb
155
+ - test/test_helper.rb
156
+ homepage: https://github.com/mcls/fql
157
+ licenses: []
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 1.8.24
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: Facebook Query Language library
180
+ test_files:
181
+ - test/dummy/app/assets/javascripts/application.js
182
+ - test/dummy/app/assets/stylesheets/application.css
183
+ - test/dummy/app/controllers/application_controller.rb
184
+ - test/dummy/app/helpers/application_helper.rb
185
+ - test/dummy/app/views/layouts/application.html.erb
186
+ - test/dummy/config/application.rb
187
+ - test/dummy/config/boot.rb
188
+ - test/dummy/config/database.yml
189
+ - test/dummy/config/environment.rb
190
+ - test/dummy/config/environments/development.rb
191
+ - test/dummy/config/environments/production.rb
192
+ - test/dummy/config/environments/test.rb
193
+ - test/dummy/config/initializers/backtrace_silencers.rb
194
+ - test/dummy/config/initializers/inflections.rb
195
+ - test/dummy/config/initializers/mime_types.rb
196
+ - test/dummy/config/initializers/secret_token.rb
197
+ - test/dummy/config/initializers/session_store.rb
198
+ - test/dummy/config/initializers/wrap_parameters.rb
199
+ - test/dummy/config/locales/en.yml
200
+ - test/dummy/config/routes.rb
201
+ - test/dummy/config.ru
202
+ - test/dummy/public/404.html
203
+ - test/dummy/public/422.html
204
+ - test/dummy/public/500.html
205
+ - test/dummy/public/favicon.ico
206
+ - test/dummy/Rakefile
207
+ - test/dummy/README.rdoc
208
+ - test/dummy/script/rails
209
+ - test/fql/query_test.rb
210
+ - test/fql_test.rb
211
+ - test/test_helper.rb