poptart 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +3 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +88 -0
- data/README.md +0 -0
- data/Rakefile +18 -0
- data/lib/poptart/.DS_Store +0 -0
- data/lib/poptart/model.rb +17 -0
- data/lib/poptart/question.rb +19 -0
- data/lib/poptart/request.rb +48 -0
- data/lib/poptart/root.rb +11 -0
- data/lib/poptart/survey.rb +37 -0
- data/lib/poptart/survey_question.rb +42 -0
- data/lib/poptart/user.rb +46 -0
- data/lib/poptart.rb +22 -0
- data/lib/version.rb +3 -0
- data/poptart.gemspec +31 -0
- data/spec/requests/answering_survey_questions_spec.rb +56 -0
- data/spec/requests/root_spec.rb +8 -0
- data/spec/requests/user_management_spec.rb +17 -0
- data/spec/spec_helper.rb +68 -0
- data/spec/vcr/answering/survey_questions_answers_a_survey_question.yml +1588 -0
- data/spec/vcr/answering/survey_questions_creates_and_returns_a_random_question_survey.yml +330 -0
- data/spec/vcr/answering/survey_questions_creates_and_returns_an_empty_survey.yml +272 -0
- data/spec/vcr/answering/survey_questions_finds_survey_question_for_id.yml +330 -0
- data/spec/vcr/poptart/root/returns_survey_links.yml +72 -0
- data/spec/vcr/poptart/user/answers_a_survey_question.yml +1580 -0
- data/spec/vcr/poptart/user/creates_a_user.yml +135 -0
- data/spec/vcr/poptart/user/creates_and_returns_a_random_question_survey.yml +341 -0
- data/spec/vcr/poptart/user/creates_and_returns_an_empty_survey.yml +272 -0
- data/spec/vcr/poptart/user/finds_survey_question_for_id.yml +327 -0
- data/spec/vcr/poptart/user/returns_a_user.yml +267 -0
- data/spec/vcr/user/management_creates_a_user.yml +135 -0
- data/spec/vcr/user/management_returns_a_user.yml +267 -0
- data/tags +72 -0
- metadata +266 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 865e91a53026b224e7979cf26cbc977dedaa826b
|
4
|
+
data.tar.gz: 602e1c41cbfd6dde4cdcc4bbab922c04d8186f73
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 78ac46448e35b3c2ea93fb1ceebf37621dae715e3bb212818e7ab587bd154ea33515c6e7dce8d66126d13a489b279383d5de77db8818b1f3e52bd65877d67548
|
7
|
+
data.tar.gz: 653ee77984bccdd17d6480ac8f4304191b847a76a09270fa007b32ad2b5d3cb374cb937dd6e80821a23b09df8324accef93386f46753f2aa981694c10afdfaad
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
.DS_Store
|
19
|
+
pkg
|
20
|
+
tags
|
21
|
+
.rbenv-version
|
22
|
+
Gemfile.lock
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.1.1
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
poptart (0.0.1)
|
5
|
+
activesupport (~> 3.2.13)
|
6
|
+
faraday
|
7
|
+
hashie
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activesupport (3.2.18)
|
13
|
+
i18n (~> 0.6, >= 0.6.4)
|
14
|
+
multi_json (~> 1.0)
|
15
|
+
addressable (2.3.5)
|
16
|
+
bourne (1.5.0)
|
17
|
+
mocha (>= 0.13.2, < 0.15)
|
18
|
+
celluloid (0.15.2)
|
19
|
+
timers (~> 1.1.0)
|
20
|
+
coderay (1.0.9)
|
21
|
+
crack (0.4.1)
|
22
|
+
safe_yaml (~> 0.9.0)
|
23
|
+
diff-lcs (1.2.4)
|
24
|
+
faraday (0.9.0)
|
25
|
+
multipart-post (>= 1.2, < 3)
|
26
|
+
ffi (1.9.0)
|
27
|
+
formatador (0.2.4)
|
28
|
+
guard (2.0.5)
|
29
|
+
formatador (>= 0.2.4)
|
30
|
+
listen (~> 2.0)
|
31
|
+
lumberjack (~> 1.0)
|
32
|
+
pry (>= 0.9.12)
|
33
|
+
thor (>= 0.18.1)
|
34
|
+
guard-rspec (4.0.0)
|
35
|
+
guard (~> 2.0)
|
36
|
+
rspec (~> 2.14)
|
37
|
+
hashie (2.1.1)
|
38
|
+
i18n (0.6.9)
|
39
|
+
listen (2.1.0)
|
40
|
+
celluloid (>= 0.15.2)
|
41
|
+
rb-fsevent (>= 0.9.3)
|
42
|
+
rb-inotify (>= 0.9)
|
43
|
+
lumberjack (1.0.4)
|
44
|
+
metaclass (0.0.1)
|
45
|
+
method_source (0.8.2)
|
46
|
+
mocha (0.14.0)
|
47
|
+
metaclass (~> 0.0.1)
|
48
|
+
multi_json (1.10.1)
|
49
|
+
multipart-post (2.0.0)
|
50
|
+
pry (0.9.12.2)
|
51
|
+
coderay (~> 1.0.5)
|
52
|
+
method_source (~> 0.8)
|
53
|
+
slop (~> 3.4)
|
54
|
+
rake (10.1.0)
|
55
|
+
rb-fsevent (0.9.3)
|
56
|
+
rb-inotify (0.9.2)
|
57
|
+
ffi (>= 0.5.0)
|
58
|
+
rspec (2.14.1)
|
59
|
+
rspec-core (~> 2.14.0)
|
60
|
+
rspec-expectations (~> 2.14.0)
|
61
|
+
rspec-mocks (~> 2.14.0)
|
62
|
+
rspec-core (2.14.5)
|
63
|
+
rspec-expectations (2.14.3)
|
64
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
65
|
+
rspec-mocks (2.14.3)
|
66
|
+
safe_yaml (0.9.7)
|
67
|
+
slop (3.4.6)
|
68
|
+
thor (0.18.1)
|
69
|
+
timers (1.1.0)
|
70
|
+
vcr (2.6.0)
|
71
|
+
webmock (1.14.0)
|
72
|
+
addressable (>= 2.2.7)
|
73
|
+
crack (>= 0.3.2)
|
74
|
+
|
75
|
+
PLATFORMS
|
76
|
+
ruby
|
77
|
+
|
78
|
+
DEPENDENCIES
|
79
|
+
bourne (= 1.5.0)
|
80
|
+
guard
|
81
|
+
guard-rspec
|
82
|
+
mocha (~> 0.14.0)
|
83
|
+
poptart!
|
84
|
+
pry
|
85
|
+
rake
|
86
|
+
rspec
|
87
|
+
vcr
|
88
|
+
webmock
|
data/README.md
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
|
5
|
+
task :default => :spec
|
6
|
+
|
7
|
+
desc "Run specs"
|
8
|
+
task :spec do
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
10
|
+
t.pattern = './spec/**/*_spec.rb'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
namespace :spec do
|
15
|
+
task :clean do
|
16
|
+
FileUtils.rm_rf(Dir.glob('spec/vcr/*'))
|
17
|
+
end
|
18
|
+
end
|
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Poptart
|
2
|
+
class Model
|
3
|
+
attr_accessor :id, :links, :params
|
4
|
+
|
5
|
+
def initialize(response)
|
6
|
+
if response.respond_to?(:has_key?)
|
7
|
+
@params = response
|
8
|
+
else
|
9
|
+
raise "Unauthorized"if response.status == 401
|
10
|
+
@params = JSON.parse(response.body)
|
11
|
+
end
|
12
|
+
|
13
|
+
@id = @params['id']
|
14
|
+
@links = Hashie::Mash.new(@params['_links'])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Poptart
|
2
|
+
class Question < Model
|
3
|
+
extend Poptart::Request
|
4
|
+
|
5
|
+
def self.all(params = {})
|
6
|
+
root = Poptart::Root.get_root
|
7
|
+
response = get(root.links.questions.href)
|
8
|
+
JSON.parse(response.body).map do |question|
|
9
|
+
if params[:type]
|
10
|
+
if question['question_type'] == params[:type]
|
11
|
+
new(question)
|
12
|
+
end
|
13
|
+
else
|
14
|
+
new(question)
|
15
|
+
end
|
16
|
+
end.compact
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Poptart
|
2
|
+
module Request
|
3
|
+
def get(url, headers = {})
|
4
|
+
connection.get do |req|
|
5
|
+
req.url(url)
|
6
|
+
req.headers['Content-Type'] = 'application/json'
|
7
|
+
req.headers['API-TOKEN'] = Poptart.api_token if Poptart.api_token
|
8
|
+
req.headers.merge!(headers)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def put(url, data, headers = {})
|
13
|
+
connection.put do |req|
|
14
|
+
req.url(url)
|
15
|
+
req.body = data.to_json if data
|
16
|
+
req.headers['Content-Type'] = 'application/json'
|
17
|
+
req.headers['API-TOKEN'] = Poptart.api_token if Poptart.api_token
|
18
|
+
req.headers.merge!(headers)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def post(url, data, headers = {})
|
23
|
+
connection.post do |req|
|
24
|
+
req.url(url)
|
25
|
+
req.body = data.to_json if data
|
26
|
+
req.headers['Content-Type'] = 'application/json'
|
27
|
+
req.headers['API-TOKEN'] = Poptart.api_token if Poptart.api_token
|
28
|
+
req.headers.merge!(headers)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def connection
|
33
|
+
return @connection if @connection
|
34
|
+
|
35
|
+
# if Rails.env.production?
|
36
|
+
# url = ""
|
37
|
+
# else
|
38
|
+
url = "http://localhost:3000"
|
39
|
+
# end
|
40
|
+
|
41
|
+
@connection = Faraday.new(:url => url) do |faraday|
|
42
|
+
faraday.request :url_encoded
|
43
|
+
faraday.response :logger
|
44
|
+
faraday.adapter Faraday.default_adapter
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/poptart/root.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Poptart
|
2
|
+
class Survey < Model
|
3
|
+
include Poptart::Request
|
4
|
+
attr_accessor :user_id, :survey_questions
|
5
|
+
|
6
|
+
def initialize(response)
|
7
|
+
super
|
8
|
+
@user_id = params['user_id']
|
9
|
+
|
10
|
+
@survey_questions = params['survey_questions'].map do |survey_question|
|
11
|
+
if survey_question['type'] == 'BooleanQuestion'
|
12
|
+
BooleanQuestion.new(survey_question)
|
13
|
+
else
|
14
|
+
SurveyQuestion.new(survey_question)
|
15
|
+
end
|
16
|
+
end.sort_by { |survey_question| survey_question.id }
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_question(question)
|
20
|
+
response = post("#{links.self.href}/survey_questions",
|
21
|
+
{ survey_question: { question_id: question.id } } )
|
22
|
+
response.status == 201
|
23
|
+
end
|
24
|
+
|
25
|
+
def survey_question_for_id(id)
|
26
|
+
survey_questions.find do |survey_question|
|
27
|
+
survey_question.id == id.to_i
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def next_question
|
32
|
+
if links['next']
|
33
|
+
SurveyQuestion.for_url(links['next']['href'])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Poptart
|
2
|
+
class SurveyQuestion < Model
|
3
|
+
extend Poptart::Request
|
4
|
+
include Poptart::Request
|
5
|
+
|
6
|
+
attr_accessor :text, :answer, :type, :responses
|
7
|
+
|
8
|
+
def initialize(response)
|
9
|
+
super
|
10
|
+
@text = params['text']
|
11
|
+
@answer = params['answer']
|
12
|
+
@type = params['type']
|
13
|
+
@freeform = params['freeform']
|
14
|
+
@responses = params['responses']
|
15
|
+
end
|
16
|
+
|
17
|
+
def boolean?
|
18
|
+
type == "boolean"
|
19
|
+
end
|
20
|
+
|
21
|
+
def multiple?
|
22
|
+
type == "multiple"
|
23
|
+
end
|
24
|
+
|
25
|
+
def range?
|
26
|
+
type == "range"
|
27
|
+
end
|
28
|
+
|
29
|
+
def time?
|
30
|
+
type == "time"
|
31
|
+
end
|
32
|
+
|
33
|
+
def freeform?
|
34
|
+
@freeform == true
|
35
|
+
end
|
36
|
+
|
37
|
+
def submit
|
38
|
+
response = put(links.submit.href, { id: id, survey_question: { answer: answer} })
|
39
|
+
response.status == 204
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/poptart/user.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Poptart
|
2
|
+
class User < Model
|
3
|
+
extend Poptart::Request
|
4
|
+
include Poptart::Request
|
5
|
+
attr_accessor :external_user_id, :token
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
super
|
9
|
+
@external_user_id = params['external_user_id']
|
10
|
+
@token = params['token']
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create(external_user_id)
|
14
|
+
root = Poptart::Root.get_root
|
15
|
+
response = post(root.links.users.href, user: { external_user_id: external_user_id })
|
16
|
+
Poptart::User.new(response)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.for_id(external_user_id)
|
20
|
+
root = Poptart::Root.get_root
|
21
|
+
response = get("#{root.links.users.href}/#{external_user_id}")
|
22
|
+
Poptart::User.new(response)
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_survey
|
26
|
+
root = Poptart::Root.get_root
|
27
|
+
response = post(root.links.surveys.href, survey: { user_id: id })
|
28
|
+
Poptart::Survey.new(response)
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_random_survey
|
32
|
+
response = post("/api/surveys?random=true", survey: { user_id: id })
|
33
|
+
Poptart::Survey.new(response)
|
34
|
+
end
|
35
|
+
|
36
|
+
def survey_for_id(id)
|
37
|
+
response = get("/api/surveys/#{id}")
|
38
|
+
Poptart::Survey.new(response)
|
39
|
+
end
|
40
|
+
|
41
|
+
def survey_for_url(url)
|
42
|
+
response = get(url)
|
43
|
+
Survey.new.extend(SurveyRepresenter).from_json(response.body)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/poptart.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Poptart
|
2
|
+
def self.api_token=(token)
|
3
|
+
@token = token
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.api_token
|
7
|
+
@token
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'faraday'
|
12
|
+
require 'json'
|
13
|
+
require 'hashie'
|
14
|
+
|
15
|
+
require_relative 'version'
|
16
|
+
require_relative 'poptart/model'
|
17
|
+
require_relative 'poptart/request'
|
18
|
+
require_relative 'poptart/root'
|
19
|
+
require_relative 'poptart/survey'
|
20
|
+
require_relative 'poptart/survey_question'
|
21
|
+
require_relative 'poptart/question'
|
22
|
+
require_relative 'poptart/user'
|
data/lib/version.rb
ADDED
data/poptart.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path('../lib/version', __FILE__)
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.name = 'poptart'
|
7
|
+
gem.version = Poptart::VERSION
|
8
|
+
gem.authors = ['Austen Ito']
|
9
|
+
gem.email = ['austen.dev@gmail.com']
|
10
|
+
gem.homepage = 'https://github.com/austenito/poptart'
|
11
|
+
gem.summary = 'The API client gem for the happines service'
|
12
|
+
gem.description = gem.summary
|
13
|
+
gem.files = `git ls-files`.split("\n")
|
14
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
gem.require_paths = ['lib']
|
16
|
+
gem.license = 'MIT'
|
17
|
+
|
18
|
+
gem.add_dependency 'activesupport', "~> 3.2.13"
|
19
|
+
gem.add_dependency 'hashie'
|
20
|
+
gem.add_dependency 'faraday'
|
21
|
+
|
22
|
+
gem.add_development_dependency 'bourne', "1.5.0"
|
23
|
+
gem.add_development_dependency 'guard'
|
24
|
+
gem.add_development_dependency 'guard-rspec'
|
25
|
+
gem.add_development_dependency 'mocha', "~> 0.14.0"
|
26
|
+
gem.add_development_dependency 'pry'
|
27
|
+
gem.add_development_dependency 'rspec'
|
28
|
+
gem.add_development_dependency 'rake'
|
29
|
+
gem.add_development_dependency 'vcr'
|
30
|
+
gem.add_development_dependency 'webmock'
|
31
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Answering survey questions', :vcr do
|
4
|
+
it "creates and returns an empty survey" do
|
5
|
+
user = Poptart::User.create(42)
|
6
|
+
survey = user.create_survey
|
7
|
+
survey.user_id.should == user.id
|
8
|
+
survey.survey_questions.count.should == 0
|
9
|
+
end
|
10
|
+
|
11
|
+
it "creates and returns a random question survey" do
|
12
|
+
user = Poptart::User.create(42)
|
13
|
+
survey = user.create_random_survey
|
14
|
+
survey.user_id.should == user.id
|
15
|
+
survey.survey_questions.count.should == 5
|
16
|
+
end
|
17
|
+
|
18
|
+
it "answers a survey question" do
|
19
|
+
user = Poptart::User.create(42)
|
20
|
+
survey = user.create_random_survey
|
21
|
+
survey_question = survey.survey_questions.first
|
22
|
+
survey_question.text.should be
|
23
|
+
survey_question.answer = "foo"
|
24
|
+
survey_question.submit.should be
|
25
|
+
|
26
|
+
survey = user.survey_for_id(survey.id)
|
27
|
+
survey.survey_questions.first.answer.should == "foo"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "answers a survey question", record: :all do
|
31
|
+
boolean_questions = Poptart::Question.all(type: 'boolean')
|
32
|
+
user = Poptart::User.create(42)
|
33
|
+
survey = user.create_survey
|
34
|
+
survey.add_question(boolean_questions.first).should be
|
35
|
+
|
36
|
+
survey = user.survey_for_id(survey.id)
|
37
|
+
survey.survey_questions.count.should == 1
|
38
|
+
survey_question = survey.survey_questions.first
|
39
|
+
survey_question.responses.should == ['t', 'f']
|
40
|
+
survey_question.type.should == 'boolean'
|
41
|
+
|
42
|
+
survey_question.answer = 'true'
|
43
|
+
survey_question.submit.should be
|
44
|
+
|
45
|
+
survey = user.survey_for_id(survey.id)
|
46
|
+
survey.survey_questions.first.answer.should == 'true'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "finds survey question for id" do
|
50
|
+
user = Poptart::User.create(42)
|
51
|
+
survey = user.create_random_survey
|
52
|
+
first_survey_question = survey.survey_questions.first
|
53
|
+
survey_question = survey.survey_question_for_id(first_survey_question.id)
|
54
|
+
first_survey_question.should == survey_question
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "User Management", :vcr do
|
4
|
+
it "creates a user" do
|
5
|
+
user = Poptart::User.create(42)
|
6
|
+
user.id.should be
|
7
|
+
user.external_user_id.should == 42
|
8
|
+
user.token.should be
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns a user" do
|
12
|
+
user = Poptart::User.create(43)
|
13
|
+
other_user = Poptart::User.for_id(user.external_user_id)
|
14
|
+
user.id.should == other_user.id
|
15
|
+
user.external_user_id.should == other_user.external_user_id
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require_relative "../lib/poptart"
|
2
|
+
|
3
|
+
require 'mocha/api'
|
4
|
+
require 'bourne'
|
5
|
+
require 'vcr'
|
6
|
+
|
7
|
+
require 'active_support/inflector'
|
8
|
+
require 'pry/test/helper'
|
9
|
+
|
10
|
+
RSpec.configure do |c|
|
11
|
+
c.mock_with :mocha
|
12
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
13
|
+
|
14
|
+
c.around(:each, :vcr) do |example|
|
15
|
+
name = example.metadata[:full_description].split(/\s+/, 2).join("/").underscore.gsub(/[^\w\/]+/, "_")
|
16
|
+
options = {}
|
17
|
+
options[:record] = example.metadata[:record] if example.metadata[:record]
|
18
|
+
VCR.use_cassette(name, options) { example.call }
|
19
|
+
end
|
20
|
+
|
21
|
+
include PryTestHelpers
|
22
|
+
end
|
23
|
+
|
24
|
+
VCR.configure do |c|
|
25
|
+
c.cassette_library_dir = 'spec/vcr'
|
26
|
+
c.hook_into :webmock
|
27
|
+
|
28
|
+
c.default_cassette_options = {
|
29
|
+
:record => :once,
|
30
|
+
:decode_compressed_response => true,
|
31
|
+
# Because psych is binary encoding response headers marked with ASCII-8BIT
|
32
|
+
# https://groups.google.com/forum/?fromgroups#!topic/vcr-ruby/2sKrJa86ktU
|
33
|
+
# And syck's output is much easier to read
|
34
|
+
:serialize_with => :psych,
|
35
|
+
}
|
36
|
+
|
37
|
+
# Pretty print your json so it's not all on one line
|
38
|
+
# From discussion here: https://github.com/myronmarston/vcr/pull/147
|
39
|
+
# https://gist.github.com/26edfe7669cc7b85e164
|
40
|
+
c.before_record do |i|
|
41
|
+
type = Array(i.response.headers['Content-Type']).join(',').split(';').first
|
42
|
+
code = i.response.status.code
|
43
|
+
|
44
|
+
if type =~ /[\/+]json$/ or 'text/javascript' == type
|
45
|
+
begin
|
46
|
+
data = JSON.parse i.response.body
|
47
|
+
rescue
|
48
|
+
if code != 404
|
49
|
+
puts
|
50
|
+
warn "VCR: JSON parse error for Content-type #{type}"
|
51
|
+
warn "Your unparseable json is: " + i.response.body.inspect
|
52
|
+
puts
|
53
|
+
end
|
54
|
+
else
|
55
|
+
i.response.body = JSON.pretty_generate data
|
56
|
+
i.response.update_content_length_header
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class String
|
63
|
+
def unindent
|
64
|
+
gsub(/^#{scan(/^\s*/).min_by{|l|l.length}}/, "")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
Poptart.api_token = "testing"
|