diff --git a/lib/ruby-stackoverflow/client/response_data.rb b/lib/ruby-stackoverflow/client/response_data.rb index 366995c..82c247d 100644 --- a/lib/ruby-stackoverflow/client/response_data.rb +++ b/lib/ruby-stackoverflow/client/response_data.rb @@ -1,17 +1,27 @@ module RubyStackoverflow class Client class ResponseData - attr_reader :data, :has_more, :error + attr_reader :has_more, :error, :raw_response, :raw_data, :quota_max, :quota_remaining, :backoff def initialize(response, klass) + @raw_response = response if response[:items].nil? @error = StackoverflowError.new(response) else - @data = format_data(response[:items], klass) + @klass = klass + @raw_data = response[:items] @has_more = response[:has_more] + @quota_max = response[:quota_max] + @quota_remaining = response[:quota_remaining] + @backoff = response[:backoff] end end + def data + return nil if @raw_data.nil? + @data ||= format_data(@raw_data.clone, @klass) + end + def format_data(data, klass) eval(klass.capitalize).parse_data(data) end diff --git a/lib/ruby-stackoverflow/configuration.rb b/lib/ruby-stackoverflow/configuration.rb index 2152399..295ebdc 100644 --- a/lib/ruby-stackoverflow/configuration.rb +++ b/lib/ruby-stackoverflow/configuration.rb @@ -1,7 +1,7 @@ module RubyStackoverflow class Configuration - attr_accessor :client_id, :client_sceret , :client_key, :access_token, :api_url + attr_accessor :client_id, :client_secret , :client_key, :access_token, :api_url def self.api_url 'https://api.stackexchange.com/2.2/' diff --git a/spec/ruby-stackoverflow/response_data_spec.rb b/spec/ruby-stackoverflow/response_data_spec.rb new file mode 100644 index 0000000..bd68572 --- /dev/null +++ b/spec/ruby-stackoverflow/response_data_spec.rb @@ -0,0 +1,16 @@ +require 'spec_helper' +require 'json' + +module RubyStackoverflow + describe Client::ResponseData do + it 'should response data fields' do + data = JSON.parse(fixture("users.json").read, {:symbolize_names => true}) + response = Client::ResponseData.new(data, 'user') + expect(response.data.count).to eq(1) + expect(response.raw_data.count).to eq(1) + expect(response.quota_max).to eq(10000) + expect(response.quota_remaining).to eq(9996) + expect(response.backoff).to be_nil + end + end +end