spoll 0.1.0 → 0.2.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.
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