From f3e48995131196b7e3a25b9414a32bdaf09f1fa6 Mon Sep 17 00:00:00 2001 From: Syphax Bouazzouni Date: Wed, 17 Apr 2024 16:26:32 +0200 Subject: [PATCH] refactor and clean the model settings code --- .ruby-version | 1 + Gemfile.lock | 4 ++- goo.gemspec | 3 ++- lib/goo/base/resource.rb | 45 +++++++++---------------------- lib/goo/base/settings/settings.rb | 30 ++++++++++++++++----- 5 files changed, 41 insertions(+), 42 deletions(-) create mode 100644 .ruby-version diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 00000000..6a81b4c8 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.7.8 diff --git a/Gemfile.lock b/Gemfile.lock index b6867344..2544fa8e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -121,6 +121,8 @@ GEM PLATFORMS x86_64-darwin-18 + x86_64-darwin-23 + x86_64-linux DEPENDENCIES activesupport @@ -139,4 +141,4 @@ DEPENDENCIES uuid BUNDLED WITH - 2.3.15 + 2.4.22 diff --git a/goo.gemspec b/goo.gemspec index c3386799..86b50832 100644 --- a/goo.gemspec +++ b/goo.gemspec @@ -6,7 +6,8 @@ Gem::Specification.new do |s| s.email = "manuelso@stanford.edu" s.files = Dir["lib/**/*.rb"] s.homepage = "http://github.com/ncbo/goo" - s.add_dependency("addressable", "~> 2.8") + + s.add_dependency("addressable", "~> 2.8") s.add_dependency("pry") s.add_dependency("rdf", "= 1.0.8") s.add_dependency("redis") diff --git a/lib/goo/base/resource.rb b/lib/goo/base/resource.rb index ac68ccbc..fd50eb80 100644 --- a/lib/goo/base/resource.rb +++ b/lib/goo/base/resource.rb @@ -42,9 +42,7 @@ def valid? self.class.attributes.each do |attr| inst_value = self.instance_variable_get("@#{attr}") attr_errors = Goo::Validators::Enforce.enforce(self,attr,inst_value) - unless attr_errors.nil? - validation_errors[attr] = attr_errors - end + validation_errors[attr] = attr_errors unless attr_errors.nil? end if !@persistent && validation_errors.length == 0 @@ -70,9 +68,7 @@ def valid? end def id=(new_id) - if !@id.nil? and @persistent - raise ArgumentError, "The id of a persistent object cannot be changed." - end + raise ArgumentError, "The id of a persistent object cannot be changed." if !@id.nil? and @persistent raise ArgumentError, "ID must be an RDF::URI" unless new_id.kind_of?(RDF::URI) @id = new_id end @@ -128,6 +124,7 @@ def unmapped_set(attribute,value) def unmmaped_to_array cpy = {} + @unmapped.each do |attr,v| cpy[attr] = v.to_a end @@ -136,9 +133,7 @@ def unmmaped_to_array def delete(*args) if self.kind_of?(Goo::Base::Enum) - unless args[0] && args[0][:init_enum] - raise ArgumentError, "Enums cannot be deleted" - end + raise ArgumentError, "Enums cannot be deleted" unless args[0] && args[0][:init_enum] end raise ArgumentError, "This object is not persistent and cannot be deleted" if !@persistent @@ -146,9 +141,7 @@ def delete(*args) if !fully_loaded? missing = missing_load_attributes options_load = { models: [ self ], klass: self.class, :include => missing } - if self.class.collection_opts - options_load[:collection] = self.collection - end + options_load[:collection] = self.collection if self.class.collection_opts Goo::SPARQL::Queries.model_load(options_load) end @@ -164,9 +157,7 @@ def delete(*args) end @persistent = false @modified = true - if self.class.inmutable? && self.class.inm_instances - self.class.load_inmutable_instances - end + self.class.load_inmutable_instances if self.class.inmutable? && self.class.inm_instances return nil end @@ -174,15 +165,11 @@ def bring(*opts) opts.each do |k| if k.kind_of?(Hash) k.each do |k2,v| - if self.class.handler?(k2) - raise ArgumentError, "Unable to bring a method based attr #{k2}" - end + raise ArgumentError, "Unable to bring a method based attr #{k2}" if self.class.handler?(k2) self.instance_variable_set("@#{k2}",nil) end else - if self.class.handler?(k) - raise ArgumentError, "Unable to bring a method based attr #{k}" - end + raise ArgumentError, "Unable to bring a method based attr #{k}" if self.class.handler?(k) self.instance_variable_set("@#{k}",nil) end end @@ -197,9 +184,7 @@ def bring(*opts) def graph opts = self.class.collection_opts - if opts.nil? - return self.class.uri_type - end + return self.class.uri_type if opts.nil? col = collection if col.is_a?Array if col.length == 1 @@ -281,9 +266,7 @@ def collection if opts.instance_of?(Symbol) if self.class.attributes.include?(opts) value = self.send("#{opts}") - if value.nil? - raise ArgumentError, "Collection `#{opts}` is nil" - end + raise ArgumentError, "Collection `#{opts}` is nil" if value.nil? return value else raise ArgumentError, "Collection `#{opts}` is not an attribute" @@ -370,9 +353,7 @@ def save(*opts) @modified_attributes = Set.new @persistent = true - if self.class.inmutable? && self.class.inm_instances - self.class.load_inmutable_instances - end + self.class.load_inmutable_instances if self.class.inmutable? && self.class.inm_instances return self end @@ -410,9 +391,7 @@ def to_hash end end @unmapped.each do |attr,values| - unless all_attr_uris.include?(attr) - attr_hash[attr] = values.map { |v| v.to_s } - end + attr_hash[attr] = values.map { |v| v.to_s } unless all_attr_uris.include?(attr) end end attr_hash[:id] = @id diff --git a/lib/goo/base/settings/settings.rb b/lib/goo/base/settings/settings.rb index 4a6b9b26..5512278e 100644 --- a/lib/goo/base/settings/settings.rb +++ b/lib/goo/base/settings/settings.rb @@ -200,9 +200,12 @@ def attribute(*args) attr_name = attr_name.to_sym options = options.pop options = {} if options.nil? - if options[:enforce].nil? or !options[:enforce].include?(:list) - options[:enforce] = options[:enforce] ? (options[:enforce] << :no_list) : [:no_list] - end + + options[:enforce] ||= [] + + set_data_type(options) + set_no_list_by_default(options) + @model_settings[:attributes][attr_name] = options load_yaml_scheme_options(attr_name) shape_attribute(attr_name) @@ -248,15 +251,13 @@ def shape_attribute(attr) raise ArgumentError, "Method based attributes cannot be set" end if self.class.inverse?(attr) && !(args && args.last.instance_of?(Hash) && args.last[:on_load]) - raise ArgumentError, - "`#{attr}` is an inverse attribute. Values cannot be assigned." + raise ArgumentError, "`#{attr}` is an inverse attribute. Values cannot be assigned." end @loaded_attributes.add(attr) value = args[0] unless args.last.instance_of?(Hash) and args.last[:on_load] if self.persistent? and self.class.name_with == attr - raise ArgumentError, - "`#{attr}` attribute is used to name this resource and cannot be modified." + raise ArgumentError, "`#{attr}` attribute is used to name this resource and cannot be modified." end prev = self.instance_variable_get("@#{attr}") if !prev.nil? and !@modified_attributes.include?(attr) @@ -388,6 +389,21 @@ def read_only(attributes) instance end + + private + + def set_no_list_by_default(options) + if options[:enforce].nil? or !options[:enforce].include?(:list) + options[:enforce] = options[:enforce] ? (options[:enforce] << :no_list) : [:no_list] + end + end + def set_data_type(options) + if options[:type] + options[:enforce] += Array(options[:type]) + options[:enforce].uniq! + options.delete :type + end + end end end end