Class: Helium::Resource
- Inherits:
- 
      Object
      
        - Object
- Helium::Resource
 
- Extended by:
- Utils
- Includes:
- Utils
- Defined in:
- lib/helium/resource.rb
Overview
Abstract base class for Helium Resources returned by the API
Direct Known Subclasses
Configuration, DataPoint, DeviceConfiguration, Element, Label, Organization, Sensor, User
Instance Attribute Summary collapse
- 
  
    
      #id  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute id. 
- 
  
    
      #params  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute params. 
- 
  
    
      #type  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute type. 
Class Method Summary collapse
- .all(opts = {}) ⇒ Object
- 
  
    
      .all_path  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    The resource’s index API route. 
- 
  
    
      .create(attributes, opts = {})  ⇒ Resource 
    
    
  
  
  
  
  
  
  
  
  
    Creates a new resource with given attributes. 
- 
  
    
      .find(id, opts = {})  ⇒ Resource 
    
    
  
  
  
  
  
  
  
  
  
    Finds a single Resource by id. 
- .initialize_from_path(opts = {}) ⇒ Object
- .resource_name ⇒ Object
- 
  
    
      .singleton(opts = {})  ⇒ Resource 
    
    
  
  
  
  
  
  
  
  
  
    Fetches a singleton resource (e.g. organization, user). 
Instance Method Summary collapse
- 
  
    
      #==(other)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Override equality to use id for comparisons. 
- 
  
    
      #as_json  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Inheriting resources should implement this with super. 
- 
  
    
      #created_at  ⇒ DateTime? 
    
    
  
  
  
  
  
  
  
  
  
    When the resource was created. 
- 
  
    
      #destroy  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Deletes the Resource. 
- 
  
    
      #eql?(other)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Override equality to use id for comparisons. 
- 
  
    
      #hash  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    Override equality to use id for comparisons. 
- 
  
    
      #initialize(opts = {})  ⇒ Resource 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Resource. 
- #metadata ⇒ Object
- #resource_name ⇒ Object
- 
  
    
      #resource_path  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    Returns a path identifying the current resource. 
- 
  
    
      #to_json(*options)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    A JSON-encoded String representing the resource. 
- 
  
    
      #update(attributes)  ⇒ Resource 
    
    
  
  
  
  
  
  
  
  
  
    Updates a Resource. 
- 
  
    
      #updated_at  ⇒ DateTime? 
    
    
  
  
  
  
  
  
  
  
  
    When the resource was last updated. 
Methods included from Utils
Constructor Details
#initialize(opts = {}) ⇒ Resource
Returns a new instance of Resource.
| 7 8 9 10 11 12 13 14 15 | # File 'lib/helium/resource.rb', line 7 def initialize(opts = {}) @client = opts.fetch(:client) @params = opts.fetch(:params) @id = @params["id"] @type = @params.dig('type') @created_at = @params.dig('meta', 'created') @updated_at = @params.dig('meta', 'updated') end | 
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
| 4 5 6 | # File 'lib/helium/resource.rb', line 4 def id @id end | 
#params ⇒ Object (readonly)
Returns the value of attribute params.
| 4 5 6 | # File 'lib/helium/resource.rb', line 4 def params @params end | 
#type ⇒ Object (readonly)
Returns the value of attribute type.
| 4 5 6 | # File 'lib/helium/resource.rb', line 4 def type @type end | 
Class Method Details
.all(opts = {}) ⇒ Object
| 26 27 28 29 | # File 'lib/helium/resource.rb', line 26 def all(opts = {}) client = opts.fetch(:client) Collection.new(klass: self, client: client).all end | 
.all_path ⇒ String
The resource’s index API route
| 22 23 24 | # File 'lib/helium/resource.rb', line 22 def all_path "/#{resource_name}" end | 
.create(attributes, opts = {}) ⇒ Resource
Creates a new resource with given attributes
| 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | # File 'lib/helium/resource.rb', line 52 def create(attributes, opts = {}) client = opts.fetch(:client) path = "/#{resource_name}" body = { data: { attributes: attributes, type: resource_name } } response = client.post(path, body: body) resource_data = JSON.parse(response.body)["data"] return self.new(client: client, params: resource_data) end | 
.find(id, opts = {}) ⇒ Resource
Finds a single Resource by id
| 35 36 37 38 | # File 'lib/helium/resource.rb', line 35 def find(id, opts = {}) client = opts.fetch(:client) initialize_from_path(path: "/#{resource_name}/#{id}", client: client) end | 
.initialize_from_path(opts = {}) ⇒ Object
| 74 75 76 77 78 79 80 81 | # File 'lib/helium/resource.rb', line 74 def initialize_from_path(opts = {}) client = opts.fetch(:client) path = opts.fetch(:path) response = client.get(path) resource_data = JSON.parse(response.body)["data"] return self.new(client: client, params: resource_data) end | 
.resource_name ⇒ Object
| 70 71 72 | # File 'lib/helium/resource.rb', line 70 def resource_name kebab_case(self.name.split('::').last) end | 
.singleton(opts = {}) ⇒ Resource
Fetches a singleton resource (e.g. organization, user)
| 43 44 45 46 | # File 'lib/helium/resource.rb', line 43 def singleton(opts = {}) client = opts.fetch(:client) initialize_from_path(path: all_path, client: client) end | 
Instance Method Details
#==(other) ⇒ Boolean
Override equality to use id for comparisons
| 121 122 123 | # File 'lib/helium/resource.rb', line 121 def ==(other) self.id == other.id end | 
#as_json ⇒ Hash
Inheriting resources should implement this with super
| 151 152 153 154 155 156 157 158 | # File 'lib/helium/resource.rb', line 151 def as_json { id: id, type: type, created_at: created_at, updated_at: updated_at } end | 
#created_at ⇒ DateTime?
Returns when the resource was created.
| 138 139 140 141 | # File 'lib/helium/resource.rb', line 138 def created_at return nil if @created_at.nil? @_created_at ||= DateTime.parse(@created_at) end | 
#destroy ⇒ Boolean
Deletes the Resource
| 111 112 113 | # File 'lib/helium/resource.rb', line 111 def destroy @client.delete(resource_path) end | 
#eql?(other) ⇒ Boolean
Override equality to use id for comparisons
| 127 128 129 | # File 'lib/helium/resource.rb', line 127 def eql?(other) self == other end | 
#hash ⇒ Integer
Override equality to use id for comparisons
| 133 134 135 | # File 'lib/helium/resource.rb', line 133 def hash id.hash end | 
#metadata ⇒ Object
| 115 116 117 | # File 'lib/helium/resource.rb', line 115 def Metadata.new(client: @client, klass: self) end | 
#resource_name ⇒ Object
| 165 166 167 | # File 'lib/helium/resource.rb', line 165 def resource_name kebab_case(self.class.name.split('::').last) end | 
#resource_path ⇒ String
Returns a path identifying the current resource. Can be overridden in child classes to handle non-standard resources (e.g. Organization)
| 87 88 89 | # File 'lib/helium/resource.rb', line 87 def resource_path "/#{resource_name}/#{self.id}" end | 
#to_json(*options) ⇒ String
Returns a JSON-encoded String representing the resource.
| 161 162 163 | # File 'lib/helium/resource.rb', line 161 def to_json(*) as_json.to_json(*) end | 
#update(attributes) ⇒ Resource
Updates a Resource
| 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | # File 'lib/helium/resource.rb', line 94 def update(attributes) body = { data: { attributes: attributes, id: self.id, type: resource_name } } response = @client.patch(resource_path, body: body) resource_data = JSON.parse(response.body)["data"] return self.class.new(client: self, params: resource_data) end | 
#updated_at ⇒ DateTime?
Returns when the resource was last updated.
| 144 145 146 147 | # File 'lib/helium/resource.rb', line 144 def updated_at return nil if @updated_at.nil? @_updated_at ||= DateTime.parse(@updated_at) end |