jacopo beschi: yet another web guy

Welcome, my friend.

Hi there, my name is Jacopo, but i think you already guessed that. I'm a web engineer in italy and yes: "yet another web guy". As i come from italy i like spaghetti but i don't like spaghetti code. In this website you'll find articles talking about web development. Mainly focusing on php oop design patterns and laravel framework (which embraces the "don't reinvent the wheel" philosophy).

Different caching strategies for Rails.cache and ActionController::Caching

Created at: Jun/19/2017 jacopo beschi

If you need to use different caching strategies for your Rails.cache and your ActionController::Cache (used for fragment caching) just put the following in your config/environments/env.rb file:

config.action_controller.perform_caching = true # this is used for your Fragment cache config.action_controller.cache_store = :file_store, 'action_controller_tore_path' # this is used for Rails.cache config.cache_store = :file_store, 'cache_store_path'

Read on

Thinner Rails Model with the Finder Pattern

Created at: Mar/20/2017 jacopo beschi

Hello everybody, today I want to share with you a pattern learned from gitlab: the finder pattern.

Most of the time when you want to find an item based on a set of different conditions you do something like this:

class Project
    def issues_for_user_filtered_by(user, filter)
        # A lot of logic not related to project model itself

By doing that you end up having a lot of methods that does not really belong to the Model logic. A better solution is through the finder pattern:

issues = IssuesFinder.new(project, user, filter).execute

What the finder does is to accept a set of parameters and return an ActiveRecord::Associations::CollectionProxy that you can use for further filtering/mapping operations.

You can find a complete example of a finder following this link

Read on

Javascript multiple inheritance with ES5 and AngularJs

Created at: Mar/31/2016 jacopo beschi

In this article I'll show you how you can use multiple inheritance(trait) with Javascript EcmaScript 5 and AngularJS 1.0. AngularJS offer you a method: angular.extend that allow you to extend any object with the values and methods of other objects. In this article I show you how you can create a Dog. Dog is an animal but is also a mammal, for this reason a Dog needs to extend animal and also Mammal classes. Below is the code to create a Dog:

Read on

JSON API error handling with ruby

Created at: Mar/29/2016 jacopo beschi

Hello folks, after being inactive for a while I am finally back!
This post is about a technique that I found useful for general error handling with REST API and ruby on rails, but the concept works for any programming language/framework. Most of the time programmers handles api errors without a general pattern, that's bad because it's obvious that is more error prone, by using a general pattern you can also do some interestic automatic operations such as error logging and messaging to a monitoring service.

Read on

Solve problems gracefully with dynamic method generation in ruby

Created at: Aug/20/2015 jacopo beschi

Days ago i was writing an Rspec macro to gracefully handle authenticated api via a token. At the start i begun creating a couple of methods, each for every Rest verb: module RequestMacros def get_authorized(uri, user) get uri, nil, {'X-Api-Token' => user.api_token} end

  def post_authorized(uri, data, user, headers = {})
    post uri, data, headers.merge({'X-Api-Token' => user.api_token})
Read on