Archive for July, 2008
Monday, July 21st, 2008
So let’s say you have some random PDFs and what you want is one PDF that includes all of the original PDF files and a table of contents listing all of the files and the proper page numbers. Well in Ruby it is not too hard to put this together. There are a wealth of plugins, gems, and other ruby software available for manipulating and creating PDFs (a thorough list can be found here - http://wiki.rubyonrails.org/rails/pages/HowtoGeneratePDFs). To get this project up and running we are going to use two PDF::Writer (http://rubyforge.org/projects/ruby-pdf/) and PDFTK (http://www.accesspdf.com/pdftk/) - though if you want to get fancier and also include text, html, or xml documents you can use PDF::Htmldoc (http://htmldoc.rubyforge.org/) which requires Htmldoc to be installed. Before I do get started though, I also have give thanks to George Anderson over at Benevolent Code who wrote a lot of similar code on the project which provided me with some great examples.
(more…)
Tags: Adobe PDF, Ruby
Posted in Adobe PDF, Joseph Jakuta, Ruby on Rails | 1 Comment »
Monday, July 21st, 2008
After watching a railscast episode on advanced searching I thought I would give it a try. So I came up with a slightly modified version that would handle my search.
Model
class ExportSearch
def timecards
find_cards
end
def users(u)
@u = u
end
def projects(p)
@p = p
end
def tasks(t)
@t = t
end
def dates(date1, date2)
@d1 = date1
@d2 = date2
end
def clients(c)
@c = c
end
private
def find_cards
TimeCard.find(:all, :conditions => conditions, :include => {:task => :project}, :order => :date)
end
def projects_conditions
["tasks.project_id IN (?)", @p] unless @p.blank?
end
def client_conditions
["projects.client_id IN (?)", @c] unless @c.blank?
end
def date_conditions
["date BETWEEN ? AND ?", @d1, @d2] unless (@d1.blank? || @d2.blank?)
end
def task_conditions
["task_id IN (?)", @t] unless @t.blank?
end
def users_conditions
["user_id IN (?)", @u] unless @u.blank?
end
def conditions
[conditions_clauses.join(' AND '), *conditions_options]
end
def conditions_clauses
conditions_parts.map { |condition| condition.first }
end
def conditions_options
conditions_parts.map { |condition| condition[1..-1] }.flatten
end
def conditions_parts
private_methods(false).grep(/_conditions$/).map { |m| send(m) }.compact
end
end
Controller
search = ExportSearch.new
search.users(params[:export][:users].join(',')) unless params[:export][:users].blank?
search.tasks(params[:export][:tasks].join(',')) unless params[:export][:tasks].blank?
search.projects(params[:export][:projects].join(',')) unless params[:export][:projects].blank?
search.dates(start_date, end_date)
@time_cards = search.timecards
Tags: Advanced Search, Ruby, Ruby on Rails, Scott Davis
Posted in ActiveRecord, Ruby on Rails, Scott Davis | No Comments »
Saturday, July 19th, 2008
It took me a couple of days to get to my next Flex 4 example, but here we finally are. I wanted to try making a component which had optional SkinParts, so I came up with the following example (get the source). For those who don’t know, Flex 4 targets Flash Player 10 so you’ll need that in order to run the SWF.
In this example we will build a component called QuestionAndAnswer which will include a text field containing a question, a check box, and a text field containing an answer to the question. The check box and answer are both optional, so if the Skin file doesn’t include those SkinParts, they won’t be a part of the view. If they are included, then clicking the check box will show the text field containing the answer. Let’s see what the code looks like.
(more…)
Posted in Flex 4, Greg Jastrab | 2 Comments »
Wednesday, July 16th, 2008
So apparently I’m giving a week long series on getting started with Flex 4. I would have titled my content as such, but I guess I wasn’t sure if I would have learned enough to provide a week’s worth of content. Let’s give it a shot anyway.
As I briefly touched upon in yesterday’s post, layout is handled in new layout classes in Flex 4. Let’s dive in to making a simple, custom layout manager.
(more…)
Posted in Flex 4, Greg Jastrab, Gumbo | 4 Comments »
Wednesday, July 16th, 2008
In yesterday’s post I walked through how I got the Flex 4 SDK setup, compiled, and ran the first Hello World application in Flex 4. I said I would follow up today with skinning a Button using the new declarative graphics tags known as FXG (previously referred to as MXML-G), so here we are.
Today I want to explore using the new layout property as well as using a Skin file to describe how the button should look. Let’s get started…
(more…)
Posted in FXG, Flex 4, Greg Jastrab, Gumbo | 6 Comments »
Tuesday, July 15th, 2008
Big news today in the world of Flex! The first push of the Flex 4 source was made this afternoon (and another push was made this evening). Additionally, a lot of documentation was added to the Adobe Open Source site regarding Flex 4 (code-named “Gumbo”). Reading through the Architecture Whitepaper will leave you with a great handle around where things stand and the current direction Flex is headed.
To reward myself for reading through all of those docs this evening, I decided it would be appropriate to try to test out the new code and make my first Flex 4 application…
(more…)
Posted in FXG, Flex 4, Greg Jastrab, Gumbo | 10 Comments »
Friday, July 11th, 2008
I just ran into a fairly obscure bug. Bit me pretty good and stole an hour from me on an otherwise quiet Friday afternoon.
How the Problem Manifested Itself: Using restful_authentication, I could log in fine using Firefox and Opera, but not Internet Explorer or Safari. I figured, it’s just an HTML POST, nothing special, so what could be going wrong? I started to tail my logfile, and the session#create action was working properly. It was redirecting to a protected page, signifying that the login was successful. However, there was a second redirect occurring immediately after, sending me back to the login page. Here’s a tail of the logfile:
(more…)
Posted in Internet Explorer, John Trupiano, Ruby on Rails, cookies, restful_authentication | 2 Comments »
Friday, July 11th, 2008
One of our developers recently encountered some strange behavior when he was dragging a piece of data (which was a custom class) from a TileList and dropping it into a List, but losing some pieces of the dragged data when it was dropped into the List. I discovered the root of the issue by delving into the source for the dragDropHandler function within ListBase…
(more…)
Posted in AS3, Flex, Greg Jastrab, Serialization | No Comments »
Thursday, July 10th, 2008
So the problem is that I have an ActiveRecord model that has a :has_many relationship to another model (we’ll call this one object), but when I am in the view context I didn’t want to have to loop through the object each time to determine which data was being displayed. Object has many attributes (approximately 30) and many are often null for a given instance. So I decided to add a method to my model to loop through all of objects and determine which data should be included. Pretty much the rule was that if there was no data for a particular attribute temporarily save it to a copy of the object and then return that. This is what I came up with.
def object
tmp = objects.first
objects.each {|o| tmp.attributes.each {|key, value| tmp[key] = o[key] if value.blank? && key != 'id'}}
tmp.freeze
end
However there was a flaw here. Every time I would view the page all of the data in the objects was getting overwritten with one copy of it. After banging my head on the desk it was realized that tmp[key] = o[key] was actually writing the changes to the database permanently rewriting all of the objects (which still seems counter intuitive to me, because it seems like only the first record should have been the one changing). But the solution was pretty simple. The working method is as follows.
def object
tmp = Object.new
objects.each {|o| tmp.attributes.each {|key, value| tmp[key] = o[key] if value.blank? && key != 'id'}}
tmp.freeze
end
Posted in ActiveRecord, Joseph Jakuta, Ruby on Rails | No Comments »
Wednesday, July 9th, 2008
So as you may know. The new Word and Excel formats are similar to open office document formats in that they are just zips of multiple xml documents (well mostly xml documents). So what we wanted to do for our project (the WebDav one mentioned in my last post) is to set up a simple templating system that would do variable replacement in Word/Excel documents. And it turned out to be a piece of cake. I am just going to go through the DocX version of template model, but the only difference between them is the folder structure so there is not too much to change to get this working for both.
(more…)
Posted in Excel, Joseph Jakuta, Ruby on Rails, Word | No Comments »