Class: Chawk::Models::Node
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Chawk::Models::Node
- Defined in:
- lib/models.rb
Overview
The Node, where most Chawk:Addr information is persisted..
Instance Attribute Summary collapse
-
#agent ⇒ Object
Returns the value of attribute agent.
Instance Method Summary collapse
- #_insert_point(val, ts, options = {}) ⇒ Object
- #_insert_point_array(item, options) ⇒ Object
- #_insert_point_hash(item, ts, options) ⇒ Object
- #_insert_point_string(item, ts, options) ⇒ Object
-
#add_points(args, options = {}) ⇒ Object
Add an item or an array of items (one at a time) to the datastore.
- #decrement(value = 1, options = {}) ⇒ Object
- #increment(value = 1, options = {}) ⇒ Object
- #init ⇒ Object
- #max ⇒ Object
- #min ⇒ Object
- #point_recognizer(item, dt, options = {}) ⇒ Object
-
#points_range(dt_from, dt_to, options = {}) ⇒ Array of Objects
Returns items whose observed_at times fit within from a range.
-
#points_since(dt_from) ⇒ Array of Objects
Returns items whose observed_at times fit within from a range ending now.
-
#set_permissions(agent, read = false, write = false, admin = false) ⇒ Object
Sets permissions flag for this address, for a specific agent.
-
#set_public_read(value) ⇒ Object
Sets public read flag for this address.
Instance Attribute Details
#agent ⇒ Object
Returns the value of attribute agent.
23 24 25 |
# File 'lib/models.rb', line 23 def agent @agent end |
Instance Method Details
#_insert_point(val, ts, options = {}) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/models.rb', line 35 def _insert_point(val,ts,={}) values = {value:val,observed_at:ts.to_f} if [:meta] if [:meta].is_a?(Hash) values[:meta] = [:meta].to_json else raise ArgumentError, "Meta must be a JSON-representable Hash. #{[:meta].inspect}" end end self.points.create(values) end |
#_insert_point_array(item, options) ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/models.rb', line 59 def _insert_point_array(item,) if item.length == 2 && item[0].is_a?(Integer) _insert_point item[0],item[1], else raise ArgumentError, "Array Items must be in [value,timestamp] format. #{item.inspect}" end end |
#_insert_point_hash(item, ts, options) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/models.rb', line 47 def _insert_point_hash(item,ts,) if item['v'] && item['v'].is_a?(Integer) if item['t'] _insert_point item['v'],item['t'], else _insert_point item['v'],ts, end else raise ArgumentError, "Hash must have 'v' key set to proper type.. #{item.inspect}" end end |
#_insert_point_string(item, ts, options) ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/models.rb', line 67 def _insert_point_string(item,ts,) if item.length > 0 && item =~ /\A[-+]?[0-9]+/ _insert_point item.to_i,ts, else raise ArgumentError, "String Items must represent Integer. #{item.inspect}" end end |
#add_points(args, options = {}) ⇒ Object
Add an item or an array of items (one at a time) to the datastore.
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/models.rb', line 93 def add_points(args,={}) [:observed_at] ? dt = [:observed_at] : dt = Time.now if args.is_a?(Array) args.each do |arg| point_recognizer(arg, dt, ) end else point_recognizer(args, dt, ) end end |
#decrement(value = 1, options = {}) ⇒ Object
113 114 115 116 117 118 119 |
# File 'lib/models.rb', line 113 def decrement(value=1, ={}) if value.is_a?(Integer) increment (-1) * value, else raise ArgumentError, "Value must be an Integer" end end |
#increment(value = 1, options = {}) ⇒ Object
104 105 106 107 108 109 110 111 |
# File 'lib/models.rb', line 104 def increment(value=1, ={}) if value.is_a?(Integer) last = self.points.last add_points last.value + value, else raise ArgumentError, "Value must be an Integer" end end |
#init ⇒ Object
31 32 33 |
# File 'lib/models.rb', line 31 def init @agent = nil end |
#max ⇒ Object
121 122 123 |
# File 'lib/models.rb', line 121 def max() points.maximum('value') || 0 end |
#min ⇒ Object
125 126 127 |
# File 'lib/models.rb', line 125 def min() points.minimum('value') || 0 end |
#point_recognizer(item, dt, options = {}) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/models.rb', line 75 def point_recognizer(item, dt, ={}) case when item.is_a?(Integer) _insert_point item,dt, when item.is_a?(Array) _insert_point_array(item, ) when item.is_a?(Hash) _insert_point_hash(item,dt,) when item.is_a?(String) _insert_point_string(item,dt,) else raise ArgumentError, "Can't recognize format of data item. #{item.inspect}" end end |
#points_range(dt_from, dt_to, options = {}) ⇒ Array of Objects
Returns items whose observed_at times fit within from a range.
133 134 135 136 |
# File 'lib/models.rb', line 133 def points_range(dt_from, dt_to,={}) vals = points.where("observed_at >= :dt_from AND observed_at <= :dt_to",{dt_from:dt_from.to_f,dt_to:dt_to.to_f}, limit:1000,order:"observed_at asc, id asc") return vals end |
#points_since(dt_from) ⇒ Array of Objects
Returns items whose observed_at times fit within from a range ending now.
141 142 143 |
# File 'lib/models.rb', line 141 def points_since(dt_from) self.points_range(dt_from,Time.now) end |
#set_permissions(agent, read = false, write = false, admin = false) ⇒ Object
Sets permissions flag for this address, for a specific agent. The existing Chawk::Relationship will be destroyed and a new one created as specified. Write access is not yet checked.
159 160 161 162 163 164 165 166 |
# File 'lib/models.rb', line 159 def (agent,read=false,write=false,admin=false) relations.where(agent_id:agent.id).destroy_all if read || write || admin vals = {agent:agent,read:(read ? true : false),write:(write ? true : false),admin:(admin ? true : false)} relations.create(vals) end nil end |
#set_public_read(value) ⇒ Object
Sets public read flag for this address
147 148 149 150 151 |
# File 'lib/models.rb', line 147 def set_public_read(value) value = value ? true : false self.public_read = value save end |