spoll 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8cb030a9315aa07ff83f92c83e1c19d0a839a5f8
4
- data.tar.gz: 026620b8e70c1a918d5e1b477ffcf56cecdc8a7f
3
+ metadata.gz: 98aa6e7d101f518d199c52ea4aa1695fb63bc8e9
4
+ data.tar.gz: 010a7638b42892d2a2add2c91c026a6fae4d7e8b
5
5
  SHA512:
6
- metadata.gz: f962ac5048dfbc89b43e432451e625a269e20c97bafc0850c68d7df3bd53bfb7ff1fad8eefcdca61cb0f7c3177c081a5537eeb8370444494ef42cd8e461a3200
7
- data.tar.gz: 628b342f72b72e1273602df0c20db813a5b26ddc0ee5b614c27037a693a31a9a6798ccdefbd936c435a201a3b7fa4799b03ea4a5b197ef3387a3ce784c6b3c65
6
+ metadata.gz: 8eeff96eb8d4a0223b2f21a941c796e0147ebb9a5ca080aa2235a14d532bc752eafbd45b195a52e30a60d9aee0aab64870b9821fe5c48251f0ad09e426ba0bd3
7
+ data.tar.gz: e87ff89fe07223c42b9a025335730b3272d93e43cec3e659e6580ab44c165d68019559c2107494aebc6f23bfdfa5d0167c523ea4603915c95f390c0627a3c87e
data/lib/spoll.rb CHANGED
@@ -1,78 +1,14 @@
1
- require 'spoll/version'
2
1
  require 'oauth2'
2
+ require 'virtus'
3
3
 
4
- module Spoll
5
- class Api
6
- attr_reader :token, :version
7
-
8
- HEADERS = { 'Content-Type' => 'application/json; charset=utf-8' }
9
-
10
- def initialize(client_id, client_secret, host, version)
11
- @client = ::OAuth2::Client.new(client_id, client_secret, site: host)
12
- @version = version
13
- get_token
14
- end
15
-
16
- def post_match(params)
17
- post('/matches', { match: params })
18
- end
19
-
20
- def put_match(id, params)
21
- put("/matches/#{id}", { match: params })
22
- end
23
-
24
- def get_match(id)
25
- get("/matches/#{id}", {})
26
- end
27
-
28
- def get_events(match_id)
29
- get("/events?match_id=#{match_id}", {})
30
- end
31
-
32
- def get_event(event_id)
33
- get("/events/#{event_id}", include: 'match.team,event_type,match.season.league')
34
- end
35
-
36
- private
37
-
38
- def get_token
39
- @token = @client.client_credentials.get_token
40
- end
41
-
42
- def get(url, params)
43
- request(:get, url, params, {})
44
- end
45
-
46
- def post(url, body)
47
- request(:post, url, {}, body)
48
- end
49
-
50
- def put(url, body)
51
- request(:put, url, {}, body)
52
- end
53
-
54
- def request(method, url, params, body)
55
- with_retry do
56
- token.send(method, "/#{version}/#{url}", headers: HEADERS, params: params, body: body.to_json)
57
- end
58
- end
59
-
60
- def with_retry
61
- tries = 0
62
- response = begin
63
- yield
64
- rescue ::OAuth2::Error => error
65
- if error.response.status.eql?(401)
66
- if tries < 3
67
- tries += 1
68
- get_token
69
- retry
70
- end
71
- else
72
- error.response
73
- end
74
- end
4
+ require 'spoll/client'
5
+ require 'spoll/version'
6
+ require 'spoll/response'
7
+ require 'spoll/models/base'
8
+ require 'spoll/models/event_type'
9
+ require 'spoll/models/event'
10
+ require 'spoll/models/team'
11
+ require 'spoll/models/match'
75
12
 
76
- end
77
- end
13
+ module Spoll
78
14
  end
@@ -0,0 +1,79 @@
1
+ module Spoll
2
+ class Client
3
+ attr_reader :token, :version
4
+
5
+ HEADERS = { 'Content-Type' => 'application/json; charset=utf-8' }
6
+
7
+ def initialize(client_id, client_secret, host, version)
8
+ @client = ::OAuth2::Client.new(client_id, client_secret, site: host)
9
+ @version = version
10
+ get_token
11
+ end
12
+
13
+ def post_match(params)
14
+ post('/matches', { match: params })
15
+ end
16
+
17
+ def put_match(id, params)
18
+ put("/matches/#{id}", { match: params })
19
+ end
20
+
21
+ def get_match(id, params = {})
22
+ response = get("/matches/#{id}", params)
23
+ r = Spoll::Response.new(response)
24
+ r.match = Models::Match.new(response.parsed)
25
+ r
26
+ end
27
+
28
+ def get_events(params)
29
+ get('/events', params)
30
+ end
31
+
32
+ def get_event(id, params = {})
33
+ get("/events/#{id}", params)
34
+ end
35
+
36
+ private
37
+
38
+ def get_token
39
+ @token = @client.client_credentials.get_token
40
+ end
41
+
42
+ def get(url, params)
43
+ request(:get, url, params, {})
44
+ end
45
+
46
+ def post(url, body)
47
+ request(:post, url, {}, body)
48
+ end
49
+
50
+ def put(url, body)
51
+ request(:put, url, {}, body)
52
+ end
53
+
54
+ def request(method, url, params, body)
55
+ with_retry do
56
+ token.send(method, "/#{version}/#{url}", headers: HEADERS, params: params, body: body.to_json)
57
+ end
58
+ end
59
+
60
+ def with_retry
61
+ tries = 0
62
+ begin
63
+ yield
64
+ rescue ::OAuth2::Error => error
65
+ if error.response.status.eql?(401)
66
+ if tries < 3
67
+ tries += 1
68
+ get_token
69
+ retry
70
+ end
71
+ else
72
+ error.response
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+
79
+ end
@@ -0,0 +1,13 @@
1
+ module Spoll::Models
2
+ class Base
3
+ include Virtus.model(nullify_blank: true)
4
+
5
+ def find_by(json, key, value)
6
+ json.each do |record|
7
+ return record if record[key].eql?(value)
8
+ end
9
+
10
+ nil
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Spoll::Models
2
+ class Event < Base
3
+ attribute :minute, Integer
4
+ attribute :comments_count, Integer
5
+ attribute :agrees, Integer
6
+ attribute :disagrees, Integer
7
+ attribute :event_type_id, Integer
8
+ attribute :event_type, EventType
9
+
10
+ def set_event_type(event_types)
11
+ if event_types.present?
12
+ self.event_type = find_by(event_types, 'id', event_type_id)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ module Spoll::Models
2
+ class EventType < Base
3
+ attribute :name, String
4
+ attribute :question, String
5
+ end
6
+ end
@@ -0,0 +1,50 @@
1
+ module Spoll::Models
2
+ class Match < Base
3
+ attribute :start_time, DateTime
4
+ attribute :home_team, Team
5
+ attribute :away_team, Team
6
+ attribute :status, String
7
+ attribute :home_team_id, Integer
8
+ attribute :away_team_id, Integer
9
+ attribute :events, Array[Event]
10
+
11
+ def initialize(json)
12
+ match = json['match']
13
+
14
+ self.start_time = match['start_time']
15
+ self.status = match['status']
16
+ self.home_team_id = match['home_team_id']
17
+ self.away_team_id = match['away_team_id']
18
+ include_teams(json['teams'])
19
+ include_events(json['events'], json['event_types'])
20
+ end
21
+
22
+ private
23
+
24
+ def include_teams(teams)
25
+ if teams.present?
26
+ self.home_team = init_team(teams, home_team_id)
27
+ self.away_team = init_team(teams, away_team_id)
28
+ end
29
+ end
30
+
31
+ def include_events(events, event_types)
32
+ if events.present?
33
+ all = []
34
+
35
+ events.each do |event|
36
+ e = Event.new(event)
37
+ e.set_event_type(event_types)
38
+ all << e
39
+ end
40
+
41
+ self.events = all
42
+ end
43
+ end
44
+
45
+ def init_team(json, id)
46
+ team = find_by(json, 'id', id)
47
+ Team.new(team)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,7 @@
1
+ module Spoll::Models
2
+ class Team < Base
3
+ attribute :name, String
4
+ attribute :short_name, String
5
+ attribute :logo, Hash
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Spoll
2
+ class Request
3
+
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module Spoll
2
+ class Response
3
+ attr_accessor :match
4
+
5
+ def initialize(response)
6
+ @response = response
7
+ end
8
+
9
+ def status
10
+ @response.status
11
+ end
12
+ end
13
+ end
data/lib/spoll/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spoll
2
- VERSION = "0.1.0"
2
+ VERSION = '0.2.0'
3
3
  end
data/spoll.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_runtime_dependency 'oauth2', '1.1.0'
23
+ spec.add_runtime_dependency 'virtus', '1.0.5'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.10'
25
26
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spoll
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "İ. Emre Kutlu"
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-12 00:00:00.000000000 Z
11
+ date: 2016-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: virtus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.5
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,14 @@ files:
66
80
  - bin/console
67
81
  - bin/setup
68
82
  - lib/spoll.rb
83
+ - lib/spoll/client.rb
84
+ - lib/spoll/models/base.rb
85
+ - lib/spoll/models/event.rb
86
+ - lib/spoll/models/event_type.rb
87
+ - lib/spoll/models/match.rb
88
+ - lib/spoll/models/team.rb
89
+ - lib/spoll/request.rb
90
+ - lib/spoll/response.rb
69
91
  - lib/spoll/version.rb
70
92
  - spoll.gemspec
71
93
  homepage: http://spoll.io