Giter VIP home page Giter VIP logo

specstar-models's Introduction

This package helps you check that the attributes and validations of a model have been defined correctly.

Matchers

have_attribute

You may have created a model Store as follows:

class CreateStores < ActiveRecord::Migration
  def change
    create_table :stores do |t|
      t.string :title
      t.string :body, :null => false
      t.string :url, :limit => 1024
      t.boolean :open
    end
  end
end

The have_attribute matcher allows you test each of these attributes as follows:

require 'spec_helper'

describe Store do
  it { should have_attribute(:title) }
  it { should have_attribute(:body).with(:type => :string, :null => false) }
  it { should have_attribute(:url).with(:type => :string, :limit => 1024) }
  it { should have_attribute(:open).with(:type => :boolean) }
end

validate

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates :url, url: true
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate :url, url: true }
end

validate_inclusion_of

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_inclusion_of :verified, in: [true, false]
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_inclusion_of :verfied, in: [true, false] }
end

validate_length_of

You may have a model Article as follows:

class Article < ActiveRecord::Base
  ...
  validates_length_of :title, maximum: 255
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Article do
  it { should validate_length_of :title, maximum: 255 }
end

validate_numericality_of You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_numericality_of :age, greater_than_or_equal_to: 0
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_numericality_of :age, greater_than_or_equal_to: 0 }
end

validate_presence_of

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_presence_of :email
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_presence_of :email }
end

validate_uniqueness_of

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  validates_uniqueness_of :email
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should validate_uniqueness_of :email }
end

belong_to

You may have a model User as follows:

class User < ActiveRecord::Base
  ...
  belongs_to :community
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe User do
  it { should belong_to :community }
end

have_many

You may have a model Blog as follows:

class Blog < ActiveRecord::Base
  ...
  has_many :posts
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Blog do
  it { should have_many :posts }
end

have_one

You may have a model Blog as follows:

class Blog < ActiveRecord::Base
  ...
  has_one :author
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Blog do
  it { should have_one :author }
end

has_and_belongs_to_many

You may have a model Person as follows:

class Person < ActiveRecord::Base
  ...
  has_and_belongs_to_many :groups, class_name: 'Organization'
  ...
end

This matcher allows you to write the following spec:

require 'spec_helper'

describe Person do
  it { should have_and_belong_to_many :groups, class_name: 'Organization' }
end

Using in Specs

To make these matchers available in your model specs, do the following:

Gemfile

group :test do
  ...
  gem 'specstar-models', '~> 0.2.3'
  ...
end

spec/spec_helper.rb

require 'specstar/models'

RSpec.configure do |config|
  ...
  config.include Specstar::Models::Matchers, :type => :model
  ...
end

Related Tools

You may also want to consider the following gems to help with your specs:

  • specstar-controllers: Matchers for checking that the filters and layouts in a controller have been defined correctly. Learn more here. Released gems are here.
  • specstar-support-random: Utility methods for generating random objects (e.g. URLs, emails, hashes) for use in your specs. Learn more here. Released gems are here.

specstar-models's People

Contributors

jonahbron avatar jspanjers avatar sujoyg avatar

Watchers

 avatar  avatar

Forkers

jonahbron

specstar-models's Issues

License missing from gemspec

RubyGems.org doesn't report a license for your gem. This is because it is not specified in the gemspec of your last release.

via e.g.

  spec.license = 'MIT'
  # or
  spec.licenses = ['MIT', 'GPL-2']

Including a license in your gemspec is an easy way for rubygems.org and other tools to check how your gem is licensed. As you can imagine, scanning your repository for a LICENSE file or parsing the README, and then attempting to identify the license or licenses is much more difficult and more error prone. So, even for projects that already specify a license, including a license in your gemspec is a good practice. See, for example, how rubygems.org uses the gemspec to display the rails gem license.

There is even a License Finder gem to help companies/individuals ensure all gems they use meet their licensing needs. This tool depends on license information being available in the gemspec. This is an important enough issue that even Bundler now generates gems with a default 'MIT' license.

I hope you'll consider specifying a license in your gemspec. If not, please just close the issue with a nice message. In either case, I'll follow up. Thanks for your time!

Appendix:

If you need help choosing a license (sorry, I haven't checked your readme or looked for a license file), GitHub has created a license picker tool. Code without a license specified defaults to 'All rights reserved'-- denying others all rights to use of the code.
Here's a list of the license names I've found and their frequencies

p.s. In case you're wondering how I found you and why I made this issue, it's because I'm collecting stats on gems (I was originally looking for download data) and decided to collect license metadata,too, and make issues for gemspecs not specifying a license as a public service :). See the previous link or my blog post about this project for more information.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.