sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Code] Locking down the API

    Scheduled Pinned Locked Moved Developers' Forum
    3 Posts 2 Posters 142 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • thomthomT Offline
      thomthom
      last edited by

      From this post - just another in a long series of similar posts I did a wee experiment:

      !!!!!API-LockDown.rb

      <span class="syntaxdefault"><br />require </span><span class="syntaxstring">'sketchup.rb'<br /></span><span class="syntaxdefault">require </span><span class="syntaxstring">'extensions.rb'<br /></span><span class="syntaxdefault">require </span><span class="syntaxstring">'langhandler.rb'<br /><br /></span><span class="syntaxkeyword">Array.</span><span class="syntaxdefault">freeze<br />Bignum</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Binding</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Comparable</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Continuation</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Data</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Dir</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Enumerable</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Exception</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />FalseClass</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />FileTest</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Fixnum</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Float</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Geom</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Hash</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />IO</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Integer</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Interrupt</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br /></span><span class="syntaxcomment">#Kernel.freeze<br /></span><span class="syntaxdefault">LanguageHandler</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Length</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Marshal</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />MatchData</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Math</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Method</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br /></span><span class="syntaxcomment">#Module.freeze<br /></span><span class="syntaxdefault">NilClass</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Numeric</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br /></span><span class="syntaxcomment">#Object.freeze<br /></span><span class="syntaxdefault">Precision</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Proc</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Process</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Range</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Regexp</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />SKSocket</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Set</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Signal</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />SignalException</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />SketchupExtension</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />String</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Struct</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Symbol</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />SystemExit</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Test</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Thread</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />ThreadGroup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />Time</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />TrueClass</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br />UnboundMethod</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">freeze<br /></span>
      

      After I placed this in the plugins folder, ensuring it's alphabetically first, I would get errors for every plugin that tries to mess around with Ruby's base classes and SketchUp's own classes.

      With a plain vanilla installation in SU7 I get errors with Dynamic Components. Because it tries to add methods to the SketchUp classes.

      The list was compiled from the root modules/classes of plain vanilla SketchUp7. I removed the sub-classes/modules and also the Error classes.

      This can be useful in debugging - as you completely lock down the core of SU's API - preventing changes from other plugins. Saves you from looking into every RB files installed. And also catches whatever RBS files might try to do. (Though I'm not sure what error message you get then - if it's of any use.)

      As you see, Kernel, Object, Class and Module is not frozen - that just cause havoc. There might be more classes that should not be frozen - I don't know. Haven't tested yet.

      I would not freeze modules and classes in production code! This is just for personal debugging!

      Thomas Thomassen — SketchUp Monkey & Coding addict
      List of my plugins and link to the CookieWare fund

      1 Reply Last reply Reply Quote 0
      • Dan RathbunD Offline
        Dan Rathbun
        last edited by

        @thomthom said:

        ... I get errors with Dynamic Components. Because it tries to add methods to the SketchUp classes.

        It NEEDS to modify several classes, so you will need to add a require('dynamiccomponents.rb') at the top of the file, before freezing.

        You can shorten the file using ObjectSpace.each_object() iterators:

        Freezes the 93 API modules and classes:

        # Freeze the 93 API modules and classes;
        ObjectSpace.each_object(Module) {|o| o.freeze if o.name =~ /DC|Dynamic|Geom|Sketchup|UI/ }
        

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • thomthomT Offline
          thomthom
          last edited by

          @dan rathbun said:

          You can shorten the file using ObjectSpace.each_object() iterators:

          I'm locking down more than the API - also the Ruby core classes.

          @dan rathbun said:

          It NEEDS to modify several classes, so you will need to add a require('dynamiccomponents.rb') at the top of the file, before freezing.

          Well, "needs"... ...they chose to. But yes. One adds exceptions as one pleases. This list is just a boilerplate lock-down.

          Thomas Thomassen — SketchUp Monkey & Coding addict
          List of my plugins and link to the CookieWare fund

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Buy SketchPlus
          Buy SUbD
          Buy WrapR
          Buy eBook
          Buy Modelur
          Buy Vertex Tools
          Buy SketchCuisine
          Buy FormFonts

          Advertisement