329 Lotus blogs updated hourly. Who will post next? Home | Downloads | Events | Jobs | Twitter | Bookmarks | Pods | Blogs | Search | myPL | About 
 
Latest 7 Posts
How I Got XPiNC Run-On-Server With SSO Working
Fri, May 17th 2013 159
Public Service Announcement - NotesIn9 is down.
Tue, May 7th 2013 326
My Latest Programming-Technique Improvements
Tue, Apr 23rd 2013 185
Java Traps and Misconceptions
Tue, Apr 23rd 2013 185
Fun With Old XML Features
Tue, Apr 2nd 2013 218
Release M1 of org.openntf.domino
Tue, Apr 2nd 2013 203
We Have The Technology: The org.openntf.domino API
Thu, Mar 21st 2013 203
Top 10
"Controller" Classes Have Been Helping Me Greatly
Wed, Dec 26th 2012 680
Putting Apache in Front of Domino
Sat, Dec 8th 2012 674
Programming Tips: Implied Booleans and the Ternary Operator
Tue, Dec 11th 2012 483
Moving From Ruby-in-XPages to Polyglot
Wed, Dec 12th 2012 473
More On "Controller" Classes
Mon, Jan 7th 2013 445
Quick-and-Dirty CKEditor Toolbar Setup for XPages
Tue, Sep 4th 2012 377
Building XPages servlets with FacesContext access
Thu, Sep 6th 2012 335
Faking Sortable View Data
Sun, Jul 22nd 2012 334
My Current Data-Source Musings
Mon, Nov 26th 2012 326
Public Service Announcement - NotesIn9 is down.
Tue, May 7th 2013 326


Ruby for XPages Programmers, Part 1
Jesse Gallagher    

Since I'm always gabbing on about Ruby, I figured it'd be useful to give an overview of the language and, in future posts, why it's worth using for XPages scripting. I don't plan to write an exhaustive tutorial for the language (they're aplenty on the web), but I'll go over the basic concepts and some of how it compares to EL, Server JavaScript, and Java.

Ruby is a dynamic, object-oriented language with functional-programming features and syntax designed for programmer-friendliness. In terms of other languages, it's sort of like a combination of Perl's general syntax, Smalltalk's object model, and (some of) Lisp's functional and metaprogramming abilities. Additionally, Ruby has its own unique features and conventions, such as optional parentheses, property-style getters and setters, and yield statements.

Maybe the best way to provide a gentle introduction to Ruby is to show a relatively simple but contrived code example. Here is a "Point" class meant to represent a point in two-dimensional space where the X coordinate must always be positive:

class Point < Object # 1 attr_accessor :y # 2 attr_reader :x def initialize(x=0, y=0) # 3 @y = y # 4 self.x = x # 5 end def x=(x) # 6 raise Exception.new("x must be >= 0") if x < 0 # 7 @x = x end def to_s; "[#{@x}, #{@y}]"; end # 8 end

There are a lot of Ruby-isms going on, but hopefully the bulk of the code will be readable without knowing the language. Starting from the top, with a focus on the differences from Java:

  1. Classes are created with just class, with no public modifier, and must begin with a capital letter, which is the language-enforced convention for class names and constants. By unenforced convention, classes and constants are CamelCase. The "<" is equivalent to Java's extends. As in Java, extending Object is not needed, but is done here for demonstration purposes. Finally, # is Ruby's single-line comment delimiter, like // in Java or ' in LotusScript.
  2. attr_accessor and attr_reader are built-in Ruby class methods that generate getters+setters and getters only, respectively. The ":"s in :x and :y indicate that those are Symbols. Symbols are interesting beasts, but in this case think of them as meaning "the things named 'x' and 'y'".
  3. The initialize method is equivalent to Java's constructors and LotusScript's New. This one takes two parameters, but provides default values in case one or both are left out. While Ruby objects are strongly typed in that they all have a class, Ruby variables are typeless and not statically checked.
  4. The "@" symbol is used to denote instance variables, which, like all Ruby variables, don't need to be declared before they're used the first time. In this case, the line is equivalent to "this.y = y;" in Java.
  5. "self.x = x" is used here to indicate that the first "x" is calling the current object's x= method as opposed to setting the local variable "x" to itself. This line is equivalent to "this.setX(x);" in Java.
  6. Ruby, like C++, allows operator overloading, including this special type to define setters. This allows setting of the object's "x" parameter with code like "some_point.x = 3".
  7. This line is jam-packed!
    • Ruby's exceptions are essentially like Java's, except they use raise and begin/rescue instead of throw and try/catch.
    • Objects in Ruby are constructed by calling the new method on the class itself, rather than having new be a language keyword.
    • Ruby allows for conditional and looping statements at the end of single lines as syntactic sugar.
    • Ruby allows parentheses to be dropped when the resultant code is unambiguous.
  8. This line is pretty packed as well:
    • to_s is Ruby's equivalent to Java's toString().
    • Ruby, like JavaScript, uses optional semicolons. Here, they're used to pack the method definition into one line.
    • When a method takes no parameters, the () after the name is optional, both in definition and in use.
    • Ruby strings allow for code interpolation via #{...}. It's like value bindings in XPages or the equivalent feature in PHP or Perl - it allows Ruby code to be embedded in a string instead of +-based concatenation.
    • Like Server JavaScript and Formula Language, the last line in a Ruby method (except in initialize and assignment methods) is an implied return.
    • By convention, Ruby uses all-lowercase underscore_separated_words for variable and method names.

That ended up being a bit more complicated than I had expected, but hopefully it's a reasonable start (if not, there are definitely better Ruby tutorials on the web). In the next post in this thread, I'll describe some other unique or unusual Ruby features and concepts, and later I'll go into some more applicable examples to explain why Ruby is worth using in XPages generally.



---------------------
http://frostillic.us/f.nsf/posts/576E1294FD71E32485257A0F0004A379
May 30, 2012
147 hits



Recent Blog Posts
159


How I Got XPiNC Run-On-Server With SSO Working
Fri, May 17th 2013 5:14p   Jesse Gallagher
Among the new features in Domino 9 is this little guy, found on the Launch pane of a database's properties when you set it to open an XPage: If you've ever used an XPiNC application before, you'll know this is a godsend, promising the vast performance benefits of running an app on a server combined with the "the users are stuck using the Notes client" benefits of XPiNC. I turned this on for a new app on one of my client's servers (let's say the server name is ClientName-2/ClientNa [read] Keywords: admin domino notes notes client policies sametime xpages application database desktop network properties server
326


Public Service Announcement - NotesIn9 is down.
Tue, May 7th 2013 11:16a   Jesse Gallagher
David Leedy has run into some trouble with NotesIn9.com being down and he asked if I could help him get the word out about it, which I'm more than happy to do:     Hi - Just wanted to drop a note out there about my NotesIn9.com website.  Currently it's redirecting to someplace else for some unknown reason.  I assume it's been php hacked but I don't know.   My Wordpress site is generously hosted by Chris Miller and I've sent him a note.  Though since he's in the middle of the [read] Keywords: xpages bug
185


My Latest Programming-Technique Improvements
Tue, Apr 23rd 2013 9:18a   Jesse Gallagher
Over the past couple weeks, I've been trying out some new things to make my code a bit cleaner and I've been having a good time of it, so I figured I'd write up a quick summary. Composed Method First and foremost, I've been trying out the Composed Method of programming. This is not a new idea - indeed, it's a pretty direct application of general refactoring - but the slight perspective change from "factor out reused code" to starting out with clean, small blocks has been a pleasan [read] Keywords: agent domino ibm lotusscript xpages application database eclipse java openntf
185


Java Traps and Misconceptions
Tue, Apr 23rd 2013 6:16a   Jesse Gallagher
I wrote a post over at the Social Biz UG site covering a number of traps and conceptual hurdles I frequently see people running into when it comes to Java: https://www.socialbizug.org/blogs/gidgerby/entry/java_traps_and_misconceptions?l ang=en_us [read] Keywords: java
218


Fun With Old XML Features
Tue, Apr 2nd 2013 11:18p   Jesse Gallagher
One of the side effects of working on the OpenNTF Domino API is that I saw every method in the interfaces, including ones that were either new to me or that I had forgotten about a long time ago. One of these is the "parseXML" method found on Items, RichTextItems, and EmbeddedObjects. This was added back in 5.0.3, I assume for some reason related to the mail template, like everything else added back then. Basically, it takes either the contents of a text item, the text of a rich text ite [read] Keywords: domino ibm notes rich text xpages java javascript openntf xml
203


Release M1 of org.openntf.domino
Tue, Apr 2nd 2013 9:17p   Jesse Gallagher
Yesterday, we released milestone 1 of our improved Domino API. This is our first tagged release meant for proper testing - all of the classes are implemented, many of the banner features are in there, and we've been using it in various real-world situations. I switched a couple of my side projects over - my portfolio site, the code for this blog (though I haven't deployed the template yet), and a couple personal game-related apps. That kind of testing is going to be crucial in getting us [read] Keywords: domino openntf
203


We Have The Technology: The org.openntf.domino API
Thu, Mar 21st 2013 7:13p   Anonymous
As Nathan and Tim posted earlier today, a number of us have been working recently on a pretty exciting new project: the org.openntf.domino API. This is a drop-in replacement/extension for the existing lotus.domino Java API that improves its stability and feature set in numerous ways. The way I see it, there are a couple main areas of improvement: Plain Old Bug Fixes doc.hasItem(null) crashes a Domino server. That's no good! We've fixed that, and we're going through and fixing other [read] Keywords: agent domino dxl lotus notes bug database java openntf server xml
252


A Mini-Vacation With Ruby and the Domino Data Service
Sat, Mar 2nd 2013 4:11p   Jesse Gallagher
Since I've been neck-deep in LotusScript and Java for the past couple weeks, I decided to take a bit of a sanity break today and play around with Ruby. Specifically, I wrote a skeletal wrapper for the Domino Data Service in the ExtLib and the first steps of a Rails app using it a bit. I don't expect this to actually be useful down the line, or even necessarily to get any more work put into it, but it was a fun diversion. The API takes the same general shape as the normal Domino API, exce [read] Keywords: domino lotusscript database java server




268


I Know Some Guys
Tue, Feb 26th 2013 12:09p   Jesse Gallagher
I've been a bit quiet lately, but that's mostly because I've been pretty busy lately. After my old company began closing down, I started going whole-hog in my consulting company, I Know Some Guys. Naturally, I can't go TOO much into it, but the general gist is "so far, so good." We have a couple clients so far and they've been keeping me busy indeed. A lot of that has involved classic Notes client and web development, but I guess that serves me right for snickering at people work [read] Keywords: domino notes notes client consulting database development
289


The Bean-Backed Table Design Pattern
Tue, Jan 22nd 2013 4:13p   Jesse Gallagher
First off, I don't like the name of this that I came up with, but it'll have to do. One of the design problems that comes up all the time in Notes/Domino development is the "arbitrary table" idea. In classic Notes, you could solve this with an embedded view, generated HTML (if you didn't want it to be good), or a fixed-size table with a bunch of hide-whens. With XPages, everything is much more flexible, but there's still the question of the actual implementation. The route I've bee [read] Keywords: domino notes xpages database development java




Created and Maintained by Yancy Lent - About - Blog Submission - Suggestions - Change Log - Blog Widget - Advertising - Mobile Edition