• Login
sketchucation logo sketchucation
  • Login
πŸ€‘ SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

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.
  • D Offline
    Dan Rathbun
    last edited by 4 Dec 2012, 15:06

    @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 4 Dec 2012, 16:27

      @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 5 Dec 2012, 10:00

        @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
        • T Offline
          thomthom
          last edited by 5 Dec 2012, 10:05

          @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 5 Dec 2012, 10:38

            @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 5 Dec 2012, 10:49

              @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
              • D Offline
                Dan Rathbun
                last edited by 5 Dec 2012, 11:40

                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
                • D Offline
                  Dan Rathbun
                  last edited by 5 Dec 2012, 12:53

                  [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
                  3 / 3
                  • First post
                    41/48
                    Last post
                  Buy SketchPlus
                  Buy SUbD
                  Buy WrapR
                  Buy eBook
                  Buy Modelur
                  Buy Vertex Tools
                  Buy SketchCuisine
                  Buy FormFonts

                  Advertisement