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

    JSON in Ruby

    Scheduled Pinned Locked Moved Developers' Forum
    48 Posts 7 Posters 7.0k Views 7 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.
    • Dan RathbunD Offline
      Dan Rathbun
      last edited by

      @myhand said:

      @aerilius said:

      please take a look and make use of the WebDialogX project.

      I cannot access the content. I get "You do not have access to the wiki." message, even after I have registered.

      Sorry, it is a 5-slot private repository at this time, and we really need very experienced Rubyists for the slots.

      And you are kinda re-inventing the wheel. Js has %(#8000BF)[escape()] and %(#8000BF)[unescape()], and Ruby has them in the URI library.

      See topic: http://sketchucation.com/forums/viewtopic.php?f=180&t=49183#p442102

      In fact I would vote for Ruby's URI::Escape module to be mixed into the SketchUp API UI::WebDialog class.

      I'm not here much anymore.

      1 Reply Last reply Reply Quote 0
      • M Offline
        Myhand
        last edited by

        @dan rathbun said:

        Sorry, it is a 5-slot private repository at this time, and we really need very experienced Rubyists for the slots.

        No problem Dan, I only looked there as Aerilius recommended I do so.

        @dan rathbun said:

        And you are kinda re-inventing the wheel. Js has %(#8000BF)[escape()] and %(#8000BF)[unescape()], and Ruby has them in the URI library.

        See topic: http://sketchucation.com/forums/viewtopic.php?f=180&t=49183#p442102

        In fact I would vote for Ruby's URI::Escape module to be mixed into the SketchUp API UI::WebDialog class.

        Thank you, I will try the URI library (I already use escape() in my latest JS code). I do not really want to reinvent the wheel, hence me asking the question here.

        http://www.keepingmyhandin.com/

        1 Reply Last reply Reply Quote 0
        • M Offline
          Myhand
          last edited by

          @aerilius said:

          1. You need to escape \ characters in the double-quoted javascript code that you want to bring into the webdialog (this first escaping is what makes a valid Ruby string).
            %(#000000)["alert('C:\users')"] # bad Ruby string
            %(#000000)["alert('C:\\users')"] # good Ruby string
          2. In the webdialog, the string arrives written in a script element. As always, the same escaping rules apply again:
            %(#000000)[alert('C:\users')] // bad JavaScript code
            %(#000000)[alert('C:\\users')] // good JavaScript code

          => So finally this means we need double escaping on the Ruby side!
          %(#000000)["alert('C:\\\\users')"] # Ruby string

          Thanks for a very clear explanation. πŸ‘ I tried this last night and it worked. Need 7 '''s for a "!

          http://www.keepingmyhandin.com/

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

            @myhand said:

            Need 7 '''s for a "!

            ❓ ❓

            What?

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

            1 Reply Last reply Reply Quote 0
            • M Offline
              Myhand
              last edited by

              @dan rathbun said:

              And you are kinda re-inventing the wheel. Js has %(#8000BF)[escape()] and %(#8000BF)[unescape()], and Ruby has them in the URI library.

              See topic: http://sketchucation.com/forums/viewtopic.php?f=180&t=49183#p442102

              Thanks for this Dan! It works well, and I do not need to remember the number of slashes. πŸ˜„

              I see that escape() and unescape() are deprecated though and that you are recommended to use

              decodeURI()
              
              decodeURIComponent()
              

              Which do you recommend or should I continue with unescape()?

              http://www.keepingmyhandin.com/

              1 Reply Last reply Reply Quote 0
              • M Offline
                Myhand
                last edited by

                @thomthom said:

                @myhand said:

                Need 7 '''s for a "!

                ❓ ❓

                What?

                Sorry, meant you need

                "a JSON escaped double quote need to be specified like this \\\\\\\" in Ruby for a WebDialog call"

                to produce

                "a JSON escaped double quote need to be specified like this \" in Ruby for a WebDialog call"
                

                as the parameter of the JS function called.

                http://www.keepingmyhandin.com/

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

                  Hmmm..

                  given a Js function named say()

                  .. and a Ruby string:
                  jarg = %q('a JSON escaped double quote need to be specified like this %q(\") in Ruby for a WebDialog call')

                  I usually do something like this:

                  dlg.execute_script("say(#{jarg});")

                  or I will leave the single quotes out of the jarg string, and put them in at the call ...

                  jarg = %q(a JSON escaped double quote need to be specified like this %q(\") in Ruby for a WebDialog call.)
                  dlg.execute_script( "say('" << jarg << "');" )

                  πŸ’­

                  I'm not here much anymore.

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

                    [quote="Myhand":31wco2xd]I see that %(#8000BF)[escape()] and %(#8000BF)[unescape()] are deprecated (in Javascript,) though, and that you are recommending to use [them]
                    ***%(#BF4000)[
                    @unknownuser said:

                    ]***

                    @unknownuser said:

                    ](http://msdn.microsoft.com/en-us/library/dz4x90hk(v)":31wco2xd]The unescape function should not be used to decode Uniform Resource Identifiers (URI). Use decodeURI and decodeURIComponent functions instead.
                    %(#8000BF)[decodeURI()]
                    %(#8000BF)[decodeURIComponent()]

                    Which do you recommend or should I continue with %(#8000BF)[unescape()]?

                    The old functions are ASCII, the new ones are Unicode.

                    Taking a look at the most recent released ECMA-262 (but not the latest proposed revision,) the old functions are no longer listed.

                    see: ECMA-262, 5.1, Global Object: 15.1.3 URI Handling Function Properties
                    ECMAScript Language Specification
                    Standard ECMA-262
                    5.1 Edition / June 2011

                    Link to the downloadable PDF of the specification.


                    But you need to handle the situation where an older browser does not have these functions so, write a wrapper in JS:

                    var unesc = function(uri) {
                        var test = false;
                        if (typeof(decodeURI) == "function") test = true;
                        return test ? decodeURI(uri) ; unescape(uri);
                    }
                    

                    πŸ’­

                    I'm not here much anymore.

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

                    Advertisement