Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
.rspec
Gemfile.lock
*.swp
.bundle
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ gem install tempodb-1.0.0.gem
require 'tempodb'

client = TempoDB::Client.new('database_id', 'api_key', 'api_secret')
client.create_series("temp-1')
client.create_series('temp-1')
client.list_series
```

Expand Down
38 changes: 38 additions & 0 deletions lib/tempodb.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,50 @@
require 'rubygems'

require 'tempodb/client'
require 'tempodb/config'

module TempoDB
API_HOST = "api.tempo-db.com"
API_PORT = 443
API_VERSION = "v1"

TRUSTED_CERT_FILE = File.join(File.dirname(__FILE__), "trusted-certs.crt")

class << self

def config
@config ||= Config.new
end

# Configure a default TempoDB API Client
#
# ==== Example
#
# TempoDB.configure do |config|
# config.database_id = 'database_id'
# config.key = 'api_key'
# config.secret = 'api_secret'
# end
#
def configure
yield(config)
self.client = nil
end

attr_writer :client

def client
@client ||= Client.new(*config.to_a)
end

# Delegate every public instance method of Client to TempoDB.client
Client.public_instance_methods(false).each do |method|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{method}(*args, &block)
client.#{method}(*args, &block)
end
RUBY
end
end
end

18 changes: 18 additions & 0 deletions lib/tempodb/config.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module TempoDB
class Config

OPTIONS = [:database_id, :api_key, :api_secret, :host, :port, :secure].freeze

attr_accessor *OPTIONS

def initialize
@host = TempoDB::API_HOST
@port = TempoDB::API_PORT
@secure = true
end

def to_a
OPTIONS.collect { |option| send(option) }
end
end
end
File renamed without changes.
52 changes: 52 additions & 0 deletions spec/tempodb/config_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
require 'spec_helper'

describe TempoDB::Config do

subject(:config) do
described_class.new
end

it 'initializes with default host' do
expect(config.host).to eq('api.tempo-db.com')
end

it 'initializes with default port' do
expect(config.port).to eq(443)
end

it 'initializes with default secure' do
expect(config.secure).to be true
end

[:database_id, :api_key, :api_secret, :host, :port, :secure].each do |option|

describe "#{option}" do

it 'is a configurable option' do
config.send(:"#{option}=", 'foo')
expect(config.send(option)).to eq('foo')
end
end
end

describe '#to_a' do

let(:config) do
TempoDB::Config.new.tap do |config|
config.database_id = 'database'
config.api_key = 'key'
config.api_secret = 'secret'
end
end

subject(:array) do
config.to_a
end

it 'returns array of config values for Client#initialize' do
expect(array).to eq([
'database', 'key', 'secret', 'api.tempo-db.com', 443, true
])
end
end
end
73 changes: 73 additions & 0 deletions spec/tempodb_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
require 'spec_helper'

describe TempoDB do

after do
TempoDB.instance_variable_set :@client, nil
TempoDB.instance_variable_set :@config, nil
end

describe '.config' do

it 'returns same instance of Config' do
expect(TempoDB.config).to be_a(TempoDB::Config)
expect(TempoDB.config.object_id).to eq(TempoDB.config.object_id)
end
end

describe '.configure' do

it 'yields TempoDB.config' do
expect { |b| TempoDB.configure(&b) }.to yield_with_args(TempoDB.config)
end

it 'reinitializes TempoDB client' do
original_client = TempoDB.client
TempoDB.configure do |config|
config.database_id = 'foo'
end
expect(original_client.object_id).not_to eq(TempoDB.client.object_id)
end
end

describe '.client' do

before do
TempoDB.configure do |config|
config.database_id = 'mydb'
config.api_key = 'api_key'
config.api_secret = 's3cr3t!'
config.host = 'example.com'
config.port = 1337
config.secure = false
end
end

it 'initializes Client with TempoDB config' do
expect(TempoDB::Client).to receive(:new).with(
'mydb', 'api_key', 's3cr3t!', 'example.com', 1337, false
)
TempoDB.client
end

it 'returns same Client instance' do
expect(TempoDB::Client.object_id).to eq(TempoDB::Client.object_id)
end
end

[
:session, :create_series, :delete_series, :get_series, :list_series,
:update_series, :read_data, :get_summary, :read_multi_rollups, :find_data,
:aggregate_data, :read_multi, :write_data, :write_multi, :single_value,
:multi_series_single_value, :delete_data
].each do |method|

describe ".#{method}" do

it 'delegates to TempoDB.client' do
expect(TempoDB.client).to receive(method)
TempoDB.send(method)
end
end
end
end