lib/ronin/model/has_name.rb in ronin-1.1.0 vs lib/ronin/model/has_name.rb in ronin-1.2.0

- old
+ new

@@ -15,7 +15,77 @@ # # You should have received a copy of the GNU General Public License # along with Ronin. If not, see <http://www.gnu.org/licenses/>. # -require 'ronin/model/has_name/class_methods' -require 'ronin/model/has_name/has_name' +require 'ronin/model' + +module Ronin + module Model + # + # Adds a `name` property to a model. + # + module HasName + # + # Adds the `name` property and {ClassMethods} to the model. + # + # @param [Class] base + # The model. + # + # @api semipublic + # + def self.included(base) + base.send :include, Model, InstanceMethods + base.send :extend, ClassMethods + + base.module_eval do + # The name of the model + property :name, String, :required => true, :index => true + end + end + + # + # Class methods that are added when {HasName} is included into a + # model. + # + module ClassMethods + # + # Finds models with names containing a given fragment of text. + # + # @param [String] fragment + # The fragment of text to search for within the names of models. + # + # @return [Array<Model>] + # The found models. + # + # @example + # Exploit.named 'ProFTP' + # + # @api public + # + def named(fragment) + all(:name.like => "%#{fragment}%") + end + end + + # + # Instance methods that are added when {HasName} is included into a + # model. + # + module InstanceMethods + # + # Converts the named resource into a String. + # + # @return [String] + # The name of the resource. + # + # @since 1.0.0 + # + # @api public + # + def to_s + self.name.to_s + end + end + end + end +end