fql 0.2.0

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.
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