geckoboard-ruby 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 911c6fae3e14c01c56dcee219a1a0a36ea7f6c8f
4
- data.tar.gz: e3d5e9c25f948e6c650feb253fc724c78860b2e6
3
+ metadata.gz: ec98d0225989a8d02c83f7d46bf34ce25c88e3da
4
+ data.tar.gz: d5e3effe54d256a1f16cba2898f51352cf1975a2
5
5
  SHA512:
6
- metadata.gz: de07437d8fec724846db64021ea804a0973cf688b1da0a2292612bc3b43e7e68be5715f6f18ac8911afdb09cb665e9d7579f88b47fff8269bd925a9669b5d8bc
7
- data.tar.gz: 7bbaa3a2567654fe4ead80bc105d53fcd2b2a0d9bbbd582fdaa0b09fff821d3bfa5d5486d2d57e116b9f1a85b1683721217563b40b92ec9e9d2a5d496577ff30
6
+ metadata.gz: 95d796bc880855c11290d9ceeb6b4885fb640cbf9cab6ae10e662e1093193ee582dc3b24d910d4ecb590a8e8290a306a6bb06a4939575bf7550208d93e273539
7
+ data.tar.gz: 6ccab0a19bf2f50637a66db7263871d43b9f84e91d56c5cf8b597314e3e475186503a0481187d87e981a3268fd26559187b5c64bb10452b109618a565887190a
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # geckoboard-ruby
2
2
  [![CircleCI](https://circleci.com/gh/geckoboard/geckoboard-ruby.svg?style=svg)](https://circleci.com/gh/geckoboard/geckoboard-ruby)
3
3
 
4
- Ruby client library for Geckoboard (https://developer.geckoboard.com).
4
+ Ruby client library for Geckoboard (https://developer.geckoboard.com/api-reference/ruby).
5
5
 
6
6
  ## Installation
7
7
 
@@ -35,18 +35,21 @@ client.ping # => true
35
35
  Verify an existing dataset or create a new one.
36
36
 
37
37
  ```ruby
38
- dataset = client.datasets.find_or_create('sales.gross', fields: {
39
- amount: {
40
- type: :number,
41
- name: 'Amount',
42
- },
43
- timestamp: {
44
- type: :datetime,
45
- name: 'Time'
46
- }
47
- })
38
+ dataset = client.datasets.find_or_create('sales.gross', fields: [
39
+ Geckoboard::MoneyField.new(:amount, name: 'Amount', currency: 'USD'),
40
+ Geckoboard::DateTimeField.new(:timestamp, name: 'Time'),
41
+ ])
48
42
  ```
49
43
 
44
+ Available field types:
45
+
46
+ - `DateField`
47
+ - `DateTimeField`
48
+ - `NumberField`
49
+ - `PercentageField`
50
+ - `StringField`
51
+ - `MoneyField`
52
+
50
53
  ### Delete
51
54
 
52
55
  Delete a dataset and all data therein.
@@ -69,11 +72,11 @@ Replace all data in the dataset.
69
72
  dataset.put([
70
73
  {
71
74
  timestamp: DateTime.new(2016, 1, 2, 12, 0, 0),
72
- amount: 409
75
+ amount: 40900
73
76
  },
74
77
  {
75
78
  timestamp: DateTime.new(2016, 1, 3, 12, 0, 0),
76
- amount: 164
79
+ amount: 16400
77
80
  },
78
81
  ])
79
82
  ```
@@ -6,9 +6,9 @@ module Geckoboard
6
6
  @connection = connection
7
7
  end
8
8
 
9
- def find_or_create(dataset_id, fields: {})
9
+ def find_or_create(dataset_id, fields: nil)
10
10
  path = dataset_path(dataset_id)
11
- response = connection.put(path, { fields: fields }.to_json)
11
+ response = connection.put(path, { fields: hashify_fields(fields) }.to_json)
12
12
 
13
13
  data = JSON.parse(response.body)
14
14
  Dataset.new(self, data.fetch('id'), data.fetch('fields'))
@@ -31,5 +31,17 @@ module Geckoboard
31
31
  def dataset_path(dataset_id)
32
32
  "/datasets/#{CGI.escape(dataset_id)}"
33
33
  end
34
+
35
+ def hashify_fields(fields)
36
+ return fields if fields.is_a? Hash
37
+
38
+ unless fields.respond_to?(:inject) && fields.all? { |field| field.is_a? Field }
39
+ raise ArgumentError, "`fields:' must be either a hash of field definitions, or collection of `Geckoboard::Field' objects"
40
+ end
41
+
42
+ fields.inject({}) do |hash, field|
43
+ hash.merge(field.id => field.to_hash)
44
+ end
45
+ end
34
46
  end
35
47
  end
@@ -0,0 +1,61 @@
1
+ module Geckoboard
2
+ class Field
3
+ attr_reader :id, :name
4
+
5
+ def initialize(id, name: nil)
6
+ raise ArgumentError, "`name:' is a required argument" if name.nil?
7
+
8
+ @id = id
9
+ @name = name
10
+ end
11
+
12
+ def to_hash
13
+ { name: name }
14
+ end
15
+ end
16
+
17
+ class StringField < Field
18
+ def to_hash
19
+ super.merge(type: :string)
20
+ end
21
+ end
22
+
23
+ class NumberField < Field
24
+ def to_hash
25
+ super.merge(type: :number)
26
+ end
27
+ end
28
+
29
+ class DateField < Field
30
+ def to_hash
31
+ super.merge(type: :date)
32
+ end
33
+ end
34
+
35
+ class DateTimeField < Field
36
+ def to_hash
37
+ super.merge(type: :datetime)
38
+ end
39
+ end
40
+
41
+ class MoneyField < Field
42
+ attr_reader :currency
43
+
44
+ def initialize(id, name: nil, currency: nil)
45
+ raise ArgumentError, "`currency:' is a required argument" if currency.nil?
46
+
47
+ super(id, name: name)
48
+ @currency = currency
49
+ end
50
+
51
+ def to_hash
52
+ super.merge(type: :money, currency: currency)
53
+ end
54
+ end
55
+
56
+ class PercentageField < Field
57
+ def to_hash
58
+ super.merge(type: :percentage)
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module Geckoboard
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/geckoboard.rb CHANGED
@@ -9,6 +9,7 @@ require 'geckoboard/datasets_client'
9
9
  require 'geckoboard/dataset'
10
10
  require 'geckoboard/payload_formatter'
11
11
  require 'geckoboard/errors'
12
+ require 'geckoboard/field_types'
12
13
 
13
14
  module Geckoboard
14
15
  USER_AGENT = "Geckoboard-Ruby/#{VERSION}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geckoboard-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Upton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-12 00:00:00.000000000 Z
11
+ date: 2016-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -89,6 +89,7 @@ files:
89
89
  - lib/geckoboard/dataset.rb
90
90
  - lib/geckoboard/datasets_client.rb
91
91
  - lib/geckoboard/errors.rb
92
+ - lib/geckoboard/field_types.rb
92
93
  - lib/geckoboard/payload_formatter.rb
93
94
  - lib/geckoboard/version.rb
94
95
  homepage: https://github.com/geckoboard/geckoboard-ruby