Episode V: Settings strike back

Today we are releasing a new feature that has been cooking slowly in the labs during a lot of time.

We have completely revamped the Ubiquo::Config module and now it's called Settings. But has a lot more to offer. Type validation, transparent backend, and best of all, no-brainer CMS integration, to easily allow Ubiquo users to change the value of the settings.

The new syntax looks like this:

It gets better: it's backwards compatible with the old syntax! (you'll have a nice deprecation warning though). This means that you can add it to your existing project following these simple steps:

  1. Update ubiquo_core (it's where it is bundled, since it's a basic piece to build the other plugins). You should be in the 0.8-stable branch.

That's all! You can start to use Settings from here. But if you want to use the user interface too:

  1. Overwrite the ubiquo.css and ubiquo.js from ubiquo_core to your app.
  2. Open your _main_navtabs file and use ubiquo_settings_tab(navigator) wherever you want the Settings tab to appear in.

Nothing more required. It's time to start playing with it. You will find more info in the ubiquo_core guide and in ubiquo_configuration if you want to learn how to get the most of it.

 

Filed under  //   edge   releases   stable  
Posted by David Lozano 

Comments [0]

Releasing ubiquo 0.8

A new version of ubiquo is out!

After these months of "silent" work on the master branch, we reached the features for this release.

We've devoted a lot of love and time to it and we expect you to like it as much as we do. We use it everyday, so we can assure you that it's something to consider.

Among other, the main changes are:

Ubiquo Categories

Our categorization plugin makes it really easy to tag or classify your models. It actually has become a "must-have" plugin for us. It provides a simple mechanism to organize and categorize the content of your website, adding a generic category system for your models and forms. It makes easy the typical case of news categorization, write post tags or choose an attribute value from a list of options. You categorize something with only 2 lines of code. It rocks!

Find out more in ubiquo categories guide.

Ubiquo Design

This plugin provides a complete solution for the public part of your website. It gives you the needed tools to publish pages with a modular structure in a totally dynamic way. Managing page contents with a user-friendly drag & drop interface, organized within blocks that can be shared among other pages, or creating diferent page layouts. It allows to publish multilingual contents when working together with the ubiquo_i18n plugin. Cache aware, tied to the models and integrated with the rails cache framework, thanks to our experience in high load sites.

It brings reusability, power and user-friendlyness to the publishers in their day by day work. It's also this way for the developer who works on it.

Find out more in ubiquo design guide.

Ubiquo Core

Our plugin base where we set the main features and where other plugins can be built on top of it. We've refactored the filters interface to get a big code reduction. Redesigned the user interface to a freshened and cooler look. Improved the lightbox implementation giving support to nested lightboxes, and added a custom builder to reduce code repetition when writing forms without losing freedom. Easily schedule your cron jobs without having to worry about concurrency, logging, notifying, or installing on the environments. A class loading mechanism to easily extend the ubiquo plugins code without forking it. And at last but not less important, a relation selector, to manage the associations between models on the forms in a breeze!

Find out more in ubiquo core guide.

Ubiquo Media

Our media manager plugin has been reviewed and some parts of it rewritten. We did a redesign on the media selector to show a better interface. We added a "crop and resize" feature to avoid having to use a desktop program to do that, and choose which part of the image to show on the diferent image sizes defined for the site.

Find out more in ubiquo media guide.

Translate

We integrated the "translate" plugin to manage the literals from the web. It is customized to both be useful for third-party translators and developers, and make it easy for the user to generate the translations to the other languages.

Find out more in translate guide.

Ubiquo i18n

The plugin has been revamped and code-reviewed. With more intuitive default behaviours, it now supports sharing transparently associations between translations in a lot of new situations, and allows other plugins to be built on top of it.

Find out more in ubiquo i18n guide.

 

And many more...!

In these almost 2 years of work, there are a lot of small improvements, fixes and features in Ubiquo that you can find useful and interesting. We want to thank everybody who contributed to it.

 

If you want to check a more detailed list of changes take a look to the 0.8 Changelog.

 

Filed under  //   releases  
Posted by Jordi Beltran 

Comments [0]

Revamping Ubiquo forms - UbiquoFormBuilder

The forms have been pieces of repeated HTML code till now. We focused on it to get more DRY and get a powerful abstraction applying the “the convention over configuration” concept.

We have a new helper method, ubiquo_form_for, which is like the form_for but uses our custom form builder UbiquoFormBuilder.

This builder does the same as usual but adds all the surrounding html that uses to be added to a input in a ubiquo form.

Using the regular builder, we would write this:

but with UbiquoFormBuilder we write this:

As you can see the form gets more “right to the point”, and the code is far less verbose.

Features:

  • Add hidden tooltips on a field to help introducing the data.
  • Mark a field as translatable
  • Add a description to the field
  • Group fields in tabs

The tabs are shown like this:

tabs on a form

You can find more on our guide: http://guides.ubiquo.me/edge/ubiquo_core.html#form-helpers

 

Posted by Jordi Beltran 

Comments [0]

Ubiquo updated to Rails 2.3.14

Ubiquo has been updated to the latest 2.3.X release, which contains critical security fixes:

http://weblog.rubyonrails.org/2011/8/16/ann-rails-2-3-14

For new projects, simply update your ubiquo gem and the project will be created using 2.3.14.

For existing projects, if you are in Rails 2.3.11, you have to upgrade following the usual steps:

  1. Update config/environment.rb's RAILS_GEM_VERSION
  2. Update Gemfile's rails version (if using bundler)
  3. Run bundle install

If you are still stuck in a version <2.3.11, you should also upgrade as soon as possible. You can follow the instructions we published on how to do it.

Filed under  //   releases  

Introducing Ubiquo Extensions Loader

A few weeks ago we added a new extension mechanism to Ubiquo, to easily overcome all the issues that show up in Rails projects when you try to extend classes or modules. If you have tried it, you will know that some factors have to be taken into account, primarily, the loading order and the caching or not of classes. As you try to modularize your application, you run into bigger problems, and in the end the load of the different components can be something similar to a puzzle.

Using Ubiquo Extensions Loader these problems are now gone. This is the mechanism that we use for example to conditionally extend a plugin from another plugin, or to safely extend a plugin from an application. Take a look at the guide for more information, and start using it in all your edge Ubiquo projects, since it's bundled in ubiquo_core.

Filed under  //   edge   loader  

Now on edge: easier relations in scaffold generation

Until now, when you created a ubiquo_scaffold, and you wanted to indicate relations from the command line, you had to eiher manually add any xx_id field in the migration after creating the ubiquo_scaffold (and before running the migration), or, if you added it as another field, you had to remove it later from the views.

Both options were repetitive and annoying to the developer. So we changed it. Now you can create three scaffolds just like this:

script/generate ubiquo_scaffold Book name:string --belongs-to author

script/generate ubiquo_scaffold Author name:string --has_many books --belongs_to country

script/generate ubiquo_scaffold Country name:string --has_many authors

Then simply go to ubiquo and you will find the scaffolds as you would expect: with relation selectors, and without any xx_id field in the views.

 

Preview params for widgets

We added the ability to indicate if a widget can be previewed and to specify sample values for the preview.

This is an example:

You can check ubiquo design documentation for more information.

Posted by Toni Reina 

Comments [0]

New on edge: Default option for category_selector

We just added a new feature for category_selector allowing specify a initial default value. An example of its use:

If your selector is of type checkbox or autocomplete, you can specify multiple values:

The expected values for default option are the name of categories.

Posted by ubiquo 

Comments [0]

New web interface to manage rails translation texts (I18n)

We added to our toolkit a plugin to manage the translation of our I18n texts, the ones that are statically stored in yml files. 

Now, using a webinterface, we can easily translate the locales of our application or even delegate this task to a specialized team.

Web_interface

We can also create a full translation of Ubiquo or any plugin to our language. The plugin is an adaptation of the translate plugin that you might already know, now suited for the needs of an ubiquo project.

To try it, or to read more about it, there is a new guide available: http://guides.ubiquo.me/edge/translate.html

Filed under  //   edge   i18n   translation  
Posted by David Lozano 

Comments [0]

Ubiquo uses bundler by default

Ubiquo has been updated to use bundler, to easy the dependency management burden. As usual you should update your ubiquo gem to the lastest version.

_the_best_way_to_manage_ruby_applications_2011-04-15_13-03-40


If you are new to bundler, you can check this great introduction.