Search code examples
ruby-on-railsrubygooddata

How to find real and actual using of an object in GoodData by Ruby


I try to deal with a problem of using/non-using attributes and facts on reports. GoodData API documentation says to use "using?" method. Here is my code:

project.attributes.each do |attr|
  project.reports.each do |report|
    puts report.title
    puts attr.title
    puts report.using?(attr)
  end
end

This simple test shows me, that since I use attribute once on my report, and delete right after, the information about a usage will be there forever.

Thank you for any advice how to find the real usage of attributes and facts on the report, not history.

Michal


Solution

  • There are two different concepts that need to be clarified. These are 'report' and 'report definition'.

    If you go to grey pages and check any of your reports, they might look like this:

    {
       "report" : {
          "content" : {
             "domains" : [],
             "definitions" : [
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/1672",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/1674",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/11135",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/11146",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/11155",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/11156",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/11157",
                "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/11211"
             ]
          },
          "meta" : {
             "author" : "/gdc/account/profile/18e93db4a57fba2d71f14fa6ea801d77",
             "uri" : "/gdc/md/m337ddyzwudoqgiq811pfuslld7phdz1/obj/1673",
             "tags" : "companya",
             "created" : "2014-01-25 10:14:33",
             "identifier" : "a9N6PNkSegqc",
             "deprecated" : "0",
             "summary" : "",
             "isProduction" : 1,
             "title" : "Yearly sales per office",
             "category" : "report",
             "updated" : "2016-02-23 12:40:18",
             "contributor" : "/gdc/account/profile/ca60c2f38c6804429f9c3934ea64ea09"
          }
       }
    }
    

    As you can see there, there are multiple versions of this report that had been saved every time you modified your report in the past.

    If you try, the way you did:

    puts report.using?(attribute)
    

    You would get TRUE if the attribute is part of any of the definitions of this report. In order to check exclusively if this attribute is part of the current/latest definition of the report you should use:

    puts report.definition.using?(attribute)
    

    Method #definition gives you the newest version of it. I hope this helps.

    Raúl Melgosa