nike_v2 0.1.0

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 ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .rbenv-version
6
+ .rspec
7
+ .ruby-version
8
+ .rvmrc
9
+ Gemfile.lock
10
+ coverage
11
+ InstalledFiles
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ NikeV2
2
+ ====================
3
+
4
+ ![Build Status](https://travis-ci.org/fuelxc/nike_v2.png)
5
+
6
+ Learn more about the Nike+ API at [https://developer.nike.com/](https://developer.nike.com/).
7
+
8
+ ## Installation
9
+ ``` bash
10
+ gem install nike_v2
11
+ ```
12
+
13
+ ## Examples
14
+
15
+ In order to utilize the Nike+ API in its current state, you'll need to do the following:
16
+ * Sign up for a Nike+ account at [http://nikeplus.nike.com/plus/](http://nikeplus.nike.com/plus/)
17
+ * Log into the developer portal and generate an access token at [https://developer.nike.com/](https://developer.nike.com/)
18
+
19
+ ``` ruby
20
+ require 'nike_v2'
21
+
22
+ # Initialize a person
23
+ person = NikeV2::Person.new(access_token: 'a1b2c3d4')
24
+ # Fetch persons summary
25
+ person.summary
26
+ # Fetch a persons activities
27
+ person.activities
28
+ # Load more data for an activity
29
+ activity = person.activities.first
30
+ activity.fetch_data
31
+ # Fetch GPS Data for an activity
32
+ activity.gps_data
33
+ ```
34
+
35
+ ## Making it Better
36
+
37
+ * Fork the project.
38
+ * Make your feature addition or bug fix in a new topic branch within your repo.
39
+ * Add specs for any new or modified functionality.
40
+ * Commit and push your changes to Github
41
+ * Send a pull request
42
+
43
+ ## Inspiration
44
+ I used Kevin Thompson's NikeApi gem as inspiration. Find it here: https://github.com/kevinthompson/nike_api
45
+
46
+
47
+ ## Copyright
48
+
49
+ Copyright (c) 2013 SmashTank Apps, LLC.
50
+
51
+ This program is free software: you can redistribute it and/or modify
52
+ it under the terms of the GNU General Public License as published by
53
+ the Free Software Foundation, either version 3 of the License, or
54
+ (at your option) any later version.
55
+
56
+ This program is distributed in the hope that it will be useful,
57
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
58
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
59
+ GNU General Public License for more details.
60
+
61
+ You should have received a copy of the GNU General Public License
62
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rspec/core/rake_task'
2
+ RSpec::Core::RakeTask.new(:spec)
3
+ task default: :spec
4
+
5
+ require 'rdoc/task'
6
+ Rake::RDocTask.new do |rdoc|
7
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
8
+
9
+ rdoc.rdoc_dir = 'rdoc'
10
+ rdoc.title = "nike_v2 #{version}"
11
+ rdoc.rdoc_files.include('README*')
12
+ rdoc.rdoc_files.include('lib/**/*.rb')
13
+ end
@@ -0,0 +1,9 @@
1
+ class String
2
+ def underscore
3
+ self.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr("-", "_").
7
+ downcase
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ require 'enumerator'
2
+ module NikeV2
3
+ class Activities < Resource
4
+ include Enumerable
5
+ extend Forwardable
6
+
7
+ def_delegators :@activities_array, :[]=, :<<, :[], :count, :length, :each
8
+ def_delegator :@person, :access_token
9
+
10
+ API_URL = '/me/sport/activities'
11
+
12
+ def initialize(attributes = {})
13
+ raise "#{self.class} requires a person." unless attributes.keys.include?(:person)
14
+ set_attributes(attributes)
15
+ @activities_array = []
16
+
17
+ #TODO: make it pass blocks
18
+ activities = fetch_data
19
+ activities.delete('data').each do |data|
20
+ self << NikeV2::Activity.new({:person => self}.merge(data))
21
+ end
22
+ super(activities)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ module NikeV2
2
+ class Activity < Resource
3
+ extend Forwardable
4
+ def_delegator :@person, :access_token
5
+
6
+ API_URL = '/me/sport/activities'
7
+
8
+ def initialize(attributes = {})
9
+ raise "#{self.class} requires s person." unless attributes.keys.include?(:person)
10
+ raise "#{self.class} requires an activityId." unless attributes.keys.include?('activityId')
11
+ super(attributes)
12
+ end
13
+
14
+ def gps_data
15
+ @gps_data ||= NikeV2::GpsData.new(:activity => self)
16
+ end
17
+
18
+ def load_data
19
+ set_attributes(fetch_data)
20
+ true
21
+ end
22
+
23
+ private
24
+ def api_url
25
+ API_URL + "/#{self.activity_id}"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ module NikeV2
2
+ class Base
3
+ def initialize(attributes={})
4
+ @created_at = attributes.delete('created_at')
5
+ set_attributes(attributes)
6
+ end
7
+
8
+ private
9
+ def set_attributes(attributes)
10
+ attributes.each do |(attr, val)|
11
+ attr = attr.to_s.underscore
12
+ instance_variable_set("@#{attr}", val)
13
+ instance_eval "def #{attr}() @#{attr} end"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module NikeV2
2
+ class GpsData < Resource
3
+ extend Forwardable
4
+ def_delegator :@activity, :access_token
5
+
6
+ def initialize(attributes = {})
7
+ raise "#{self.class} requires an activity." unless attributes.keys.include?(:activity)
8
+ set_attributes(attributes)
9
+ super(fetch_data)
10
+ end
11
+
12
+ private
13
+ def api_url
14
+ self.activity.send(:api_url) + '/gps'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module NikeV2
2
+ class Person < Resource
3
+
4
+ def initialize(attributes = {})
5
+ raise "#{self.class} requires an access_token." unless attributes.keys.include?(:access_token)
6
+ super
7
+ end
8
+
9
+ def summary
10
+ @summary ||= NikeV2::Summary.new(:person => self)
11
+ end
12
+
13
+ def activities
14
+ @activities ||= NikeV2::Activities.new(:person => self)
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ module NikeV2
2
+ class Resource < Base
3
+ include HTTParty
4
+
5
+ base_uri 'https://api.nike.com'
6
+
7
+ def initialize(attributes={})
8
+ super(attributes)
9
+ end
10
+
11
+ def fetch_data
12
+ get(api_url).parsed_response
13
+ end
14
+
15
+ def get(*args, &block)
16
+ unless has_options?(args)
17
+ query = { 'access_token' => access_token }
18
+ headers = { 'Accept' => 'application/json', 'appid' => app_id }
19
+ options = { query: query, headers: headers }
20
+ args << options
21
+ end
22
+ self.class.get(*args, &block)
23
+ end
24
+
25
+ private
26
+
27
+ def app_id
28
+ #TODO: make this a config yaml
29
+ 'nike'
30
+ end
31
+
32
+ def has_options?(args)
33
+ args.last.class.is_a?(Hash) && args.last.keys.any?{ |key| %w[basic_auth body headers no_follow query].include?(key) }
34
+ end
35
+
36
+ def api_url
37
+ self.class.const_get('API_URL')
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ module NikeV2
2
+ class Summary < Resource
3
+ extend Forwardable
4
+ def_delegator :@person, :access_token
5
+
6
+ API_URL = '/me/sport'
7
+
8
+ def initialize(attributes = {})
9
+ raise "#{self.class} requires a person." unless attributes.keys.include?(:person)
10
+ set_attributes(attributes)
11
+ super(fetch_data)
12
+ end
13
+ end
14
+ end
data/lib/nike_v2.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'httparty'
2
+ require 'forwardable'
3
+ require 'ext/core_ext'
4
+ require 'nike_v2/base'
5
+ require 'nike_v2/resource'
6
+ require 'nike_v2/person'
7
+ require 'nike_v2/activities'
8
+ require 'nike_v2/activity'
9
+ require 'nike_v2/summary'
10
+ require 'nike_v2/gps_data'
11
+
12
+ module NikeV2
13
+ VERSION = '0.1.0'
14
+ end
data/nike_v2.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'nike_v2'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'nike_v2'
7
+ s.version = NikeV2::VERSION
8
+ s.authors = ["Eric Harrison"]
9
+ s.email = ["eric@rubynooby.com"]
10
+ s.homepage = 'https://github.com/fuelxc/nike_v2'
11
+ s.summary = 'Nike+ API V2 Gem'
12
+ s.description = 'Nike+ API V2 Gem'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ['lib']
18
+
19
+ s.add_runtime_dependency 'httparty', '>= 0.10.0'
20
+
21
+ s.add_development_dependency 'factory_girl', '~> 4.2.0'
22
+ s.add_development_dependency 'rake', '~> 10.0.3'
23
+ s.add_development_dependency 'rspec', '~> 2.12.0'
24
+ s.add_development_dependency 'vcr', '~> 2.4.0'
25
+ s.add_development_dependency 'webmock', '~> 1.9.0'
26
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :activity, class: NikeV2::Activity do
3
+ person { FactoryGirl.build(:person)}
4
+ activityId '91b501dc-4a38-44aa-b537-6095418713d8'
5
+ initialize_with { new(person: person, 'activityId' => activityId) }
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :person, class: NikeV2::Person do
3
+ access_token 'foobar'
4
+ initialize_with { new(access_token: access_token) }
5
+ end
6
+ end
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.nike.com/me/sport/activities?access_token=foobar
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Appid:
13
+ - nike
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Content-Type:
20
+ - application/json;charset=UTF-8
21
+ Date:
22
+ - Sun, 20 Jan 2013 04:21:04 GMT
23
+ Server:
24
+ - Apache
25
+ X-Swooshlet:
26
+ - app-msp-api-0 prd sin-82-app-msp-api-0
27
+ Content-Length:
28
+ - '340'
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: US-ASCII
33
+ string: ! '{"data":[{"activityId":"91b501dc-4a38-44aa-b537-6095418713d8","calories":2475,"fuel":7500,"distance":19.665315,"steps":24975,"duration":"0:01:00.0000","activityType":"ALL_DAY","startTime":"2012-02-26T08:00:00Z","activityTimeZone":"America/Los_Angeles","status":"COMPLETE","deviceType":"FUELBAND","tags":[],"streams":[]},{"activityId":"8554c3bb-f985-4700-a52d-6235475a10f0","calories":1848,"fuel":5555,"distance":14.6834352,"steps":18648,"duration":"0:01:00.0000","activityType":"ALL_DAY","startTime":"2012-02-25T08:00:00Z","activityTimeZone":"America/Los_Angeles","status":"COMPLETE","deviceType":"FUELBAND","tags":[],"streams":[]},{"activityId":"b7511567-9414-429a-9b7b-40ebc15af985","calories":396,"fuel":1200,"distance":3.1464504,"steps":3996,"duration":"0:01:00.0000","activityType":"ALL_DAY","startTime":"2012-02-24T08:00:00Z","activityTimeZone":"America/Los_Angeles","status":"COMPLETE","deviceType":"FUELBAND","tags":[],"streams":[]},{"activityId":"b87bb409-a618-47ee-a75e-1bb5f8daf9a6","calories":300,"fuel":900,"distance":2.3621999999999996,"steps":3000,"duration":"0:01:00.0000","activityType":"ALL_DAY","startTime":"2012-02-23T08:00:00Z","activityTimeZone":"America/Los_Angeles","status":"COMPLETE","deviceType":"FUELBAND","tags":[],"streams":[]},{"activityId":"6c6eb89c-fa42-49a6-8b04-2596297a7c3a","calories":200,"fuel":600,"distance":1.5748,"steps":2000,"duration":"0:01:00.0000","activityType":"ALL_DAY","startTime":"2012-02-22T08:00:00Z","activityTimeZone":"America/Los_Angeles","status":"COMPLETE","deviceType":"FUELBAND","tags":[],"streams":[]}],"paging":{"next":"/me/sport/activities?access_token=68d1b7f5ec3e6a1ad3b349cd73983b34&amp;offset=6&amp;count=5","previous":null}}'
34
+ http_version:
35
+ recorded_at: Sun, 20 Jan 2013 04:21:05 GMT
36
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.nike.com/me/sport/activities/91b501dc-4a38-44aa-b537-6095418713d8?access_token=foobar
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Appid:
13
+ - nike
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Content-Type:
20
+ - application/json;charset=UTF-8
21
+ Date:
22
+ - Sun, 20 Jan 2013 04:21:04 GMT
23
+ Server:
24
+ - Apache
25
+ X-Swooshlet:
26
+ - app-msp-api-0 prd sin-82-app-msp-api-0
27
+ Content-Length:
28
+ - '340'
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: US-ASCII
33
+ string: ! '{ "activityId": "91b501dc-4a38-44aa-b537-6095418713d8", "calories": 257, "fuel": 662, "distance": 3.1317999362945557, "steps": 10, "duration": "0:14:31.000", "activityType": "RUN", "startTime": "2011-08-11T02:44:39Z", "activityTimeZone": "GMT-08:00", "status": "COMPLETE", "deviceType": "SPORTWATCH", "tags": [ { "tagType": "NOTE", "value": "text string" }, { "tagType": "COURT", "value": "DUNK" }, { "tagType": "TERRAIN", "value": "TRAIL" }, { "tagType": "EMOTION", "value": "HAPPY" }, { "tagType": "SHOES", "value": "AirMax" }, { "tagType": "WEATHER", "value": "RAINY" } ], "metrics": [ { "intervalMetric": 10, "intervalUnit": "SEC", "metricType": "DISTANCE", "values": [ 0.0299, 0.0562, 0.0794, 0.114, 3.0967, 3.1296 ] } ] }'
34
+ http_version:
35
+ recorded_at: Sun, 20 Jan 2013 04:21:05 GMT
36
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.nike.com/me/sport/activities/91b501dc-4a38-44aa-b537-6095418713d8/gps?access_token=foobar
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Appid:
13
+ - nike
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Content-Type:
20
+ - application/json;charset=UTF-8
21
+ Date:
22
+ - Sun, 20 Jan 2013 04:21:04 GMT
23
+ Server:
24
+ - Apache
25
+ X-Swooshlet:
26
+ - app-msp-api-0 prd sin-82-app-msp-api-0
27
+ Content-Length:
28
+ - '340'
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: US-ASCII
33
+ string: ! '{ "elevationLoss": 54.089367, "elevationGain": 57.98948, "elevationMin": 52.071926, "elevationMax": 71.568146, "intervalMetric": 10, "intervalUnit": "SEC", "wayPoints": [ { "latitude": 45.508057, "longitude": -122.83315, "elevation": 53.09316 }, { "latitude": 45.508034, "longitude": -122.83313, "elevation": 53.151 }, { "latitude": 45.50786, "longitude": -122.832954, "elevation": 53.86401 }, { "latitude": 45.508175, "longitude": -122.833206, "elevation": 56.81296 }, { "latitude": 45.508156, "longitude": -122.83318, "elevation": 56.870304 }, { "latitude": 45.508133, "longitude": -122.83316, "elevation": 56.99327 } ] }'
34
+ http_version:
35
+ recorded_at: Sun, 20 Jan 2013 04:21:05 GMT
36
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,36 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.nike.com/me/sport?access_token=foobar
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Appid:
13
+ - nike
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Content-Type:
20
+ - application/json;charset=UTF-8
21
+ Date:
22
+ - Sun, 20 Jan 2013 04:21:04 GMT
23
+ Server:
24
+ - Apache
25
+ X-Swooshlet:
26
+ - app-msp-api-0 prd sin-82-app-msp-api-0
27
+ Content-Length:
28
+ - '340'
29
+ Connection:
30
+ - keep-alive
31
+ body:
32
+ encoding: US-ASCII
33
+ string: ! '{"experienceTypes":["FUELBAND"],"summaries":[{"experienceType":"ALL","records":{"lifetimeFuel":142358}},{"experienceType":"FUELBAND","records":{"dailyGoalTargetValue":4000.0,"currentStreak":0,"totalDailyGoalsAchieved":16,"lifetimeAverageFuelDay":3552,"lifetimeAverageFuelWeek":26149,"lifetimeAverageFuelMonth":75138,"numOfActivities":41}}]}'
34
+ http_version:
35
+ recorded_at: Sun, 20 Jan 2013 04:21:05 GMT
36
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Activities do
4
+ let(:person){ build(:person) }
5
+
6
+ describe 'new from person' do
7
+ before{ VCR.insert_cassette 'activities', record: :new_episodes }
8
+ after{ VCR.eject_cassette }
9
+
10
+ it 'should return an array of Nike::Activity' do
11
+ person.activities.should be_kind_of(NikeV2::Activities)
12
+ person.activities.first.should be_kind_of(NikeV2::Activity)
13
+ person.activities.length.should == 5
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Activity do
4
+ let(:activity){ build(:activity) }
5
+
6
+ describe 'fetch_data' do
7
+ before{ VCR.insert_cassette 'activity', record: :new_episodes }
8
+ after{ VCR.eject_cassette }
9
+
10
+ it 'should load the activity from the api' do
11
+ activity.load_data.should be_true
12
+ activity.calories.should == 257
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Base do
4
+ it 'should make its attributes available through accessor methods' do
5
+ base = NikeV2::Base.new(first_name: 'Foo', last_name: 'Bar')
6
+ base.should respond_to(:first_name)
7
+ base.should respond_to(:last_name)
8
+ base.first_name.should == 'Foo'
9
+ base.last_name.should == 'Bar'
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Activity do
4
+ let(:activity){ build(:activity) }
5
+
6
+ describe 'reload' do
7
+ before{ VCR.insert_cassette 'gps_data', record: :new_episodes }
8
+ after{ VCR.eject_cassette }
9
+
10
+ it 'should load the activity from the api' do
11
+ activity.gps_data.should be_an_instance_of(NikeV2::GpsData)
12
+ activity.gps_data.elevation_loss.should == 54.089367
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Person do
4
+ let(:access_token){ 'bazquux' }
5
+ let(:person){ build(:person) }
6
+
7
+ describe '.new' do
8
+ context 'with an access_token attribute' do
9
+ it 'should return a NikeApi::Person object' do
10
+ person = NikeV2::Person.new(access_token: access_token)
11
+ person.should be_an_instance_of(NikeV2::Person)
12
+ end
13
+ end
14
+
15
+ context 'without an access_token attribute' do
16
+ it 'should raise an error' do
17
+ expect{ NikeV2::Person.new }.to raise_error('NikeV2::Person requires an access_token.')
18
+ end
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Resource do
4
+ it 'should include HTTParty' do
5
+ NikeV2::Resource.should include(HTTParty)
6
+ end
7
+
8
+ describe '#base_uri' do
9
+ it 'should be set to https://api.nike.com' do
10
+ NikeV2::Resource.base_uri.should == 'https://api.nike.com'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe NikeV2::Summary do
4
+ let(:person){ build(:person) }
5
+
6
+ describe 'new' do
7
+ before{ VCR.insert_cassette 'summary', record: :new_episodes }
8
+ after{ VCR.eject_cassette }
9
+
10
+ it 'should return a Summary of user data' do
11
+ person.summary.should be_kind_of(NikeV2::Summary)
12
+ person.summary.experience_types.include?('FUELBAND').should be_true
13
+ person.summary.summaries.length.should == 2
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../lib/nike_v2'
2
+ require 'factory_girl'
3
+ require 'rspec'
4
+ require 'vcr'
5
+ require 'webmock'
6
+
7
+ FactoryGirl.find_definitions
8
+
9
+ RSpec.configure do |config|
10
+ config.include FactoryGirl::Syntax::Methods
11
+ end
12
+
13
+ VCR.configure do |config|
14
+ config.cassette_library_dir = 'spec/fixtures/nike_api_cassettes'
15
+ config.hook_into :webmock
16
+ end
metadata ADDED
@@ -0,0 +1,183 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nike_v2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Eric Harrison
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httparty
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.10.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.10.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: factory_girl
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 4.2.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 4.2.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 10.0.3
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 10.0.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.12.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 2.12.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: vcr
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 2.4.0
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.4.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: webmock
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.9.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.9.0
110
+ description: Nike+ API V2 Gem
111
+ email:
112
+ - eric@rubynooby.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - Gemfile
119
+ - README.md
120
+ - Rakefile
121
+ - lib/ext/core_ext.rb
122
+ - lib/nike_v2.rb
123
+ - lib/nike_v2/activities.rb
124
+ - lib/nike_v2/activity.rb
125
+ - lib/nike_v2/base.rb
126
+ - lib/nike_v2/gps_data.rb
127
+ - lib/nike_v2/person.rb
128
+ - lib/nike_v2/resource.rb
129
+ - lib/nike_v2/summary.rb
130
+ - nike_v2.gemspec
131
+ - spec/factories/activity_factory.rb
132
+ - spec/factories/person_factory.rb
133
+ - spec/fixtures/nike_api_cassettes/activities.yml
134
+ - spec/fixtures/nike_api_cassettes/activity.yml
135
+ - spec/fixtures/nike_api_cassettes/gps_data.yml
136
+ - spec/fixtures/nike_api_cassettes/summary.yml
137
+ - spec/nike_v2/acitivites_spec.rb
138
+ - spec/nike_v2/activity_spec.rb
139
+ - spec/nike_v2/base_spec.rb
140
+ - spec/nike_v2/gps_data_spec.rb
141
+ - spec/nike_v2/person_spec.rb
142
+ - spec/nike_v2/resource_spec.rb
143
+ - spec/nike_v2/summary_spec.rb
144
+ - spec/spec_helper.rb
145
+ homepage: https://github.com/fuelxc/nike_v2
146
+ licenses: []
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 1.8.23
166
+ signing_key:
167
+ specification_version: 3
168
+ summary: Nike+ API V2 Gem
169
+ test_files:
170
+ - spec/factories/activity_factory.rb
171
+ - spec/factories/person_factory.rb
172
+ - spec/fixtures/nike_api_cassettes/activities.yml
173
+ - spec/fixtures/nike_api_cassettes/activity.yml
174
+ - spec/fixtures/nike_api_cassettes/gps_data.yml
175
+ - spec/fixtures/nike_api_cassettes/summary.yml
176
+ - spec/nike_v2/acitivites_spec.rb
177
+ - spec/nike_v2/activity_spec.rb
178
+ - spec/nike_v2/base_spec.rb
179
+ - spec/nike_v2/gps_data_spec.rb
180
+ - spec/nike_v2/person_spec.rb
181
+ - spec/nike_v2/resource_spec.rb
182
+ - spec/nike_v2/summary_spec.rb
183
+ - spec/spec_helper.rb