Mastodonを読む/home.indexで行われる処理
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[Mastodonを読む]]
#contents
*はじめに [#p9d3bb03]
routes.rbを確認することで、「/」にアクセスしたときに実行...
*app/controllers/home_controller.rb [#k9ab2e41]
というわけで、HomeControllerのindexメソッドを見てみましょ...
#code(Ruby){{
class HomeController < ApplicationController
before_action :authenticate_user!
def index
@body_classes = 'app-body'
@token = find_or_create_access_token...
@web_settings = Web::Setting.find_by(user: ...
@admin = Account.find_local(Setting....
@streaming_api_base_url = Rails.configuration.x.strea...
end
}}
うーん、シンプル。というかこれだけだと何もわかりません。...
*app/views/home/index.html.haml [#t6ecfa9b]
ビューはHAMLで書かれているようです。
#code{{
- content_for :header_tags do
%script#initial-state{:type => 'application/json'}!= js...
= javascript_include_tag 'application', integrity: true...
= react_component 'Mastodon', default_props, class: 'app-...
}}
・・・。HAML使ったことないので、[[「Hamlの書き方」>http:/...
-「%」はHTMLのタグ、「#」はid、「{}」は属性
-「-」はブロック。インデントが戻るまでがブロックになる様子
-「=」は変数やメソッド呼び出しなどの出力
「!=」ってなんだ。まあ雰囲気的にメソッド呼び出して結果を...
なお、Ruby on Railsでは、views/layout/application.html.ha...
**app/views/home/initial_state.json.rabl [#q234607f]
home/initial_stateを見てみましょう。ちなみにこの部分はren...
対応するのはinitial_state.json.rablです。また別の言語・・・
#code(Ruby){{
object false
node(:meta) do
{
streaming_api_base_url: @streaming_api_base_url,
access_token: @token,
locale: I18n.locale,
domain: site_hostname,
me: current_account.id,
admin: @admin.try(:id),
boost_modal: current_account.user.setting_boost_modal,
auto_play_gif: current_account.user.setting_auto_play...
}
end
node(:compose) do
{
me: current_account.id,
default_privacy: current_account.user.setting_default...
}
end
node(:accounts) do
store = {}
store[current_account.id] = partial('api/v1/accounts/sh...
store[@admin.id] = partial('api/v1/accounts/show', obje...
store
end
node(:settings) { @web_settings }
}}
[[公式ページ>https://github.com/nesquena/rabl]]に書き方ガ...
#code{{
{
"meta":{
"streaming_api_base_url":"http://localhost:4000",
"access_token":"8920c1d8279002fa0f6b74f96bf7c971f9973...
"locale":"ja",
"domain":"mastodon.dev",
"me":1,
"admin":null,
"boost_modal":false,
"auto_play_gif":true
},
"compose":{
"me":1,
"default_privacy":"public"
},
"accounts":{
"1":{
"id":1,
"username":"admin",
"acct":"admin",
"display_name":"",
"locked":false,
"created_at":"2017-05-01T11:52:49.199Z",
"followers_count":0,
"following_count":0,
"statuses_count":1,
"note":"\u003cp\u003e\u003c/p\u003e",
"url":"http://mastodon.dev/@admin",
"avatar":"http://mastodon.dev/avatars/original/miss...
"avatar_static":"http://mastodon.dev/avatars/origin...
"header":"http://mastodon.dev/headers/original/miss...
"header_static":"http://mastodon.dev/headers/origin...
}
},
"settings":{
"onboarded":true,
"home":{
"shows":{
"reblog":true,"reply":true
}
},
"notifications":{
"alerts":{
"follow":true,
"favourite":true,
"reblog":true,
"mention":true
},
"shows":{
"follow":true,
"favourite":true,
"reblog":true,
"mention":true
},
"sounds":{
"follow":true,
"favourite":true,
"reblog":true,
"mention":true
}
}
}
}
}}
というわけで、
-object falseによりルートの要素に名前を付けない
-nodeで指定されたシンボルが名前になり、ブロックの最後に書...
という動作をしているようです。このinitial_stateはReduxを...
アカウントの情報取得するために部分テンプレートが呼ばれて...
***current_account [#h8da6652]
initial_state.json.rabl中ではしれっとcurrent_accountとい...
対応関係を確認すると、
app/models/user.rb
#code(Ruby){{
class User < ApplicationRecord
include Settings::Extend
devise :registerable, :recoverable,
:rememberable, :trackable, :validatable, :confir...
:two_factor_authenticatable, :two_factor_backupa...
otp_secret_encryption_key: ENV['OTP_SECRET'],
otp_number_of_backup_codes: 10
belongs_to :account, inverse_of: :user, required: true
accepts_nested_attributes_for :account
}}
app/models/account.rb
#code(Ruby){{
class Account < ApplicationRecord
include Targetable
# Local users
has_one :user, inverse_of: :account
}}
となっています。account.rbを見ると以降、フォローの関連付...
では何故current_accountとして現在のアカウントが取れるかと...
app/controllers/application_controller.rb
#code(Ruby){{
class ApplicationController < ActionController::Base
helper_method :current_account
def current_account
@current_account ||= current_user.try(:account)
end
}}
とヘルパーメソッドが定義されているためです。
**app/views/home/index.html.haml続き [#je476b71]
さて、index.html.hamlに戻って、再掲、
#code{{
- content_for :header_tags do
%script#initial-state{:type => 'application/json'}!= js...
= javascript_include_tag 'application', integrity: true...
= react_component 'Mastodon', default_props, class: 'app-...
}}
bodyタグも含めた出力は以下の通り。
#code(html){{
<body class='app-body'>
<div data-react-class="Mastodon" data-react-props="{"...
</body>
}}
ここから先、長期戦が見込まれるので一旦ここまで。
*おわりに [#s2bd0654]
というわけで、「/」にアクセスしたときに実行されるhome#ind...
感想として、ここまででHAML、RABLと二種類の言語(ひとつはR...
終了行:
[[Mastodonを読む]]
#contents
*はじめに [#p9d3bb03]
routes.rbを確認することで、「/」にアクセスしたときに実行...
*app/controllers/home_controller.rb [#k9ab2e41]
というわけで、HomeControllerのindexメソッドを見てみましょ...
#code(Ruby){{
class HomeController < ApplicationController
before_action :authenticate_user!
def index
@body_classes = 'app-body'
@token = find_or_create_access_token...
@web_settings = Web::Setting.find_by(user: ...
@admin = Account.find_local(Setting....
@streaming_api_base_url = Rails.configuration.x.strea...
end
}}
うーん、シンプル。というかこれだけだと何もわかりません。...
*app/views/home/index.html.haml [#t6ecfa9b]
ビューはHAMLで書かれているようです。
#code{{
- content_for :header_tags do
%script#initial-state{:type => 'application/json'}!= js...
= javascript_include_tag 'application', integrity: true...
= react_component 'Mastodon', default_props, class: 'app-...
}}
・・・。HAML使ったことないので、[[「Hamlの書き方」>http:/...
-「%」はHTMLのタグ、「#」はid、「{}」は属性
-「-」はブロック。インデントが戻るまでがブロックになる様子
-「=」は変数やメソッド呼び出しなどの出力
「!=」ってなんだ。まあ雰囲気的にメソッド呼び出して結果を...
なお、Ruby on Railsでは、views/layout/application.html.ha...
**app/views/home/initial_state.json.rabl [#q234607f]
home/initial_stateを見てみましょう。ちなみにこの部分はren...
対応するのはinitial_state.json.rablです。また別の言語・・・
#code(Ruby){{
object false
node(:meta) do
{
streaming_api_base_url: @streaming_api_base_url,
access_token: @token,
locale: I18n.locale,
domain: site_hostname,
me: current_account.id,
admin: @admin.try(:id),
boost_modal: current_account.user.setting_boost_modal,
auto_play_gif: current_account.user.setting_auto_play...
}
end
node(:compose) do
{
me: current_account.id,
default_privacy: current_account.user.setting_default...
}
end
node(:accounts) do
store = {}
store[current_account.id] = partial('api/v1/accounts/sh...
store[@admin.id] = partial('api/v1/accounts/show', obje...
store
end
node(:settings) { @web_settings }
}}
[[公式ページ>https://github.com/nesquena/rabl]]に書き方ガ...
#code{{
{
"meta":{
"streaming_api_base_url":"http://localhost:4000",
"access_token":"8920c1d8279002fa0f6b74f96bf7c971f9973...
"locale":"ja",
"domain":"mastodon.dev",
"me":1,
"admin":null,
"boost_modal":false,
"auto_play_gif":true
},
"compose":{
"me":1,
"default_privacy":"public"
},
"accounts":{
"1":{
"id":1,
"username":"admin",
"acct":"admin",
"display_name":"",
"locked":false,
"created_at":"2017-05-01T11:52:49.199Z",
"followers_count":0,
"following_count":0,
"statuses_count":1,
"note":"\u003cp\u003e\u003c/p\u003e",
"url":"http://mastodon.dev/@admin",
"avatar":"http://mastodon.dev/avatars/original/miss...
"avatar_static":"http://mastodon.dev/avatars/origin...
"header":"http://mastodon.dev/headers/original/miss...
"header_static":"http://mastodon.dev/headers/origin...
}
},
"settings":{
"onboarded":true,
"home":{
"shows":{
"reblog":true,"reply":true
}
},
"notifications":{
"alerts":{
"follow":true,
"favourite":true,
"reblog":true,
"mention":true
},
"shows":{
"follow":true,
"favourite":true,
"reblog":true,
"mention":true
},
"sounds":{
"follow":true,
"favourite":true,
"reblog":true,
"mention":true
}
}
}
}
}}
というわけで、
-object falseによりルートの要素に名前を付けない
-nodeで指定されたシンボルが名前になり、ブロックの最後に書...
という動作をしているようです。このinitial_stateはReduxを...
アカウントの情報取得するために部分テンプレートが呼ばれて...
***current_account [#h8da6652]
initial_state.json.rabl中ではしれっとcurrent_accountとい...
対応関係を確認すると、
app/models/user.rb
#code(Ruby){{
class User < ApplicationRecord
include Settings::Extend
devise :registerable, :recoverable,
:rememberable, :trackable, :validatable, :confir...
:two_factor_authenticatable, :two_factor_backupa...
otp_secret_encryption_key: ENV['OTP_SECRET'],
otp_number_of_backup_codes: 10
belongs_to :account, inverse_of: :user, required: true
accepts_nested_attributes_for :account
}}
app/models/account.rb
#code(Ruby){{
class Account < ApplicationRecord
include Targetable
# Local users
has_one :user, inverse_of: :account
}}
となっています。account.rbを見ると以降、フォローの関連付...
では何故current_accountとして現在のアカウントが取れるかと...
app/controllers/application_controller.rb
#code(Ruby){{
class ApplicationController < ActionController::Base
helper_method :current_account
def current_account
@current_account ||= current_user.try(:account)
end
}}
とヘルパーメソッドが定義されているためです。
**app/views/home/index.html.haml続き [#je476b71]
さて、index.html.hamlに戻って、再掲、
#code{{
- content_for :header_tags do
%script#initial-state{:type => 'application/json'}!= js...
= javascript_include_tag 'application', integrity: true...
= react_component 'Mastodon', default_props, class: 'app-...
}}
bodyタグも含めた出力は以下の通り。
#code(html){{
<body class='app-body'>
<div data-react-class="Mastodon" data-react-props="{"...
</body>
}}
ここから先、長期戦が見込まれるので一旦ここまで。
*おわりに [#s2bd0654]
というわけで、「/」にアクセスしたときに実行されるhome#ind...
感想として、ここまででHAML、RABLと二種類の言語(ひとつはR...
ページ名: