diff --git a/Gemfile b/Gemfile index b5eb2a20..44464793 100644 --- a/Gemfile +++ b/Gemfile @@ -24,7 +24,7 @@ gem 'strong_parameters' gem 'swfobject-rails' gem 'tddium' gem 'thin' -gem 'yam', '0.0.6' +gem 'yam', '~> 2.0.0' gem 'zclip-rails' # Gems used only for assets, not required in production environments by default. diff --git a/Gemfile.lock b/Gemfile.lock index 410c1c16..eefd14e3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -28,7 +28,7 @@ GEM activesupport (3.2.16) i18n (~> 0.6, >= 0.6.4) multi_json (~> 1.0) - addressable (2.3.3) + addressable (2.3.5) airbrake (3.1.8) activesupport builder @@ -96,11 +96,9 @@ GEM factory_girl_rails (4.2.1) factory_girl (~> 4.2.0) railties (>= 3.0.0) - faraday (0.8.5) - multipart-post (~> 1.1) - faraday_middleware (0.9.0) - faraday (>= 0.7.4, < 0.9) - ffi (1.9.3) + faraday (0.8.8) + multipart-post (~> 1.2.0) + ffi (1.4.0) flutie (1.3.3) foreman (0.61.0) thor (>= 0.13.6) @@ -144,9 +142,9 @@ GEM jquery-rails (2.2.1) railties (>= 3.0, < 5.0) thor (>= 0.14, < 2.0) - json (1.7.7) - jwt (0.1.5) - multi_json (>= 1.0) + json (1.8.1) + jwt (0.1.8) + multi_json (>= 1.5) launchy (2.2.0) addressable (~> 2.3) listen (0.7.3) @@ -160,15 +158,16 @@ GEM mime-types (1.25.1) multi_json (1.8.2) multi_xml (0.5.3) - multipart-post (1.1.5) + multipart-post (1.2.0) newrelic_rpm (3.5.6.55) nokogiri (1.5.6) - oauth2 (0.8.0) + oauth2 (0.8.1) faraday (~> 0.8) httpauth (~> 0.1) jwt (~> 0.1.4) multi_json (~> 1.0) rack (~> 1.2) + oj (2.0.14) omniauth (1.1.3) hashie (~> 1.2) rack @@ -221,6 +220,8 @@ GEM rake (10.1.0) rdoc (3.12.2) json (~> 1.4) + rest-client (1.6.7) + mime-types (>= 1.16) rspec (2.14.1) rspec-core (~> 2.14.0) rspec-expectations (~> 2.14.0) @@ -305,13 +306,11 @@ GEM websocket (1.0.7) xpath (1.0.0) nokogiri (~> 1.3) - yam (0.0.6) - faraday (~> 0.8.1) - faraday_middleware (~> 0.9.0) - hashie (~> 1.2.0) - json (~> 1.7.6) + yam (2.0.0) + addressable (~> 2.3.3) multi_json (~> 1.3) - oauth2 (~> 0.8.0) + oj (~> 2.0.10) + rest-client (~> 1.6.7) zclip-rails (0.0.1) jquery-rails (>= 1.0.17) railties (~> 3.1) @@ -370,5 +369,5 @@ DEPENDENCIES timecop turnip (= 1.0) uglifier (>= 1.0) - yam (= 0.0.6) + yam (~> 2.0.0) zclip-rails diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index c4a5cea9..3d4cd07f 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -49,7 +49,7 @@ def find_or_instantiate_user end def refresh_user_data_from_yammer(user) - yammer_user_data = user.yammer_client.get("/users/#{omniauth[:uid]}") + yammer_user_data = user.yammer_client.get_user(omniauth[:uid]).body YammerUserResponseTranslator. new(yammer_user_data, user). translate. diff --git a/app/controllers/yammer_user_invitations_controller.rb b/app/controllers/yammer_user_invitations_controller.rb index 6bde7a60..46876838 100644 --- a/app/controllers/yammer_user_invitations_controller.rb +++ b/app/controllers/yammer_user_invitations_controller.rb @@ -23,7 +23,7 @@ def args end def create_user_from(invitee_id) - invitee_data = owner_yammer_client.get("/users/#{invitee_id}") + invitee_data = owner_yammer_client.get_user(invitee_id).body User.new.tap do |user| YammerUserResponseTranslator. new(invitee_data, user). diff --git a/app/jobs/activity_creator_job.rb b/app/jobs/activity_creator_job.rb index e0f5a6d2..55512a38 100644 --- a/app/jobs/activity_creator_job.rb +++ b/app/jobs/activity_creator_job.rb @@ -19,7 +19,7 @@ def user end def post_yammer_activity - user.yammer_client.post('/activity', json_payload) + user.yammer_client.create_activity(json_payload) end def json_payload diff --git a/app/models/invitee_builder.rb b/app/models/invitee_builder.rb index b0786b04..a273988d 100644 --- a/app/models/invitee_builder.rb +++ b/app/models/invitee_builder.rb @@ -31,10 +31,7 @@ def get_user_from_yammer end def get_yammer_user_by_email - @event.owner. - yammer_client. - get('/users/by_email', email: @email). - try(:first) + @event.owner.yammer_client.get_user_by_email(@email).try(:body).try(:first) end def create_guest diff --git a/app/models/user.rb b/app/models/user.rb index fbf195b3..3bdc71a3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,5 @@ +require 'yammer' + class User < ActiveRecord::Base attr_encrypted :access_token, key: ENV['ACCESS_TOKEN_ENCRYPTION_KEY'] @@ -90,7 +92,7 @@ def yammer_client raise 'Yammer client requires an access_token!' end - @yam ||= Yam.new(access_token, yammer_endpoint) + @yam ||= Yammer::Client.new(access_token: access_token) end private @@ -107,18 +109,6 @@ def messenger(sender) end end - def yammer_endpoint - "#{yammer_host}/api/v1/" - end - - def yammer_host - if yammer_staging - Rails.configuration.yammer_staging_host - else - Rails.configuration.yammer_host - end - end - def strip_email_whitespace self.email = email.try(:strip) end diff --git a/app/models/yammer_messenger.rb b/app/models/yammer_messenger.rb index 9b267bae..fff8d882 100644 --- a/app/models/yammer_messenger.rb +++ b/app/models/yammer_messenger.rb @@ -35,7 +35,7 @@ def notify(event, message) private def deliver - @sender.yammer_client.post('/messages', request_params) + @sender.yammer_client.create_message(message_body, request_params) end def request_params diff --git a/app/models/yammer_user_response_translator.rb b/app/models/yammer_user_response_translator.rb index 67e8f220..1ea26c2e 100644 --- a/app/models/yammer_user_response_translator.rb +++ b/app/models/yammer_user_response_translator.rb @@ -19,11 +19,34 @@ def translate private + # def parse_email_from_response + # if @response && @response[:contact] && @response[:contact][:email_addresses] + # primary_email = @response[:contact][:email_addresses]. + # detect{ |address| address[:type] == 'primary' } + # primary_email && primary_email[:address] + # end + # end + + def parse_email_from_response - if @response && @response['contact'] && @response['contact']['email_addresses'] - primary_email = @response['contact']['email_addresses']. - detect{ |address| address['type'] == 'primary' } - primary_email && primary_email['address'] + if valid_response? + primary_email && primary_email_address end end + + def valid_response? + @response && @response[:contact] && @response[:contact][:email_addresses] + end + + def primary_email + all_email_addresses.detect{ |address| address[:type] == 'primary' } + end + + def all_email_addresses + @response[:contact][:email_addresses] + end + + def primary_email_address + primary_email[:address] + end end diff --git a/spec/acceptance/owner_can_invite_users_using_the_viral_invite.feature b/spec/acceptance/owner_can_invite_users_using_the_viral_invite.feature index f978af04..ef188a70 100644 --- a/spec/acceptance/owner_can_invite_users_using_the_viral_invite.feature +++ b/spec/acceptance/owner_can_invite_users_using_the_viral_invite.feature @@ -63,7 +63,7 @@ Feature: Multiple invitations And I invite the Yammer user "Joe Smith" to "Clown party" from the multiple invite page And I remove "Joe Smith" from the list of invited users When I press the "Invite" button for the "Clown party" event - Then "Joe Smith" should receive 0 private message + Then "Joe Smith" should receive 0 private messages And I should not see "Joe Smith" in the list of invitees @javascript diff --git a/spec/acceptance/step_definitions/invitation_steps.rb b/spec/acceptance/step_definitions/invitation_steps.rb index 12a4ecc3..f6c057fb 100644 --- a/spec/acceptance/step_definitions/invitation_steps.rb +++ b/spec/acceptance/step_definitions/invitation_steps.rb @@ -56,14 +56,14 @@ step 'someone invites :email to :event_name' do |email, event_name| event = Event.find_by_name!(event_name) - invitation = Invitation.new(event: event) - InviteeBuilder.new.find_user_by_email_or_create_guest(email, event).save + user = InviteeBuilder.new(email, event).find_user_by_email_or_create_guest + create(:invitation, event: event, invitee: user) end step ':guest_email was invited to the event :event_name' do |guest_email, event_name| event = Event.find_by_name!(event_name) - invitation = Invitation.new(event: event) - InviteeBuilder.new(guest_email, event).find_user_by_email_or_create_guest.save + user = InviteeBuilder.new(guest_email, event).find_user_by_email_or_create_guest + create(:invitation, event: event, invitee: user) end # Multi-invite page @@ -114,7 +114,7 @@ end step ':first_item should appear before :second_item' do |first_item, second_item| - expect(page.body).to match /#{first_item}.*#{second_item}/m + expect(page.body).to match(/#{first_item}.*#{second_item}/m) end step ':name should receive a private message' do |name| diff --git a/spec/acceptance/step_definitions/yammer_user_steps.rb b/spec/acceptance/step_definitions/yammer_user_steps.rb index 11eed1b0..f58b7238 100644 --- a/spec/acceptance/step_definitions/yammer_user_steps.rb +++ b/spec/acceptance/step_definitions/yammer_user_steps.rb @@ -3,25 +3,25 @@ end step 'a Yammer user exists named :name with email :email' do |name, email| - yammer = Yam.new('123', 'https://www.yammer.com/api/v1') + yammer = Yammer::Client.new(access_token: '123') FakeYammer.yammer_user_name = name FakeYammer.yammer_email = email - users = yammer.get('/users/by_email', email: email) - expect(users[0]['id']).to be_present + users = yammer.get_user_by_email(email).body + expect(users[0][:id]).to be_present end step 'no Yammer user exists with email :email' do |email| - yammer = Yam.new('123', 'https://www.yammer.com/api/v1') + yammer = Yammer::Client.new(access_token: '123') FakeYammer.yammer_user_name = 'Wrong Name' FakeYammer.yammer_email = email + '.fake' - users = yammer.get('/users/by_email', email: email) - expect(users.first).to_not be_present + users = yammer.get_user_by_email(email).body + expect(users).to_not be_present end step ':email signs up for Yammer as :name' do |email, name| - yammer = Yam.new('123', 'https://www.yammer.com/api/v1') + yammer = Yammer::Client.new(access_token: '123') FakeYammer.yammer_user_name = name FakeYammer.yammer_email = email - users = yammer.get('/users/by_email', email: email) - expect(users[0]['id']).to be_present + users = yammer.get_user_by_email(email).body + expect(users[0][:id]).to be_present end diff --git a/spec/controllers/invitations_controller_spec.rb b/spec/controllers/invitations_controller_spec.rb index d22a0c62..09c35a14 100644 --- a/spec/controllers/invitations_controller_spec.rb +++ b/spec/controllers/invitations_controller_spec.rb @@ -80,7 +80,7 @@ it 'creates multiple invitations for the correct users' do event_creator = create_user_and_sign_in event = create(:event, owner: event_creator) - invitation = double(invite: nil, valid?: true) + invitation = double(invite: nil, invite: nil, valid?: true) emails = 'guest1@example.com, guest2@example.com' Invitation.stub(new: invitation) invitee = double diff --git a/spec/jobs/activity_creator_job_spec.rb b/spec/jobs/activity_creator_job_spec.rb index ae526922..f8f59c85 100644 --- a/spec/jobs/activity_creator_job_spec.rb +++ b/spec/jobs/activity_creator_job_spec.rb @@ -23,13 +23,13 @@ event = build_stubbed(:event) User.stub(find: user) Event.stub(find: event) - yam_session_stub = double(post: nil) - Yam.stub(new: yam_session_stub) + yam_session = double(create_activity: nil) + Yammer::Client.stub(new: yam_session) ActivityCreatorJob.new(user, action, event).perform - expect(yam_session_stub).to have_received(:post). - with('/activity', expected_json(event)) + expect(yam_session).to have_received(:create_activity). + with(expected_json(event)) end private diff --git a/spec/jobs/vote_created_job_spec.rb b/spec/jobs/vote_created_job_spec.rb index 60ecfe96..0769c6fb 100644 --- a/spec/jobs/vote_created_job_spec.rb +++ b/spec/jobs/vote_created_job_spec.rb @@ -70,7 +70,7 @@ VoteCreatedJob.new.perform - expect(voter.yammer_client.oauth_token).to eq voter.access_token + expect(voter.yammer_client.access_token).to eq voter.access_token end end diff --git a/spec/models/invitee_builder_spec.rb b/spec/models/invitee_builder_spec.rb index e296d85d..9068181d 100644 --- a/spec/models/invitee_builder_spec.rb +++ b/spec/models/invitee_builder_spec.rb @@ -27,13 +27,13 @@ it 'searches for existing Yammer users' do invitation = create(:invitation) invitee_email = 'ralph@example.com' - yam_client = double(get: nil) - Yam.stub(new: yam_client) + yam_client = double(get_user_by_email: nil) + Yammer::Client.stub(new: yam_client) InviteeBuilder.new(invitee_email, invitation.event). find_user_by_email_or_create_guest - expect(yam_client).to have_received(:get) + expect(yam_client).to have_received(:get_user_by_email) end it 'creates a User if it finds an existing Yammer user' do diff --git a/spec/models/yammer_user_response_translator_spec.rb b/spec/models/yammer_user_response_translator_spec.rb index 2e762b21..b82db488 100644 --- a/spec/models/yammer_user_response_translator_spec.rb +++ b/spec/models/yammer_user_response_translator_spec.rb @@ -10,11 +10,13 @@ web_url: 'http://web_url', network_id: 2, network_name: 'network', - 'contact' => { - 'email_addresses' => [{ - 'type' => 'primary', - 'address' => 'a@b.com' - }] + contact: { + email_addresses: [ + { + type: 'primary', + address: 'a@b.com' + } + ] } } user = User.new diff --git a/spec/support/fake_yammer.rb b/spec/support/fake_yammer.rb index 51b133f2..fdf325a0 100644 --- a/spec/support/fake_yammer.rb +++ b/spec/support/fake_yammer.rb @@ -25,7 +25,7 @@ def self.reset end post '/api/v1/messages' do - self.access_token = params[:access_token] + self.access_token = self.request.env["HTTP_AUTHORIZATION"].split.last self.group_id = params[:group_id] self.message = params[:body] self.messages_endpoint_hits += 1 @@ -37,8 +37,6 @@ def self.reset if params[:email] == self.yammer_email json_for_user_email_search - else - "[ ]" end end