fitbyte 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +8 -9
- data/lib/fitbyte/client.rb +17 -10
- data/lib/fitbyte/helpers.rb +35 -0
- data/lib/fitbyte/version.rb +1 -1
- metadata +3 -4
- data/lib/fitbyte/fitstruct.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f683b1fe97c314e07e53a983be399fff5ea30787
|
4
|
+
data.tar.gz: 8d9701b9aa3f08a74a05f76a81dfcbe212387dfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cb40bea88a84370e8af28cc981750274f67521bfba24b84380435679b58b6de03cc3ccc02f045441e9012c6240d2af850131f4f98b75d5e02fe3fe675d7cb83
|
7
|
+
data.tar.gz: e19b133f2d0d4ed7276ca7e116e0e2934739c08e2a5e7b849a24977fa24760b2c29ab7e911ed98503a6ef33999d25d300b83e0a3bd2229479d7aff676f21d4d2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
0.4.0
|
2
|
+
-----
|
3
|
+
- Remove FitStruct objects
|
4
|
+
- The response's hash keys can now be transformed using the following options:
|
5
|
+
- `snake_case` - if set to true, all keys are formatted to snake_case
|
6
|
+
- `symbolize_keys` - if set to true, all keys are converted to symbols
|
7
|
+
|
1
8
|
0.3.0
|
2
9
|
-----
|
3
10
|
- API endpoint support for the following actions:
|
data/README.md
CHANGED
@@ -5,8 +5,6 @@
|
|
5
5
|
|
6
6
|
This gem allows interaction with [Fitbit's REST API](https://dev.fitbit.com/docs/basics/).
|
7
7
|
|
8
|
-
**NOTE:** Fitbit's API is currently in beta, and is in active development. Breaking changes to certain endpoints may be introduced during early development of this gem, until Fitbit's API solidifies.
|
9
|
-
|
10
8
|
## Installation
|
11
9
|
|
12
10
|
To install the latest release:
|
@@ -48,16 +46,14 @@ You're now authenticated and can make calls to Fitbit's API:
|
|
48
46
|
|
49
47
|
```ruby
|
50
48
|
client.food_logs Date.today
|
51
|
-
# =>
|
49
|
+
# => { "foods" => [{ "isFavorite" => true, "logDate" => "2015-06-26", "logId" => 1820, "loggedFood" => { "accessLevel" => "PUBLIC", "amount" => 132.57, "brand" => "", "calories" => 752, ...}] }
|
52
50
|
```
|
53
51
|
|
54
|
-
|
55
|
-
|
56
|
-
To return the original JSON, `raw: true` can be specified as an option:
|
52
|
+
To return the hash keys in snake_case format, the `snake_case: true` option can be specified:
|
57
53
|
|
58
54
|
```ruby
|
59
|
-
client.food_logs Date.today,
|
60
|
-
# => {
|
55
|
+
client.food_logs Date.today, snake_case: true
|
56
|
+
# => { "foods" => [{ "is_favorite" => true, "log_date" => "2015-06-26", "log_id" => 1820, "logged_food" => { "access_level" => "PUBLIC", "amount" => 132.57, "brand" => "", "calories" => 752, ...}] }
|
61
57
|
```
|
62
58
|
|
63
59
|
### Options
|
@@ -76,7 +72,10 @@ When initializing a `Fitbyte::Client` instance, you're given access to a handful
|
|
76
72
|
- `:scope` - A space-delimited list of the permissions you are requesting (default: "activity nutrition profile settings sleep social weight" | available: "activity", "heartrate", "location", "nutrition", "profile", "settings" "sleep", "social" and "weight")
|
77
73
|
|
78
74
|
---
|
79
|
-
- `:
|
75
|
+
- `:snake_case` - Transform returned object's keys to snake case format (default: false)
|
76
|
+
|
77
|
+
---
|
78
|
+
- `:symbolize_keys` - Transform returned object's keys to symbols (default: false)
|
80
79
|
|
81
80
|
---
|
82
81
|
|
data/lib/fitbyte/client.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require "fitbyte/fitstruct"
|
2
1
|
require "fitbyte/helpers"
|
3
2
|
require "fitbyte/activities"
|
4
3
|
require "fitbyte/goals"
|
@@ -13,7 +12,7 @@ require "fitbyte/water"
|
|
13
12
|
|
14
13
|
module Fitbyte
|
15
14
|
class Client
|
16
|
-
attr_accessor :api_version, :unit_system, :locale, :scope, :
|
15
|
+
attr_accessor :api_version, :unit_system, :locale, :scope, :snake_case, :symbolize_keys
|
17
16
|
|
18
17
|
def initialize(opts)
|
19
18
|
missing_args = [:client_id, :client_secret, :redirect_uri] - opts.keys
|
@@ -34,7 +33,8 @@ module Fitbyte
|
|
34
33
|
@scope = format_scope(opts[:scope])
|
35
34
|
|
36
35
|
@api_version = opts[:api_version]
|
37
|
-
@
|
36
|
+
@snake_case = opts[:snake_case]
|
37
|
+
@symbolize_keys = opts[:symbolize_keys]
|
38
38
|
|
39
39
|
@client = OAuth2::Client.new(@client_id, @client_secret, site: @site_url,
|
40
40
|
authorize_url: @authorize_url, token_url: @token_url)
|
@@ -71,21 +71,27 @@ module Fitbyte
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def get(path, opts={})
|
74
|
-
raw = opts[:raw].nil? ? @raw_response : opts[:raw]
|
75
74
|
response = token.get(("#{@api_version}/" + path), headers: request_headers).response
|
76
|
-
MultiJson.load(response.body
|
75
|
+
object = MultiJson.load(response.body) unless response.status == 204
|
76
|
+
process_keys!(object, opts)
|
77
77
|
end
|
78
78
|
|
79
79
|
def post(path, opts={})
|
80
|
-
raw = opts[:raw].nil? ? @raw_response : opts[:raw]
|
81
80
|
response = token.post(("#{@api_version}/" + path), body: opts, headers: request_headers).response
|
82
|
-
MultiJson.load(response.body
|
81
|
+
object = MultiJson.load(response.body) unless response.status == 204
|
82
|
+
process_keys!(object, opts)
|
83
83
|
end
|
84
84
|
|
85
85
|
def delete(path, opts={})
|
86
|
-
raw = opts[:raw].nil? ? @raw_response : opts[:raw]
|
87
86
|
response = token.delete(("#{@api_version}/" + path), headers: request_headers).response
|
88
|
-
MultiJson.load(response.body
|
87
|
+
object = MultiJson.load(response.body) unless response.status == 204
|
88
|
+
process_keys!(object, opts)
|
89
|
+
end
|
90
|
+
|
91
|
+
def process_keys!(object, opts={})
|
92
|
+
deep_keys_to_snake_case!(object) if (opts[:snake_case] || snake_case)
|
93
|
+
deep_symbolize_keys!(object) if (opts[:symbolize_keys] || symbolize_keys)
|
94
|
+
return object
|
89
95
|
end
|
90
96
|
|
91
97
|
def defaults
|
@@ -97,7 +103,8 @@ module Fitbyte
|
|
97
103
|
unit_system: "en_US",
|
98
104
|
locale: "en_US",
|
99
105
|
api_version: "1",
|
100
|
-
|
106
|
+
snake_case: false,
|
107
|
+
symbolize_keys: false
|
101
108
|
}
|
102
109
|
end
|
103
110
|
end
|
data/lib/fitbyte/helpers.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Fitbyte
|
2
2
|
class Client
|
3
|
+
|
3
4
|
def format_date(date)
|
4
5
|
if [Date, Time, DateTime].include?(date.class)
|
5
6
|
date.strftime("%Y-%m-%d")
|
@@ -17,5 +18,39 @@ module Fitbyte
|
|
17
18
|
def format_scope(scope)
|
18
19
|
scope.is_a?(Array) ? scope.join(" ") : scope
|
19
20
|
end
|
21
|
+
|
22
|
+
# Borrowing from Rails
|
23
|
+
|
24
|
+
def deep_keys_to_snake_case!(object)
|
25
|
+
deep_transform_keys!(object) { |key| to_snake_case(key) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def deep_symbolize_keys!(object)
|
29
|
+
deep_transform_keys!(object) { |key| key.to_sym rescue key }
|
30
|
+
end
|
31
|
+
|
32
|
+
def deep_transform_keys!(object, &block)
|
33
|
+
case object
|
34
|
+
when Hash
|
35
|
+
object.keys.each do |key|
|
36
|
+
value = object.delete(key)
|
37
|
+
object[yield(key)] = deep_transform_keys!(value) { |key| yield(key) }
|
38
|
+
end
|
39
|
+
object
|
40
|
+
when Array
|
41
|
+
object.map! { |e| deep_transform_keys!(e) { |key| yield(key) } }
|
42
|
+
else
|
43
|
+
object
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_snake_case(word)
|
48
|
+
word = word.to_s.dup
|
49
|
+
return word.downcase if word.match(/\A[A-Z]+\z/)
|
50
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
51
|
+
word.gsub!(/([a-z])([A-Z])/, '\1_\2')
|
52
|
+
word.downcase
|
53
|
+
end
|
54
|
+
|
20
55
|
end
|
21
56
|
end
|
data/lib/fitbyte/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fitbyte
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zoran Pesic
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oauth2
|
@@ -90,7 +90,6 @@ files:
|
|
90
90
|
- lib/fitbyte/body.rb
|
91
91
|
- lib/fitbyte/client.rb
|
92
92
|
- lib/fitbyte/devices.rb
|
93
|
-
- lib/fitbyte/fitstruct.rb
|
94
93
|
- lib/fitbyte/food.rb
|
95
94
|
- lib/fitbyte/friends.rb
|
96
95
|
- lib/fitbyte/goals.rb
|
@@ -119,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
118
|
version: '0'
|
120
119
|
requirements: []
|
121
120
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
121
|
+
rubygems_version: 2.5.1
|
123
122
|
signing_key:
|
124
123
|
specification_version: 4
|
125
124
|
summary: This gem allows interaction with Fitbit's REST API.
|
data/lib/fitbyte/fitstruct.rb
DELETED