[Nitro] Og inheritance problem in detail..

George Moschovitis george.moschovitis at gmail.com
Wed Oct 12 01:58:53 EDT 2005


Thanks for the detailed report. I will read it carefuly later today,
and if the fix is easy it will make it in 0.24.0

-g.

On 10/12/05, Emmanuel Piperakis <epiperak at softlab.ece.ntua.gr> wrote:
> So, I decided to split the 2 problems I face in Og to different postings.
> Problem 1. Inheritance
> Example
>
> class Project
>    property :title, String
>    property :creation, Date
>    has_many   :reports
>    has_one    Bgroup
> end
>
> class ForeignProject < Project
>    property :acquisition_date,     Date
>    property :placement_date,       Date
>    property :sales_commission_per, Fixnum
> end
>
> class DomesticProject < Project
>    property :contract_date,     Date
>    property :closing_date,      Date
>    property :transfer_date,     Date
>    property :loan_to_value_per, Fixnum
> end
>
> class Bgroup # Building Group
>    property :title, String
>    property :creation, Date
>    belongs_to :project
> end
>
> class Report
>    property   :startd,            Date
>    property   :currentd,          Date
>    property   :endd,              Date
>    property   :period,            Fixnum # 1="Monthly", 2="Bi-monthly", ...
>    belongs_to :project
> end
>
> class CashflowReport < Report
>    property  :title_row_a, String
>    property  :title_row_b, String
>
>    def calculation
>     ...
>    end
> end
>
> class TenantRollReport < Report
>    property :title_col, String
>
>    def calculation
>     ...
>    end
> end
>
> --------------------------------------------------
> Observations:
> =============
> 1. The line has_one Bgroup creates in the Project table a bgroup_oid and
> in the Bgroup table a project_oid. Inheritance creates in ForeignProject
> and DomesticProject tables a bgroup_oid column per each too.
> 2. The line has_many :reports creates in the Report table a project_oid
> and inheritance creates in the subclasses of the Report a project_oid
>
> Problems:
> =========
> 1. Suppose the following code occurs (just note that you never use Report
> or Project but only the subclasses)
> ----------------------------- code -----------------------
> fp = ForeignProject.new
> fp.bgroup_oid = session[:bgroup_oid] # I get it from somewhere
> bg = Bgroup[session[:bgroup_oid]].project_oid = fp.oid
> # PROBLEM-1: Maybe the above line should somehow be automatically
> # performed
>
> project = bg.project
> # PROBLEM-2: The above line returns the project, but we do not know to
> # which subclass it corresponds. I am not sure if
> project.class # WORKS?
>
> 2.
> ----------------------------- code --------------------------
> rp = CashflowReport.new
> rp.project_oid = fp.oid
>
> project = rp.project
> # PROBLEM-3: Same as above, but in this case Og fails 100%
> # rp.project searches the Project table instead of the ForeignProject
>
> =================================================================
> Solution:
> -------------
> 1. For each subclass add foreign keys like this:
>
> a) in Bgroup, foreignproject_oid, domesticproject_oid and automatically
> set the correct one, based on the .class of the assignment
> b) in CashflowReport do the same like in a)
> c) in Report and Project add functions for querying the subclassess...
>
> ==========================================================
> I am not sure if the above makes sense, but I believe they have to be
> resolved if Og is to be the No1 tool ;-)
>
> Thanx
>
> Ps. one more email to follow about types of properties
>
>
>
> Emmanouil Piperakis (epiperak at cs.ntua.gr)
> {To explore is Human, to Create is Devine,
>   To teach is Primal, to Rule is Sin}
> _______________________________________________
> Nitro-general mailing list
> Nitro-general at rubyforge.org
> http://rubyforge.org/mailman/listinfo/nitro-general
>


--
http://www.gmosx.com
http://www.navel.gr
http://www.nitrohq.com




More information about the Nitro-general mailing list