hellotxt 1.0.1 → 1.0.2
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/.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
|