diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..d963c40 --- /dev/null +++ b/Guardfile @@ -0,0 +1,11 @@ +guard 'rspec', cmd: 'bundle exec rspec --color' do + # watch /lib/ files + watch(%r{^lib/(.+).rb$}) do |m| + "spec/#{m[1]}_spec.rb" + end + + # watch /spec/ files + watch(%r{^spec/(.+).rb$}) do |m| + "spec/#{m[1]}.rb" + end +end diff --git a/README.md b/README.md index 68bca99..af3cae1 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Or install it yourself as: ## Usage ```ruby -github = blanket("https://api.github.com") +github = Blanket.wrap("https://api.github.com") # Get some user's info github.users('inf0rmer').get diff --git a/Rakefile b/Rakefile index 809eb56..8e8c0c3 100644 --- a/Rakefile +++ b/Rakefile @@ -1,2 +1,10 @@ -require "bundler/gem_tasks" +require 'rspec/core/rake_task' +require 'bundler/gem_tasks' +# Default directory to look in is `/specs` +# Run with `rake spec` +RSpec::Core::RakeTask.new(:spec) do |task| + task.rspec_opts = ['--color', '--format', 'nested'] +end + +task :default => :spec diff --git a/blanket.gemspec b/blanket.gemspec index e298340..2d270cf 100644 --- a/blanket.gemspec +++ b/blanket.gemspec @@ -17,7 +17,16 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] + + spec.add_dependency "httparty" spec.add_development_dependency "bundler", "~> 1.7" spec.add_development_dependency "rake", "~> 10.0" + spec.add_development_dependency "rspec" + spec.add_development_dependency "rspec-nc" + spec.add_development_dependency "guard" + spec.add_development_dependency "guard-rspec" + spec.add_development_dependency "pry" + spec.add_development_dependency "pry-remote" + spec.add_development_dependency "pry-nav" end diff --git a/lib/blanket.rb b/lib/blanket.rb index 53ad604..ae847a9 100644 --- a/lib/blanket.rb +++ b/lib/blanket.rb @@ -1,5 +1,37 @@ require "blanket/version" +require 'httparty' module Blanket - # Your code goes here... + def self.wrap(base_uri) + Blanket.new base_uri + end + + class Blanket + def initialize(base_uri) + @base_uri = base_uri + @uri_parts = [] + end + + def get + HTTParty.get uri_from_parts(@base_uri.clone, @uri_parts.clone) + @uri_parts = [] + end + + def respond_to?(method, include_private = false) + true + end + + def method_missing(method, *args, &block) + @uri_parts << method + self + end + + private + + def uri_from_parts(base_uri, parts) + parts.inject(base_uri) do |memo, part| + memo << "/#{part}" + end + end + end end diff --git a/spec/blanket_spec.rb b/spec/blanket_spec.rb new file mode 100644 index 0000000..c48db3b --- /dev/null +++ b/spec/blanket_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe Blanket do + describe '#get' do + let :api do + Blanket::wrap("http://api.example.org") + end + + before :each do + allow(HTTParty).to receive(:get) + end + + it 'GETs a simple resource' do + api.users.get() + + expect(HTTParty).to have_received(:get).with("http://api.example.org/users") + end + + it 'resets after performing a request' do + api.users.get() + api.videos.get() + + expect(HTTParty).to have_received(:get).with("http://api.example.org/videos") + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..b959844 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,2 @@ +require 'pry' +require 'Blanket'