infostrada 0.1.26 → 0.1.27

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.
Files changed (76) hide show
  1. checksums.yaml +5 -13
  2. data/.rspec +2 -0
  3. data/.rubocop.yml +2 -0
  4. data/.travis.yml +6 -0
  5. data/README.md +2 -0
  6. data/infostrada.gemspec +4 -1
  7. data/lib/infostrada.rb +6 -12
  8. data/lib/infostrada/call_refresh.rb +2 -1
  9. data/lib/infostrada/competition.rb +2 -1
  10. data/lib/infostrada/core_ext/hash.rb +14 -0
  11. data/lib/infostrada/core_ext/string.rb +19 -2
  12. data/lib/infostrada/match.rb +2 -2
  13. data/lib/infostrada/match_event.rb +1 -1
  14. data/lib/infostrada/mock.rb +76 -0
  15. data/lib/infostrada/nation.rb +2 -2
  16. data/lib/infostrada/person_info.rb +12 -12
  17. data/lib/infostrada/phase.rb +11 -13
  18. data/lib/infostrada/player.rb +11 -11
  19. data/lib/infostrada/squad.rb +3 -6
  20. data/lib/infostrada/team.rb +4 -4
  21. data/lib/infostrada/team_info.rb +1 -1
  22. data/lib/infostrada/team_request.rb +2 -5
  23. data/lib/infostrada/version.rb +1 -1
  24. data/spec/base_request_spec.rb +19 -0
  25. data/spec/competition_spec.rb +67 -0
  26. data/spec/edition_request_spec.rb +20 -0
  27. data/spec/edition_spec.rb +111 -0
  28. data/spec/endpoint_spec.rb +62 -0
  29. data/spec/formatter_spec.rb +12 -0
  30. data/spec/helpers/json_helper.rb +41 -0
  31. data/spec/json/competition.json +55 -0
  32. data/spec/json/edition.json +61 -0
  33. data/spec/json/edition_request.json +242 -0
  34. data/spec/json/endpoint.json +46 -0
  35. data/spec/json/match.json +945 -0
  36. data/spec/json/match_event.json +187 -0
  37. data/spec/json/match_event_list.json +411 -0
  38. data/spec/json/nation.json +302 -0
  39. data/spec/json/person_info.json +52 -0
  40. data/spec/json/phase.json +158 -0
  41. data/spec/json/player.json +93 -0
  42. data/spec/json/referee.json +184 -0
  43. data/spec/json/sample_responses/all_editions.json +243 -0
  44. data/spec/json/sample_responses/competition_edition_league_21594_serie_a.json +4 -0
  45. data/spec/json/sample_responses/competition_match_days_league_21594_serie_a.json +473 -0
  46. data/spec/json/sample_responses/competition_match_list_league_21594_serie_a.json +25465 -0
  47. data/spec/json/sample_responses/competition_phases_cup_21204_capital_one_cup.json +138 -0
  48. data/spec/json/sample_responses/competition_phases_league_21594_serie_a.json +24 -0
  49. data/spec/json/sample_responses/competition_table_phase_114165_serie_a_2015.json +585 -0
  50. data/spec/json/sample_responses/competition_teams_league_21594.json +165 -0
  51. data/spec/json/sample_responses/get_api_call_refresh_module.json +65 -0
  52. data/spec/json/sample_responses/match_events_1788734_real_atletico_final_champions.json +7960 -0
  53. data/spec/json/sample_responses/match_info_1788734_real_atletico_final_champions.json +96 -0
  54. data/spec/json/sample_responses/match_info_upcoming_1968820_serie_a.json +96 -0
  55. data/spec/json/sample_responses/person_info_611005_bale.json +55 -0
  56. data/spec/json/sample_responses/squad_100163_on_edition_21590.json +1355 -0
  57. data/spec/json/sample_responses/team_info_100163.json +28 -0
  58. data/spec/json/sample_responses/template_dummy_response.json +4 -0
  59. data/spec/json/squad.json +514 -0
  60. data/spec/json/team.json +10 -0
  61. data/spec/json/team_info.json +25 -0
  62. data/spec/json/team_request.json +68 -0
  63. data/spec/match_event_list_spec.rb +21 -0
  64. data/spec/match_event_spec.rb +159 -0
  65. data/spec/match_spec.rb +430 -0
  66. data/spec/nation_spec.rb +179 -0
  67. data/spec/person_info_spec.rb +69 -0
  68. data/spec/phase_spec.rb +183 -0
  69. data/spec/player_spec.rb +112 -0
  70. data/spec/referee_spec.rb +71 -0
  71. data/spec/spec_helper.rb +117 -0
  72. data/spec/squad_spec.rb +25 -0
  73. data/spec/team_info_spec.rb +77 -0
  74. data/spec/team_request_spec.rb +24 -0
  75. data/spec/team_spec.rb +76 -0
  76. metadata +213 -43
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OWUyODUxNWQ3NjMyYjVmNDAwYWRmMDE4OTdjZDQ2ZjQ5ZGZjMDNlYw==
5
- data.tar.gz: !binary |-
6
- ZTlmMWIxYTFhM2Q2NTRlYmFhN2JjZTliOTM5ZjEwNDFlNGM0MmViZg==
2
+ SHA1:
3
+ metadata.gz: 6b30c5898694a437a67d666cc76caa8065dd319f
4
+ data.tar.gz: c87943d6ee571431fcb73ef36538fe2170dc9ef4
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZWZlMzA5YWNjODBhZWZjMmJjYzgyZjVjMDMwOTgzZWJjY2UzNjI1ZTUyNzNk
10
- OWM0MmU2Mzg4ODZiYzdiYzc3Y2VhMTZkNmM0MzVkMTkyZTQ4NDJhMjMxZTUy
11
- OTI0NmMyMTczOGI5MThlNzM2NTE2YzliYWMzNWIxZThjNzIzOGE=
12
- data.tar.gz: !binary |-
13
- OGQzZTYwMmIxN2JlZGY2NmY2YmU1MTQyMzY2OGRkYmRiYWIyODZjZThmODg4
14
- ZjAyOTBmYmI0NGM0MzBiNWI1MmU0ZDQ2ZDllZThiOWU3YjJlYjU1OGQ1Mzg3
15
- NWEyMzVlOGI4NGY1ODcwMjBlM2U2NmZjODhhMWE4ZGE0YzEyODc=
6
+ metadata.gz: 54d404aaa60736bbec2de0aa39314db1deab3f0f39f509787195612d75936f2f8bb4aadd3b77770e28fa91ae0c7a7837d2d725d23e9dcc227bc2a7f39d16e896
7
+ data.tar.gz: 899739556ca72a86127484f470c54e45e93a6a8a4eab1ec368eeb70812b1038fadb25180247f9c83e4fd2b2955b86e05c881d76e5ab100870453a66949574306
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ Metrics/LineLength:
2
+ Max: 100
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.6
5
+ - 2.2.0
6
+ script: bundle exec rspec
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/rikas/infostrada-api.svg?branch=master)](https://travis-ci.org/rikas/infostrada-api)
2
+
1
3
  # Infostrada API
2
4
 
3
5
  This is a wrapper for [infostrada](http://www.infostradasports.com/) football API.
data/infostrada.gemspec CHANGED
@@ -16,13 +16,16 @@ Gem::Specification.new do |spec|
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ['lib']
19
+ spec.require_paths = ['lib', 'lib/infostrada' ]
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.5'
22
22
  spec.add_development_dependency 'rake', '~> 10.2', '>= 10.2.2'
23
23
  spec.add_development_dependency 'reek', '~> 1.3', '>= 1.3.7'
24
24
  spec.add_development_dependency 'rubocop', '~> 0.20', '>= 0.20.1'
25
25
  spec.add_development_dependency 'pry', '~> 0.9', '>= 0.9.12'
26
+ spec.add_development_dependency 'pry-byebug', '~> 3.1', '>= 3.1.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.2', '>= 3.2.0'
28
+ spec.add_development_dependency 'webmock', '~> 1.21', '>= 1.21.0'
26
29
 
27
30
  spec.add_dependency 'httparty', '~> 0.13', '>= 0.13.0'
28
31
  spec.add_dependency 'colored', '~> 1.2'
data/lib/infostrada.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  require 'rubygems'
2
2
  require 'httparty'
3
3
  require 'active_model'
4
-
5
- require 'infostrada/core_ext/string'
4
+ require 'pry'
6
5
  require 'infostrada/base_request'
7
-
8
6
  module Infostrada
7
+ require 'infostrada/core_ext/string'
8
+ require 'infostrada/core_ext/hash'
9
+ require 'infostrada/mock'
9
10
  extend ActiveModel::Serializers::JSON
10
11
 
11
12
  # The configuration of the API requests.
@@ -53,26 +54,19 @@ module Infostrada
53
54
  end
54
55
 
55
56
  require 'infostrada/competition'
56
-
57
57
  require 'infostrada/edition'
58
58
  require 'infostrada/edition_request'
59
-
59
+ require 'infostrada/endpoint'
60
60
  require 'infostrada/errors'
61
-
62
61
  require 'infostrada/nation'
63
-
64
62
  require 'infostrada/formatter'
65
-
66
63
  require 'infostrada/team'
67
64
  require 'infostrada/team_request'
68
65
  require 'infostrada/team_info'
69
-
70
66
  require 'infostrada/match'
71
67
  require 'infostrada/phase'
72
68
  require 'infostrada/table'
73
-
74
69
  require 'infostrada/squad'
75
70
  require 'infostrada/player'
76
71
  require 'infostrada/person_info'
77
-
78
- require 'infostrada/version'
72
+ require 'infostrada/version'
@@ -64,10 +64,11 @@ module Infostrada
64
64
 
65
65
  list = get!(URL, query: { from: date_str, outputType: OUTPUT_TYPE, module: 'football' })
66
66
 
67
+ puts "Refresh call with #{date_str}"
67
68
  list.each_with_object([]) do |hash, endpoints|
68
69
  lang = hash['c_QueryString'].scan(/languagecode=(\d+)/).flatten.first.to_i
69
70
  endpoints << Endpoint.new(hash) if LANGUAGE_CODES.include?(lang)
70
71
  end
71
72
  end
72
73
  end
73
- end
74
+ end
@@ -15,7 +15,7 @@ module Infostrada
15
15
  attr_accessor :id, :name, :set, :level, :nation
16
16
 
17
17
  def self.from_json(json = {})
18
- self.new do |competition|
18
+ new do |competition|
19
19
  competition.id = json['id']
20
20
  competition.name = json['name']
21
21
  competition.nation = Nation.from_json(json['nation'], 'competition') if json['nation']
@@ -32,3 +32,4 @@ module Infostrada
32
32
  end
33
33
  end
34
34
  end
35
+
@@ -0,0 +1,14 @@
1
+ class Hash
2
+ def symbolize_keys
3
+ transform_keys{ |key| key.to_sym rescue key }
4
+ end
5
+
6
+ def transform_keys
7
+ return enum_for(:transform_keys) unless block_given?
8
+ result = self.class.new
9
+ each_key do |key|
10
+ result[yield(key)] = self[key]
11
+ end
12
+ result
13
+ end
14
+ end
@@ -1,11 +1,28 @@
1
1
  class String
2
2
  # This is a version of the method stolen from railties and it converts 'Text-LikeThis' to
3
3
  # 'text_like_this'.
4
- def snake_case
4
+ def info_snake_case
5
5
  result = self.gsub(/::/, '/')
6
6
  result.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
7
7
  result.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
8
8
  result.tr!("-", "_")
9
9
  result.downcase
10
10
  end
11
- end
11
+
12
+ # Weird name so inclusion with active support
13
+ # doesn't break things
14
+ def info_camelize
15
+ result = self.gsub(/(?<=_|^)(\w)/){$1.upcase}
16
+ result.gsub(/(?<=_|^)(\w)/){$1.upcase}.gsub(/(?:_)(\w)/,'\1')
17
+ end
18
+
19
+ # Weird name so inclusion with active support
20
+ # doesn't break things
21
+ def info_underscore
22
+ result = self.gsub(/::/, '/')
23
+ result.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
24
+ .gsub(/([a-z\d])([A-Z])/,'\1_\2')
25
+ .tr("-", "_")
26
+ .downcase
27
+ end
28
+ end
@@ -188,8 +188,8 @@ module Infostrada
188
188
  @referee = Referee.new(hash) if hash['n_RefereeID']
189
189
  @phase = Phase.new(hash) if hash['n_PhaseID']
190
190
 
191
- @home_team = Team.new(hash, 'home') if hash['n_EditionID']
192
- @away_team = Team.new(hash, 'away') if hash['n_EditionID']
191
+ @home_team = Team.new(hash, 'home') if hash['n_HomeTeamID']
192
+ @away_team = Team.new(hash, 'away') if hash['n_AwayTeamID']
193
193
 
194
194
  @goals = Goals.new(hash) if hash['n_HomeGoals']
195
195
  @edition = Edition.new(hash) if hash['n_EditionID']
@@ -86,7 +86,7 @@ module Infostrada
86
86
  @time = hash['n_ActionTime']
87
87
  @home_goals = hash['n_HomeGoals']
88
88
  @away_goals = hash['n_AwayGoals']
89
- @home_event = hash['n_HomeOrAway'] == 1 ? true : false
89
+ @home_event = hash['n_HomeOrAway'] == 1
90
90
  @team_id = hash['n_TeamID']
91
91
  @team_name = hash['c_Team']
92
92
  @team_short_name = hash['c_TeamShort']
@@ -0,0 +1,76 @@
1
+ json_helper = File.join('..', '..', '..', 'spec', 'helpers', 'json_helper')
2
+ require File.expand_path(json_helper, __FILE__)
3
+
4
+ module Infostrada
5
+ class Mock
6
+ class << self
7
+ def explain
8
+ meths = %w(competition edition match_event match nation person_info
9
+ phase player referee team_info team)
10
+ puts 'Returns mock class instance for tests.'
11
+ puts 'Available methods:'
12
+ meths.each do |m|
13
+ puts "\t - Infostrada::Mock.#{m}"
14
+ end
15
+ puts 'All the methods accept one or more arguments.'
16
+ puts 'The first argument is *type*, which allows the selection of the mock json.'
17
+ puts ''
18
+ end
19
+
20
+ def competition(type = :default)
21
+ json = JSONHelper::Competition.get(type)
22
+ Infostrada::Competition.new(json)
23
+ end
24
+
25
+ def edition(type = :default)
26
+ json = JSONHelper::Edition.get(type)
27
+ Infostrada::Edition.new(json)
28
+ end
29
+
30
+ def match_event(type = :event_1, match_id = nil)
31
+ json = JSONHelper::MatchEvent.get(type)
32
+ Infostrada::MatchEvent.new(match_id, json)
33
+ end
34
+
35
+ def match(type = :cup_knock_out_finished_complete)
36
+ json = JSONHelper::Match.get(type)
37
+ Infostrada::Match.new(json)
38
+ end
39
+
40
+ def nation(type = :team)
41
+ json = JSONHelper::Nation.get(type)
42
+ Infostrada::Nation.new(json, type.to_s)
43
+ end
44
+
45
+ def person_info(person_id = 611_005, type = :default)
46
+ json = JSONHelper::PersonInfo.get(type)
47
+ Infostrada::PersonInfo.new(person_id, json)
48
+ end
49
+
50
+ def phase(type = :default)
51
+ json = JSONHelper::Phase.get(type).first
52
+ Infostrada::Phase.new(json)
53
+ end
54
+
55
+ def player(type = :default)
56
+ json = JSONHelper::Player.get(type)
57
+ Infostrada::Player.new(json)
58
+ end
59
+
60
+ def referee(type = :complete_referee_match)
61
+ json = JSONHelper::Referee.get(type)
62
+ Infostrada::Referee.new(json)
63
+ end
64
+
65
+ def team_info(type = :default)
66
+ json = JSONHelper::TeamInfo.get(type)
67
+ Infostrada::TeamInfo.new(json)
68
+ end
69
+
70
+ def team(type = :default)
71
+ json = JSONHelper::Team.get(type)
72
+ Infostrada::Team.new(json, '')
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,7 +1,7 @@
1
1
  module Infostrada
2
2
  class Nation
3
- attr_accessor :id, :name, :short_name
4
3
 
4
+ attr_accessor :id, :name, :short_name
5
5
 
6
6
  def self.from_json(hash = {}, prefix)
7
7
  self.new(prefix) do |nation|
@@ -13,7 +13,7 @@ module Infostrada
13
13
 
14
14
  def initialize(hash = {}, prefix, &block)
15
15
  hash.each do |key, value|
16
- match = key.snake_case.match(/[cn]_#{prefix}_?(natio\w*)$/)
16
+ match = key.info_snake_case.match(/[cn]_#{prefix}_?(natio\w*)$/)
17
17
  self.send("#{$1}=", value) if match
18
18
  end
19
19
 
@@ -12,24 +12,24 @@ module Infostrada
12
12
 
13
13
  info = get!(URL, query: { personid: id }).first
14
14
 
15
- self.new(id, info)
15
+ new(id, info)
16
16
  end
17
17
 
18
18
  def initialize(id, info)
19
19
  @id = id
20
20
 
21
21
  # Sometimes info comes as an empty array...
22
- if info && !info.empty?
23
- @first_name = info['c_FirstName']
24
- @last_name = info['c_LastName']
25
- @public_name = info['c_PublicName']
26
- @nickname = info['c_Nickname']
27
- @birthdate = Formatter.format_date(info['d_BirthDate'])
28
- @height = info['n_Height']
29
- @weight = info['n_Weight']
30
- @birth_city = info['c_BirthCity']
31
- @birth_country = info['c_BirthCountry']
32
- end
22
+ return unless info && !info.empty?
23
+
24
+ @first_name = info['c_FirstName']
25
+ @last_name = info['c_LastName']
26
+ @public_name = info['c_PublicName']
27
+ @nickname = info['c_Nickname']
28
+ @birthdate = Formatter.format_date(info['d_BirthDate'])
29
+ @height = info['n_Height']
30
+ @weight = info['n_Weight']
31
+ @birth_city = info['c_BirthCity']
32
+ @birth_country = info['c_BirthCountry']
33
33
  end
34
34
  end
35
35
  end
@@ -24,17 +24,14 @@ module Infostrada
24
24
 
25
25
  list = get!(URL, query: { editionid: edition_id.to_i })
26
26
 
27
- phases = []
28
- list.each do |phase_hash|
29
- phases << Phase.new(phase_hash)
27
+ list.map do |phase_hash|
28
+ Phase.new(phase_hash)
30
29
  end
31
-
32
- phases
33
30
  end
34
31
 
35
32
  # Useful method to get a Phase object from a json serialized Phase object.
36
33
  def self.from_json(json = {})
37
- self.new do |phase|
34
+ new do |phase|
38
35
  phase.id = json['id']
39
36
  phase.name = json['name']
40
37
  phase.level = json['level']
@@ -48,16 +45,11 @@ module Infostrada
48
45
  phase.has_table = json['has_table']
49
46
  phase.current = json['current']
50
47
  phase.currents = json['currents']
51
- phase.start_date = Date.parse(json['start_date']) if json['start_date']
52
- phase.end_date = Date.parse(json['end_date']) if json['end_date']
48
+ phase.start_date = Date.parse(json['start_date'].to_s) if json['start_date']
49
+ phase.end_date = Date.parse(json['end_date'].to_s) if json['end_date']
53
50
  end
54
51
  end
55
52
 
56
- # Get the classification table for this phase.
57
- def table
58
- Table.where(phase_id: id)
59
- end
60
-
61
53
  def initialize(hash = {}, &block)
62
54
  @id = hash['n_PhaseID']
63
55
  @name = hash['c_Phase']
@@ -84,6 +76,12 @@ module Infostrada
84
76
  self
85
77
  end
86
78
 
79
+ # Get the classification table for this phase.
80
+ def table
81
+ Table.where(phase_id: id)
82
+ end
83
+
84
+
87
85
  def has_table?
88
86
  @has_table
89
87
  end
@@ -48,17 +48,17 @@ module Infostrada
48
48
  def set_season_stats(hash)
49
49
  @season_stats = {}
50
50
 
51
- @season_stats[:matches] = hash['n_Matches']
52
- @season_stats[:matches_start] = hash['n_MatchesStart']
53
- @season_stats[:matches_out] = hash['n_MatchesOut']
54
- @season_stats[:matches_in] = hash['n_MatchesIn']
55
- @season_stats[:minutes_played] = hash['n_MinutesPlayed']
56
- @season_stats[:goals] = hash['n_Goals']
57
- @season_stats[:own_goals] = hash['n_OwnGoals']
58
- @season_stats[:assists] = hash['n_Assists']
59
- @season_stats[:cards_yellow] = hash['n_CardsYellow']
60
- @season_stats[:cards_red] = hash['n_CardsRed']
61
- @season_stats[:cards_red_direct] = hash['n_CardsRedDirect']
51
+ @season_stats[:matches] = hash['n_Matches']
52
+ @season_stats[:matches_start] = hash['n_MatchesStart']
53
+ @season_stats[:matches_out] = hash['n_MatchesOut']
54
+ @season_stats[:matches_in] = hash['n_MatchesIn']
55
+ @season_stats[:minutes_played] = hash['n_MinutesPlayed']
56
+ @season_stats[:goals] = hash['n_Goals']
57
+ @season_stats[:own_goals] = hash['n_OwnGoals']
58
+ @season_stats[:assists] = hash['n_Assists']
59
+ @season_stats[:cards_yellow] = hash['n_CardsYellow']
60
+ @season_stats[:cards_red] = hash['n_CardsRed']
61
+ @season_stats[:cards_red_direct] = hash['n_CardsRedDirect']
62
62
  @season_stats[:cards_red_from_yellow] = hash['n_CardsRed2Yellow']
63
63
  end
64
64
  end
@@ -10,12 +10,9 @@ module Infostrada
10
10
 
11
11
  list = get!(URL, query: { editionid: edition_id, teamid: team_id })
12
12
 
13
- players = []
14
- list.each do |player_hash|
15
- players << Player.new(player_hash)
13
+ list.map do |player_hash|
14
+ Player.new(player_hash)
16
15
  end
17
-
18
- players
19
16
  end
20
17
  end
21
- end
18
+ end
@@ -6,15 +6,15 @@ module Infostrada
6
6
  def_delegator :@nation, :name, :nation_name
7
7
  def_delegator :@nation, :short_name, :nation_short_name
8
8
 
9
- attr_accessor :id, :name, :short_name, :nation, :edition_id
9
+ attr_accessor :id, :name, :short_name, :nation, :edition_id, :details
10
10
 
11
11
  def self.where(options = {})
12
12
  edition_id = options.delete(:edition_id)
13
- teams = TeamRequest.get_edition(edition_id.to_i)
13
+ TeamRequest.get_edition(edition_id.to_i)
14
14
  end
15
15
 
16
16
  def self.from_json(json = {}, prefix)
17
- self.new(prefix) do |team|
17
+ new(prefix) do |team|
18
18
  team.id = json['id']
19
19
  team.name = json['name']
20
20
  team.short_name = json['short_name']
@@ -27,7 +27,7 @@ module Infostrada
27
27
  @edition_id = hash['edition_id']
28
28
 
29
29
  hash.each do |key, value|
30
- case key.snake_case
30
+ case key.info_snake_case
31
31
  when /^[cn]\w+#{prefix}_?team_id$/
32
32
  self.send('team_id=', value)
33
33
  when /^[cn]\w+#{prefix}_?team$/