mini_strava 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +63 -0
- data/Rakefile +1 -0
- data/bin/mini-strava +25 -0
- data/lib/mini_strava/client.rb +70 -0
- data/lib/mini_strava/model.rb +64 -0
- data/lib/mini_strava/models/activity.rb +31 -0
- data/lib/mini_strava/models/athlete.rb +23 -0
- data/lib/mini_strava/models/gear.rb +17 -0
- data/lib/mini_strava/models/segment.rb +20 -0
- data/lib/mini_strava/models/segment_effort.rb +20 -0
- data/lib/mini_strava/version.rb +3 -0
- data/lib/mini_strava.rb +11 -0
- data/mini_strava.gemspec +26 -0
- data/spec/client_spec.rb +85 -0
- data/spec/fixtures/activities.json +116 -0
- data/spec/fixtures/activity.json +103 -0
- data/spec/fixtures/athlete.json +45 -0
- data/spec/fixtures/gear.json +11 -0
- data/spec/fixtures/segment.json +35 -0
- data/spec/fixtures/segment_effort.json +45 -0
- data/spec/model_spec.rb +79 -0
- data/spec/models/activity_spec.rb +74 -0
- data/spec/models/athlete_spec.rb +119 -0
- data/spec/models/gear_spec.rb +75 -0
- data/spec/models/segment_effort_spec.rb +67 -0
- data/spec/models/segment_spec.rb +46 -0
- data/spec/spec_helper.rb +18 -0
- metadata +145 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
{
|
2
|
+
"id": 12,
|
3
|
+
"resource_state": 3,
|
4
|
+
"external_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
|
5
|
+
"athlete": {
|
6
|
+
"id": 101,
|
7
|
+
"resource_state": 1
|
8
|
+
},
|
9
|
+
"name": "Morning Commute",
|
10
|
+
"distance": 1850.6,
|
11
|
+
"moving_time": 443,
|
12
|
+
"elapsed_time": 443,
|
13
|
+
"total_elevation_gain": 12.6,
|
14
|
+
"type": "Ride",
|
15
|
+
"start_date": "2014-08-08T09:14:08Z",
|
16
|
+
"start_date_local": "2014-08-08T10:14:08Z",
|
17
|
+
"timezone": "(GMT+00:00) Europe/London",
|
18
|
+
"start_latlng": [50.0, -1],
|
19
|
+
"end_latlng": [52.0, -2],
|
20
|
+
"location_city": "London",
|
21
|
+
"location_state": "England",
|
22
|
+
"location_country": "United Kingdom",
|
23
|
+
"start_latitude": 50.0,
|
24
|
+
"start_longitude": -1,
|
25
|
+
"achievement_count": 0,
|
26
|
+
"comment_count": 0,
|
27
|
+
"athlete_count": 1,
|
28
|
+
"photo_count": 0,
|
29
|
+
"map": {
|
30
|
+
"id": "a177190357",
|
31
|
+
"polyline": "test-test-test",
|
32
|
+
"resource_state": 3,
|
33
|
+
"summary_polyline": "test"
|
34
|
+
},
|
35
|
+
"trainer": false,
|
36
|
+
"commute": false,
|
37
|
+
"manual": false,
|
38
|
+
"private": false,
|
39
|
+
"flagged": false,
|
40
|
+
"gear_id": "12345",
|
41
|
+
"average_speed": 4.177,
|
42
|
+
"max_speed": 13.6,
|
43
|
+
"average_watts": 70.7,
|
44
|
+
"kilojoules": 31.3,
|
45
|
+
"truncated": 183,
|
46
|
+
"has_kudoed": false,
|
47
|
+
"description": "",
|
48
|
+
"calories": 34.9,
|
49
|
+
"segment_efforts": [
|
50
|
+
{
|
51
|
+
"id": 3333,
|
52
|
+
"resource_state": 2,
|
53
|
+
"name": "Up Lower Caledonian Rd",
|
54
|
+
"activity": {
|
55
|
+
"id": 12
|
56
|
+
},
|
57
|
+
"athlete": {
|
58
|
+
"id": 101
|
59
|
+
},
|
60
|
+
"elapsed_time": 197,
|
61
|
+
"moving_time": 197,
|
62
|
+
"start_date": "2014-08-19T12:00:11Z",
|
63
|
+
"start_date_local": "2014-08-19T13:00:11Z",
|
64
|
+
"distance": 1156.0,
|
65
|
+
"start_index": 36,
|
66
|
+
"end_index": 213,
|
67
|
+
"average_watts": 135.9,
|
68
|
+
"segment": {
|
69
|
+
"id": 1364097,
|
70
|
+
"resource_state": 2,
|
71
|
+
"name": "Up Lower Caledonian Rd",
|
72
|
+
"activity_type": "Ride",
|
73
|
+
"distance": 1144.2,
|
74
|
+
"average_grade": 1.2,
|
75
|
+
"maximum_grade": 3.2,
|
76
|
+
"elevation_high": 37.0,
|
77
|
+
"elevation_low": 23.5,
|
78
|
+
"start_latlng": [51.53377859853208, -0.11831676587462425],
|
79
|
+
"end_latlng": [51.54375683516264, -0.11777026578783989],
|
80
|
+
"start_latitude": 51.53377859853208,
|
81
|
+
"start_longitude": -0.11831676587462425,
|
82
|
+
"end_latitude": 51.54375683516264,
|
83
|
+
"end_longitude": -0.11777026578783989,
|
84
|
+
"climb_category": 0,
|
85
|
+
"city": "London",
|
86
|
+
"state": "Greater London",
|
87
|
+
"country": "United Kingdom",
|
88
|
+
"private": false,
|
89
|
+
"starred": false
|
90
|
+
},
|
91
|
+
"kom_rank": null,
|
92
|
+
"pr_rank": null,
|
93
|
+
"hidden": false
|
94
|
+
}
|
95
|
+
],
|
96
|
+
"gear": {
|
97
|
+
"id": "12345",
|
98
|
+
"primary": false,
|
99
|
+
"name": "Bike 1",
|
100
|
+
"resource_state": 2,
|
101
|
+
"distance": 270403.0
|
102
|
+
}
|
103
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
{
|
2
|
+
"id": 1,
|
3
|
+
"resource_state": 3,
|
4
|
+
"firstname": "Foo",
|
5
|
+
"lastname": "Bar",
|
6
|
+
"profile_medium": "http://example.com/medium.jpg",
|
7
|
+
"profile": "http://example.com/profile.jpg",
|
8
|
+
"city": "London",
|
9
|
+
"state": "UK",
|
10
|
+
"country": "United Kingdom",
|
11
|
+
"sex": "M",
|
12
|
+
"friend": null,
|
13
|
+
"follower": null,
|
14
|
+
"premium": true,
|
15
|
+
"created_at": "2014-05-24T16:02:11Z",
|
16
|
+
"updated_at": "2014-08-03T00:09:09Z",
|
17
|
+
"follower_count": 5,
|
18
|
+
"friend_count": 7,
|
19
|
+
"mutual_friend_count": 0,
|
20
|
+
"date_preference": "%m/%d/%Y",
|
21
|
+
"measurement_preference": "meters",
|
22
|
+
"email": "foo@example.com",
|
23
|
+
"ftp": null,
|
24
|
+
"clubs": [],
|
25
|
+
"bikes": [{
|
26
|
+
"id": "10",
|
27
|
+
"primary": false,
|
28
|
+
"name": "Bike 1",
|
29
|
+
"resource_state": 2,
|
30
|
+
"distance": 268552.0
|
31
|
+
}, {
|
32
|
+
"id": "20",
|
33
|
+
"primary": true,
|
34
|
+
"name": "Bike 2",
|
35
|
+
"resource_state": 2,
|
36
|
+
"distance": 426398.0
|
37
|
+
}],
|
38
|
+
"shoes": [{
|
39
|
+
"id":"g449084",
|
40
|
+
"primary":true,
|
41
|
+
"name":"Nike Flex 2014 RUN Flex Blue",
|
42
|
+
"resource_state":2,
|
43
|
+
"distance":0.0}]
|
44
|
+
}
|
45
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
{
|
2
|
+
"id": 1364097,
|
3
|
+
"resource_state": 3,
|
4
|
+
"name": "Up Lower Caledonian Rd",
|
5
|
+
"activity_type": "Ride",
|
6
|
+
"distance": 1144.2,
|
7
|
+
"average_grade": 1.2,
|
8
|
+
"maximum_grade": 3.2,
|
9
|
+
"elevation_high": 37.0,
|
10
|
+
"elevation_low": 23.5,
|
11
|
+
"start_latlng": [51.53377859853208, -0.11831676587462425],
|
12
|
+
"end_latlng": [51.54375683516264, -0.11777026578783989],
|
13
|
+
"start_latitude": 51.53377859853208,
|
14
|
+
"start_longitude": -0.11831676587462425,
|
15
|
+
"end_latitude": 51.54375683516264,
|
16
|
+
"end_longitude": -0.11777026578783989,
|
17
|
+
"climb_category": 0,
|
18
|
+
"city": "London",
|
19
|
+
"state": "Greater London",
|
20
|
+
"country": "United Kingdom",
|
21
|
+
"private": false,
|
22
|
+
"starred": false,
|
23
|
+
"created_at": "2012-05-11T19:02:39Z",
|
24
|
+
"updated_at": "2014-07-05T13:02:13Z",
|
25
|
+
"total_elevation_gain": 14.9671,
|
26
|
+
"map": {
|
27
|
+
"id": "s1364097",
|
28
|
+
"polyline": "aepyHnbVaAkAiAiA{@q@e@g@]UqAGcB[k@AwASg@Ai@Lk@Fm@JuBCk@BeDBi@Je@@uCV{APcCNk@DyB^i@@c@CwB^gA^W@",
|
29
|
+
"resource_state": 3
|
30
|
+
},
|
31
|
+
"effort_count": 3976,
|
32
|
+
"athlete_count": 537,
|
33
|
+
"hazardous": false,
|
34
|
+
"star_count": 0
|
35
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
{
|
2
|
+
"id": 33,
|
3
|
+
"resource_state": 3,
|
4
|
+
"name": "REGENTS PARK LOOP",
|
5
|
+
"activity": {
|
6
|
+
"id": 44
|
7
|
+
},
|
8
|
+
"athlete": {
|
9
|
+
"id": 55
|
10
|
+
},
|
11
|
+
"elapsed_time": 656,
|
12
|
+
"moving_time": 656,
|
13
|
+
"start_date": "2014-08-11T17:48:40Z",
|
14
|
+
"start_date_local": "2014-08-11T18:48:40Z",
|
15
|
+
"distance": 4430.1,
|
16
|
+
"start_index": 239,
|
17
|
+
"end_index": 354,
|
18
|
+
"average_watts": 104.8,
|
19
|
+
"segment": {
|
20
|
+
"id": 6694602,
|
21
|
+
"resource_state": 2,
|
22
|
+
"name": "REGENTS PARK LOOP",
|
23
|
+
"activity_type": "Ride",
|
24
|
+
"distance": 4447.6,
|
25
|
+
"average_grade": 0.0,
|
26
|
+
"maximum_grade": 6.0,
|
27
|
+
"elevation_high": 45.5,
|
28
|
+
"elevation_low": 32.0,
|
29
|
+
"start_latlng": [51.535617, -0.148373],
|
30
|
+
"end_latlng": [51.53561, -0.148366],
|
31
|
+
"start_latitude": 51.535617,
|
32
|
+
"start_longitude": -0.148373,
|
33
|
+
"end_latitude": 51.53561,
|
34
|
+
"end_longitude": -0.148366,
|
35
|
+
"climb_category": 0,
|
36
|
+
"city": "London, UK",
|
37
|
+
"state": "England",
|
38
|
+
"country": "United Kingdom",
|
39
|
+
"private": false,
|
40
|
+
"starred": false
|
41
|
+
},
|
42
|
+
"kom_rank": null,
|
43
|
+
"pr_rank": null
|
44
|
+
}
|
45
|
+
|
data/spec/model_spec.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiniStrava
|
4
|
+
module Models
|
5
|
+
class TestModelBike
|
6
|
+
include MiniStrava::Model
|
7
|
+
|
8
|
+
model_attr :name
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestModelAthlete
|
12
|
+
include MiniStrava::Model
|
13
|
+
|
14
|
+
model_attr :name, default: "No Name"
|
15
|
+
model_attr :bikes, type: :TestModelBike, default: []
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Model do
|
20
|
+
context 'default types' do
|
21
|
+
it 'should set default model attribute types' do
|
22
|
+
expect(Models::TestModelBike.model_attributes).to eq([
|
23
|
+
{
|
24
|
+
name: 'name',
|
25
|
+
type: MiniStrava::Model::DefaultAttrType,
|
26
|
+
default: nil
|
27
|
+
}
|
28
|
+
])
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should parse and use default values' do
|
32
|
+
bike = Models::TestModelBike.build({})
|
33
|
+
expect(bike.name).to eq(nil)
|
34
|
+
|
35
|
+
athlete = Models::TestModelAthlete.build({})
|
36
|
+
expect(athlete.name).to eq('No Name')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'Custom attribute type' do
|
41
|
+
it 'should set custom model attributes' do
|
42
|
+
expect(Models::TestModelAthlete.model_attributes).to eq([
|
43
|
+
{
|
44
|
+
name: 'name',
|
45
|
+
type: MiniStrava::Model::DefaultAttrType,
|
46
|
+
default: 'No Name'
|
47
|
+
},
|
48
|
+
{
|
49
|
+
name: 'bikes',
|
50
|
+
type: :TestModelBike,
|
51
|
+
default: []
|
52
|
+
}
|
53
|
+
])
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should parse custom types' do
|
57
|
+
attributes = {
|
58
|
+
'name' => 'Foo',
|
59
|
+
'bikes' => [
|
60
|
+
{
|
61
|
+
'name' => 'Bike 1'
|
62
|
+
}
|
63
|
+
]
|
64
|
+
}
|
65
|
+
athlete = Models::TestModelAthlete.build attributes
|
66
|
+
expect(athlete.name).to eq('Foo')
|
67
|
+
expect(athlete.bikes.class).to eq(Array)
|
68
|
+
expect(athlete.bikes[0].name).to eq('Bike 1')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'Default values' do
|
73
|
+
it 'should use default values for model attributes' do
|
74
|
+
athlete = Models::TestModelAthlete.build({})
|
75
|
+
expect(athlete.bikes).to eq([])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiniStrava
|
4
|
+
module Models
|
5
|
+
describe Activity do
|
6
|
+
describe 'model attributes' do
|
7
|
+
it 'should set model attributes' do
|
8
|
+
expected = [
|
9
|
+
{
|
10
|
+
name: 'athlete',
|
11
|
+
type: :Athlete,
|
12
|
+
default: nil
|
13
|
+
},
|
14
|
+
{
|
15
|
+
name: 'segment_efforts',
|
16
|
+
type: :SegmentEffort,
|
17
|
+
default: []
|
18
|
+
},
|
19
|
+
]
|
20
|
+
|
21
|
+
[:id, :resource_state, :external_id,
|
22
|
+
:name, :distance, :moving_time,
|
23
|
+
:elapsed_time, :total_elevation_gain,
|
24
|
+
:type, :start_date, :start_date_local,
|
25
|
+
:timezone, :start_latlng, :end_latlng,
|
26
|
+
:location_city, :location_state, :location_country,
|
27
|
+
:start_latitude, :start_longitude, :average_speed, :max_speed].each do |attr|
|
28
|
+
expected << {
|
29
|
+
name: attr.to_s,
|
30
|
+
type: Model::DefaultAttrType,
|
31
|
+
default: nil
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
expect(Activity.model_attributes).to match_array(expected)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'build from attributes' do
|
40
|
+
subject { Activity.build parse_fixture('activity') }
|
41
|
+
|
42
|
+
it 'should set attributes values' do
|
43
|
+
expect(subject.athlete.id).to eq(101)
|
44
|
+
expect(subject.athlete.resource_state).to eq(1)
|
45
|
+
expect(subject.id).to eq(12)
|
46
|
+
expect(subject.resource_state).to eq(3)
|
47
|
+
expect(subject.external_id).to eq('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa')
|
48
|
+
expect(subject.name).to eq('Morning Commute')
|
49
|
+
expect(subject.distance).to eq(1850.6)
|
50
|
+
expect(subject.moving_time).to eq(443)
|
51
|
+
expect(subject.elapsed_time).to eq(443)
|
52
|
+
expect(subject.total_elevation_gain).to eq(12.6)
|
53
|
+
expect(subject.type).to eq('Ride')
|
54
|
+
expect(subject.start_date).to eq('2014-08-08T09:14:08Z')
|
55
|
+
expect(subject.start_date_local).to eq('2014-08-08T10:14:08Z')
|
56
|
+
expect(subject.timezone).to eq('(GMT+00:00) Europe/London')
|
57
|
+
expect(subject.start_latlng).to eq([50.0, -1])
|
58
|
+
expect(subject.end_latlng).to eq([52.0, -2])
|
59
|
+
expect(subject.location_city).to eq('London')
|
60
|
+
expect(subject.location_state).to eq('England')
|
61
|
+
expect(subject.location_country).to eq('United Kingdom')
|
62
|
+
expect(subject.start_latitude).to eq(50.0)
|
63
|
+
expect(subject.start_longitude).to eq(-1)
|
64
|
+
expect(subject.average_speed).to eq(4.177)
|
65
|
+
expect(subject.max_speed).to eq(13.6)
|
66
|
+
|
67
|
+
expect(subject.segment_efforts.class).to eq(Array)
|
68
|
+
expect(subject.segment_efforts.size).to eq(1)
|
69
|
+
expect(subject.segment_efforts[0].id).to eq(3333)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiniStrava
|
4
|
+
module Models
|
5
|
+
describe Athlete do
|
6
|
+
describe 'model attributes' do
|
7
|
+
it 'should set model attributes' do
|
8
|
+
attributes = Athlete.model_attributes
|
9
|
+
expect(attributes).to eq([
|
10
|
+
{
|
11
|
+
name: 'id',
|
12
|
+
type: Model::DefaultAttrType,
|
13
|
+
default: nil
|
14
|
+
},
|
15
|
+
{
|
16
|
+
name: 'firstname',
|
17
|
+
type: Model::DefaultAttrType,
|
18
|
+
default: nil
|
19
|
+
},
|
20
|
+
{
|
21
|
+
name: 'lastname',
|
22
|
+
type: Model::DefaultAttrType,
|
23
|
+
default: nil
|
24
|
+
},
|
25
|
+
{
|
26
|
+
name: 'resource_state',
|
27
|
+
type: Model::DefaultAttrType,
|
28
|
+
default: nil
|
29
|
+
},
|
30
|
+
{
|
31
|
+
name: 'profile_medium',
|
32
|
+
type: Model::DefaultAttrType,
|
33
|
+
default: nil
|
34
|
+
},
|
35
|
+
{
|
36
|
+
name: 'profile',
|
37
|
+
type: Model::DefaultAttrType,
|
38
|
+
default: nil
|
39
|
+
},
|
40
|
+
{
|
41
|
+
name: 'city',
|
42
|
+
type: Model::DefaultAttrType,
|
43
|
+
default: nil
|
44
|
+
},
|
45
|
+
{
|
46
|
+
name: 'state',
|
47
|
+
type: Model::DefaultAttrType,
|
48
|
+
default: nil
|
49
|
+
},
|
50
|
+
{
|
51
|
+
name: 'country',
|
52
|
+
type: Model::DefaultAttrType,
|
53
|
+
default: nil
|
54
|
+
},
|
55
|
+
{
|
56
|
+
name: 'sex',
|
57
|
+
type: Model::DefaultAttrType,
|
58
|
+
default: nil
|
59
|
+
},
|
60
|
+
{
|
61
|
+
name: 'date_preference',
|
62
|
+
type: Model::DefaultAttrType,
|
63
|
+
default: nil
|
64
|
+
},
|
65
|
+
{
|
66
|
+
name: 'measurement_preference',
|
67
|
+
type: Model::DefaultAttrType,
|
68
|
+
default: nil
|
69
|
+
},
|
70
|
+
{
|
71
|
+
name: 'email',
|
72
|
+
type: Model::DefaultAttrType,
|
73
|
+
default: nil
|
74
|
+
},
|
75
|
+
{
|
76
|
+
name: 'bikes',
|
77
|
+
type: :Gear,
|
78
|
+
default: []
|
79
|
+
},
|
80
|
+
{
|
81
|
+
name: 'shoes',
|
82
|
+
type: :Gear,
|
83
|
+
default: []
|
84
|
+
},
|
85
|
+
])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe 'build from attributes' do
|
90
|
+
subject { Athlete.build parse_fixture('athlete') }
|
91
|
+
|
92
|
+
it 'should set attributes values' do
|
93
|
+
expect(subject.id).to eq(1)
|
94
|
+
expect(subject.firstname).to eq('Foo')
|
95
|
+
expect(subject.lastname).to eq('Bar')
|
96
|
+
expect(subject.profile_medium).to eq('http://example.com/medium.jpg')
|
97
|
+
expect(subject.profile).to eq('http://example.com/profile.jpg')
|
98
|
+
|
99
|
+
bikes = subject.bikes
|
100
|
+
expect(bikes.class).to eq(Array)
|
101
|
+
|
102
|
+
expect(bikes[0].class).to eq(Gear)
|
103
|
+
expect(bikes[0].id).to eq('10')
|
104
|
+
expect(bikes[0].primary).to eq(false)
|
105
|
+
expect(bikes[0].name).to eq('Bike 1')
|
106
|
+
expect(bikes[0].resource_state).to eq(2)
|
107
|
+
expect(bikes[0].distance).to eq(268552.0)
|
108
|
+
|
109
|
+
expect(bikes[1].class).to eq(Gear)
|
110
|
+
expect(bikes[1].id).to eq('20')
|
111
|
+
expect(bikes[1].primary).to eq(true)
|
112
|
+
expect(bikes[1].name).to eq('Bike 2')
|
113
|
+
expect(bikes[1].resource_state).to eq(2)
|
114
|
+
expect(bikes[1].distance).to eq(426398.0)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiniStrava
|
4
|
+
module Models
|
5
|
+
describe Gear do
|
6
|
+
describe 'model attributes' do
|
7
|
+
it 'should set model attributes' do
|
8
|
+
attributes = Gear.model_attributes
|
9
|
+
expect(attributes).to eq([
|
10
|
+
{
|
11
|
+
name: 'id',
|
12
|
+
type: Model::DefaultAttrType,
|
13
|
+
default: nil
|
14
|
+
},
|
15
|
+
{
|
16
|
+
name: 'primary',
|
17
|
+
type: Model::DefaultAttrType,
|
18
|
+
default: nil
|
19
|
+
},
|
20
|
+
{
|
21
|
+
name: 'name',
|
22
|
+
type: Model::DefaultAttrType,
|
23
|
+
default: nil
|
24
|
+
},
|
25
|
+
{
|
26
|
+
name: 'resource_state',
|
27
|
+
type: Model::DefaultAttrType,
|
28
|
+
default: nil
|
29
|
+
},
|
30
|
+
{
|
31
|
+
name: 'distance',
|
32
|
+
type: Model::DefaultAttrType,
|
33
|
+
default: nil
|
34
|
+
},
|
35
|
+
{
|
36
|
+
name: 'brand_name',
|
37
|
+
type: Model::DefaultAttrType,
|
38
|
+
default: nil
|
39
|
+
},
|
40
|
+
{
|
41
|
+
name: 'model_name',
|
42
|
+
type: Model::DefaultAttrType,
|
43
|
+
default: nil
|
44
|
+
},
|
45
|
+
{
|
46
|
+
name: 'frame_type',
|
47
|
+
type: Model::DefaultAttrType,
|
48
|
+
default: nil
|
49
|
+
},
|
50
|
+
{
|
51
|
+
name: 'description',
|
52
|
+
type: Model::DefaultAttrType,
|
53
|
+
default: nil
|
54
|
+
}
|
55
|
+
])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'build from attributes' do
|
60
|
+
subject { Gear.build parse_fixture('gear') }
|
61
|
+
|
62
|
+
it 'should set attributes values' do
|
63
|
+
expect(subject.id).to eq('a1')
|
64
|
+
expect(subject.primary).to eq(true)
|
65
|
+
expect(subject.resource_state).to eq(3)
|
66
|
+
expect(subject.distance).to eq(428313.0)
|
67
|
+
expect(subject.brand_name).to eq('Giant')
|
68
|
+
expect(subject.model_name).to eq('TCR 1 Compact')
|
69
|
+
expect(subject.frame_type).to eq(3)
|
70
|
+
expect(subject.description).to eq('hello world')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MiniStrava
|
4
|
+
module Models
|
5
|
+
describe SegmentEffort do
|
6
|
+
describe 'model attributes' do
|
7
|
+
it 'should set model attributes' do
|
8
|
+
expected = [
|
9
|
+
{
|
10
|
+
name: 'activity',
|
11
|
+
type: :Activity,
|
12
|
+
default: nil
|
13
|
+
},
|
14
|
+
{
|
15
|
+
name: 'athlete',
|
16
|
+
type: :Athlete,
|
17
|
+
default: nil
|
18
|
+
},
|
19
|
+
{
|
20
|
+
name: 'segment',
|
21
|
+
type: :Segment,
|
22
|
+
default: nil
|
23
|
+
}
|
24
|
+
]
|
25
|
+
|
26
|
+
[
|
27
|
+
:id, :resource_state, :name,
|
28
|
+
:elapsed_time, :moving_time, :start_date,
|
29
|
+
:start_date_local, :distance
|
30
|
+
].each do |attr|
|
31
|
+
expected << {
|
32
|
+
name: attr.to_s,
|
33
|
+
type: Model::DefaultAttrType,
|
34
|
+
default: nil
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
expect(SegmentEffort.model_attributes).to match_array(expected)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'build from attributes' do
|
43
|
+
subject { SegmentEffort.build parse_fixture('segment_effort') }
|
44
|
+
|
45
|
+
it 'should set attributes values' do
|
46
|
+
expect(subject.id).to eq(33)
|
47
|
+
expect(subject.resource_state).to eq(3)
|
48
|
+
expect(subject.name).to eq('REGENTS PARK LOOP')
|
49
|
+
expect(subject.elapsed_time).to eq(656)
|
50
|
+
expect(subject.moving_time).to eq(656)
|
51
|
+
expect(subject.start_date).to eq('2014-08-11T17:48:40Z')
|
52
|
+
expect(subject.start_date_local).to eq('2014-08-11T18:48:40Z')
|
53
|
+
expect(subject.distance).to eq(4430.1)
|
54
|
+
|
55
|
+
expect(subject.activity.class).to eq(Activity)
|
56
|
+
expect(subject.activity.id).to eq(44)
|
57
|
+
|
58
|
+
expect(subject.athlete.class).to eq(Athlete)
|
59
|
+
expect(subject.athlete.id).to eq(55)
|
60
|
+
|
61
|
+
expect(subject.segment.class).to eq(Segment)
|
62
|
+
expect(subject.segment.id).to eq(6694602)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|