sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    πŸ›£οΈ Road Profile Builder | Generate roads, curbs and pavements easily Download

    JSON in Ruby

    Scheduled Pinned Locked Moved Developers' Forum
    48 Posts 7 Posters 7.4k 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