diff --git a/admin/app/admin/isp_scoring_data.rb b/admin/app/admin/isp_scoring_data.rb new file mode 100644 index 000000000..da2201eb4 --- /dev/null +++ b/admin/app/admin/isp_scoring_data.rb @@ -0,0 +1,5 @@ +ActiveAdmin.register JamRuby::IspScoreBatch, :as => 'Isp Score Data' do + + config.sort_order = 'created_at_desc' + +end diff --git a/admin/app/admin/jam_ruby_artifact_updates.rb b/admin/app/admin/jam_ruby_artifact_updates.rb index ea82e4962..b4166b700 100644 --- a/admin/app/admin/jam_ruby_artifact_updates.rb +++ b/admin/app/admin/jam_ruby_artifact_updates.rb @@ -1,4 +1,4 @@ -ActiveAdmin.register JamRuby::ArtifactUpdate do +ActiveAdmin.register JamRuby::ArtifactUpdate, :as => 'Artifacts' do menu :label => 'Artifacts' config.sort_order = 'product,environment' diff --git a/admin/app/admin/jam_ruby_invited_users.rb b/admin/app/admin/jam_ruby_invited_users.rb index e1cc4f2b1..928bef738 100644 --- a/admin/app/admin/jam_ruby_invited_users.rb +++ b/admin/app/admin/jam_ruby_invited_users.rb @@ -1,4 +1,4 @@ -ActiveAdmin.register JamRuby::InvitedUser do +ActiveAdmin.register JamRuby::InvitedUser, :as => 'Invited Users' do menu :label => 'Invite Users' config.sort_order = 'created_at' diff --git a/admin/app/admin/jam_ruby_users.rb b/admin/app/admin/jam_ruby_users.rb index 27968a33f..d6c8587ac 100644 --- a/admin/app/admin/jam_ruby_users.rb +++ b/admin/app/admin/jam_ruby_users.rb @@ -1,4 +1,4 @@ -ActiveAdmin.register JamRuby::User do +ActiveAdmin.register JamRuby::User, :as => 'Users' do menu :label => 'Jam User' diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index af074e607..baea30286 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -10,7 +10,8 @@ require "will_paginate/active_record" require "action_mailer" require "devise" require "sendgrid" -require 'postgres-copy' +require "postgres-copy" +require "jam_ruby/lib/module_overrides" require "jam_ruby/constants/limits" require "jam_ruby/constants/notification_types" require "jam_ruby/constants/validation_messages" @@ -75,9 +76,10 @@ require "jam_ruby/models/recorded_track" require "jam_ruby/models/mix" require "jam_ruby/models/claimed_recording" require "jam_ruby/models/crash_dump" +require "jam_ruby/models/isp_score_batch" include Jampb module JamRuby - -end + +end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/lib/module_overrides.rb b/ruby/lib/jam_ruby/lib/module_overrides.rb new file mode 100644 index 000000000..db937edd2 --- /dev/null +++ b/ruby/lib/jam_ruby/lib/module_overrides.rb @@ -0,0 +1,11 @@ +require 'json' + +class String + def is_json? + begin + !!JSON.parse(self) + rescue + false + end + end +end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/isp_score_batch.rb b/ruby/lib/jam_ruby/models/isp_score_batch.rb new file mode 100644 index 000000000..d88380124 --- /dev/null +++ b/ruby/lib/jam_ruby/models/isp_score_batch.rb @@ -0,0 +1,16 @@ +module JamRuby + class IspScoreBatch < ActiveRecord::Base + + self.primary_key = 'id' + self.table_name = 'isp_score_batch' + attr_accessible :json_scoring_data + + validates :json_scoring_data, :presence => true + + validate :json_format + + def json_format + errors[:json_scoring_data] << "not in json format" unless !json_scoring_data.nil? && json_scoring_data.is_json? + end + end +end diff --git a/ruby/spec/jam_ruby/models/isp_score_batch_spec.rb b/ruby/spec/jam_ruby/models/isp_score_batch_spec.rb new file mode 100644 index 000000000..4cc204c27 --- /dev/null +++ b/ruby/spec/jam_ruby/models/isp_score_batch_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe IspScoreBatch do + + let (:score) {IspScoreBatch.new} + it "valid json" do + score.json_scoring_data = "{}" + score.save.should be_true + end + + it "no json" do + score.save.should be_false + end + + it "invalid json" do + score.json_scoring_data = "blurp a durp" + score.save.should be_false + end +end diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb index d55649882..e60c896ba 100644 --- a/web/app/controllers/api_users_controller.rb +++ b/web/app/controllers/api_users_controller.rb @@ -420,13 +420,14 @@ class ApiUsersController < ApiController end def isp_scoring - if request.post? - data = request.body.read - User.connection.execute("INSERT INTO isp_score_batch(json_scoring_data) VALUES ('#{data}')") + data = request.body.read + score = IspScoreBatch.new + score.json_scoring_data = data + if score.save render :text => 'scoring recorded' - return + else + render :text => "score invalid: #{score.errors.inspect}", status:422 end - render :nothing => true end ################# AVATAR ##################### diff --git a/web/spec/requests/isp_scores_spec.rb b/web/spec/requests/isp_scores_spec.rb new file mode 100644 index 000000000..2f891eb39 --- /dev/null +++ b/web/spec/requests/isp_scores_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe "Isp Scores", :type => :api do + + include Rack::Test::Methods + + it "valid score" do + post "/api/users/isp_scoring", { :some_data => 100} .to_json + last_response.status.should == 200 + last_response.body.should == "scoring recorded" + end + + it "invalid score - not json" do + post "/api/users/isp_scoring", "some data = 100" + last_response.status.should == 422 + last_response.body.include?("score invalid").should be_true + end +end diff --git a/web/spec/requests/users_api_spec.rb b/web/spec/requests/users_api_spec.rb index 27a1d28f9..da7f627b8 100644 --- a/web/spec/requests/users_api_spec.rb +++ b/web/spec/requests/users_api_spec.rb @@ -973,7 +973,6 @@ describe "User API", :type => :api do describe "hidden permissions" do it { other_user_response["email"].should be_nil } end - end end end