Sha256: f9864da74f110f9b2f9706fb293eb42b7bf3da17a72dd1effd5f7b6064c21cfa

Contents?: true

Size: 1.6 KB

Versions: 4

Compression:

Stored size: 1.6 KB

Contents

require "peto/mixin/peto_class"
require "peto/mixin/peto_errorable"

module Peto
  <%- each_types do |name, args| -%>
  class <%= name %>
    include PetoClass
    def initialize(args={})
      <%- args.each do |arg| -%>
        <%- if arg[:array_type] -%>
      @<%= arg[:name] %> = [] # for <%= arg[:array_type] %>
        <%- else -%>
      @<%= arg[:name] %> = nil
        <%- end -%>
      <%- end -%>

      set_by_hash(args)
      raise_errors unless valid?
    end

    <%- args.each do |arg| -%>
    attr_reader :<%= arg[:name] %>
    <%- end -%>

    def members
      [<%= args.map{|arg| ":#{arg[:name]}"}.join(",") %>]
    end

    def types
      {<%= args.map{|arg| ":#{arg[:name]} => #{arg[:type]}"}.join(",") %>}
    end

    def arrays
      {<%= args.select{|arg|arg[:array_type]}.map{|arg| ":#{arg[:name]} => #{arg[:array_type]}"}.join(",") %>}
    end
  end
  <%- end -%>
end

module Peto
  class <%= class_name %>
    extend PetoErrorable
    <%- each_procedures do |name, args| -%>
    def self.<%= name %>(<%= args.map{|arg| arg[:name]}.join(",") %>)
      <%- args.each do |arg| -%>
      invalid_type("<%= arg[:name] %>", <%= arg[:type] %>, <%= arg[:name] %>) unless <%= arg[:name] %>.class == <%= arg[:type] %>
      <%- end -%>
      raise_errors unless errors.empty?

      return {
        :procedure => "<%=name%>",
        :args => {
          <%- args.each do |arg| -%>
          :<%=arg[:name]%> => hashize(<%=arg[:name]%>),
          <%- end -%>
        }
      }
    end

    <%- end -%>

    def self.hashize(var)
      return var if [Fixnum, String].include?(var.class)
      var.to_hash
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
peto-0.1.3 lib/templates/rb_procedures.erb
peto-0.1.2 lib/templates/rb_procedures.erb
peto-0.1.1 lib/templates/rb_procedures.erb
peto-0.1.0 lib/templates/rb_procedures.erb