A page orchestrates components within its response method. A Rails controller action references a page (and its corresponding app) in its render call. Thus a matestack page substitutes a typical Rails view.
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def responsediv doplain "Hello World from Example Page!"endend​end
Imagine having created and registered a custom component card
. Go ahead and use it on your page:
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def responsediv do# calling your registered card component without using matestack_component helper!card title: "hello"endend​end
visit "/my_action_path/?foo=bar"
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def responsediv doplain params[:foo] #--> barendend​end
The prepare
method is called before rendering.
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def prepare@some_data = "data!"end​def responsediv doplain @some_data #--> "data!"endend​end
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def prepare@some_data = [1,2,3,4,5]end​def responsediv dounless @some_data.empty?@some_data.each do |data|plain dataendelseplain "no data given"endendend​end
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def prepare@some_data = [1,2,3,4,5]end​def responsediv dounless @some_data.empty?@some_data.each do |data|plain calculated_value(data)endelseplain "no data given"endendend​def calculated_value datareturn data*2end​end
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​def responsediv domy_simple_partialbrmy_partial_with_param "foo"brmy_partial_with_partialendend​def my_simple_partialspan id: "my_simple_partial" doplain "some content"endend​def my_partial_with_param some_paramspan id: "my_partial_with_param" doplain "content with param: #{some_param}"endend​def my_partial_with_partialspan id: "my_partial_with_partial" domy_simple_partialendend​end
renders to:
<div>​<span id="my_simple_partial">some content</span>​<br/>​<span id="my_partial_with_param">content with param: foo</span>​<br/>​<span id="my_partial_with_partial">​<span id="my_simple_partial">some content</span>​</span>​</div>
app/matestack/pages/my_shared_partials.rb
module Pages::MySharedPartials​def my_partial_with_param some_paramspan id: "my_partial_with_param" doplain "content with param: #{some_param}"endend​end
app/matestack/example_app/pages/example_page.rb
class ExampleApp::Pages < Matestack::Ui::Page​include Pages::MySharedPartials​def responsediv domy_simple_partialbrmy_partial_with_param "foo"brmy_partial_with_partialendend​def my_simple_partialspan id: "my_simple_partial" doplain "some content"endend​def my_partial_with_partialspan id: "my_partial_with_partial" domy_simple_partialendend​end
renders to:
<div>​<span id="my_simple_partial">some content</span>​<br/>​<span id="my_partial_with_param">content with param: foo</span>​<br/>​<span id="my_partial_with_partial">​<span id="my_simple_partial">some content</span>​</span>​</div>