Module: RestChange
- Included in:
- ActiveOrient::OrientDB
- Defined in:
- lib/rest/change.rb
Instance Method Summary collapse
-
#alter_property(o_class, property:, attribute: "DEFAULT", alteration:) ⇒ Object
Used to add restriction or other properties to the Property of a Class.
-
#change_database(name) ⇒ Object
Changes the working-database to name.
-
#patch_record(rid) ⇒ Object
(also: #patch_document)
Lazy Updating of the given Record.
-
#update(record, attributes, version = 0) ⇒ Object
Convient update of the dataset by calling sql-patch.
-
#update_records(o_class, set: {}, where: {}, remove: nil) ⇒ Object
Example: ORD.update_documents classname, set: => ‘TWR’, where: 340.
Instance Method Details
#alter_property(o_class, property:, attribute: "DEFAULT", alteration:) ⇒ Object
Used to add restriction or other properties to the Property of a Class.
See http://orientdb.com/docs/2.1/SQL-Alter-Property.html
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/rest/change.rb', line 98 def alter_property o_class, property:, attribute: "DEFAULT", alteration: # :nodoc: because untested logger.progname = 'RestChange#AlterProperty' begin attribute.to_s! unless attribute.is_a? String attribute.capitalize_first_letter case attribute when "LINKEDCLASS", "LINKEDTYPE", "NAME", "REGEX", "TYPE", "REGEX", "COLLATE", "CUSTOM" unless alteration.is_a? String logger.error{"#{alteration} should be a String."} return 0 end when "MIN", "MAX" unless alteration.is_a? Integer logger.error{"#{alteration} should be an Integer."} return 0 end when "MANDATORY", "NOTNULL", "READONLY" unless alteration.is_a? TrueClass or alteration.is_a? FalseClass logger.error{"#{alteration} should be an Integer."} return 0 end when "DEFAULT" else logger.error{"Wrong attribute."} return 0 end name_class = classname(o_class) execute name_class, transaction: false do # To execute commands [{ type: "cmd", language: 'sql', command: "ALTER PROPERTY #{name_class}.#{property} #{attribute} #{alteration}"}] end rescue Exception => e logger.error{e.} end end |
#change_database(name) ⇒ Object
Changes the working-database to name
7 8 9 10 11 |
# File 'lib/rest/change.rb', line 7 def change_database name @classes = [] @database = name ActiveOrient.database = name end |
#patch_record(rid) ⇒ Object Also known as: patch_document
Lazy Updating of the given Record.
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rest/change.rb', line 75 def patch_record rid # :nodoc: (used by Model#update ) logger.progname = 'RestChange#PatchRecord' content = yield if content.is_a? Hash begin @res["/document/#{ActiveOrient.database}/#{rid}"].patch content.to_orient.to_json rescue Exception => e logger.error{e.} end else logger.error{"FAILED: The Block must provide an Hash with properties to be updated"} end end |
#update(record, attributes, version = 0) ⇒ Object
Convient update of the dataset by calling sql-patch
The argument record can be specified as ActiveOrient::Model-instance or as rid-string( #0:0 )
called from ModelRecord#update
if the update was successful, the updated ActiveOrient::Model-record is returned.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/rest/change.rb', line 25 def update record, attributes , version=0 # :nodoc: r = if record.is_a?(String) && record.rid? ActiveOrient::Model.autoload record else record end return(false) unless r.is_a?(ActiveOrient::Model) version = r.version if version.zero? result = patch_record(r.rid) do attributes.merge({'@version' => version, '@class' => r.class.ref_name }) end # returns a new instance of ActiveOrient::Model and updates any reference on rid # if the patch is not successfull no string is returned and thus no record is fetched # puts JSON.parse(result) if result.is_a?(String) ActiveOrient::Model.orientdb_class(name: r.class.ref_name, superclass: :find_ME ).new(JSON.parse(result)) if result.is_a?(String) end |
#update_records(o_class, set: {}, where: {}, remove: nil) ⇒ Object
Example:
ORD.update_documents classname, set: {:symbol => 'TWR'}, where: {con_id: 340}
Replaces the symbol to TWR in each record where the con_id is 340
Both set and where take multiple attributes
Returns the JSON-Response.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rest/change.rb', line 54 def update_records o_class, set:{}, where: {}, remove: nil logger.progname = 'RestChange#UpdateRecords' url = if set.present? "UPDATE #{classname(o_class)} SET #{generate_sql_list(set)} #{compose_where(where)}" elsif remove.present? "UPDATE #{classname(o_class)} remove #{remove} #{compose_where(where)}" end r = @res[URI.encode("/command/#{ActiveOrient.database}/sql/" << url)].post '' count_of_updated_records = (JSON.parse( r))['result'].first['value'] ## remove all records of the class from cache ActiveOrient::Base.display_rid.delete_if{|x,y| y.is_a? o_class } if count_of_updated_records > 0 && o_class.is_a?(Class) count_of_updated_records # return_value rescue Exception => e logger.error{e.} nil end |