{"action":"created","comment":{"url":"https://api.github.com/repos/rspec/rspec.github.io/pulls/comments/32189399","id":32189399,"diff_hunk":"@@ -0,0 +1,405 @@\n+---\n+title: RSpec 3.3 has been released!\n+author: Myron Marston\n+---\n+\n+RSpec 3.2 has just been released! Given our commitment to\n+[semantic versioning](http://semver.org/), this should be a trivial\n+upgrade for anyone already using RSpec 3.0, 3.1 or 3.2, but if we did introduce\n+any regressions, please let us know, and we'll get a patch release\n+out with a fix ASAP.\n+\n+RSpec continues to be a community-driven project with contributors\n+from all over the world. This release includes 638 commits and 169\n+merged pull requests from over 40 different contributors!\n+\n+Thank you to everyone who helped make this release happen!\n+\n+## Notable Changes\n+\n+### Core: Unique IDs for every Example and Example Group\n+\n+Historically, RSpec examples have been identified primarily by _file\n+location_. For example, this command:\n+\n+~~~\n+$ rspec spec/unit/baseball_spec.rb:23\n+~~~\n+\n+...would run an example or example group defined on line 23 of\n+`spec/unit/baseball_spec.rb`. Location-based identification generally\n+works well, but does not always uniquely identity a particular example.\n+For example, if you use shared examples, your spec suite may\n+have multiple copies of the example defined at\n+`spec/support/shared_examples.rb:47`.\n+\n+RSpec 3.3 introduces a new way to identify examples and example groups:\n+unique IDs. The IDs are scoped to a particular file and are based on the\n+index of the example or group. For example, this command:\n+\n+~~~\n+$ rspec spec/unit/baseball_spec.rb[1:2,1:4]\n+~~~\n+\n+...would run the 2nd and 4th example or group defined under the 1st\n+top-level group defined in `spec/unit/baseball_spec.rb`.\n+\n+For the most part, the new example IDs are primarily used internally by\n+RSpec to support some of the new 3.3 features, but you're free to use\n+them from the command line, and the re-run command printed by RSpec for\n+each failure will use them if the file location does not uniquely\n+identify the failed example. Copying and pasting the re-run command\n+for a particular failed example will always run just that example now!\n+\n+### Core: New `--only-failures` option\n+\n+Now that RSpec has a robust way to uniquely identify every example, we've\n+added new filtering capabilities to allow you to run only the failures. To\n+enable this feature, you first have to configure RSpec so it knows where\n+to persist the status of each example:\n+\n+~~~ ruby\n+RSpec.configure do |c|\n+  c.example_status_persistence_file_path = \"./spec/examples.txt\"\n+end\n+~~~\n+\n+Once you've configured that, RSpec will begin persisting the status of each\n+example after every run of your suite. You'll probably want to add this file\n+to `.gitignore` (or whatever the equivalent for your source control system is),\n+as it's not intended to be kept under source control. With that configuration\n+in place, you can use the new CLI option:\n+\n+~~~\n+$ rspec --only-failures\n+# or apply it to a specific file or directory:\n+$ rspec spec/unit --only-failures\n+~~~\n+\n+It's worth noting that this option filters to the examples that failed\n+the last time they ran, not just to the failures from the last run of\n+`rspec`. That means, for example, that if there's a slow acceptance spec\n+that you don't generally run locally (leaving it to your CI server to\n+run it), and it failed the last time it ran locally, even if it was weeks ago,\n+it'll be included when you run `rspec --only-failures`.\n+\n+See our [relish\n+docs (TODO)](https://relishapp.com/rspec-staging/rspec-core/docs/command-line/only-failures)\n+for an end-to-end example of this feature.\n+\n+### Core: New `--next-failure` option\n+\n+When making a change that causes many failures across my spec suite---such","path":"source/blog/2015-05-28-rspec-3-3-has-been-released.md","position":92,"original_position":92,"commit_id":"d8c613f3a4b00ff01991e7992546c5afdf859af3","original_commit_id":"d8c613f3a4b00ff01991e7992546c5afdf859af3","user":{"login":"JonRowe","id":162976,"avatar_url":"https://avatars.githubusercontent.com/u/162976?v=3","gravatar_id":"","url":"https://api.github.com/users/JonRowe","html_url":"https://github.com/JonRowe","followers_url":"https://api.github.com/users/JonRowe/followers","following_url":"https://api.github.com/users/JonRowe/following{/other_user}","gists_url":"https://api.github.com/users/JonRowe/gists{/gist_id}","starred_url":"https://api.github.com/users/JonRowe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JonRowe/subscriptions","organizations_url":"https://api.github.com/users/JonRowe/orgs","repos_url":"https://api.github.com/users/JonRowe/repos","events_url":"https://api.github.com/users/JonRowe/events{/privacy}","received_events_url":"https://api.github.com/users/JonRowe/received_events","type":"User","site_admin":false},"body":"spaces around ---?","created_at":"2015-06-11T04:37:20Z","updated_at":"2015-06-11T04:37:20Z","html_url":"https://github.com/rspec/rspec.github.io/pull/70#discussion_r32189399","pull_request_url":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70","_links":{"self":{"href":"https://api.github.com/repos/rspec/rspec.github.io/pulls/comments/32189399"},"html":{"href":"https://github.com/rspec/rspec.github.io/pull/70#discussion_r32189399"},"pull_request":{"href":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70"}}},"pull_request":{"url":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70","id":36211640,"html_url":"https://github.com/rspec/rspec.github.io/pull/70","diff_url":"https://github.com/rspec/rspec.github.io/pull/70.diff","patch_url":"https://github.com/rspec/rspec.github.io/pull/70.patch","issue_url":"https://api.github.com/repos/rspec/rspec.github.io/issues/70","number":70,"state":"open","locked":false,"title":"WIP: sketch out blog post for 3.3 release.","user":{"login":"myronmarston","id":49391,"avatar_url":"https://avatars.githubusercontent.com/u/49391?v=3","gravatar_id":"","url":"https://api.github.com/users/myronmarston","html_url":"https://github.com/myronmarston","followers_url":"https://api.github.com/users/myronmarston/followers","following_url":"https://api.github.com/users/myronmarston/following{/other_user}","gists_url":"https://api.github.com/users/myronmarston/gists{/gist_id}","starred_url":"https://api.github.com/users/myronmarston/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/myronmarston/subscriptions","organizations_url":"https://api.github.com/users/myronmarston/orgs","repos_url":"https://api.github.com/users/myronmarston/repos","events_url":"https://api.github.com/users/myronmarston/events{/privacy}","received_events_url":"https://api.github.com/users/myronmarston/received_events","type":"User","site_admin":false},"body":"This is the start of the blog post announcing the 3.3 release.\r\n\r\n@cupakromer -- I haven't followed rspec-rails dev close enough to know what's notable there.  Any suggestions for what, if anything, we should highlight about rspec-rails 3.3?\r\n\r\n@rspec/rspec -- thoughts on the items I highlighted in the \"Notable Changes\" section?  Is there anything important I missed?","created_at":"2015-05-26T15:02:34Z","updated_at":"2015-06-11T04:37:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f7dbb4954ea20e7f6541251d8d8c7cff0b2ac368","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70/commits","review_comments_url":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70/comments","review_comment_url":"https://api.github.com/repos/rspec/rspec.github.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rspec/rspec.github.io/issues/70/comments","statuses_url":"https://api.github.com/repos/rspec/rspec.github.io/statuses/d8c613f3a4b00ff01991e7992546c5afdf859af3","head":{"label":"rspec:3-3-release-blogpost","ref":"3-3-release-blogpost","sha":"d8c613f3a4b00ff01991e7992546c5afdf859af3","user":{"login":"rspec","id":22388,"avatar_url":"https://avatars.githubusercontent.com/u/22388?v=3","gravatar_id":"","url":"https://api.github.com/users/rspec","html_url":"https://github.com/rspec","followers_url":"https://api.github.com/users/rspec/followers","following_url":"https://api.github.com/users/rspec/following{/other_user}","gists_url":"https://api.github.com/users/rspec/gists{/gist_id}","starred_url":"https://api.github.com/users/rspec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rspec/subscriptions","organizations_url":"https://api.github.com/users/rspec/orgs","repos_url":"https://api.github.com/users/rspec/repos","events_url":"https://api.github.com/users/rspec/events{/privacy}","received_events_url":"https://api.github.com/users/rspec/received_events","type":"Organization","site_admin":false},"repo":{"id":2544146,"name":"rspec.github.io","full_name":"rspec/rspec.github.io","owner":{"login":"rspec","id":22388,"avatar_url":"https://avatars.githubusercontent.com/u/22388?v=3","gravatar_id":"","url":"https://api.github.com/users/rspec","html_url":"https://github.com/rspec","followers_url":"https://api.github.com/users/rspec/followers","following_url":"https://api.github.com/users/rspec/following{/other_user}","gists_url":"https://api.github.com/users/rspec/gists{/gist_id}","starred_url":"https://api.github.com/users/rspec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rspec/subscriptions","organizations_url":"https://api.github.com/users/rspec/orgs","repos_url":"https://api.github.com/users/rspec/repos","events_url":"https://api.github.com/users/rspec/events{/privacy}","received_events_url":"https://api.github.com/users/rspec/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rspec/rspec.github.io","description":"source for rspec.info","fork":false,"url":"https://api.github.com/repos/rspec/rspec.github.io","forks_url":"https://api.github.com/repos/rspec/rspec.github.io/forks","keys_url":"https://api.github.com/repos/rspec/rspec.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rspec/rspec.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rspec/rspec.github.io/teams","hooks_url":"https://api.github.com/repos/rspec/rspec.github.io/hooks","issue_events_url":"https://api.github.com/repos/rspec/rspec.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/rspec/rspec.github.io/events","assignees_url":"https://api.github.com/repos/rspec/rspec.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/rspec/rspec.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/rspec/rspec.github.io/tags","blobs_url":"https://api.github.com/repos/rspec/rspec.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rspec/rspec.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rspec/rspec.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/rspec/rspec.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rspec/rspec.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/rspec/rspec.github.io/languages","stargazers_url":"https://api.github.com/repos/rspec/rspec.github.io/stargazers","contributors_url":"https://api.github.com/repos/rspec/rspec.github.io/contributors","subscribers_url":"https://api.github.com/repos/rspec/rspec.github.io/subscribers","subscription_url":"https://api.github.com/repos/rspec/rspec.github.io/subscription","commits_url":"https://api.github.com/repos/rspec/rspec.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/rspec/rspec.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/rspec/rspec.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/rspec/rspec.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/rspec/rspec.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/rspec/rspec.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rspec/rspec.github.io/merges","archive_url":"https://api.github.com/repos/rspec/rspec.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rspec/rspec.github.io/downloads","issues_url":"https://api.github.com/repos/rspec/rspec.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/rspec/rspec.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/rspec/rspec.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/rspec/rspec.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rspec/rspec.github.io/labels{/name}","releases_url":"https://api.github.com/repos/rspec/rspec.github.io/releases{/id}","created_at":"2011-10-09T19:44:45Z","updated_at":"2015-04-26T17:58:55Z","pushed_at":"2015-06-09T15:18:05Z","git_url":"git://github.com/rspec/rspec.github.io.git","ssh_url":"git@github.com:rspec/rspec.github.io.git","clone_url":"https://github.com/rspec/rspec.github.io.git","svn_url":"https://github.com/rspec/rspec.github.io","homepage":"","size":7107,"stargazers_count":10,"watchers_count":10,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":16,"mirror_url":null,"open_issues_count":8,"forks":16,"open_issues":8,"watchers":10,"default_branch":"source"}},"base":{"label":"rspec:source","ref":"source","sha":"a512ef03615870bc8d4b97367775f295654266e8","user":{"login":"rspec","id":22388,"avatar_url":"https://avatars.githubusercontent.com/u/22388?v=3","gravatar_id":"","url":"https://api.github.com/users/rspec","html_url":"https://github.com/rspec","followers_url":"https://api.github.com/users/rspec/followers","following_url":"https://api.github.com/users/rspec/following{/other_user}","gists_url":"https://api.github.com/users/rspec/gists{/gist_id}","starred_url":"https://api.github.com/users/rspec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rspec/subscriptions","organizations_url":"https://api.github.com/users/rspec/orgs","repos_url":"https://api.github.com/users/rspec/repos","events_url":"https://api.github.com/users/rspec/events{/privacy}","received_events_url":"https://api.github.com/users/rspec/received_events","type":"Organization","site_admin":false},"repo":{"id":2544146,"name":"rspec.github.io","full_name":"rspec/rspec.github.io","owner":{"login":"rspec","id":22388,"avatar_url":"https://avatars.githubusercontent.com/u/22388?v=3","gravatar_id":"","url":"https://api.github.com/users/rspec","html_url":"https://github.com/rspec","followers_url":"https://api.github.com/users/rspec/followers","following_url":"https://api.github.com/users/rspec/following{/other_user}","gists_url":"https://api.github.com/users/rspec/gists{/gist_id}","starred_url":"https://api.github.com/users/rspec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rspec/subscriptions","organizations_url":"https://api.github.com/users/rspec/orgs","repos_url":"https://api.github.com/users/rspec/repos","events_url":"https://api.github.com/users/rspec/events{/privacy}","received_events_url":"https://api.github.com/users/rspec/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rspec/rspec.github.io","description":"source for rspec.info","fork":false,"url":"https://api.github.com/repos/rspec/rspec.github.io","forks_url":"https://api.github.com/repos/rspec/rspec.github.io/forks","keys_url":"https://api.github.com/repos/rspec/rspec.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rspec/rspec.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rspec/rspec.github.io/teams","hooks_url":"https://api.github.com/repos/rspec/rspec.github.io/hooks","issue_events_url":"https://api.github.com/repos/rspec/rspec.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/rspec/rspec.github.io/events","assignees_url":"https://api.github.com/repos/rspec/rspec.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/rspec/rspec.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/rspec/rspec.github.io/tags","blobs_url":"https://api.github.com/repos/rspec/rspec.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rspec/rspec.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rspec/rspec.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/rspec/rspec.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rspec/rspec.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/rspec/rspec.github.io/languages","stargazers_url":"https://api.github.com/repos/rspec/rspec.github.io/stargazers","contributors_url":"https://api.github.com/repos/rspec/rspec.github.io/contributors","subscribers_url":"https://api.github.com/repos/rspec/rspec.github.io/subscribers","subscription_url":"https://api.github.com/repos/rspec/rspec.github.io/subscription","commits_url":"https://api.github.com/repos/rspec/rspec.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/rspec/rspec.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/rspec/rspec.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/rspec/rspec.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/rspec/rspec.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/rspec/rspec.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rspec/rspec.github.io/merges","archive_url":"https://api.github.com/repos/rspec/rspec.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rspec/rspec.github.io/downloads","issues_url":"https://api.github.com/repos/rspec/rspec.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/rspec/rspec.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/rspec/rspec.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/rspec/rspec.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rspec/rspec.github.io/labels{/name}","releases_url":"https://api.github.com/repos/rspec/rspec.github.io/releases{/id}","created_at":"2011-10-09T19:44:45Z","updated_at":"2015-04-26T17:58:55Z","pushed_at":"2015-06-09T15:18:05Z","git_url":"git://github.com/rspec/rspec.github.io.git","ssh_url":"git@github.com:rspec/rspec.github.io.git","clone_url":"https://github.com/rspec/rspec.github.io.git","svn_url":"https://github.com/rspec/rspec.github.io","homepage":"","size":7107,"stargazers_count":10,"watchers_count":10,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":16,"mirror_url":null,"open_issues_count":8,"forks":16,"open_issues":8,"watchers":10,"default_branch":"source"}},"_links":{"self":{"href":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70"},"html":{"href":"https://github.com/rspec/rspec.github.io/pull/70"},"issue":{"href":"https://api.github.com/repos/rspec/rspec.github.io/issues/70"},"comments":{"href":"https://api.github.com/repos/rspec/rspec.github.io/issues/70/comments"},"review_comments":{"href":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70/comments"},"review_comment":{"href":"https://api.github.com/repos/rspec/rspec.github.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rspec/rspec.github.io/pulls/70/commits"},"statuses":{"href":"https://api.github.com/repos/rspec/rspec.github.io/statuses/d8c613f3a4b00ff01991e7992546c5afdf859af3"}}}}