cloud_spokes_api_model 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,127 @@
1
+ class CloudSpokes::Model::Challenge < CloudSpokes::Model::BaseApi
2
+
3
+ attr_accessor :id, :challenge_id, :challenge_type, :attributes,
4
+ :prize_type, :total_prize_money, :top_prize,
5
+ :start_date, :end_date, :usage_details, :requirements, :post_reg_info,
6
+ :name, :description, :status, :release_to_open_source, :additional_info,
7
+ :categories, :is_open, :discussion_board, :registered_members,
8
+ :submission_details, :winner_announced, :community,
9
+
10
+ # these are only available if you call /admin on the model
11
+ # e.g. http://cs-api-sandbox.herokuapp.com/v1/challenges/2/admin
12
+ :challenge_reviewers, :challenge_comment_notifiers, :assets
13
+
14
+ has_many :comments
15
+
16
+ # Note that we're not using the participants data in the json because it
17
+ # lacks many attributes. We simply just do another api call.
18
+ has_many :participants
19
+
20
+ # Cleanup up the __r convention -- may want to delete this
21
+ def initialize(params={})
22
+ # there has GOT to be some better way to clean this up ...
23
+ params['categories'] = params.delete('challenge_categories__r') if params['challenge_categories__r']
24
+ params['participants'] = params.delete('challenge_participants__r') if params['challenge_participants__r']
25
+ params['community'] = params.delete('community__r') if params['community__r']
26
+ params['terms_of_service'] = params.delete('terms_of_service__r') if params['terms_of_service__r']
27
+ params['challenge_comments'] = params.delete('challenge_comments__r') if params['challenge_comments__r']
28
+ params['challenge_reviewers'] = params.delete('challenge_reviewers__r') if params['challenge_reviewers__r']
29
+ params['challenge_comment_notifiers'] = params.delete('challenge_comment_notifiers__r') if params['challenge_comment_notifiers__r']
30
+ params['challenge_prizes'] = params.delete('challenge_prizes__r') if params['challenge_prizes__r']
31
+ params['assets'] = params.delete('assets__r') if params['assets__r']
32
+
33
+ # these fields need extra cleaning as they should only output arrays of strings
34
+ # they also have an awful lot of duplication that can benefit with a bit of refactoring
35
+ params['challenge_reviewers'] = params['challenge_reviewers'].map do |entry|
36
+ entry['member__r']['name']
37
+ end if params['challenge_reviewers']
38
+
39
+ params['challenge_comment_notifiers'] = params['challenge_comment_notifiers'].map do |entry|
40
+ entry['member__r']['name']
41
+ end if params['challenge_comment_notifiers']
42
+
43
+ params['challenge_prizes'] = params['challenge_prizes'].records.map do |entry|
44
+ { place: entry['place'].to_s, prize: entry['prize'].to_s, points: entry['points'] || '', value: entry['value'] || '' }
45
+ end if params['challenge_prizes']
46
+
47
+ # params['assets'] = params['assets'].map do |entry|
48
+ # entry['filename']
49
+ # end if params['assets']
50
+
51
+ super(params)
52
+ end
53
+
54
+ def self.api_endpoint
55
+ CloudSpokes::APP_CONFIG[:cs_api][:challenges]
56
+ end
57
+
58
+ # Used for resourceful routes (instead of id)
59
+ def to_param
60
+ challenge_id
61
+ end
62
+
63
+ # Returns all the closed challenges
64
+ def self.closed
65
+ request(:get, 'closed', {}).map {|challenge| Challenge.new challenge}
66
+ end
67
+
68
+ def self.open
69
+ request(:get, '', {}).map {|challenge| Challenge.new challenge}
70
+ end
71
+
72
+ def self.all
73
+ closed + open
74
+ end
75
+
76
+ # Returns all the recent challenges
77
+ def self.recent
78
+ request(:get, 'recent', {}).map {|challenge| Challenge.new challenge}
79
+ end
80
+
81
+ # Return an object instead of a string
82
+ def start_date
83
+ Date.parse(@start_date) if @start_date
84
+ end
85
+
86
+ # Return an object instead of a string
87
+ def end_date
88
+ Date.parse(@end_date) if @end_date
89
+ end
90
+
91
+ # TODO: blow up the categories into something useful
92
+ def categories
93
+ @categories.records.map {|c| c.display_name}
94
+ end
95
+
96
+ def category_names
97
+ categories.records.map(&:display_name)
98
+ end
99
+
100
+ def assets
101
+ assets.records.map(&:filename)
102
+ end
103
+
104
+ def community_name
105
+ community.try(:name)
106
+ end
107
+
108
+ def open?
109
+ @is_open == "true"
110
+ end
111
+
112
+ def release_to_open_source?
113
+ !!@release_to_open_source
114
+ end
115
+
116
+ def winner_announced
117
+ Date.parse(@winner_announced) if @winner_announced
118
+ end
119
+
120
+ # has_one :status
121
+ # TODO (this requires authentication)
122
+ # edit Nov 22: apparently not? O_O
123
+ # def status
124
+ # 'nil'
125
+ # end
126
+ end
127
+
@@ -1,3 +1,3 @@
1
1
  module CloudSpokes
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud_spokes_api_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-23 00:00:00.000000000 Z
12
+ date: 2013-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -102,6 +102,7 @@ files:
102
102
  - app/models/active_model/model.rb
103
103
  - app/models/cloud_spokes/model/base_api.rb
104
104
  - app/models/cloud_spokes/model/category.rb
105
+ - app/models/cloud_spokes/model/challenge.rb
105
106
  - app/models/cloud_spokes/model/member.rb
106
107
  - lib/cloud_spokes_api_model/engine.rb
107
108
  - lib/cloud_spokes_api_model/railtie.rb
@@ -155,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
156
  version: '0'
156
157
  segments:
157
158
  - 0
158
- hash: -2574066528587729873
159
+ hash: 81249341863946088
159
160
  required_rubygems_version: !ruby/object:Gem::Requirement
160
161
  none: false
161
162
  requirements:
@@ -164,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
165
  version: '0'
165
166
  segments:
166
167
  - 0
167
- hash: -2574066528587729873
168
+ hash: 81249341863946088
168
169
  requirements: []
169
170
  rubyforge_project:
170
171
  rubygems_version: 1.8.24