wiscale 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -19,3 +19,4 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+ credentials.yml
data/Rakefile CHANGED
@@ -11,6 +11,7 @@ begin
11
11
  gem.homepage = "http://github.com/jgaudette/wiscale"
12
12
  gem.authors = ["Jon Gaudette"]
13
13
  gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
+ gem.add_development_dependency "httparty"
14
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
16
  end
16
17
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.1.0
@@ -0,0 +1,4 @@
1
+ # Change to a userid/publickey for running test suite
2
+
3
+ userid : '60'
4
+ publickey : 'fdb811'
@@ -2,8 +2,13 @@ require 'rubygems'
2
2
  require 'httparty'
3
3
  require 'json'
4
4
  require 'ostruct'
5
+ require 'digest/md5'
5
6
 
6
-
7
+ # See API documentation for more information on return values
8
+ # http://www.withings.com/en/api/bodyscale
9
+ #
10
+ # OpenStruct used when returning the 'body' information from api
11
+ # Individual sub-measurements are returned as array of hashes
7
12
  class WiScale
8
13
 
9
14
  def initialize(*params)
@@ -39,10 +44,6 @@ class WiScale
39
44
  end
40
45
  end
41
46
 
42
- def get_last_meas
43
- get_meas(:limit => 1)
44
- end
45
-
46
47
  def get_by_userid
47
48
  ret_val = JSON.parse(HTTParty.get(api_url + '/user', :query => {
48
49
  :action => 'getbyuserid',
@@ -56,6 +57,68 @@ class WiScale
56
57
  end
57
58
  end
58
59
 
60
+ def get_users_list(email, passwd)
61
+ hash = compute_hash(email, passwd)
62
+ ret_val = JSON.parse(HTTParty.get(api_url + '/account', :query => {:action => 'getuserslist', :email => email, :hash => hash}))
63
+
64
+ if ret_val['status'] == 0
65
+ ret_val['body']['users'].collect { |user| OpenStruct.new(user) }
66
+ else
67
+ ret_val['status']
68
+ end
69
+ end
70
+
71
+ def user_update(ispublic)
72
+ ret_val = JSON.parse(HTTParty.get(api_url + '/user', :query => {:action => 'update', :userid => userid, :publickey => publickey, :ispublic => ispublic}))
73
+
74
+ ret_val['status']
75
+ end
76
+
77
+ def notify_subscribe(callbackurl, comment)
78
+ ret_val = JSON.parse(HTTParty.get(api_url + '/notify', :query => {
79
+ :action => 'subscribe',
80
+ :userid => userid,
81
+ :publickey => publickey,
82
+ :callbackurl => URI.encode(callbackurl),
83
+ :comment => comment
84
+ }))
85
+
86
+ ret_val['status']
87
+ end
88
+
89
+ def notify_revoke(callbackurl)
90
+ ret_val = JSON.parse(HTTParty.get(api_url + '/notify', :query => {
91
+ :action => 'revoke',
92
+ :userid => userid,
93
+ :publickey => publickey,
94
+ :callbackurl => URI.encode(callbackurl)
95
+ }))
96
+
97
+ ret_val['status']
98
+ end
99
+
100
+ def notify_get(callbackurl)
101
+ ret_val = JSON.parse(HTTParty.get(api_url + '/notify', :query => {
102
+ :action => 'get',
103
+ :userid => userid,
104
+ :publickey => publickey,
105
+ :callbackurl => URI.encode(callbackurl)
106
+ }))
107
+
108
+ if ret_val['status'] == 0
109
+ OpenStruct.new(ret_val['body'])
110
+ else
111
+ ret_val['status']
112
+ end
113
+ end
114
+
115
+ def compute_hash(email, passwd)
116
+ once = get_once
117
+ hash = email + ':' + Digest::MD5::hexdigest(passwd) + ':' + once
118
+
119
+ Digest::MD5::hexdigest(hash)
120
+ end
121
+
59
122
  def api_url
60
123
  @api_url || @api_url = 'http://wbsapi.withings.net'
61
124
  end
@@ -12,14 +12,14 @@ class TestWiscaleRuby < Test::Unit::TestCase
12
12
  context "invalid login" do
13
13
  should "fail to get last measurement" do
14
14
  client = WiScale.new(:userid => '2384', :publickey => 'asdf')
15
- assert_equal 2555, client.get_last_meas
15
+ assert_equal 2555, client.get_meas()
16
16
  end
17
17
 
18
18
  should "succeed to get last measurement" do
19
19
  config = YAML.load_file("credentials.yml")
20
20
  client = WiScale.new(:userid => config['userid'], :publickey => config['publickey'])
21
21
 
22
- assert_not_equal 2555, client.get_last_meas
22
+ assert_not_equal 2555, client.get_meas(:limit => 1)
23
23
  end
24
24
  end
25
25
 
@@ -37,4 +37,31 @@ class TestWiscaleRuby < Test::Unit::TestCase
37
37
  end
38
38
  end
39
39
 
40
+ context "callback subscriptions" do
41
+ should "subscribe and revoke callback information" do
42
+ comment_str = 'testing'
43
+ config = YAML.load_file("credentials.yml")
44
+ client = WiScale.new(:userid => config['userid'], :publickey => config['publickey'])
45
+
46
+ assert_equal 0, client.notify_subscribe('http://www.myhackerdiet.com', comment_str)
47
+ assert_equal 0, client.notify_revoke('http://www.myhackerdiet.com')
48
+
49
+ # Revoking again should yield return code 294 -- 'No such subscription could be deleted'
50
+ assert_equal 294, client.notify_revoke('http://www.myhackerdiet.com')
51
+ end
52
+
53
+ should "subscribe and get callback information, then revoke" do
54
+ comment_str = 'testing'
55
+ config = YAML.load_file("credentials.yml")
56
+ client = WiScale.new(:userid => config['userid'], :publickey => config['publickey'])
57
+
58
+ assert_equal 0, client.notify_subscribe('http://www.myhackerdiet.com', comment_str)
59
+
60
+ subscription = client.notify_get('http://www.myhackerdiet.com')
61
+ assert_equal comment_str, subscription.comment
62
+
63
+ assert_equal 0, client.notify_revoke('http://www.myhackerdiet.com')
64
+ end
65
+ end
66
+
40
67
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 4
9
- version: 0.0.4
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jon Gaudette
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-01 00:00:00 -04:00
17
+ date: 2010-04-05 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -29,6 +29,18 @@ dependencies:
29
29
  version: "0"
30
30
  type: :development
31
31
  version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: httparty
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :development
43
+ version_requirements: *id002
32
44
  description: Ruby Wrapper for Withings Wifi Scale API
33
45
  email: jon@digital-drip.com
34
46
  executables: []
@@ -45,6 +57,7 @@ files:
45
57
  - README.rdoc
46
58
  - Rakefile
47
59
  - VERSION
60
+ - credentials.yml.example
48
61
  - lib/wiscale.rb
49
62
  - test/helper.rb
50
63
  - test/test_wiscale.rb