Module: Remarkable::ActiveRecord::Describe

Defined in:
lib/remarkable_activerecord/describe.rb

Overview

Overwrites describe to provide quick way to configure your subject:

describe Post
  should_validate_presente_of :title

  describe :published => true do
    should_validate_presence_of :published_at
  end
end

This is the same as:

describe Post
  should_validate_presente_of :title

  describe "when published is true" do
    subject { Post.new(:published => true) }
    should_validate_presence_of :published_at
  end
end

The string can be localized using I18n. An example yml file is:

locale:
  remarkable:
    active_record:
      describe:
        each: "{{key}} is {{value}}"
        prepend: "when "
        connector: " and "

You can also call subject attributes to set the default attributes for a subject. You can even mix with a fixture replacement tool:

describe Post
  # Fixjour example
  subject_attributes { valid_post_attributes }

  describe :published => true do
    should_validate_presence_of :published_at
  end
end

You can retrieve the merged result of all attributes given using the subject_attributes instance method:

describe Post
  # Fixjour example
  subject_attributes { valid_post_attributes }

  describe :published => true do
    it "should have default subject attributes" do
      subject_attributes.should == { :title => 'My title', :published => true }
    end
  end
end

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object

:nodoc:



68
69
70
# File 'lib/remarkable_activerecord/describe.rb', line 68

def self.included(base) #:nodoc:
  base.extend ClassMethods
end

Instance Method Details

#subject_attributesObject

Returns a hash with the subject attributes declared using the subject_attributes class method and the attributes given using the describe method.

describe Post
  subject_attributes { valid_post_attributes }

  describe :published => true do
    it "should have default subject attributes" do
      subject_attributes.should == { :title => 'My title', :published => true }
    end
  end
end


188
189
190
191
192
193
194
# File 'lib/remarkable_activerecord/describe.rb', line 188

def subject_attributes
  default = self.class.default_subject_attributes
  default = self.instance_eval(&default) if default.is_a?(Proc)
  default ||= {}

  default.merge(self.class.describe_subject_attributes || {})
end