hellotxt 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/History.txt +6 -0
- data/Rakefile +22 -27
- data/lib/hellotxt.rb +3 -3
- data/lib/hellotxt/client.rb +25 -2
- data/spec/client_spec.rb +62 -0
- data/spec/spec_responses.rb +38 -2
- metadata +38 -18
- data/tasks/ann.rake +0 -80
- data/tasks/bones.rake +0 -20
- data/tasks/gem.rake +0 -201
- data/tasks/git.rake +0 -40
- data/tasks/manifest.rake +0 -48
- data/tasks/notes.rake +0 -27
- data/tasks/post_load.rake +0 -39
- data/tasks/rdoc.rake +0 -50
- data/tasks/rubyforge.rake +0 -55
- data/tasks/setup.rb +0 -279
- data/tasks/spec.rake +0 -54
- data/tasks/svn.rake +0 -47
- data/tasks/test.rake +0 -40
data/.gitignore
CHANGED
data/History.txt
CHANGED
data/Rakefile
CHANGED
@@ -1,38 +1,33 @@
|
|
1
|
-
# Look in the tasks/setup.rb file for the various options that can be
|
2
|
-
# configured in this Rakefile. The .rake files in the tasks directory
|
3
|
-
# are where the options are used.
|
4
|
-
|
5
1
|
begin
|
6
2
|
require 'bones'
|
7
|
-
Bones.setup
|
8
3
|
rescue LoadError
|
9
|
-
|
4
|
+
abort '### Please install the "bones" gem ###'
|
10
5
|
end
|
11
6
|
|
12
7
|
ensure_in_path 'lib'
|
13
8
|
require 'hellotxt'
|
14
9
|
|
15
10
|
task :default => 'spec:run'
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
11
|
+
task 'gem:release' => 'spec:run'
|
12
|
+
|
13
|
+
Bones {
|
14
|
+
name 'hellotxt'
|
15
|
+
authors ['Kevin Williams']
|
16
|
+
email ['kevwil@gmail.com']
|
17
|
+
url 'http://kevwil.github.com/hellotxt'
|
18
|
+
version ENV['VERSION'] || HelloTxt::VERSION
|
19
|
+
# rubyforge.name 'hellotxt'
|
20
|
+
readme_file 'README'
|
21
|
+
ignore_file '.gitignore'
|
22
|
+
gem.need_tar false
|
23
|
+
depend_on 'bones', :development => true
|
24
|
+
depend_on 'rspec', :development => true
|
25
|
+
depend_on 'mocha', :development => true
|
26
|
+
ruby_opts << '-Ilib' << '-rubygems'
|
27
|
+
#spec_opts << '--color'# << '--format html:./spec_out.html'
|
28
|
+
#rcov_opts << ['--exclude', 'rcov']
|
29
|
+
#rcov_opts << ['--exclude', 'mocha']
|
30
|
+
# enable_sudo
|
31
|
+
}
|
37
32
|
|
38
33
|
# EOF
|
data/lib/hellotxt.rb
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
|
|
3
3
|
module HelloTxt
|
4
4
|
|
5
5
|
# :stopdoc:
|
6
|
-
VERSION = '1.0.
|
6
|
+
VERSION = '1.0.2'
|
7
7
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
8
8
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
9
9
|
# :startdoc:
|
@@ -30,7 +30,7 @@ module HelloTxt
|
|
30
30
|
args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
31
31
|
end
|
32
32
|
|
33
|
-
# Utility method used to
|
33
|
+
# Utility method used to require all files ending in .rb that lie in the
|
34
34
|
# directory below this file that has the same name as the filename passed
|
35
35
|
# in. Optionally, a specific _directory_ name can be passed in such that
|
36
36
|
# the _filename_ does not have to be equivalent to the directory.
|
@@ -38,7 +38,7 @@ module HelloTxt
|
|
38
38
|
def self.require_all_libs_relative_to( fname, dir = nil )
|
39
39
|
dir ||= ::File.basename(fname, '.*')
|
40
40
|
search_me = ::File.expand_path(
|
41
|
-
::File.join(::File.dirname(fname), dir, '
|
41
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
42
42
|
|
43
43
|
Dir.glob(search_me).sort.each {|rb| require rb}
|
44
44
|
end
|
data/lib/hellotxt/client.rb
CHANGED
@@ -30,12 +30,14 @@ module HelloTxt
|
|
30
30
|
end
|
31
31
|
|
32
32
|
# Returns a list of services the user has set up through HelloTxt
|
33
|
+
# Optional arguments:
|
34
|
+
# group = service group type; either 'inhome', 'friend', 'colleague', 'all'
|
33
35
|
# if successful returns:
|
34
36
|
# {'status' => 'OK', 'services' => [{'id' => 'serviceid', 'name' => 'servicename', 'code' => 'servicecode', 'inhome' => 'checked', 'friend' => 'checked', 'collegue' => 'checked'}, ...]}
|
35
37
|
# if unsuccessful returns:
|
36
38
|
# {'status' => 'FAIL', 'message' => 'message what went wrong'}
|
37
|
-
def user_services
|
38
|
-
response = get_response('user.services')
|
39
|
+
def user_services(group = 'all')
|
40
|
+
response = get_response('user.services', 'group' => group)
|
39
41
|
if response.elements['rsp'].attributes['status'] == 'OK'
|
40
42
|
services = status_ok()
|
41
43
|
services['services'] = []
|
@@ -76,6 +78,27 @@ module HelloTxt
|
|
76
78
|
return status_fail(response)
|
77
79
|
end
|
78
80
|
end
|
81
|
+
|
82
|
+
# Returns a list of 20 status update sent through HelloTxt.
|
83
|
+
# if successful returns:
|
84
|
+
# {'status' => 'OK', 'messages' => [{'id' => 'messageid', 'title' => 'titletext', 'body' => 'bodytext'}, ...]}
|
85
|
+
# if unsuccessful returns:
|
86
|
+
# {'status' => 'FAIL', 'message' => 'message what went wrong'}
|
87
|
+
def latest
|
88
|
+
response = get_response('user.latest')
|
89
|
+
if response.elements['rsp'].attributes['status'] == 'OK'
|
90
|
+
messages = status_ok()
|
91
|
+
messages['messages'] = []
|
92
|
+
response.elements.each('rsp/messages/message') do |message|
|
93
|
+
messages['messages'].push({'id' => message.attributes['id'],
|
94
|
+
'title' => message.elements['title'].text,
|
95
|
+
'body' => message.elements['body'].text})
|
96
|
+
end
|
97
|
+
return messages
|
98
|
+
else
|
99
|
+
return status_fail(response)
|
100
|
+
end
|
101
|
+
end
|
79
102
|
|
80
103
|
private
|
81
104
|
|
data/spec/client_spec.rb
CHANGED
@@ -29,6 +29,7 @@ describe HelloTxt::Client, "with expected results" do
|
|
29
29
|
init_service_response
|
30
30
|
|
31
31
|
uri = URI.parse "#{HelloTxt::API_URL}/method/#{@service_type}"
|
32
|
+
@params.merge!('group' => 'all')
|
32
33
|
|
33
34
|
# mock the http call
|
34
35
|
http_resp = mock('response')
|
@@ -45,6 +46,28 @@ describe HelloTxt::Client, "with expected results" do
|
|
45
46
|
result['services'].length.should eql(5)
|
46
47
|
result['services'].first['name'].should eql('twitter')
|
47
48
|
end
|
49
|
+
|
50
|
+
it "should list only jaiku in list of 'friend' services" do
|
51
|
+
init_friend_service_response
|
52
|
+
|
53
|
+
uri = URI.parse "#{HelloTxt::API_URL}/method/#{@service_type}"
|
54
|
+
@params.merge!('group' => 'friend')
|
55
|
+
|
56
|
+
# mock the http call
|
57
|
+
http_resp = mock('response')
|
58
|
+
http_resp.expects(:body).returns(@response)
|
59
|
+
Net::HTTP.expects(:post_form).with(uri, @params).returns(http_resp)
|
60
|
+
|
61
|
+
# call and verify
|
62
|
+
result = @client.user_services('friend')
|
63
|
+
result.should_not be_empty
|
64
|
+
result['status'].should_not be_nil
|
65
|
+
result['status'].should eql('OK')
|
66
|
+
result['services'].should_not be_nil
|
67
|
+
result['services'].should_not be_empty
|
68
|
+
result['services'].length.should eql(1)
|
69
|
+
result['services'].first['name'].should eql('jaiku')
|
70
|
+
end
|
48
71
|
|
49
72
|
it "should post a message to the service" do
|
50
73
|
init_ok_response 'user.post'
|
@@ -65,6 +88,27 @@ describe HelloTxt::Client, "with expected results" do
|
|
65
88
|
result['status'].should_not be_nil
|
66
89
|
result['status'].should eql('OK')
|
67
90
|
end
|
91
|
+
|
92
|
+
it "should retrieve user's 20 latest status messages" do
|
93
|
+
init_user_latest_response
|
94
|
+
|
95
|
+
uri = URI.parse "#{HelloTxt::API_URL}/method/#{@service_type}"
|
96
|
+
|
97
|
+
# mock the http call
|
98
|
+
http_resp = mock('response')
|
99
|
+
http_resp.expects(:body).returns(@response)
|
100
|
+
Net::HTTP.expects(:post_form).with(uri, @params).returns(http_resp)
|
101
|
+
|
102
|
+
# call and verify
|
103
|
+
result = @client.latest
|
104
|
+
result.should_not be_empty
|
105
|
+
result['status'].should_not be_nil
|
106
|
+
result['status'].should eql('OK')
|
107
|
+
result['messages'].should_not be_nil
|
108
|
+
result['messages'].should_not be_empty
|
109
|
+
result['messages'].length.should eql(2)
|
110
|
+
result['messages'].first['body'].should eql('this is a test message')
|
111
|
+
end
|
68
112
|
|
69
113
|
end
|
70
114
|
|
@@ -96,6 +140,7 @@ describe HelloTxt::Client, "with error messages" do
|
|
96
140
|
init_fail_response 'user.services'
|
97
141
|
|
98
142
|
uri = URI.parse "#{HelloTxt::API_URL}/method/#{@service_type}"
|
143
|
+
@params.merge!('group' => 'all')
|
99
144
|
|
100
145
|
# mock the http call
|
101
146
|
http_resp = mock('response')
|
@@ -130,4 +175,21 @@ describe HelloTxt::Client, "with error messages" do
|
|
130
175
|
result['message'].should_not be_nil
|
131
176
|
end
|
132
177
|
|
178
|
+
it "should handle a failed user.latest call cleanly" do
|
179
|
+
init_fail_response 'user.latest'
|
180
|
+
|
181
|
+
uri = URI.parse "#{HelloTxt::API_URL}/method/#{@service_type}"
|
182
|
+
|
183
|
+
# mock the http call
|
184
|
+
http_resp = mock('response')
|
185
|
+
http_resp.expects(:body).returns(@response)
|
186
|
+
Net::HTTP.expects(:post_form).with(uri, @params).returns(http_resp)
|
187
|
+
|
188
|
+
# call and verify
|
189
|
+
result = @client.latest
|
190
|
+
result.should_not be_empty
|
191
|
+
result['status'].should_not be_nil
|
192
|
+
result['status'].should eql('FAIL')
|
193
|
+
result['message'].should_not be_nil
|
194
|
+
end
|
133
195
|
end
|
data/spec/spec_responses.rb
CHANGED
@@ -23,7 +23,7 @@ end
|
|
23
23
|
def init_service_response
|
24
24
|
@service_type = 'user.services'
|
25
25
|
@response = <<EOXML
|
26
|
-
|
26
|
+
<?xml version="1.0"?>
|
27
27
|
<rsp status="OK">
|
28
28
|
<services>
|
29
29
|
<service id="tw" name="twitter">
|
@@ -41,7 +41,7 @@ def init_service_response
|
|
41
41
|
<service id="jk" name="jaiku">
|
42
42
|
<code>OK38</code>
|
43
43
|
<inhome>checked</inhome>
|
44
|
-
<friend>
|
44
|
+
<friend>checked</friend>
|
45
45
|
<collegue>unchecked</collegue>
|
46
46
|
</service>
|
47
47
|
<service id="id" name="identica">
|
@@ -60,3 +60,39 @@ def init_service_response
|
|
60
60
|
</rsp>
|
61
61
|
EOXML
|
62
62
|
end
|
63
|
+
|
64
|
+
def init_friend_service_response
|
65
|
+
@service_type = 'user.services'
|
66
|
+
@response = <<EOXML
|
67
|
+
<?xml version="1.0"?>
|
68
|
+
<rsp status="OK">
|
69
|
+
<services>
|
70
|
+
<service id="jk" name="jaiku">
|
71
|
+
<code>OK38</code>
|
72
|
+
<inhome>checked</inhome>
|
73
|
+
<friend>checked</friend>
|
74
|
+
<collegue>unchecked</collegue>
|
75
|
+
</service>
|
76
|
+
</services>
|
77
|
+
</rsp>
|
78
|
+
EOXML
|
79
|
+
end
|
80
|
+
|
81
|
+
def init_user_latest_response
|
82
|
+
@service_type = 'user.latest'
|
83
|
+
@response = <<EOXML
|
84
|
+
<?xml version="1.0"?>
|
85
|
+
<rsp status="OK">
|
86
|
+
<messages>
|
87
|
+
<message id="1234">
|
88
|
+
<title></title>
|
89
|
+
<body>this is a test message</body>
|
90
|
+
</message>
|
91
|
+
<message id="5678">
|
92
|
+
<title></title>
|
93
|
+
<body>Desperately trying not to be bored</body>
|
94
|
+
</message>
|
95
|
+
</messages>
|
96
|
+
</rsp>
|
97
|
+
EOXML
|
98
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hellotxt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Williams
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-22 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,37 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 3.1.0
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.9
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: mocha
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.9.8
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: bones
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 3.1.0
|
24
54
|
version:
|
25
55
|
description: HelloTxt (http://hellotxt.com) is a simple service that makes updating your social networks a snap, and this is it's Ruby library.
|
26
56
|
email:
|
@@ -31,6 +61,7 @@ extensions: []
|
|
31
61
|
|
32
62
|
extra_rdoc_files:
|
33
63
|
- History.txt
|
64
|
+
- Manifest.txt
|
34
65
|
- bin/hellotxt
|
35
66
|
files:
|
36
67
|
- .gitignore
|
@@ -47,21 +78,10 @@ files:
|
|
47
78
|
- spec/keyloader_spec.rb
|
48
79
|
- spec/spec_helper.rb
|
49
80
|
- spec/spec_responses.rb
|
50
|
-
- tasks/ann.rake
|
51
|
-
- tasks/bones.rake
|
52
|
-
- tasks/gem.rake
|
53
|
-
- tasks/git.rake
|
54
|
-
- tasks/manifest.rake
|
55
|
-
- tasks/notes.rake
|
56
|
-
- tasks/post_load.rake
|
57
|
-
- tasks/rdoc.rake
|
58
|
-
- tasks/rubyforge.rake
|
59
|
-
- tasks/setup.rb
|
60
|
-
- tasks/spec.rake
|
61
|
-
- tasks/svn.rake
|
62
|
-
- tasks/test.rake
|
63
81
|
has_rdoc: true
|
64
82
|
homepage: http://kevwil.github.com/hellotxt
|
83
|
+
licenses: []
|
84
|
+
|
65
85
|
post_install_message:
|
66
86
|
rdoc_options:
|
67
87
|
- --main
|
@@ -83,9 +103,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
103
|
requirements: []
|
84
104
|
|
85
105
|
rubyforge_project: hellotxt
|
86
|
-
rubygems_version: 1.3.
|
106
|
+
rubygems_version: 1.3.5
|
87
107
|
signing_key:
|
88
|
-
specification_version:
|
108
|
+
specification_version: 3
|
89
109
|
summary: HelloTxt (http://hellotxt
|
90
110
|
test_files: []
|
91
111
|
|
data/tasks/ann.rake
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
|
2
|
-
begin
|
3
|
-
require 'bones/smtp_tls'
|
4
|
-
rescue LoadError
|
5
|
-
require 'net/smtp'
|
6
|
-
end
|
7
|
-
require 'time'
|
8
|
-
|
9
|
-
namespace :ann do
|
10
|
-
|
11
|
-
# A prerequisites task that all other tasks depend upon
|
12
|
-
task :prereqs
|
13
|
-
|
14
|
-
file PROJ.ann.file do
|
15
|
-
ann = PROJ.ann
|
16
|
-
puts "Generating #{ann.file}"
|
17
|
-
File.open(ann.file,'w') do |fd|
|
18
|
-
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
19
|
-
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
20
|
-
fd.puts(" #{PROJ.url}") if PROJ.url.valid?
|
21
|
-
fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
|
22
|
-
fd.puts
|
23
|
-
fd.puts("== DESCRIPTION")
|
24
|
-
fd.puts
|
25
|
-
fd.puts(PROJ.description)
|
26
|
-
fd.puts
|
27
|
-
fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
|
28
|
-
fd.puts
|
29
|
-
ann.paragraphs.each do |p|
|
30
|
-
fd.puts "== #{p.upcase}"
|
31
|
-
fd.puts
|
32
|
-
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
33
|
-
fd.puts
|
34
|
-
end
|
35
|
-
fd.puts ann.text if ann.text
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
desc "Create an announcement file"
|
40
|
-
task :announcement => ['ann:prereqs', PROJ.ann.file]
|
41
|
-
|
42
|
-
desc "Send an email announcement"
|
43
|
-
task :email => ['ann:prereqs', PROJ.ann.file] do
|
44
|
-
ann = PROJ.ann
|
45
|
-
from = ann.email[:from] || Array(PROJ.authors).first || PROJ.email
|
46
|
-
to = Array(ann.email[:to])
|
47
|
-
|
48
|
-
### build a mail header for RFC 822
|
49
|
-
rfc822msg = "From: #{from}\n"
|
50
|
-
rfc822msg << "To: #{to.join(',')}\n"
|
51
|
-
rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
|
52
|
-
rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
|
53
|
-
rfc822msg << "\n"
|
54
|
-
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
55
|
-
rfc822msg << "Message-Id: "
|
56
|
-
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
|
57
|
-
rfc822msg << File.read(ann.file)
|
58
|
-
|
59
|
-
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
60
|
-
ann.email[key]
|
61
|
-
end
|
62
|
-
|
63
|
-
params[3] = PROJ.email if params[3].nil?
|
64
|
-
|
65
|
-
if params[4].nil?
|
66
|
-
STDOUT.write "Please enter your e-mail password (#{params[3]}): "
|
67
|
-
params[4] = STDIN.gets.chomp
|
68
|
-
end
|
69
|
-
|
70
|
-
### send email
|
71
|
-
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
72
|
-
end
|
73
|
-
end # namespace :ann
|
74
|
-
|
75
|
-
desc 'Alias to ann:announcement'
|
76
|
-
task :ann => 'ann:announcement'
|
77
|
-
|
78
|
-
CLOBBER << PROJ.ann.file
|
79
|
-
|
80
|
-
# EOF
|