{"action":"created","comment":{"url":"https://api.github.com/repos/middleman/middleman/pulls/comments/33374187","id":33374187,"diff_hunk":"@@ -0,0 +1,376 @@\n+Feature: Run the preview server\n+\n+  As a software developer\n+  I want to start the preview server\n+  In order to view my changes immediately in the browser\n+\n+  Background:\n+    Given a fixture app \"clean-app\"\n+    And the default aruba timeout is 15 seconds\n+    And I set the environment variables to:\n+      | variable | value  |\n+      | HOSTSRC  | .hosts |\n+    And a file named \".hosts\" with:\n+    \"\"\"\n+    # <ip-address> <hostname.domain.org> <hostname>\n+    127.0.0.1 localhost.localdomain localhost\n+    \"\"\"\n+\n+  Scenario: Start the server with defaults\n+    When I run `middleman server` interactively\n+    And I stop middleman if the output contains:\n+    \"\"\"\n+    Inspect your site configuration\n+    \"\"\"\n+    Then the output should contain:\n+    \"\"\"\n+    The Middleman is listening on \"http://:::4567\", \"http://0.0.0.0:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    View your site at \"http://\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    Inspect your site configuration at \"http://\n+    \"\"\"\n+\n+  Scenario: Start the server with bind address 127.0.0.1\n+    When I run `middleman server --bind-address 127.0.0.1` interactively\n+    And I stop middleman if the output contains:\n+    \"\"\"\n+    Inspect your site configuration\n+    \"\"\"\n+    Then the output should contain:\n+    \"\"\"\n+    The Middleman is listening on \"http://127.0.0.1:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    View your site at \"http://127.0.0.1:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    Inspect your site configuration at \"http://127.0.0.1:4567/__middleman\"\n+    \"\"\"\n+\n+  Scenario: Start the server with bind address 127.0.0.1 configured via config.rb\n+    Given a file named \"config.rb\" with:\n+    \"\"\"\n+    set :bind_address, '127.0.0.1'\n+    \"\"\"\n+    When I run `middleman server` interactively\n+    And I stop middleman if the output contains:\n+    \"\"\"\n+    Inspect your site configuration\n+    \"\"\"\n+    Then the output should contain:\n+    \"\"\"\n+    The Middleman is listening on \"http://127.0.0.1:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    View your site at \"http://127.0.0.1:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    Inspect your site configuration at \"http://127.0.0.1:4567/__middleman\"\n+    \"\"\"\n+\n+  Scenario: Start the server with bind address 127.0.0.5\n+    When I run `middleman server --bind-address 127.0.0.5` interactively\n+    And I stop middleman if the output contains:\n+    \"\"\"\n+    Inspect your site configuration\n+    \"\"\"\n+    Then the output should contain:\n+    \"\"\"\n+    The Middleman is listening on \"http://127.0.0.5:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    View your site at \"http://127.0.0.5:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    Inspect your site configuration at \"http://127.0.0.5:4567/__middleman\"\n+    \"\"\"\n+\n+  Scenario: Start the server with bind address ::1\n+    Given a file named \".hosts\" with:\n+    \"\"\"\n+    # <ip-address> <hostname.domain.org> <hostname>\n+    ::1 localhost.localdomain localhost\n+    \"\"\"\n+    When I run `middleman server --bind-address ::1` interactively\n+    And I stop middleman if the output contains:\n+    \"\"\"\n+    Inspect your site configuration\n+    \"\"\"\n+    Then the output should contain:\n+    \"\"\"\n+    The Middleman is listening on \"http://::1:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    View your site at \"http://::1:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    Inspect your site configuration at \"http://::1:4567/__middleman\"\n+    \"\"\"\n+\n+  Scenario: Start the server with bind address 0.0.0.0\n+    When I run `middleman server --bind-address 0.0.0.0` interactively\n+    And I stop middleman if the output contains:\n+    \"\"\"\n+    Inspect your site configuration\n+    \"\"\"\n+    Then the output should contain:\n+    \"\"\"\n+    The Middleman is listening on \"http://0.0.0.0:4567\"\n+    \"\"\"\n+    And the output should contain:\n+    \"\"\"\n+    View your site at \"http://","path":"middleman-core/features/cli/preview_server.feature","position":135,"original_position":135,"commit_id":"1e36b850e8f9bba13cfbd899f12e1eb779e5fc37","original_commit_id":"1e36b850e8f9bba13cfbd899f12e1eb779e5fc37","user":{"login":"Arcovion","id":2716027,"avatar_url":"https://avatars.githubusercontent.com/u/2716027?v=3","gravatar_id":"","url":"https://api.github.com/users/Arcovion","html_url":"https://github.com/Arcovion","followers_url":"https://api.github.com/users/Arcovion/followers","following_url":"https://api.github.com/users/Arcovion/following{/other_user}","gists_url":"https://api.github.com/users/Arcovion/gists{/gist_id}","starred_url":"https://api.github.com/users/Arcovion/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Arcovion/subscriptions","organizations_url":"https://api.github.com/users/Arcovion/orgs","repos_url":"https://api.github.com/users/Arcovion/repos","events_url":"https://api.github.com/users/Arcovion/events{/privacy}","received_events_url":"https://api.github.com/users/Arcovion/received_events","type":"User","site_admin":false},"body":"`0.0.0.0` is not a valid IP, it's only routed to `localhost` on Linux - this URL doesn't work on Windows.","created_at":"2015-06-26T16:58:47Z","updated_at":"2015-06-26T16:58:47Z","html_url":"https://github.com/middleman/middleman/pull/1528#discussion_r33374187","pull_request_url":"https://api.github.com/repos/middleman/middleman/pulls/1528","_links":{"self":{"href":"https://api.github.com/repos/middleman/middleman/pulls/comments/33374187"},"html":{"href":"https://github.com/middleman/middleman/pull/1528#discussion_r33374187"},"pull_request":{"href":"https://api.github.com/repos/middleman/middleman/pulls/1528"}}},"pull_request":{"url":"https://api.github.com/repos/middleman/middleman/pulls/1528","id":36084323,"html_url":"https://github.com/middleman/middleman/pull/1528","diff_url":"https://github.com/middleman/middleman/pull/1528.diff","patch_url":"https://github.com/middleman/middleman/pull/1528.patch","issue_url":"https://api.github.com/repos/middleman/middleman/issues/1528","number":1528,"state":"open","locked":false,"title":"Support Bind to address for middleman","user":{"login":"maxmeyer","id":114236,"avatar_url":"https://avatars.githubusercontent.com/u/114236?v=3","gravatar_id":"","url":"https://api.github.com/users/maxmeyer","html_url":"https://github.com/maxmeyer","followers_url":"https://api.github.com/users/maxmeyer/followers","following_url":"https://api.github.com/users/maxmeyer/following{/other_user}","gists_url":"https://api.github.com/users/maxmeyer/gists{/gist_id}","starred_url":"https://api.github.com/users/maxmeyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxmeyer/subscriptions","organizations_url":"https://api.github.com/users/maxmeyer/orgs","repos_url":"https://api.github.com/users/maxmeyer/repos","events_url":"https://api.github.com/users/maxmeyer/events{/privacy}","received_events_url":"https://api.github.com/users/maxmeyer/received_events","type":"User","site_admin":false},"body":"Hi there,\r\n\r\nsome time ago @bhollis implemented 08dee580aa2c99205b8d702f54e9d9087048d612. Unfortunately this broke https://github.com/fedux-org/middleman-presentation because it used the `-h` of `middleman server`. This PR is a follow up of #1516.\r\n\r\nThe `middleman-presentation`-gem is used to serve `reveal.js`-presentations via `middleman server`  - besides some other things. As I'm connected to wifi during some talks I tend to bind the server to `localhost` to prevent it to be public available.\r\n\r\nI would like to appreciate to make it possible for users to explicitly define a bind address again. This PR implements this again + a name resolution for the given bind address.\r\n\r\nBTW:\r\nIs `middlmean` a project using http://semver.org? Can I be sure that breaking changes only happen on major or a least on minor versions (minor versions during transition to v4).\r\n\r\nPing @tdreyno as well.","created_at":"2015-05-23T08:10:41Z","updated_at":"2015-06-26T16:58:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dcb99ddd44032e2ee1da48432b50d31a46b8c9e9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/middleman/middleman/pulls/1528/commits","review_comments_url":"https://api.github.com/repos/middleman/middleman/pulls/1528/comments","review_comment_url":"https://api.github.com/repos/middleman/middleman/pulls/comments{/number}","comments_url":"https://api.github.com/repos/middleman/middleman/issues/1528/comments","statuses_url":"https://api.github.com/repos/middleman/middleman/statuses/1e36b850e8f9bba13cfbd899f12e1eb779e5fc37","head":{"label":"maxmeyer:feature/listener","ref":"feature/listener","sha":"1e36b850e8f9bba13cfbd899f12e1eb779e5fc37","user":{"login":"maxmeyer","id":114236,"avatar_url":"https://avatars.githubusercontent.com/u/114236?v=3","gravatar_id":"","url":"https://api.github.com/users/maxmeyer","html_url":"https://github.com/maxmeyer","followers_url":"https://api.github.com/users/maxmeyer/followers","following_url":"https://api.github.com/users/maxmeyer/following{/other_user}","gists_url":"https://api.github.com/users/maxmeyer/gists{/gist_id}","starred_url":"https://api.github.com/users/maxmeyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxmeyer/subscriptions","organizations_url":"https://api.github.com/users/maxmeyer/orgs","repos_url":"https://api.github.com/users/maxmeyer/repos","events_url":"https://api.github.com/users/maxmeyer/events{/privacy}","received_events_url":"https://api.github.com/users/maxmeyer/received_events","type":"User","site_admin":false},"repo":{"id":26085099,"name":"middleman","full_name":"maxmeyer/middleman","owner":{"login":"maxmeyer","id":114236,"avatar_url":"https://avatars.githubusercontent.com/u/114236?v=3","gravatar_id":"","url":"https://api.github.com/users/maxmeyer","html_url":"https://github.com/maxmeyer","followers_url":"https://api.github.com/users/maxmeyer/followers","following_url":"https://api.github.com/users/maxmeyer/following{/other_user}","gists_url":"https://api.github.com/users/maxmeyer/gists{/gist_id}","starred_url":"https://api.github.com/users/maxmeyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxmeyer/subscriptions","organizations_url":"https://api.github.com/users/maxmeyer/orgs","repos_url":"https://api.github.com/users/maxmeyer/repos","events_url":"https://api.github.com/users/maxmeyer/events{/privacy}","received_events_url":"https://api.github.com/users/maxmeyer/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/maxmeyer/middleman","description":"Hand-crafted frontend development","fork":true,"url":"https://api.github.com/repos/maxmeyer/middleman","forks_url":"https://api.github.com/repos/maxmeyer/middleman/forks","keys_url":"https://api.github.com/repos/maxmeyer/middleman/keys{/key_id}","collaborators_url":"https://api.github.com/repos/maxmeyer/middleman/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/maxmeyer/middleman/teams","hooks_url":"https://api.github.com/repos/maxmeyer/middleman/hooks","issue_events_url":"https://api.github.com/repos/maxmeyer/middleman/issues/events{/number}","events_url":"https://api.github.com/repos/maxmeyer/middleman/events","assignees_url":"https://api.github.com/repos/maxmeyer/middleman/assignees{/user}","branches_url":"https://api.github.com/repos/maxmeyer/middleman/branches{/branch}","tags_url":"https://api.github.com/repos/maxmeyer/middleman/tags","blobs_url":"https://api.github.com/repos/maxmeyer/middleman/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/maxmeyer/middleman/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/maxmeyer/middleman/git/refs{/sha}","trees_url":"https://api.github.com/repos/maxmeyer/middleman/git/trees{/sha}","statuses_url":"https://api.github.com/repos/maxmeyer/middleman/statuses/{sha}","languages_url":"https://api.github.com/repos/maxmeyer/middleman/languages","stargazers_url":"https://api.github.com/repos/maxmeyer/middleman/stargazers","contributors_url":"https://api.github.com/repos/maxmeyer/middleman/contributors","subscribers_url":"https://api.github.com/repos/maxmeyer/middleman/subscribers","subscription_url":"https://api.github.com/repos/maxmeyer/middleman/subscription","commits_url":"https://api.github.com/repos/maxmeyer/middleman/commits{/sha}","git_commits_url":"https://api.github.com/repos/maxmeyer/middleman/git/commits{/sha}","comments_url":"https://api.github.com/repos/maxmeyer/middleman/comments{/number}","issue_comment_url":"https://api.github.com/repos/maxmeyer/middleman/issues/comments{/number}","contents_url":"https://api.github.com/repos/maxmeyer/middleman/contents/{+path}","compare_url":"https://api.github.com/repos/maxmeyer/middleman/compare/{base}...{head}","merges_url":"https://api.github.com/repos/maxmeyer/middleman/merges","archive_url":"https://api.github.com/repos/maxmeyer/middleman/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/maxmeyer/middleman/downloads","issues_url":"https://api.github.com/repos/maxmeyer/middleman/issues{/number}","pulls_url":"https://api.github.com/repos/maxmeyer/middleman/pulls{/number}","milestones_url":"https://api.github.com/repos/maxmeyer/middleman/milestones{/number}","notifications_url":"https://api.github.com/repos/maxmeyer/middleman/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/maxmeyer/middleman/labels{/name}","releases_url":"https://api.github.com/repos/maxmeyer/middleman/releases{/id}","created_at":"2014-11-02T15:54:51Z","updated_at":"2014-11-02T12:42:45Z","pushed_at":"2015-06-26T07:36:50Z","git_url":"git://github.com/maxmeyer/middleman.git","ssh_url":"git@github.com:maxmeyer/middleman.git","clone_url":"https://github.com/maxmeyer/middleman.git","svn_url":"https://github.com/maxmeyer/middleman","homepage":"http://middlemanapp.com","size":21257,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"v3-stable"}},"base":{"label":"middleman:v3-stable","ref":"v3-stable","sha":"724e249b490d869d5b1f5aa1ef64ec316bb3f38c","user":{"login":"middleman","id":1280820,"avatar_url":"https://avatars.githubusercontent.com/u/1280820?v=3","gravatar_id":"","url":"https://api.github.com/users/middleman","html_url":"https://github.com/middleman","followers_url":"https://api.github.com/users/middleman/followers","following_url":"https://api.github.com/users/middleman/following{/other_user}","gists_url":"https://api.github.com/users/middleman/gists{/gist_id}","starred_url":"https://api.github.com/users/middleman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/middleman/subscriptions","organizations_url":"https://api.github.com/users/middleman/orgs","repos_url":"https://api.github.com/users/middleman/repos","events_url":"https://api.github.com/users/middleman/events{/privacy}","received_events_url":"https://api.github.com/users/middleman/received_events","type":"Organization","site_admin":false},"repo":{"id":261943,"name":"middleman","full_name":"middleman/middleman","owner":{"login":"middleman","id":1280820,"avatar_url":"https://avatars.githubusercontent.com/u/1280820?v=3","gravatar_id":"","url":"https://api.github.com/users/middleman","html_url":"https://github.com/middleman","followers_url":"https://api.github.com/users/middleman/followers","following_url":"https://api.github.com/users/middleman/following{/other_user}","gists_url":"https://api.github.com/users/middleman/gists{/gist_id}","starred_url":"https://api.github.com/users/middleman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/middleman/subscriptions","organizations_url":"https://api.github.com/users/middleman/orgs","repos_url":"https://api.github.com/users/middleman/repos","events_url":"https://api.github.com/users/middleman/events{/privacy}","received_events_url":"https://api.github.com/users/middleman/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/middleman/middleman","description":"Hand-crafted frontend development","fork":false,"url":"https://api.github.com/repos/middleman/middleman","forks_url":"https://api.github.com/repos/middleman/middleman/forks","keys_url":"https://api.github.com/repos/middleman/middleman/keys{/key_id}","collaborators_url":"https://api.github.com/repos/middleman/middleman/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/middleman/middleman/teams","hooks_url":"https://api.github.com/repos/middleman/middleman/hooks","issue_events_url":"https://api.github.com/repos/middleman/middleman/issues/events{/number}","events_url":"https://api.github.com/repos/middleman/middleman/events","assignees_url":"https://api.github.com/repos/middleman/middleman/assignees{/user}","branches_url":"https://api.github.com/repos/middleman/middleman/branches{/branch}","tags_url":"https://api.github.com/repos/middleman/middleman/tags","blobs_url":"https://api.github.com/repos/middleman/middleman/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/middleman/middleman/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/middleman/middleman/git/refs{/sha}","trees_url":"https://api.github.com/repos/middleman/middleman/git/trees{/sha}","statuses_url":"https://api.github.com/repos/middleman/middleman/statuses/{sha}","languages_url":"https://api.github.com/repos/middleman/middleman/languages","stargazers_url":"https://api.github.com/repos/middleman/middleman/stargazers","contributors_url":"https://api.github.com/repos/middleman/middleman/contributors","subscribers_url":"https://api.github.com/repos/middleman/middleman/subscribers","subscription_url":"https://api.github.com/repos/middleman/middleman/subscription","commits_url":"https://api.github.com/repos/middleman/middleman/commits{/sha}","git_commits_url":"https://api.github.com/repos/middleman/middleman/git/commits{/sha}","comments_url":"https://api.github.com/repos/middleman/middleman/comments{/number}","issue_comment_url":"https://api.github.com/repos/middleman/middleman/issues/comments{/number}","contents_url":"https://api.github.com/repos/middleman/middleman/contents/{+path}","compare_url":"https://api.github.com/repos/middleman/middleman/compare/{base}...{head}","merges_url":"https://api.github.com/repos/middleman/middleman/merges","archive_url":"https://api.github.com/repos/middleman/middleman/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/middleman/middleman/downloads","issues_url":"https://api.github.com/repos/middleman/middleman/issues{/number}","pulls_url":"https://api.github.com/repos/middleman/middleman/pulls{/number}","milestones_url":"https://api.github.com/repos/middleman/middleman/milestones{/number}","notifications_url":"https://api.github.com/repos/middleman/middleman/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/middleman/middleman/labels{/name}","releases_url":"https://api.github.com/repos/middleman/middleman/releases{/id}","created_at":"2009-07-27T21:41:11Z","updated_at":"2015-06-26T13:29:48Z","pushed_at":"2015-06-26T07:36:51Z","git_url":"git://github.com/middleman/middleman.git","ssh_url":"git@github.com:middleman/middleman.git","clone_url":"https://github.com/middleman/middleman.git","svn_url":"https://github.com/middleman/middleman","homepage":"https://middlemanapp.com","size":42727,"stargazers_count":4304,"watchers_count":4304,"language":"Ruby","has_issues":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":411,"mirror_url":null,"open_issues_count":52,"forks":411,"open_issues":52,"watchers":4304,"default_branch":"v3-stable"}},"_links":{"self":{"href":"https://api.github.com/repos/middleman/middleman/pulls/1528"},"html":{"href":"https://github.com/middleman/middleman/pull/1528"},"issue":{"href":"https://api.github.com/repos/middleman/middleman/issues/1528"},"comments":{"href":"https://api.github.com/repos/middleman/middleman/issues/1528/comments"},"review_comments":{"href":"https://api.github.com/repos/middleman/middleman/pulls/1528/comments"},"review_comment":{"href":"https://api.github.com/repos/middleman/middleman/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/middleman/middleman/pulls/1528/commits"},"statuses":{"href":"https://api.github.com/repos/middleman/middleman/statuses/1e36b850e8f9bba13cfbd899f12e1eb779e5fc37"}}}}