{"id":13817862,"url":"https://github.com/rails-engine/homeland","last_synced_at":"2025-05-15T20:33:06.380Z","repository":{"id":1030048,"uuid":"858254","full_name":"rails-engine/homeland","owner":"rails-engine","description":"Community Rails Engine","archived":true,"fork":false,"pushed_at":"2016-09-02T02:08:19.000Z","size":13851,"stargazers_count":319,"open_issues_count":3,"forks_count":54,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-05-12T06:17:02.913Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://homeland-app.herokuapp.com/homeland","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rails-engine.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-08-24T03:21:05.000Z","updated_at":"2025-02-23T12:21:39.000Z","dependencies_parsed_at":"2022-07-06T03:00:36.879Z","dependency_job_id":null,"html_url":"https://github.com/rails-engine/homeland","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rails-engine%2Fhomeland","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rails-engine%2Fhomeland/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rails-engine%2Fhomeland/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rails-engine%2Fhomeland/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rails-engine","download_url":"https://codeload.github.com/rails-engine/homeland/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254418844,"owners_count":22068165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T06:00:57.855Z","updated_at":"2025-05-15T20:33:01.369Z","avatar_url":"https://github.com/rails-engine.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"Homeland\n--------\n\n[![Gem Version](https://badge.fury.io/rb/homeland.svg)](https://badge.fury.io/rb/homeland) [![Build Status](https://travis-ci.org/rails-engine/homeland.svg)](https://travis-ci.org/rails-engine/homeland) [![codecov.io](https://codecov.io/github/rails-engine/homeland/coverage.svg?branch=master)](https://codecov.io/github/rails-engine/homeland?branch=master) [![](http://inch-ci.org/github/rails-engine/homeland.svg?branch=master)](http://inch-ci.org/github/rails-engine/homeland?branch=master)\n\n\u003e A new style forum for tiny community as Rails Engine. You can mount this in any of you Rails apps.\n\n演示网站: https://homeland-app.herokuapp.com\n\n我们时常可能需要在各类中小型项目中集成用户社区之类的功能，每次当你需要做这个事情的时候都重头设计实现一遍么？ No, that no the Rails way! Rails 教育我们要 DRY!\n\nHomeland 是基于 Rails Engine 实现的论坛社区 Gem，用于快速开发，类似 Devise 给我们解决账号体系的方案一样。它包含数据库、Model、Controller、Views 以及 UI 细节的完整实现，你只需简单几行就能快速在你的现有项目上面集成起来。\n\n## 功能列表\n\n- 分类管理\n- 话题发布，管理\n- 回帖\n\n## 系统依赖\n\n由于内部包含较多复杂功能，Homeland 不得不需要依赖一些三方库，Homeland 尽可能的选用 Ruby 社区流行的 Gem，保持较小的版本依赖。\n\n建议你使用的时候选择目前 `homeland.gemspec` 里面描述的最佳的三方库版本号。\n\n### 下面是几个基本的\n\n- Rails 4.2.x +\n- ActiveRecord 4.2.x +\n- Bootstrap 4 Alpha (当然如果你重写 View 可以不管它)\n\n## 安装\n\n仅仅需要几步，就能集成到你的任何应用（当然我说的是 Rails + ActiveRecord 的！）。\n\n\u003e [提示]: Homeland 的默认配置是针对 Devise 设计的，你可以从配置文件里面看到，很多参数都是 Devise 的默认值。所以我建议大家尽可能的使用 Devise 来配合（如果情况允许的话），否则你需要实现一些必要的参数，详见后面的配置文件说明。\n\n1. 修改 Gemfile 增加:\n\n```ruby\n# Gemfile\ngem \"homeland\"\ngem 'font-awesome-sass-rails'\n# 如果你用其他 markup 可以不用依赖 github-markup\ngem 'github-markup'\n```\n\n然后直接 `bundle install` 安装好.\n\n2. 生成 Homeland 的基本配置文件：\n\n```bash\n$ rails g homeland:install\n```\n\n3. 自定义配置\n\n```ruby\n# config/initializes/homeland.rb\n# Homeland Config\nHomeland.configure do\n  # 正文格式化方式, [:markdown, :plain, :html], 默认: :markdown\n  # self.markup = :markdown\n\n  # 应用名称\n  # self.app_name = 'Homeland'\n\n  # 分页每页条数\n  # self.per_page = 32\n\n  # 重要！用户 Model 的 Model 名称, 默认: 'User'\n  # self.user_class = 'User'\n\n  # 在 User model 里面表示用户姓名、昵称的函数名称。\n  # 用于 Homeland 页面显示发帖回帖人名称, 默认: 'name'\n  # 例如:\n  # class User\n  #   def name\n  #     self.email.split('@').first\n  #   end\n  # end\n  # self.user_name_method = 'name'\n\n  # 在 User model 里面，用户头像 URL 的函数名称，默认: nil\n  # 当这个参数 nil 的时候，我们会用一个默认头像在页面上显示\n  # 关于尺寸，请给至少 64x64 以上\n  # self.user_avatar_url_method = nil\n\n  # 在 User model 里面，检测用户是否有 Homeland 管理权限的函数，默认: 'admin?'\n  # 此函数目的是为了告诉 Homeland，此用户是否可以管理论坛的回帖发帖，请返回 true, false\n  # self.user_admin_method = 'admin?'\n\n  # 在 User model 里面提供用户个人页面 URL（用于页面上点击用户名、头像的目标页面）\n  # 默认: 'profile_url'\n  # self.user_profile_url_method = 'profile_url'\n\n  # 在 Controller 里面，检查限制必须登录的函数（参见 Devise 的 authenticate_user! 方法）\n  # 默认: 'authenticate_user!'\n  # 此方法要求检查用户是否登录，未登录跳转到登录页面\n  # self.authenticate_user_method = 'authenticate_user!'\n\n  # 在 Controller 里面，获取当前用户对象的函数（参加 Devise 的 current_user 方法)\n  # 默认: 'current_user'\n  # 要求这个函数返回一个 User 对象\n  # self.current_user_method = 'current_user'\nend\n\n```\n\n### 如果你有更高级的需要，可以直接生成出 Homeland 的 Model, Controller, View 文件，然后按自己的需要定制：\n\n```bash\n$ rails g homeland:models\n$ rails g homeland:controllers\n$ rails g homeland:views\n```\n\n你也可以通过下面的命令生成默认的 I18n 文件\n\n```bash\n$ rails g homeland:i18n\n```\n\n## 实现自己的文章内容格式化\n\nHomeland 默认提供: [:markdown, :simple, :html] 几种可选的内容格式化方式，但某些时候你可能会有更多的需求，需要按自己的需要定制。\n\nHomeland 提供的方式让你达到这个目的。\n\n你需要在 `Homeland::Markup` 命名空间下面实现一个新的自定义类，并继承 `Homeland::Markup::Base`，实现 `render` 函数，例如：\n\n新建文件 lib/homeland/markup/ruby_china.rb\n\n```ruby\nmodule Homeland\n  module Markup\n    class RubyChina \u003c Base\n      class \u003c\u003c self\n        def render(raw)\n          # 在这里编写你的详细转换实现\n          YouCustomRender.render(raw)\n        end\n      end\n    end\n  end\nend\n```\n\n需改 config/initializes/homeland.rb\n\n```ruby\nHomeland.configure do\n  self.markup = :ruby_china\nend\n```\n\n然后，Homeland 在转换格式的时候，就会用你的自定义 Markup 来处理了。\n\n## Demo App\n\n![2016-03-24 15 27 27](https://cloud.githubusercontent.com/assets/5518/14011062/4ca58542-f1d6-11e5-97bb-e43e67e4686e.png)\n![2016-03-24 15 27 45](https://cloud.githubusercontent.com/assets/5518/14011063/4caa8326-f1d6-11e5-9161-ef93afe07465.png)\n![2016-03-24 15 27 49](https://cloud.githubusercontent.com/assets/5518/14011061/4ca57bf6-f1d6-11e5-8343-291d7e92bf3c.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frails-engine%2Fhomeland","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frails-engine%2Fhomeland","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frails-engine%2Fhomeland/lists"}