Rails Dog Blog

Current Articles | RSS Feed RSS Feed

Having issues with the latest FedEx API changes? We can help #FedEx #spree_active_shipping


Here at Rails Dog HQ, we are seeing ongoing reports in the wild about the effects that the FedEx API changes have had on the spree_active_shipping extension. Some sites have let this situation go on for a while now, and didnt even realize that it was a problem.

If you're having issues with FedEx shipments and need some help, please send us an e-mail at support@Railsdog.com and we can get one of our developers to help out.

Shuffleboard tonight at 6pm in Brooklyn? #magiclabs #RoyalPalmsClub #SpreeConf


Hey SpreeConf attendees, not ready to head back home yet? Stop by and say hello to Rails Dog and Magiclabs and have a beer and play some shuffleboard indoors of course. 6pm tonight at Royal Palms in Brooklyn: http://www.royalpalmsshuffle.com/

#magiclabs #RoyalPalmsClub #SpreeConf

Storytelling With Content: Introducing Narrator


Story is a fundamental form through which we experience and make sense of our world and ourselves, a function that cognitive scientists believe is hard-wired into the human brain. Storytelling, or narrative, refers to both the ‘what’ (setting, characters, events etc.) and the ‘how’ (organization and presentation of story elements).

A good storyteller has the power to transport audiences to a different world. This is why our best storytellers (novelists, film directors, playwrights, animators etc.) are so venerated.

Story rewards at both an emotional and cognitive level. Why do we all like a good story? (seven basic appeals)

1) Escapism (being transported to a different world)
2) Exploration (learning about a new place)
3) Identification (living vicariously through characters) 4) Stimulation (having our emotions excited)
5) Intimacy (creating a special bond with a narrator) 6) Comprehension (making sense of a situation)
7) Resolution (seeing conflicts overcome)

This is universal.

Application to E-Commerce:

How can the incredible power of storytelling be harnessed for e-commerce?

  • Lead your target customers into ‘story worlds’ they find appealing, and like to explore, so they become intimately familiar with the products you’re offering.
  • Make these ‘story worlds’ unique and believable so customers will want to keep returning.
  • Present characters your customers can identify with and project themselves onto so they have a direct stake in the action.
  • Develop story concepts and situations that elicit emotional responses from your customers that are likely to lead to purchase.
  • Use narration to create a space of sharing and bonding with the customer that builds trust.
  • Satisfy your customer’s desire to make sense of what’s going on in a given story world.
  • Give your customer the comforting illusion of closure, the feeling of problems being solved. 

Storytelling is the foundation of any brand that wants to survive in today's hyper competitive retail world. Stories create emotion and engagement, and without those you have little brand loyalty and it is a race to the lowest price in a commodity world. Content + Commerce is much stronger than commerce alone; Content + Commerce + Community + Context is stronger still. 

Together with our Europe team, today we are announcing a new presentation layer for SpreeCommerce. It is called Narrator and it is the next generation ecommerce CMS. This e-commerce breakthrough will change the way brands represent themselves online!  

All shop systems lacked the opportunity to fully edit a product detail page (PDP) or category pages. Integrating the Alchemy CMS in the Spree Commerce system gives the editor full freedom in presenting each product exactly the way it is best sold. There will be nothing in their way of telling their unique story.  

But we thought of more: What if editing the PDP wasn’t enough? What if you wanted to respond to each unique customer group in a different, more personalized way? These are puzzles we want to solve with Narrators key features: 

  • Template Engine
  • Content Repository
  • Internationalization
  • Personalization / Analytics
  • Editorial Workflow

We are looking forward to getting your feedback and getting in touch with you. Enter the mailing list on Narrator.io or send us an email!

A new cooperation: Rails Dog Europe


After starting off with our new office in London we now proudly present our partner for Rails Dog Europe: magic labs*. We used their content management system Alchemy CMS along with SpreeCommerce for a lot of our clients, e.g. Aloha, because we feel it is by far the best RoR CMS and gives us the freedom and flexibility to tell rich stories for our clients. While working together we discovered that the upcoming needs of our clients are to present their product in an emotional way and that the combination of the two systems SpreeCommerce and Alchemy is the best tool to do just that. 

magic labs* dedicated a lot of work in developing Alchemy CMS and contributing to the open source community. They have an office in Berlin and Hamburg and strongly believe in high quality code and the power of the community to get the most innovative results. 

We combined our experience with and knowledge about Spree shops with their expertise and skills in Alchemy to create the future of e-commerce we see is possible: An easier way of telling your story, a better way of responding to your customers and the only way to truly show the uniqueness of your brand.

The Rails Dog Europe team will be with us at the SpreeConf and we are looking forward to meeting the Spree community at this special event! Ask @tvdeyen, @robinboening or @moritzs for Alchemy CMS stickers, see you there!

Rails Dog welcomes everyone to SPREECONF NYC 2014


Rails Dog is looking forward to having you in New York City and exchanging experiences about projects and all kinds of matters surrounding the framework and community at the SPREECONF on Feb 26-27th. We are always interested in meeting new people and are more than happy to share with you where to find the best restaurants and drinks in town. If you haven’t been to New York before don’t hesitate to ask us! Rails Dog contributed a lot into the Spree community in the past and with our new office in the UK and more to come we are planning to continue this deep investment in the Spree community. 

Rails Dog announces expansion into the U.K.


city of London resized 600


Rails Dog is proud to announce the launch of our London office: 89 New Bond Street, London, England. Rails Dog is working with a large online U.K. retailer, and we currently have a team of developers working on site for our client. We are excited to now be able to service our U.K. customers with a local team in London.


Rails Dog has a full time dedicated staff of developers who have worked exclusively with Spree based projects for years. In addition to having a developer who is a member of the Spree Core Team (he commits code directly to the Spree project), the members of the Rails Dog team have authored and now support many of the popular Spree extensions.

Overview of the work being done on U.K. Retailer Project

Our team is working to implement a Multi-Currency, Multi-Language, and Multi-Store solution. Rails Dog is also helping to migrate their existing PHP platform (as well as the team members) to Spree & Ruby on Rails. This involves helping to train the PHP team on several topics and best practices. Topics that the team are being trained on include Git, Ruby, Rails, Spree, Test Driven Development, Continuous Deployment, and coding style guidelines.

Unique Features Being Developed for the U.K. Retailer Project

Price Books:

We have implemented the concept of a “Price Book” to give full control over product pricing with respect to the store, currency, date, and type of customer. In the Spree admin application, we allow list prices and discount prices to be managed for different currencies, stores, subsets of products, date ranges, and subsets of users.  

Price books have a hierarchical priority which ensures the correct price is always determined for a particular browsing scenario and price books can either be explicitly-priced (manually entered) or ‘factored’ (based on a multiplier of a ‘parent’ price book). Listed below is an example:

A ‘March 2014 Sale’ price book could have a factor of 0.75 which would reduce its parent’s price book prices at a 25% discount. The price book could have a date range as well.  In the case of this March example, it would make sense to set the window for all of March 2014 so that it would automatically take effect at the appropriate time.

It is also possible to use the price factor in order to automatically maintain currency exchange rates. You may update the price books factor to the current exchange rate each day, or set it to always maintain a fixed exchange rate.

Split Payments and Vouchers as Payments:

We have introduced vouchers as first-class-citizens in the payment realm. We created a ‘Voucher’ payment method with an associated ‘gateway’ which allows us to authorize, capture, void, and credit a voucher. Along with vouchers as payments, we have begun supporting multiple payments per order on the front end. Currently we are supporting multiple payments by voucher and one other non-voucher payment. This concept can easily be made more generic and submitted to the Spree Core Team for consideration as a generic split-payment solution.

Please feel free to send us an e-mail to learn more about this project: Sales@RailsDog.com

Michael Good joins RailsDog as Chief Security Officer

Michael Good
Today, I'm pleased to announce that Michael Good will be joining the Rails Dog team as ChiefSecurity Officer. In addition to developing for Great Oaks Venture Capital, Diamonds Boulevard, Joy the Store, and a number of other websites, Michael has been interviewed by Yahoo! about NSA, PRISM, and underground hacking communities and provided pertinent information on the Dalai Lama attack to the Shanghaiist, a Google News aggregated site, and also have been featured in multiple regional and technical publications like SiliconValley.com and the TheInformationAge.co
Michael will be overseeing a small team of penetration testers and web security experts. His colleagues know how to provide outstanding client service and troubleshooting. Michael's team will be an indispensable asset to the Rails Dog team.

Aloha.com: Product Storytelling and the Future of E-commerce






  There’s nothing quite like the thrill of watching a project finally take flight. After months of hard work, collaboration, discussions and yes, coffee, one of our most recent project here at Rails Dog has finally launched: Aloha.com. Building Aloha’s online experience presented some unique challenges and I wanted to share some of the solutions we came up with.

Telling your story

E-commerce has quickly become an essential component of many companies. Web savvy customers these days expect companies of all stripes and sizes to have a way to purchase their products online, but just adding a buy now button is no longer sufficient. Given the proliferation of e-commerce, I think we’re beginning to see the next generation of e-commerce, and Aloha.com is a prime example of treating an online store much more as an experience, not just a transaction.

Show and Tell

In the growing world of online retail there is more and more competition for your customer’s eyes (and their wallet), so finding ways to set your company apart is essential to developing a robust e-commerce solution. Aloha’s approach to e-commerce is part of a new emerging trend of combining great storytelling, a highly curated brand image and top shelf products into a complete online experience. They didn’t want just the traditional product detail page (PDP) with a couple images and some text. They needed to tell the Aloha story, to fully engage and educate the visitor. They wanted a PDP page not only with product details and an ‘add to cart’ button but also with rich images, video, expert testimonials, even detailed ingredient lists with images for each ingredient.

In other words, they wanted to tell the Aloha story even on the PDP. It quickly became obvious that Spree alone wasn’t going to be enough and that we needed to find a way to give them complete control over their product’s presentation.

Building an Experience

Our solution to a highly curated product page was to tightly integrate a CMS with Spree. That allowed us to retain all the e-commerce functionality, but give Aloha the ability to highly customize each product experience. They can update and add new elements to each product, including images, videos, ingredient lists and product experts. And it goes without saying that the rest of the site, from the home page marque to the FAQ is all driven by the CMS.

Visit Aloha’s product details page

End to End

Of course integrating a CMS isn’t the only unique feature of Aloha’s site. Customers can also subscribe to the Aloha supplements and receive a monthly shipment so they never have to worry about re-ordering. And all the product fulfillment is seamlessly handled through the new Spree Commerce Hub, so the Aloha team can focus on telling their story and providing a great customer experience.

Thanks again for stopping by! Be sure to checkout Aloha at http://aloha.com and send them some love. They’re a hard working group focused on helping people find their healthy and their happy.

Introducing spree_suffrage - A Spree Extension for Voting


Spree_Suffrage is a new spree extension that, in a nutshell, allows admins to create and manage polls that can be displayed in the store.


spree_suffrage in store


Here's a quick look at what the admin/store owner has to work with:


spree_suffrage admin


So first, let me address the goofy name.

One definition of the word suffrage is 'the right to vote'.

I wanted to be a little creative the day I decided to create the extension, and I chose to call it something other than spree_voting.  There is actually an existing extension spree-quick-polls (with the old hyphenated convention) that hasn't been updated in a long time, so I felt it best to start from scratch.

The extension was written against the bleeding-edge master branch of spree when the gemspec read 2.0.0.beta, so there might be a few bumps as 2.0.0 is released.

The author of the extension (yours truly - Jeff Squires) has been known to respond to issues created within the github repository at blazingly fast speeds (sometimes before the user even lifts up his or her pinky finger from the return key), so feel free to submit any problems you might have, as these are to be expected when developing against a moving target.

If you visit github you'll see the installation instructions for spree_suffrage.  

Don't be alarmed at the failing build status.  If you visit travis you'll see that there's an issue with ruby 2.0 that we are working out, so 1.9.3 is in good shape.

Speaking of build status, this extension is pretty well tested.  To tell the complete truth, it's the first significant chunk of spree code I've done in a pure BDD fashion (meaning I wrote the tests first).

Better late than never to put principles into practice, right?  I'm one of those folks who is really trying to practice my testing in order to take away the "It takes too long" cop-out.  This extension represents a real breakthrough for me in my professional development, so I'm happy to broadcast my success.

I have another, much more widely used extension, which won't be named, that needs some test-love, if you want to help out!

 Anyways, I hope you find this extension useful.  I love constructive feedback, so let's hear what you think!

Adding filter_parameters in an Engine


Rails applications by default will log every parameter that is passed to a given controller. Normally this is desirable behavior but in the case of sensitive information (ex. passwords and credit card numbers) you should never log these values.

The recommended approach for this is to add a filter_parameters directive in your application configuration as shown below.

module SampleApp
  class Application < Rails::Application
    # Filter sensitive parameters from the log file.
    config.filter_parameters += [:password]

But what if you are working within the context of a Rails Engine? For instance, in the Spreeapplication there is an engine that has a controller responsible for posting credit card information (over SSL of course.) After a little bit of digging I came up with the following solution:

 module SpreeCore 
  class Engine < Rails::Engine
    # filter sensitive information during logging
    initializer "spree.params.filter" do |app|
      app.config.filter_parameters += [:number]

It turns out you can dynamically declare an initializer in your Railtie and then just add the filter there.

All Posts