class Stormpath::Resource::Base
Constants
- DEFAULT_SERVER_HOST
- HREF_PROP_NAME
Attributes
client[R]
dirty_properties[R]
properties[R]
Public Class Methods
new(properties_or_url, client = nil, query = nil)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 64 def initialize(properties_or_url, client = nil, query = nil) 65 properties = case properties_or_url 66 when String 67 { HREF_PROP_NAME => properties_or_url } 68 when Hash 69 properties_or_url 70 else 71 {} 72 end 73 74 @client = client 75 @query = query 76 @read_lock = Mutex.new 77 @write_lock = Mutex.new 78 @properties = {} 79 @dirty_properties = {} 80 @deleted_properties = [] 81 set_properties properties 82 end
non_printable_properties()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 58 def non_printable_properties 59 @non_printable_properties ||= [] 60 Array.new(@non_printable_properties) 61 end
prop_accessor(*args)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 43 def prop_accessor(*args) 44 args.each do |name| 45 prop_reader name 46 prop_writer name 47 end 48 end
prop_non_printable(*args)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 50 def prop_non_printable(*args) 51 @non_printable_properties ||= [] 52 args.each do |name| 53 property_name = name.to_s.camelize :lower 54 @non_printable_properties << property_name 55 end 56 end
prop_reader(*args)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 27 def prop_reader(*args) 28 args.each do |name| 29 define_method(name) do 30 get_property name 31 end 32 end 33 end
prop_writer(*args)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 35 def prop_writer(*args) 36 args.each do |name| 37 define_method("#{name}=") do |value| 38 set_property name, value 39 end 40 end 41 end
Public Instance Methods
==(other)
click to toggle source
Calls superclass method
# File lib/stormpath-sdk/resource/base.rb 192 def ==(other) 193 if other.is_a?(self.class) 194 href == other.href 195 else 196 super 197 end 198 end
get_dirty_property_names()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 108 def get_dirty_property_names 109 @read_lock.lock 110 111 begin 112 @dirty_properties.keys 113 ensure 114 @read_lock.unlock 115 end 116 end
get_property(name, options = {})
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 142 def get_property(name, options = {}) 143 property_name = name.to_s 144 145 unless options[:ignore_camelcasing] == true 146 property_name = property_name.camelize(:lower) 147 end 148 149 if HREF_PROP_NAME != property_name 150 # not the href/id, must be a property that requires materialization: 151 unless new? || materialized? 152 153 # only materialize if the property hasn't been set previously (no need to execute a server 154 # request since we have the most recent value already): 155 present = false 156 157 @read_lock.lock 158 begin 159 present = @dirty_properties.key? property_name 160 ensure 161 @read_lock.unlock 162 end 163 164 unless present 165 # exhausted present properties - we require a server call: 166 materialize 167 end 168 end 169 end 170 171 read_property property_name 172 end
get_property_names()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 98 def get_property_names 99 @read_lock.lock 100 101 begin 102 @properties.keys 103 ensure 104 @read_lock.unlock 105 end 106 end
href()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 94 def href 95 get_property HREF_PROP_NAME 96 end
new?()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 84 def new? 85 prop = read_property HREF_PROP_NAME 86 87 if prop.nil? 88 true 89 else 90 prop.respond_to?('empty') && prop.empty? 91 end 92 end
set_properties(properties)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 118 def set_properties(properties) 119 @write_lock.lock 120 121 begin 122 @properties.clear 123 @dirty_properties.clear 124 @dirty = false 125 126 if properties 127 @properties = deep_sanitize properties 128 @dirty_properties = @properties if new? 129 # Don't consider this resource materialized if it is only a reference. A reference is any object that 130 # has only one 'href' property. 131 href_only = ((@properties.size == 1) && @properties.key?(HREF_PROP_NAME)) 132 @materialized = !href_only 133 else 134 @materialized = false 135 end 136 137 ensure 138 @write_lock.unlock 139 end 140 end
set_property(name, value, options = {})
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 174 def set_property(name, value, options = {}) 175 property_name = name.to_s 176 177 unless options[:ignore_camelcasing] == true 178 property_name = property_name.camelize(:lower) 179 end 180 181 @write_lock.lock 182 183 begin 184 @properties.store property_name, value 185 @dirty_properties.store property_name, value 186 @dirty = true 187 ensure 188 @write_lock.unlock 189 end 190 end
Private Instance Methods
data_store()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 202 def data_store 203 client.data_store 204 end
deep_sanitize(hash_or_resource)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 260 def deep_sanitize(hash_or_resource) 261 case hash_or_resource 262 when Stormpath::Resource::Base 263 deep_sanitize hash_or_resource.properties 264 when Hash 265 sanitize hash_or_resource 266 end 267 end
get_href_from_hash(props)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 232 def get_href_from_hash(props) 233 props[HREF_PROP_NAME] if props && props.is_a?(Hash) 234 end
materialize()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 210 def materialize 211 clazz = self.class 212 213 @write_lock.lock 214 215 begin 216 resource = data_store.get_resource href, clazz, @query 217 @properties.replace resource.properties 218 219 # retain dirty properties: 220 @properties.merge! @dirty_properties 221 222 @materialized = true 223 ensure 224 @write_lock.unlock 225 end 226 end
materialized?()
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 206 def materialized? 207 @materialized 208 end
printable_property?(property_name)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 228 def printable_property?(property_name) 229 !self.class.non_printable_properties.include? property_name 230 end
read_property(name)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 236 def read_property(name) 237 @read_lock.lock 238 239 begin 240 @properties[name] 241 ensure 242 @read_lock.unlock 243 end 244 end
sanitize(properties)
click to toggle source
# File lib/stormpath-sdk/resource/base.rb 246 def sanitize(properties) 247 {}.tap do |sanitized_properties| 248 properties.map do |key, value| 249 property_name = key.to_s.camelize :lower 250 sanitized_properties[property_name] = 251 if (value.is_a?(Hash) || value.is_a?(Stormpath::Resource::Base)) && (property_name != 'customData') 252 deep_sanitize value 253 else 254 value 255 end 256 end 257 end 258 end