Skip to content

Instantly share code, notes, and snippets.

View aldesantis's full-sized avatar

Alessandro Desantis aldesantis

View GitHub Profile
module Crowdster
class Engine < ::Rails::Engine
isolate_namespace Crowdster
config.to_prepare do
if Crowdster.config
Crowdster.config.user_class.constantize.class_eval do
has_many :campaigns, class_name: 'Crowdster::Campaign'
end
end
module Crowdster
module ActsAsCampaigner
def included(klass)
klass.extend ClassMethods
end
module ClassMethods
def acts_as_campaigner
has_many :campaigns, class_name: 'Crowdster::Campaign'
module Crowdster
module Models
module Campaigner
def included(klass)
klass.class_eval do
has_many :campaigns, class_name: 'Crowdster::Campaign'
end
end
end
end
ENV['RAILS_ENV'] ||= 'test'
ENGINE_ROOT = File.join(File.dirname(__FILE__), '../')
# Load environment.rb from the dummy app.
require File.expand_path('../dummy/config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
require 'rails_helper'
RSpec.describe MyEngine::UsersController do
routes { MyEngine::Engine.routes }
# ...
end
Crowdster.configure do |config|
# The :: is needed to access the root namespace.
config.base_controller = '::ApplicationController'
end
class Model < ActiveRecord::Base
validate :validate_multiples
private
def validate_multiples
%w(attribute1 attribute2 attribute3).each do |attribute|
value = send(attribute)
next if value.blank?
RSpec.describe MyModel do
subject { MyModel.new }
%w(attribute1 attribute2 attribute3).each do |attribute|
it "adds an error when #{attribute} is not divisible by 0.5" do
subject.send("#{attribute}=", 1.3)
subject.validate
expect(subject.errors.messages[attribute]).to eq 'is not divisible by 0.5'
class Model < ActiveRecord::Base
validates :attribute1, :attribute2, divisibility: { by: 0.5 }
validates :attribute3, divisibility: { by: 0.75 }
end
class DivisibilityValidator < ActiveModel::EachValidator
attr_reader :base
def initialize(options)
super
@base = options[:base]
fail ArgumentError, 'You must pass the :base option!' unless base
end