Skip to content

Instantly share code, notes, and snippets.

View thiagoa's full-sized avatar

Thiago Araújo Silva thiagoa

  • thoughtbot
  • Natal / RN - Brazil
View GitHub Profile
<!-- app/views/home/index.html.erb -->
<div data-twitter-app>
<div data-tweets>
</div>
</div>
@thiagoa
thiagoa / twitter_timeline_spec.rb
Created September 28, 2016 13:57
Twitter Widget - Pending feature spec
# spec/features/twitter_timeline_spec.rb
require 'feature_helper'
RSpec.feature 'twitter timeline' do
scenario 'a user views a twitter timeline' do
pending
visit root_path
within '[data-twitter-app]' do
def stub_timeline(id:, returns:)
instance = instance_double(TwitterTimelineHub)
allow(instance).to receive(:call).with(id).once.and_return(returns)
allow(TwitterTimelineHub).to receive(:new).once.and_return(instance)
end
def stub_result(**attrs)
instance_double(TwitterTimelineHub::Result, **attrs)
end
@thiagoa
thiagoa / twitter_timeline_hub.rb
Last active October 10, 2016 15:29
Empty twitter timeline hub
# app/models/twitter_timeline_hub.rb
class TwitterTimelineHub
Result = Struct.new(:tweets, :status)
def call(id)
end
end
@thiagoa
thiagoa / twitter_timeline_controller_spec.rb
Last active October 3, 2016 18:17
Controller when timeline is found
require 'rails_helper'
RSpec.describe TwitterTimelineController, type: :request do
def stub_timeline(id:, returns:)
instance = instance_double(TwitterTimelineHub)
allow(instance).to receive(:call).with(id).once.and_return(returns)
allow(TwitterTimelineHub).to receive(:new).once.and_return(instance)
end
@thiagoa
thiagoa / stub_timeline_example.rb
Last active October 3, 2016 18:03
Stub timeline example
result = stub_result(
status: :ok,
tweets: [
‘screen_name’ => ‘joe’,
‘text’ => ‘Hi @bob, I am Joe!’,
‘mentions’ => [‘bob’],
‘created_at’ => Time.new(2016, 1, 1)
]
)
@thiagoa
thiagoa / twitter_timeline_hub_example.rb
Last active October 17, 2016 13:41
Twitter Timeline Hub example
twitter_timeline_hub = TwitterTimelineHub.new
# returns a struct with results, which include Tweets
result = twitter_timeline_hub.call(‘thiagoaraujos’)
@thiagoa
thiagoa / routes.rb
Created October 3, 2016 18:34
New routes file
# config/routes.rb
Rails.application.routes.draw do
root to: 'home#index'
resources :twitter_timeline, only: %i(show)
end
@thiagoa
thiagoa / twitter_timeline_controller.rb
Created October 3, 2016 18:36
First version of twitter timeline controller
# app/controllers/twitter_timeline_controller.rb
class TwitterTimelineController < ApplicationController
def show
twitter_timeline_hub = TwitterTimelineHub.new
result = twitter_timeline_hub.call(params[:id])
render json: { tweets: result.tweets, status: result.status }
end
end
@thiagoa
thiagoa / twitter_client_factory_spec.rb
Last active October 10, 2016 16:02
First twitter client factory spec
# spec/models/twitter_client_factory_spec.rb
require 'twitter'
require 'spec_helper'
require_relative '../../app/models/twitter_client_factory'
RSpec.describe TwitterClientFactory do
describe '#call' do
it 'builds a twitter client class with the passed config' do
instance = TwitterClientFactory.new.call(
'consumer_key' => 'ck',