bloveless_grackle 0.1.10
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.
- data/CHANGELOG.rdoc +46 -0
- data/README.rdoc +217 -0
- data/grackle.gemspec +40 -0
- data/lib/grackle.rb +31 -0
- data/lib/grackle/client.rb +295 -0
- data/lib/grackle/handlers.rb +90 -0
- data/lib/grackle/transport.rb +248 -0
- data/lib/grackle/utils.rb +16 -0
- data/test/test_client.rb +359 -0
- data/test/test_grackle.rb +4 -0
- data/test/test_handlers.rb +89 -0
- data/test/test_helper.rb +3 -0
- metadata +112 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
|
2
|
+
|
|
3
|
+
class TestHandlers < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_string_handler_echoes
|
|
6
|
+
sh = Grackle::Handlers::StringHandler.new
|
|
7
|
+
body = "This is some text"
|
|
8
|
+
assert_equal(body,sh.decode_response(body),"String handler should just echo response body")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_xml_handler_parses_text_only_nodes_as_attributes
|
|
12
|
+
h = Grackle::Handlers::XMLHandler.new
|
|
13
|
+
body = "<user><id>12345</id><screen_name>User1</screen_name></user>"
|
|
14
|
+
value = h.decode_response(body)
|
|
15
|
+
assert_equal(12345,value.id,"Id element should be treated as an attribute and be returned as a Fixnum")
|
|
16
|
+
assert_equal("User1",value.screen_name,"screen_name element should be treated as an attribute")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_xml_handler_parses_nested_elements_with_children_as_nested_objects
|
|
20
|
+
h = Grackle::Handlers::XMLHandler.new
|
|
21
|
+
body = "<user><id>12345</id><screen_name>User1</screen_name><status><id>9876</id><text>this is a status</text></status></user>"
|
|
22
|
+
value = h.decode_response(body)
|
|
23
|
+
assert_not_nil(value.status,"status element should be turned into an object")
|
|
24
|
+
assert_equal(9876,value.status.id,"status element should have id")
|
|
25
|
+
assert_equal("this is a status",value.status.text,"status element should have text")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_xml_handler_parses_elements_with_type_array_as_arrays
|
|
29
|
+
h = Grackle::Handlers::XMLHandler.new
|
|
30
|
+
body = "<some_ids type=\"array\">"
|
|
31
|
+
1.upto(10) do |i|
|
|
32
|
+
body << "<id>#{i}</id>"
|
|
33
|
+
end
|
|
34
|
+
body << "</some_ids>"
|
|
35
|
+
value = h.decode_response(body)
|
|
36
|
+
assert_equal(Array,value.class,"Root parsed object should be an array")
|
|
37
|
+
assert_equal(10,value.length,"Parsed array should have correct length")
|
|
38
|
+
0.upto(9) do |i|
|
|
39
|
+
assert_equal(i+1,value[i],"Parsed array should contain #{i+1} at index #{i}")
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_xml_handler_parses_certain_elements_as_arrays
|
|
44
|
+
h = Grackle::Handlers::XMLHandler.new
|
|
45
|
+
special_twitter_elements = ['ids','statuses','users']
|
|
46
|
+
special_twitter_elements.each do |name|
|
|
47
|
+
body = "<#{name}>"
|
|
48
|
+
1.upto(10) do |i|
|
|
49
|
+
body << "<complex_value><id>#{i}</id><profile>This is profile #{i}</profile></complex_value>"
|
|
50
|
+
end
|
|
51
|
+
body << "</#{name}>"
|
|
52
|
+
value = h.decode_response(body)
|
|
53
|
+
assert_equal(Array,value.class,"Root parsed object should be an array")
|
|
54
|
+
assert_equal(10,value.length,"Parsed array should have correct length")
|
|
55
|
+
0.upto(9) do |i|
|
|
56
|
+
assert_equal(i+1,value[i].id,"Parsed array should contain id #{i+1} at index #{i}")
|
|
57
|
+
assert_equal("This is profile #{i+1}",value[i].profile,"Parsed array should contain profile 'This is profile #{i+1}' at index #{i}")
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_json_handler_parses_basic_attributes
|
|
63
|
+
h = Grackle::Handlers::JSONHandler.new
|
|
64
|
+
body = '{"id":12345,"screen_name":"User1"}'
|
|
65
|
+
value = h.decode_response(body)
|
|
66
|
+
assert_equal(12345,value.id,"Id element should be treated as an attribute and be returned as a Fixnum")
|
|
67
|
+
assert_equal("User1",value.screen_name,"screen_name element should be treated as an attribute")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_json_handler_parses_complex_attributes
|
|
71
|
+
h = Grackle::Handlers::JSONHandler.new
|
|
72
|
+
body = '{"id":12345,"screen_name":"User1","statuses":['
|
|
73
|
+
1.upto(10) do |i|
|
|
74
|
+
user_id = i+5000
|
|
75
|
+
body << ',' unless i == 1
|
|
76
|
+
body << %Q{{"id":#{i},"text":"Status from user #{user_id}", "user":{"id":#{user_id},"screen_name":"User #{user_id}"}}}
|
|
77
|
+
end
|
|
78
|
+
body << ']}'
|
|
79
|
+
value = h.decode_response(body)
|
|
80
|
+
assert_equal(12345,value.id,"Id element should be treated as an attribute and be returned as a Fixnum")
|
|
81
|
+
assert_equal("User1",value.screen_name,"screen_name element should be treated as an attribute")
|
|
82
|
+
assert_equal(Array,value.statuses.class,"statuses attribute should be an array")
|
|
83
|
+
1.upto(10) do |i|
|
|
84
|
+
assert_equal(i,value.statuses[i-1].id,"array should contain status with id #{i} at index #{i-1}")
|
|
85
|
+
assert_equal(i+5000,value.statuses[i-1].user.id,"status at index #{i-1} should contain user with id #{i+5000}")
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: bloveless_grackle
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.10
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Hayes Davis
|
|
9
|
+
- Brennon Loveless
|
|
10
|
+
autorequire:
|
|
11
|
+
bindir: bin
|
|
12
|
+
cert_chain: []
|
|
13
|
+
date: 2012-05-18 00:00:00.000000000 Z
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: json
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
none: false
|
|
19
|
+
requirements:
|
|
20
|
+
- - ! '>='
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '0'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
27
|
+
requirements:
|
|
28
|
+
- - ! '>='
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
version: '0'
|
|
31
|
+
- !ruby/object:Gem::Dependency
|
|
32
|
+
name: mime-types
|
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
|
34
|
+
none: false
|
|
35
|
+
requirements:
|
|
36
|
+
- - ! '>='
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '0'
|
|
39
|
+
type: :runtime
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ! '>='
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: oauth
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
type: :runtime
|
|
56
|
+
prerelease: false
|
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
58
|
+
none: false
|
|
59
|
+
requirements:
|
|
60
|
+
- - ! '>='
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
63
|
+
description: Grackle is a lightweight library for the Twitter REST and Search API.
|
|
64
|
+
Brennon Loveless added the upload api endpoint.
|
|
65
|
+
email: hayes@appozite.com
|
|
66
|
+
executables: []
|
|
67
|
+
extensions: []
|
|
68
|
+
extra_rdoc_files:
|
|
69
|
+
- README.rdoc
|
|
70
|
+
files:
|
|
71
|
+
- CHANGELOG.rdoc
|
|
72
|
+
- README.rdoc
|
|
73
|
+
- grackle.gemspec
|
|
74
|
+
- lib/grackle.rb
|
|
75
|
+
- lib/grackle/client.rb
|
|
76
|
+
- lib/grackle/handlers.rb
|
|
77
|
+
- lib/grackle/transport.rb
|
|
78
|
+
- lib/grackle/utils.rb
|
|
79
|
+
- test/test_grackle.rb
|
|
80
|
+
- test/test_helper.rb
|
|
81
|
+
- test/test_client.rb
|
|
82
|
+
- test/test_handlers.rb
|
|
83
|
+
homepage: http://github.com/hayesdavis/grackle
|
|
84
|
+
licenses: []
|
|
85
|
+
post_install_message:
|
|
86
|
+
rdoc_options:
|
|
87
|
+
- --inline-source
|
|
88
|
+
- --charset=UTF-8
|
|
89
|
+
- --main=README.rdoc
|
|
90
|
+
require_paths:
|
|
91
|
+
- lib
|
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
|
+
none: false
|
|
94
|
+
requirements:
|
|
95
|
+
- - ! '>='
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0'
|
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
|
+
none: false
|
|
100
|
+
requirements:
|
|
101
|
+
- - ! '>='
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
requirements: []
|
|
105
|
+
rubyforge_project: grackle
|
|
106
|
+
rubygems_version: 1.8.24
|
|
107
|
+
signing_key:
|
|
108
|
+
specification_version: 2
|
|
109
|
+
summary: Grackle is a library for the Twitter REST and Search API designed to not
|
|
110
|
+
require a new release in the face Twitter API changes or errors. It supports both
|
|
111
|
+
basic and OAuth authentication mechanisms.
|
|
112
|
+
test_files: []
|