helium-ruby 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +85 -0
- data/docs/Helium.html +4 -4
- data/docs/Helium/Client.html +43 -21
- data/docs/Helium/Client/Elements.html +335 -0
- data/docs/Helium/Client/Http.html +1 -1
- data/docs/Helium/Client/Labels.html +637 -0
- data/docs/Helium/Client/Organizations.html +1 -1
- data/docs/Helium/Client/Sensors.html +1 -1
- data/docs/Helium/Client/Users.html +1 -1
- data/docs/Helium/Cursor.html +53 -1
- data/docs/Helium/DataPoint.html +152 -90
- data/docs/Helium/Element.html +589 -0
- data/docs/Helium/Label.html +658 -0
- data/docs/Helium/Organization.html +75 -203
- data/docs/Helium/Resource.html +869 -0
- data/docs/Helium/Sensor.html +102 -215
- data/docs/Helium/User.html +68 -179
- data/docs/Helium/Utils.html +1 -1
- data/docs/_index.html +63 -1
- data/docs/class_list.html +1 -1
- data/docs/file.README.html +107 -1
- data/docs/index.html +107 -1
- data/docs/method_list.html +267 -43
- data/docs/top-level-namespace.html +1 -1
- data/lib/helium.rb +3 -0
- data/lib/helium/client.rb +4 -0
- data/lib/helium/client/elements.rb +42 -0
- data/lib/helium/client/labels.rb +105 -0
- data/lib/helium/cursor.rb +4 -0
- data/lib/helium/data_point.rb +28 -8
- data/lib/helium/element.rb +27 -0
- data/lib/helium/label.rb +44 -0
- data/lib/helium/organization.rb +12 -15
- data/lib/helium/resource.rb +58 -0
- data/lib/helium/sensor.rb +16 -17
- data/lib/helium/user.rb +11 -13
- data/lib/helium/version.rb +1 -1
- metadata +12 -2
| @@ -102,7 +102,7 @@ | |
| 102 102 | 
             
            </div>
         | 
| 103 103 |  | 
| 104 104 | 
             
                  <div id="footer">
         | 
| 105 | 
            -
              Generated on  | 
| 105 | 
            +
              Generated on Mon Aug 22 15:52:19 2016 by
         | 
| 106 106 | 
             
              <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
         | 
| 107 107 | 
             
              0.9.3 (ruby-2.3.1).
         | 
| 108 108 | 
             
            </div>
         | 
    
        data/lib/helium.rb
    CHANGED
    
    | @@ -6,10 +6,13 @@ require "helium/version" | |
| 6 6 | 
             
            require "helium/utils"
         | 
| 7 7 | 
             
            require "helium/client"
         | 
| 8 8 | 
             
            require "helium/cursor"
         | 
| 9 | 
            +
            require "helium/resource"
         | 
| 9 10 | 
             
            require "helium/user"
         | 
| 10 11 | 
             
            require "helium/organization"
         | 
| 11 12 | 
             
            require "helium/sensor"
         | 
| 13 | 
            +
            require "helium/label"
         | 
| 12 14 | 
             
            require "helium/data_point"
         | 
| 15 | 
            +
            require "helium/element"
         | 
| 13 16 |  | 
| 14 17 | 
             
            module Helium
         | 
| 15 18 | 
             
            end
         | 
    
        data/lib/helium/client.rb
    CHANGED
    
    | @@ -2,6 +2,8 @@ require 'helium/client/http' | |
| 2 2 | 
             
            require 'helium/client/users'
         | 
| 3 3 | 
             
            require 'helium/client/organizations'
         | 
| 4 4 | 
             
            require 'helium/client/sensors'
         | 
| 5 | 
            +
            require 'helium/client/labels'
         | 
| 6 | 
            +
            require 'helium/client/elements'
         | 
| 5 7 |  | 
| 6 8 | 
             
            module Helium
         | 
| 7 9 | 
             
              class Client
         | 
| @@ -10,6 +12,8 @@ module Helium | |
| 10 12 | 
             
                include Helium::Client::Users
         | 
| 11 13 | 
             
                include Helium::Client::Organizations
         | 
| 12 14 | 
             
                include Helium::Client::Sensors
         | 
| 15 | 
            +
                include Helium::Client::Labels
         | 
| 16 | 
            +
                include Helium::Client::Elements
         | 
| 13 17 |  | 
| 14 18 | 
             
                attr_accessor :api_key
         | 
| 15 19 |  | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            module Helium
         | 
| 2 | 
            +
              class Client
         | 
| 3 | 
            +
                module Elements
         | 
| 4 | 
            +
                  def elements
         | 
| 5 | 
            +
                    response = get('/element')
         | 
| 6 | 
            +
                    elements_data = JSON.parse(response.body)["data"]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    elements = elements_data.map do |element_data|
         | 
| 9 | 
            +
                      Element.new(client: self, params: element_data)
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    return elements
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def element(id)
         | 
| 16 | 
            +
                    response = get("/element/#{id}")
         | 
| 17 | 
            +
                    element_data = JSON.parse(response.body)["data"]
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    return Element.new(client: self, params: element_data)
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def update_element(element, name:)
         | 
| 23 | 
            +
                    path = "/element/#{element.id}"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    body = {
         | 
| 26 | 
            +
                      data: {
         | 
| 27 | 
            +
                        attributes: {
         | 
| 28 | 
            +
                          name: name
         | 
| 29 | 
            +
                        },
         | 
| 30 | 
            +
                        id: element.id,
         | 
| 31 | 
            +
                        type: "element"
         | 
| 32 | 
            +
                      }
         | 
| 33 | 
            +
                    }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    response = patch(path, body: body)
         | 
| 36 | 
            +
                    element_data = JSON.parse(response.body)["data"]
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    return Element.new(client: self, params: element_data)
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
| @@ -0,0 +1,105 @@ | |
| 1 | 
            +
            module Helium
         | 
| 2 | 
            +
              class Client
         | 
| 3 | 
            +
                module Labels
         | 
| 4 | 
            +
                  def labels
         | 
| 5 | 
            +
                    response = get('/label')
         | 
| 6 | 
            +
                    labels_data = JSON.parse(response.body)["data"]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    labels = labels_data.map do |label_data|
         | 
| 9 | 
            +
                      Label.new(client: self, params: label_data)
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    return labels
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def label(id)
         | 
| 16 | 
            +
                    response = get("/label/#{id}")
         | 
| 17 | 
            +
                    label_data = JSON.parse(response.body)["data"]
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    return Label.new(client: self, params: label_data)
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def new_label(name:)
         | 
| 23 | 
            +
                    path = "/label"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    body = {
         | 
| 26 | 
            +
                      data: {
         | 
| 27 | 
            +
                        attributes: {
         | 
| 28 | 
            +
                          name: name
         | 
| 29 | 
            +
                        },
         | 
| 30 | 
            +
                        type: "label"
         | 
| 31 | 
            +
                      }
         | 
| 32 | 
            +
                    }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    response = post(path, body: body)
         | 
| 35 | 
            +
                    label_data = JSON.parse(response.body)["data"]
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    return Label.new(client: self, params: label_data)
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def update_label(label, name:)
         | 
| 41 | 
            +
                    path = "/label/#{label.id}"
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    body = {
         | 
| 44 | 
            +
                      data: {
         | 
| 45 | 
            +
                        attributes: {
         | 
| 46 | 
            +
                          name: name
         | 
| 47 | 
            +
                        },
         | 
| 48 | 
            +
                        id: label.id,
         | 
| 49 | 
            +
                        type: "label"
         | 
| 50 | 
            +
                      }
         | 
| 51 | 
            +
                    }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    response = patch(path, body: body)
         | 
| 54 | 
            +
                    label_data = JSON.parse(response.body)["data"]
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    return Label.new(client: self, params: label_data)
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  def delete_label(label)
         | 
| 60 | 
            +
                    path = "/label/#{label.id}"
         | 
| 61 | 
            +
                    delete(path)
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def label_sensors(label)
         | 
| 65 | 
            +
                    path = "/label/#{label.id}/sensor"
         | 
| 66 | 
            +
                    response = get(path)
         | 
| 67 | 
            +
                    sensors_data = JSON.parse(response.body)["data"]
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    sensors = sensors_data.map do |sensor_data|
         | 
| 70 | 
            +
                      Sensor.new(client: self, params: sensor_data)
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                    return sensors
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  def update_label_sensors(label, sensors: [])
         | 
| 77 | 
            +
                    path = "/label/#{label.id}/relationships/sensor"
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                    sensors = Array(sensors)
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    new_sensor_data = sensors.map do |sensor|
         | 
| 82 | 
            +
                      {
         | 
| 83 | 
            +
                        id: sensor.id,
         | 
| 84 | 
            +
                        type: 'sensor'
         | 
| 85 | 
            +
                      }
         | 
| 86 | 
            +
                    end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                    body = {
         | 
| 89 | 
            +
                      data: new_sensor_data
         | 
| 90 | 
            +
                    }
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                    response = patch(path, body: body)
         | 
| 93 | 
            +
                    sensors_data = JSON.parse(response.body)["data"]
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                    # TODO: these come back deflated. need to either inflate at this point or
         | 
| 96 | 
            +
                    # when needed
         | 
| 97 | 
            +
                    sensors = sensors_data.map do |sensor_data|
         | 
| 98 | 
            +
                      Sensor.new(client: self, params: sensor_data)
         | 
| 99 | 
            +
                    end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    return sensors
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
            end
         | 
    
        data/lib/helium/cursor.rb
    CHANGED
    
    
    
        data/lib/helium/data_point.rb
    CHANGED
    
    | @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            module Helium
         | 
| 2 | 
            -
              class DataPoint
         | 
| 3 | 
            -
                 | 
| 2 | 
            +
              class DataPoint < Resource
         | 
| 3 | 
            +
                attr_reader :timestamp, :value, :port
         | 
| 4 4 |  | 
| 5 5 | 
             
                def initialize(client:, params:)
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
             | 
| 6 | 
            +
                  super(client: client, params: params)
         | 
| 7 | 
            +
             | 
| 8 8 | 
             
                  @timestamp  = params.dig("attributes", "timestamp")
         | 
| 9 9 | 
             
                  @value      = params.dig("attributes", "value")
         | 
| 10 10 | 
             
                  @port       = params.dig("attributes", "port")
         | 
| @@ -14,20 +14,40 @@ module Helium | |
| 14 14 | 
             
                  DateTime.parse(@timestamp)
         | 
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
| 17 | 
            -
                def ==(other)
         | 
| 18 | 
            -
                  self.id == other.id
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
             | 
| 21 17 | 
             
                def max
         | 
| 18 | 
            +
                  return nil unless @value.is_a?(Hash)
         | 
| 22 19 | 
             
                  @value["max"]
         | 
| 23 20 | 
             
                end
         | 
| 24 21 |  | 
| 25 22 | 
             
                def min
         | 
| 23 | 
            +
                  return nil unless @value.is_a?(Hash)
         | 
| 26 24 | 
             
                  @value["min"]
         | 
| 27 25 | 
             
                end
         | 
| 28 26 |  | 
| 29 27 | 
             
                def avg
         | 
| 28 | 
            +
                  return nil unless @value.is_a?(Hash)
         | 
| 30 29 | 
             
                  @value["avg"]
         | 
| 31 30 | 
             
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def aggregate?
         | 
| 33 | 
            +
                  [max, min, avg].none? { |agg_value| agg_value.nil? }
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def as_json
         | 
| 37 | 
            +
                  j = super.merge({
         | 
| 38 | 
            +
                    timestamp: timestamp,
         | 
| 39 | 
            +
                    port: port
         | 
| 40 | 
            +
                  })
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  if aggregate?
         | 
| 43 | 
            +
                    j[:max] = max
         | 
| 44 | 
            +
                    j[:min] = min
         | 
| 45 | 
            +
                    j[:avg] = avg
         | 
| 46 | 
            +
                  else
         | 
| 47 | 
            +
                    j[:value] = value
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  j
         | 
| 51 | 
            +
                end
         | 
| 32 52 | 
             
              end
         | 
| 33 53 | 
             
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            module Helium
         | 
| 2 | 
            +
              class Element < Resource
         | 
| 3 | 
            +
                attr_reader :name, :mac, :versions
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(client:, params:)
         | 
| 6 | 
            +
                  super(client: client, params: params)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  @name     = params.dig("attributes", "name")
         | 
| 9 | 
            +
                  @mac      = params.dig("meta", "mac")
         | 
| 10 | 
            +
                  @versions = params.dig("meta", "versions")
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                # TODO these kinds of methods should be generalized into a Resource object
         | 
| 14 | 
            +
                def update(name:)
         | 
| 15 | 
            +
                  @client.update_element(self, name: name)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # TODO can probably generalize this a bit more
         | 
| 19 | 
            +
                def as_json
         | 
| 20 | 
            +
                  super.merge({
         | 
| 21 | 
            +
                    name: name,
         | 
| 22 | 
            +
                    mac: mac,
         | 
| 23 | 
            +
                    versions: versions
         | 
| 24 | 
            +
                  })
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
    
        data/lib/helium/label.rb
    ADDED
    
    | @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            module Helium
         | 
| 2 | 
            +
              class Label < Resource
         | 
| 3 | 
            +
                attr_reader :name
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(client:, params:)
         | 
| 6 | 
            +
                  super(client: client, params: params)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  @name = params.dig("attributes", "name")
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def update(name:)
         | 
| 12 | 
            +
                  @client.update_label(self, name: name)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def destroy
         | 
| 16 | 
            +
                  @client.delete_label(self)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                # TODO: would be nice to wrap this in a proxy collection, that way
         | 
| 20 | 
            +
                # we could do something like label.sensors << new_sensor
         | 
| 21 | 
            +
                def sensors
         | 
| 22 | 
            +
                  @client.label_sensors(self)
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def add_sensors(sensors_to_add = [])
         | 
| 26 | 
            +
                  sensors_to_add = Array(sensors_to_add)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  @client.update_label_sensors(self, sensors: sensors + sensors_to_add)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def remove_sensors(sensors_to_remove = [])
         | 
| 32 | 
            +
                  sensors_to_remove = Array(sensors_to_remove)
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  @client.update_label_sensors(self, sensors: sensors - sensors_to_remove)
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                # TODO can probably generalize this a bit more
         | 
| 38 | 
            +
                def as_json
         | 
| 39 | 
            +
                  super.merge({
         | 
| 40 | 
            +
                    name: name
         | 
| 41 | 
            +
                  })
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
            end
         | 
    
        data/lib/helium/organization.rb
    CHANGED
    
    | @@ -1,27 +1,24 @@ | |
| 1 1 | 
             
            module Helium
         | 
| 2 | 
            -
              class Organization
         | 
| 3 | 
            -
                 | 
| 2 | 
            +
              class Organization < Resource
         | 
| 3 | 
            +
                attr_reader :name, :timezone
         | 
| 4 4 |  | 
| 5 5 | 
             
                def initialize(client:, params:)
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
                  @id         = params["id"]
         | 
| 8 | 
            -
                  @name       = params["attributes"]["name"]
         | 
| 9 | 
            -
                  @timezone   = params["attributes"]["timezone"]
         | 
| 10 | 
            -
                  @created_at = params["meta"]["created"]
         | 
| 11 | 
            -
                  @updated_at = params["meta"]["updated"]
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                def created_at
         | 
| 15 | 
            -
                  DateTime.parse(@created_at)
         | 
| 16 | 
            -
                end
         | 
| 6 | 
            +
                  super(client: client, params: params)
         | 
| 17 7 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
                   | 
| 8 | 
            +
                  @name     = params.dig('attributes', 'name')
         | 
| 9 | 
            +
                  @timezone = params.dig('attributes', 'timezone')
         | 
| 20 10 | 
             
                end
         | 
| 21 11 |  | 
| 22 12 | 
             
                # TODO refactor into relationships
         | 
| 23 13 | 
             
                def users
         | 
| 24 14 | 
             
                  @client.organization_users
         | 
| 25 15 | 
             
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def as_json
         | 
| 18 | 
            +
                  super.merge({
         | 
| 19 | 
            +
                    name: name,
         | 
| 20 | 
            +
                    timezone: timezone
         | 
| 21 | 
            +
                  })
         | 
| 22 | 
            +
                end
         | 
| 26 23 | 
             
              end
         | 
| 27 24 | 
             
            end
         | 
| @@ -0,0 +1,58 @@ | |
| 1 | 
            +
            module Helium
         | 
| 2 | 
            +
              # Abstract base class for Helium Resources returned by the API
         | 
| 3 | 
            +
              class Resource
         | 
| 4 | 
            +
                attr_reader :id
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def initialize(client:, params:)
         | 
| 7 | 
            +
                  @client     = client
         | 
| 8 | 
            +
                  @id         = params["id"]
         | 
| 9 | 
            +
                  @created_at = params.dig('meta', 'created')
         | 
| 10 | 
            +
                  @updated_at = params.dig('meta', 'updated')
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                # Override equality to use id for comparisons
         | 
| 14 | 
            +
                # @return [Boolean]
         | 
| 15 | 
            +
                def ==(other)
         | 
| 16 | 
            +
                  self.id == other.id
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                # Override equality to use id for comparisons
         | 
| 20 | 
            +
                # @return [Boolean]
         | 
| 21 | 
            +
                def eql?(other)
         | 
| 22 | 
            +
                  self == other
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                # Override equality to use id for comparisons
         | 
| 26 | 
            +
                # @return [Integer]
         | 
| 27 | 
            +
                def hash
         | 
| 28 | 
            +
                  id.hash
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                # @return [DateTime, nil] when the resource was created
         | 
| 32 | 
            +
                def created_at
         | 
| 33 | 
            +
                  return nil if @created_at.nil?
         | 
| 34 | 
            +
                  @_created_at ||= DateTime.parse(@created_at)
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                # @return [DateTime, nil] when the resource was last updated
         | 
| 38 | 
            +
                def updated_at
         | 
| 39 | 
            +
                  return nil if @updated_at.nil?
         | 
| 40 | 
            +
                  @_updated_at ||= DateTime.parse(@updated_at)
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                # Inheriting resources should implement this with super
         | 
| 44 | 
            +
                # @return [Hash] a Hash of the object's attributes for JSON
         | 
| 45 | 
            +
                def as_json
         | 
| 46 | 
            +
                  {
         | 
| 47 | 
            +
                    id: id,
         | 
| 48 | 
            +
                    created_at: created_at,
         | 
| 49 | 
            +
                    updated_at: updated_at
         | 
| 50 | 
            +
                  }
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                # @return [String] a JSON-encoded String representing the resource
         | 
| 54 | 
            +
                def to_json(*options)
         | 
| 55 | 
            +
                  as_json.to_json(*options)
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
            end
         | 
    
        data/lib/helium/sensor.rb
    CHANGED
    
    | @@ -1,23 +1,13 @@ | |
| 1 1 | 
             
            module Helium
         | 
| 2 | 
            -
              class Sensor
         | 
| 3 | 
            -
                 | 
| 2 | 
            +
              class Sensor < Resource
         | 
| 3 | 
            +
                attr_reader :name, :mac, :ports
         | 
| 4 4 |  | 
| 5 5 | 
             
                def initialize(client:, params:)
         | 
| 6 | 
            -
                   | 
| 7 | 
            -
                  @id         = params["id"]
         | 
| 8 | 
            -
                  @name       = params["attributes"]["name"]
         | 
| 9 | 
            -
                  @mac        = params["meta"]["mac"]
         | 
| 10 | 
            -
                  @ports      = params["meta"]["ports"]
         | 
| 11 | 
            -
                  @created_at = params["meta"]["created"]
         | 
| 12 | 
            -
                  @updated_at = params["meta"]["updated"]
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                def created_at
         | 
| 16 | 
            -
                  DateTime.parse(@created_at)
         | 
| 17 | 
            -
                end
         | 
| 6 | 
            +
                  super(client: client, params: params)
         | 
| 18 7 |  | 
| 19 | 
            -
             | 
| 20 | 
            -
                   | 
| 8 | 
            +
                  @name  = params.dig('attributes', 'name')
         | 
| 9 | 
            +
                  @mac   = params.dig('meta', 'mac')
         | 
| 10 | 
            +
                  @ports = params.dig('meta', 'ports')
         | 
| 21 11 | 
             
                end
         | 
| 22 12 |  | 
| 23 13 | 
             
                def timeseries(size: 1000, port: nil, start_time: nil, end_time: nil, aggtype: nil, aggsize: nil)
         | 
| @@ -31,7 +21,7 @@ module Helium | |
| 31 21 | 
             
                  )
         | 
| 32 22 | 
             
                end
         | 
| 33 23 |  | 
| 34 | 
            -
                # TODO  | 
| 24 | 
            +
                # TODO CRUD methods will be generalized into the Resource object
         | 
| 35 25 | 
             
                def update(name:)
         | 
| 36 26 | 
             
                  @client.update_sensor(self, name: name)
         | 
| 37 27 | 
             
                end
         | 
| @@ -39,5 +29,14 @@ module Helium | |
| 39 29 | 
             
                def destroy
         | 
| 40 30 | 
             
                  @client.delete_sensor(self)
         | 
| 41 31 | 
             
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                # TODO can probably generalize this a bit more
         | 
| 34 | 
            +
                def as_json
         | 
| 35 | 
            +
                  super.merge({
         | 
| 36 | 
            +
                    name: name,
         | 
| 37 | 
            +
                    mac: mac,
         | 
| 38 | 
            +
                    ports: ports
         | 
| 39 | 
            +
                  })
         | 
| 40 | 
            +
                end
         | 
| 42 41 | 
             
              end
         | 
| 43 42 | 
             
            end
         |