spoll 0.2.0 → 0.3.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: 98aa6e7d101f518d199c52ea4aa1695fb63bc8e9
4
- data.tar.gz: 010a7638b42892d2a2add2c91c026a6fae4d7e8b
3
+ metadata.gz: 84c96351fb151e16778a9bf6d8d47ccdf88bd30a
4
+ data.tar.gz: e6e8ead477d379bc25b94bb3d7e8cbf49fd70d43
5
5
  SHA512:
6
- metadata.gz: 8eeff96eb8d4a0223b2f21a941c796e0147ebb9a5ca080aa2235a14d532bc752eafbd45b195a52e30a60d9aee0aab64870b9821fe5c48251f0ad09e426ba0bd3
7
- data.tar.gz: e87ff89fe07223c42b9a025335730b3272d93e43cec3e659e6580ab44c165d68019559c2107494aebc6f23bfdfa5d0167c523ea4603915c95f390c0627a3c87e
6
+ metadata.gz: 043a9f772592a874b40a8325cb501a80b8b6acd36b3041fc3923a679b5e9826f37fbccb609041212bf2068bf55959fd291e2111f2523424a6f191edb996e18e0
7
+ data.tar.gz: 566a87841753105ac4c180ab94056f660974f08ad20d18633f665fc5d1eadea71e7fa7c27e8253ecebd953688ea11d5c481dfd69ed665eb910f9a8366e6c1d1e
@@ -19,10 +19,12 @@ module Spoll
19
19
  end
20
20
 
21
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
22
+ json = get("/matches/#{id}", params)
23
+ response = Spoll::Response.new(json)
24
+ match = Models::Match.new(json.parsed['match'])
25
+ match.set_relations(response)
26
+ response.match = match
27
+ response
26
28
  end
27
29
 
28
30
  def get_events(params)
@@ -30,7 +32,12 @@ module Spoll
30
32
  end
31
33
 
32
34
  def get_event(id, params = {})
33
- get("/events/#{id}", params)
35
+ json = get("/events/#{id}", params)
36
+ response = Spoll::Response.new(json)
37
+ event = Models::Event.new(json.parsed['event'])
38
+ event.set_relations(response)
39
+ response.event = event
40
+ response
34
41
  end
35
42
 
36
43
  private
@@ -72,8 +79,7 @@ module Spoll
72
79
  error.response
73
80
  end
74
81
  end
75
-
76
82
  end
77
- end
78
83
 
84
+ end
79
85
  end
@@ -2,6 +2,23 @@ module Spoll::Models
2
2
  class Base
3
3
  include Virtus.model(nullify_blank: true)
4
4
 
5
+ attribute :id, Integer
6
+
7
+ def set_relations(response)
8
+ end
9
+
10
+ def set_relation(relation, data, primary_key, foreign_key)
11
+ record = find_by(data, primary_key, send(foreign_key))
12
+ send("#{relation}=", record)
13
+ end
14
+
15
+ def set_array_relation(relation, data, primary_key, foreign_key)
16
+ records = find_all(data, primary_key, send(foreign_key))
17
+ send("#{relation}=", records)
18
+ end
19
+
20
+ private
21
+
5
22
  def find_by(json, key, value)
6
23
  json.each do |record|
7
24
  return record if record[key].eql?(value)
@@ -9,5 +26,16 @@ module Spoll::Models
9
26
 
10
27
  nil
11
28
  end
29
+
30
+ def find_all(json, key, value)
31
+ result = []
32
+
33
+ json.each do |record|
34
+ result << record if record[key].eql?(value)
35
+ end
36
+
37
+ result
38
+ end
39
+
12
40
  end
13
41
  end
@@ -1,16 +1,17 @@
1
1
  module Spoll::Models
2
2
  class Event < Base
3
+ attr_accessor :event_type, :match
4
+
3
5
  attribute :minute, Integer
4
6
  attribute :comments_count, Integer
5
7
  attribute :agrees, Integer
6
8
  attribute :disagrees, Integer
7
9
  attribute :event_type_id, Integer
8
- attribute :event_type, EventType
10
+ attribute :match_id, Integer
9
11
 
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
12
+ def set_relations(response)
13
+ set_relation(:event_type, response.event_types, 'id', :event_type_id)
14
+ set_relation(:match, response.matches, 'id', :match_id)
14
15
  end
15
16
  end
16
17
  end
@@ -1,50 +1,17 @@
1
1
  module Spoll::Models
2
2
  class Match < Base
3
+ attr_accessor :events, :home_team, :away_team
4
+
3
5
  attribute :start_time, DateTime
4
- attribute :home_team, Team
5
- attribute :away_team, Team
6
6
  attribute :status, String
7
7
  attribute :home_team_id, Integer
8
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
9
 
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
10
+ def set_relations(response)
11
+ set_array_relation(:events, response.events, 'match_id', :id)
12
+ set_relation(:home_team, response.teams, 'id', :home_team_id)
13
+ set_relation(:away_team, response.teams, 'id', :away_team_id)
29
14
  end
30
15
 
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
16
  end
50
17
  end
@@ -1,13 +1,56 @@
1
1
  module Spoll
2
2
  class Response
3
- attr_accessor :match
3
+ attr_accessor :match, :matches,
4
+ :event, :events,
5
+ :event_type, :event_types,
6
+ :teams, :team
7
+
4
8
 
5
9
  def initialize(response)
6
- @response = response
10
+ @response = response
11
+ @matches = []
12
+ @events = []
13
+ @event_types = []
14
+ @teams = []
15
+
16
+ includes = [
17
+ { model: Spoll::Models::Match, key: 'matches', attribute: @matches },
18
+ { model: Spoll::Models::Event, key: 'events', attribute: @events },
19
+ { model: Spoll::Models::EventType, key: 'event_types', attribute: @event_types },
20
+ { model: Spoll::Models::Team, key: 'teams', attribute: @teams }
21
+ ]
22
+
23
+ load_includes(includes)
24
+ set_relations(includes)
7
25
  end
8
26
 
9
27
  def status
10
28
  @response.status
11
29
  end
30
+
31
+ private
32
+
33
+ def load_includes(includes)
34
+ includes.each do |hash|
35
+ load_include(hash[:model], hash[:key], hash[:attribute])
36
+ end
37
+ end
38
+
39
+ def load_include(model, key, attribute)
40
+ if @response.parsed.key?(key)
41
+ @response.parsed[key].each do |record|
42
+ attribute << model.new(record)
43
+ end
44
+ end
45
+ end
46
+
47
+ def set_relations(includes)
48
+ includes.each do |hash|
49
+ hash[:attribute].each do |record|
50
+ record.set_relations(self)
51
+ end
52
+ end
53
+ end
54
+
12
55
  end
13
56
  end
@@ -1,3 +1,3 @@
1
1
  module Spoll
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
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.2.0
4
+ version: 0.3.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-06-05 00:00:00.000000000 Z
11
+ date: 2016-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2