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