{"action":"created","issue":{"url":"https://api.github.com/repos/celluloid/celluloid/issues/549","labels_url":"https://api.github.com/repos/celluloid/celluloid/issues/549/labels{/name}","comments_url":"https://api.github.com/repos/celluloid/celluloid/issues/549/comments","events_url":"https://api.github.com/repos/celluloid/celluloid/issues/549/events","html_url":"https://github.com/celluloid/celluloid/issues/549","id":66498020,"number":549,"title":"celluloid-extras","user":{"login":"digitalextremist","id":21095,"avatar_url":"https://avatars.githubusercontent.com/u/21095?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalextremist","html_url":"https://github.com/digitalextremist","followers_url":"https://api.github.com/users/digitalextremist/followers","following_url":"https://api.github.com/users/digitalextremist/following{/other_user}","gists_url":"https://api.github.com/users/digitalextremist/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalextremist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalextremist/subscriptions","organizations_url":"https://api.github.com/users/digitalextremist/orgs","repos_url":"https://api.github.com/users/digitalextremist/repos","events_url":"https://api.github.com/users/digitalextremist/events{/privacy}","received_events_url":"https://api.github.com/users/digitalextremist/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/celluloid/celluloid/labels/gem","name":"gem","color":"006b75"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/celluloid/celluloid/milestones/7","html_url":"https://github.com/celluloid/celluloid/milestones/0.17.0","labels_url":"https://api.github.com/repos/celluloid/celluloid/milestones/7/labels","id":1042753,"number":7,"title":"0.17.0","description":"","creator":{"login":"digitalextremist","id":21095,"avatar_url":"https://avatars.githubusercontent.com/u/21095?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalextremist","html_url":"https://github.com/digitalextremist","followers_url":"https://api.github.com/users/digitalextremist/followers","following_url":"https://api.github.com/users/digitalextremist/following{/other_user}","gists_url":"https://api.github.com/users/digitalextremist/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalextremist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalextremist/subscriptions","organizations_url":"https://api.github.com/users/digitalextremist/orgs","repos_url":"https://api.github.com/users/digitalextremist/repos","events_url":"https://api.github.com/users/digitalextremist/events{/privacy}","received_events_url":"https://api.github.com/users/digitalextremist/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":14,"state":"open","created_at":"2015-03-28T08:29:24Z","updated_at":"2015-04-06T00:35:04Z","due_on":"2015-04-27T07:00:00Z","closed_at":null},"comments":2,"created_at":"2015-04-06T00:35:04Z","updated_at":"2015-04-06T11:34:26Z","closed_at":null,"body":"Going to start a gem called `celluloid-extras` for #371 and #536, preparing for more and encouraging a `contrib` style gem. Why I'd say this gem exist versus individual gems for each is that there is a lot of duplicated work in providing access to the `Celluloid` test suite and `Celluloid` itself, which can be worked around once and provided to all adopted sub-libraries. Then all can also be updated at once when `Celluloid` advances.  Each involved author will be attributed, and I will coordinate licensing with each."},"comment":{"url":"https://api.github.com/repos/celluloid/celluloid/issues/comments/90024341","html_url":"https://github.com/celluloid/celluloid/issues/549#issuecomment-90024341","issue_url":"https://api.github.com/repos/celluloid/celluloid/issues/549","id":90024341,"user":{"login":"e2","id":150197,"avatar_url":"https://avatars.githubusercontent.com/u/150197?v=3","gravatar_id":"","url":"https://api.github.com/users/e2","html_url":"https://github.com/e2","followers_url":"https://api.github.com/users/e2/followers","following_url":"https://api.github.com/users/e2/following{/other_user}","gists_url":"https://api.github.com/users/e2/gists{/gist_id}","starred_url":"https://api.github.com/users/e2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/e2/subscriptions","organizations_url":"https://api.github.com/users/e2/orgs","repos_url":"https://api.github.com/users/e2/repos","events_url":"https://api.github.com/users/e2/events{/privacy}","received_events_url":"https://api.github.com/users/e2/received_events","type":"User","site_admin":false},"created_at":"2015-04-06T11:34:26Z","updated_at":"2015-04-06T11:34:26Z","body":"> but maintaining separate gems seems non-awesome\r\n\r\nIf I can chime in, I'd say to aim for separation as much as possible, but no sooner than the core API is polished.\r\n\r\nEarly separation will kill API improvement efforts (arch-level refactoring), because it would mean introducing the baggage of compatibility.\r\n\r\nBut the biggest benefit of separation is *no longer* having to maintain functionality people don't care enough about. Second on the list is: ironically, it actually helps define a better core API.\r\n\r\nAs for specs, they shouldn't be shared at all. E.g. Celluloid::IO shouldn't use actor specs - it should test only what it \"adds on\" to Celluloid. It's actually Celluloid that should have an \"API\" for extending it.\r\n\r\nE.g. There should be specs so I can do something like:\r\n```\r\nruby\r\nclass MyActor\r\n  include MyCelluloid\r\n  # (...)\r\nend\r\n```\r\nwhere e.g. 'MyCelluloid' could include e.g. promises and evented mailboxes and/or Celluloid::IO. Otherwise duplicating tests means both gems are unnecessarily sharing responsibilities.\r\n\r\nIt may seem complex, but I think \"extensibility\" is the biggest challenge when trying to extract things outside from Celluloid. Partially because greater extensibility may hurt performance a lot as well."}}