Commit 4393987

mo khan <mokha@cisco.com>
2014-02-14 02:03:42
create stock service to fetch the price of a stock.
1 parent f7b7ad7
Changed files (4)
lib/domain/stock.rb
@@ -0,0 +1,7 @@
+class Stock
+  attr_reader :name, :symbol, :price
+
+  def initialize(name, symbol, price)
+    @name, @symbol, @price = name, symbol, price
+  end
+end
lib/service/http_gateway.rb
@@ -0,0 +1,9 @@
+require 'net/http'
+
+class HttpGateway
+  def get(uri, params = {})
+    uri = URI(uri)
+    uri.query = URI.encode_www_form(params) if params.keys.any?
+    Net::HTTP.get_response(uri)
+  end
+end
lib/service/stock_service.rb
@@ -0,0 +1,18 @@
+
+class StockService
+  def initialize(http_gateway = HttpGateway.new)
+    @http_gateway = http_gateway
+  end
+
+  #http://download.finance.yahoo.com/d/quotes.csv?s=%40%5EDJI,GOOG&f=nsl1op&e=.csv
+  def fetch(symbol)
+    map_from(@http_gateway.get('http://download.finance.yahoo.com/d/quotes.csv', {s: 'GOOG', f: 'nsl1', e: '.csv'}))
+  end
+
+  private
+
+  def map_from(response)
+    name, symbol, price = response.body.split(',')
+    Stock.new(name, symbol, price.to_f)
+  end
+end
spec/service/stock_service_spec.rb
@@ -0,0 +1,14 @@
+require "spec_helper"
+
+describe StockService do
+  let(:sut) { StockService.new }
+
+  context "when given a known stock symbol" do
+    it "fetches the most recent price for a given stock" do
+      result = sut.fetch("GOOG")
+      result.symbol.should == "\"GOOG\""
+      result.price.should be > 0
+      result.name.should == "\"Google Inc.\""
+    end
+  end
+end