phlex-rails 1.1.2 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Appraisals +4 -6
- data/Gemfile +3 -5
- data/lib/generators/phlex/component/USAGE +1 -1
- data/lib/generators/phlex/component/templates/component.rb.erb +1 -1
- data/lib/generators/phlex/install/install_generator.rb +1 -2
- data/lib/generators/phlex/install/templates/application_layout.rb +1 -1
- data/lib/generators/phlex/view/templates/view.rb.erb +1 -1
- data/lib/phlex/rails/csv.rb +16 -0
- data/lib/phlex/rails/fragment_finder.rb +28 -0
- data/lib/phlex/rails/helper_macros.rb +11 -31
- data/lib/phlex/rails/helpers/action_cable_meta_tag.rb +11 -0
- data/lib/phlex/rails/helpers/action_name.rb +10 -0
- data/lib/phlex/rails/helpers/asset_path.rb +15 -0
- data/lib/phlex/rails/helpers/asset_url.rb +8 -0
- data/lib/phlex/rails/helpers/audio_path.rb +8 -0
- data/lib/phlex/rails/helpers/audio_tag.rb +9 -0
- data/lib/phlex/rails/helpers/audio_url.rb +8 -0
- data/lib/phlex/rails/helpers/auto_discovery_link_tag.rb +9 -0
- data/lib/phlex/rails/helpers/build_tag_values.rb +8 -0
- data/lib/phlex/rails/helpers/button_tag.rb +9 -0
- data/lib/phlex/rails/helpers/button_to.rb +9 -0
- data/lib/phlex/rails/helpers/check_box.rb +9 -0
- data/lib/phlex/rails/helpers/check_box_tag.rb +9 -0
- data/lib/phlex/rails/helpers/class_names.rb +8 -0
- data/lib/phlex/rails/helpers/collection_check_boxes.rb +10 -0
- data/lib/phlex/rails/helpers/collection_radio_buttons.rb +10 -0
- data/lib/phlex/rails/helpers/collection_select.rb +9 -0
- data/lib/phlex/rails/helpers/color_field.rb +9 -0
- data/lib/phlex/rails/helpers/color_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/compute_asset_extname.rb +8 -0
- data/lib/phlex/rails/helpers/compute_asset_host.rb +8 -0
- data/lib/phlex/rails/helpers/compute_asset_path.rb +8 -0
- data/lib/phlex/rails/helpers/content_for.rb +11 -0
- data/lib/phlex/rails/helpers/content_tag.rb +9 -0
- data/lib/phlex/rails/helpers/controller_name.rb +8 -0
- data/lib/phlex/rails/helpers/controller_path.rb +8 -0
- data/lib/phlex/rails/helpers/csp_meta_tag.rb +9 -0
- data/lib/phlex/rails/helpers/csrf_meta_tags.rb +9 -0
- data/lib/phlex/rails/helpers/current_cycle.rb +8 -0
- data/lib/phlex/rails/helpers/current_page.rb +8 -0
- data/lib/phlex/rails/helpers/cycle.rb +8 -0
- data/lib/phlex/rails/helpers/date_field.rb +9 -0
- data/lib/phlex/rails/helpers/date_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/date_select.rb +9 -0
- data/lib/phlex/rails/helpers/datetime_field.rb +9 -0
- data/lib/phlex/rails/helpers/datetime_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/datetime_local_field.rb +9 -0
- data/lib/phlex/rails/helpers/datetime_local_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/datetime_select.rb +9 -0
- data/lib/phlex/rails/helpers/debug.rb +9 -0
- data/lib/phlex/rails/helpers/default_url_options.rb +8 -0
- data/lib/phlex/rails/helpers/distance_of_time_in_words.rb +8 -0
- data/lib/phlex/rails/helpers/distance_of_time_in_words_to_now.rb +8 -0
- data/lib/phlex/rails/helpers/dom_class.rb +8 -0
- data/lib/phlex/rails/helpers/dom_id.rb +8 -0
- data/lib/phlex/rails/helpers/email_field.rb +9 -0
- data/lib/phlex/rails/helpers/email_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/error_message.rb +8 -0
- data/lib/phlex/rails/helpers/error_wrapping.rb +9 -0
- data/lib/phlex/rails/helpers/escape_once.rb +8 -0
- data/lib/phlex/rails/helpers/excerpt.rb +8 -0
- data/lib/phlex/rails/helpers/favicon_link_tag.rb +9 -0
- data/lib/phlex/rails/helpers/field_id.rb +8 -0
- data/lib/phlex/rails/helpers/field_name.rb +8 -0
- data/lib/phlex/rails/helpers/field_set_tag.rb +9 -0
- data/lib/phlex/rails/helpers/fields.rb +10 -0
- data/lib/phlex/rails/helpers/fields_for.rb +10 -0
- data/lib/phlex/rails/helpers/file_field.rb +9 -0
- data/lib/phlex/rails/helpers/file_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/flash.rb +8 -0
- data/lib/phlex/rails/helpers/font_path.rb +8 -0
- data/lib/phlex/rails/helpers/font_url.rb +8 -0
- data/lib/phlex/rails/helpers/form_for.rb +10 -0
- data/lib/phlex/rails/helpers/form_tag.rb +9 -0
- data/lib/phlex/rails/helpers/form_with.rb +10 -0
- data/lib/phlex/rails/helpers/grouped_collection_select.rb +9 -0
- data/lib/phlex/rails/helpers/grouped_options_for_select.rb +9 -0
- data/lib/phlex/rails/helpers/hidden_field.rb +9 -0
- data/lib/phlex/rails/helpers/hidden_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/highlight.rb +9 -0
- data/lib/phlex/rails/helpers/image_path.rb +8 -0
- data/lib/phlex/rails/helpers/image_submit_tag.rb +9 -0
- data/lib/phlex/rails/helpers/image_tag.rb +9 -0
- data/lib/phlex/rails/helpers/image_url.rb +8 -0
- data/lib/phlex/rails/helpers/javascript_import_module_tag.rb +9 -0
- data/lib/phlex/rails/helpers/javascript_importmap_tags.rb +9 -0
- data/lib/phlex/rails/helpers/javascript_include_tag.rb +9 -0
- data/lib/phlex/rails/helpers/javascript_path.rb +8 -0
- data/lib/phlex/rails/helpers/javascript_tag.rb +9 -0
- data/lib/phlex/rails/helpers/javascript_url.rb +8 -0
- data/lib/phlex/rails/helpers/l.rb +8 -0
- data/lib/phlex/rails/helpers/label.rb +8 -0
- data/lib/phlex/rails/helpers/label_tag.rb +9 -0
- data/lib/phlex/rails/helpers/link_to.rb +9 -0
- data/lib/phlex/rails/helpers/link_to_if.rb +9 -0
- data/lib/phlex/rails/helpers/link_to_unless.rb +9 -0
- data/lib/phlex/rails/helpers/link_to_unless_current.rb +9 -0
- data/lib/phlex/rails/helpers/localize.rb +8 -0
- data/lib/phlex/rails/helpers/mail_to.rb +9 -0
- data/lib/phlex/rails/helpers/month_field.rb +9 -0
- data/lib/phlex/rails/helpers/month_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/number_field.rb +9 -0
- data/lib/phlex/rails/helpers/number_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/number_to_currency.rb +8 -0
- data/lib/phlex/rails/helpers/number_to_human.rb +8 -0
- data/lib/phlex/rails/helpers/number_to_human_size.rb +8 -0
- data/lib/phlex/rails/helpers/number_to_percentage.rb +8 -0
- data/lib/phlex/rails/helpers/number_to_phone.rb +8 -0
- data/lib/phlex/rails/helpers/number_with_delimiter.rb +8 -0
- data/lib/phlex/rails/helpers/number_with_precision.rb +8 -0
- data/lib/phlex/rails/helpers/object.rb +8 -0
- data/lib/phlex/rails/helpers/option_groups_from_collection_for_select.rb +9 -0
- data/lib/phlex/rails/helpers/options_for_select.rb +9 -0
- data/lib/phlex/rails/helpers/options_from_collection_for_select.rb +9 -0
- data/lib/phlex/rails/helpers/password_field.rb +9 -0
- data/lib/phlex/rails/helpers/password_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/path_to_asset.rb +8 -0
- data/lib/phlex/rails/helpers/path_to_audio.rb +8 -0
- data/lib/phlex/rails/helpers/path_to_font.rb +8 -0
- data/lib/phlex/rails/helpers/path_to_image.rb +8 -0
- data/lib/phlex/rails/helpers/path_to_javascript.rb +8 -0
- data/lib/phlex/rails/helpers/path_to_stylesheet.rb +8 -0
- data/lib/phlex/rails/helpers/path_to_video.rb +8 -0
- data/lib/phlex/rails/helpers/phone_field.rb +9 -0
- data/lib/phlex/rails/helpers/phone_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/phone_to.rb +9 -0
- data/lib/phlex/rails/helpers/pluralize.rb +9 -0
- data/lib/phlex/rails/helpers/preload_link_tag.rb +9 -0
- data/lib/phlex/rails/helpers/provide.rb +8 -0
- data/lib/phlex/rails/helpers/public_compute_asset_path.rb +8 -0
- data/lib/phlex/rails/helpers/radio_button.rb +9 -0
- data/lib/phlex/rails/helpers/radio_button_tag.rb +9 -0
- data/lib/phlex/rails/helpers/range_field.rb +9 -0
- data/lib/phlex/rails/helpers/range_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/request.rb +8 -0
- data/lib/phlex/rails/helpers/reset_cycle.rb +8 -0
- data/lib/phlex/rails/helpers/rich_text_area.rb +9 -0
- data/lib/phlex/rails/helpers/sanitize.rb +8 -0
- data/lib/phlex/rails/helpers/sanitize_css.rb +8 -0
- data/lib/phlex/rails/helpers/search_field.rb +9 -0
- data/lib/phlex/rails/helpers/search_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/select.rb +9 -0
- data/lib/phlex/rails/helpers/select_date.rb +9 -0
- data/lib/phlex/rails/helpers/select_datetime.rb +9 -0
- data/lib/phlex/rails/helpers/select_day.rb +9 -0
- data/lib/phlex/rails/helpers/select_hour.rb +9 -0
- data/lib/phlex/rails/helpers/select_minute.rb +9 -0
- data/lib/phlex/rails/helpers/select_month.rb +9 -0
- data/lib/phlex/rails/helpers/select_second.rb +9 -0
- data/lib/phlex/rails/helpers/select_tag.rb +9 -0
- data/lib/phlex/rails/helpers/select_time.rb +9 -0
- data/lib/phlex/rails/helpers/select_year.rb +9 -0
- data/lib/phlex/rails/helpers/simple_format.rb +9 -0
- data/lib/phlex/rails/helpers/sms_to.rb +9 -0
- data/lib/phlex/rails/helpers/strip_links.rb +8 -0
- data/lib/phlex/rails/helpers/strip_tags.rb +8 -0
- data/lib/phlex/rails/helpers/stylesheet_link_tag.rb +9 -0
- data/lib/phlex/rails/helpers/stylesheet_path.rb +8 -0
- data/lib/phlex/rails/helpers/stylesheet_url.rb +8 -0
- data/lib/phlex/rails/helpers/submit_tag.rb +9 -0
- data/lib/phlex/rails/helpers/t.rb +3 -0
- data/lib/phlex/rails/helpers/telephone_field.rb +9 -0
- data/lib/phlex/rails/helpers/telephone_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/text_area.rb +9 -0
- data/lib/phlex/rails/helpers/text_area_tag.rb +9 -0
- data/lib/phlex/rails/helpers/text_field.rb +9 -0
- data/lib/phlex/rails/helpers/text_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/time_ago_in_words.rb +8 -0
- data/lib/phlex/rails/helpers/time_field.rb +9 -0
- data/lib/phlex/rails/helpers/time_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/time_select.rb +9 -0
- data/lib/phlex/rails/helpers/time_tag.rb +9 -0
- data/lib/phlex/rails/helpers/time_zone_options_for_select.rb +9 -0
- data/lib/phlex/rails/helpers/time_zone_select.rb +9 -0
- data/lib/phlex/rails/helpers/token_list.rb +8 -0
- data/lib/phlex/rails/helpers/translate.rb +25 -0
- data/lib/phlex/rails/helpers/truncate.rb +8 -0
- data/lib/phlex/rails/helpers/turbo_frame_tag.rb +8 -0
- data/lib/phlex/rails/helpers/turbo_include_tags.rb +8 -0
- data/lib/phlex/rails/helpers/turbo_refresh_method_tag.rb +8 -0
- data/lib/phlex/rails/helpers/turbo_refresh_scroll_tag.rb +8 -0
- data/lib/phlex/rails/helpers/turbo_refreshes_with.rb +9 -0
- data/lib/phlex/rails/helpers/turbo_stream_from.rb +8 -0
- data/lib/phlex/rails/helpers/url_field.rb +9 -0
- data/lib/phlex/rails/helpers/url_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/url_for.rb +8 -0
- data/lib/phlex/rails/helpers/url_options.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_asset.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_audio.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_font.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_image.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_javascript.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_stylesheet.rb +8 -0
- data/lib/phlex/rails/helpers/url_to_video.rb +8 -0
- data/lib/phlex/rails/helpers/utf8_enforcer_tag.rb +9 -0
- data/lib/phlex/rails/helpers/video_path.rb +8 -0
- data/lib/phlex/rails/helpers/video_tag.rb +9 -0
- data/lib/phlex/rails/helpers/video_url.rb +8 -0
- data/lib/phlex/rails/helpers/week_field.rb +9 -0
- data/lib/phlex/rails/helpers/week_field_tag.rb +9 -0
- data/lib/phlex/rails/helpers/weekday_options_for_select.rb +9 -0
- data/lib/phlex/rails/helpers/weekday_select.rb +9 -0
- data/lib/phlex/rails/helpers/with_output_buffer.rb +9 -0
- data/lib/phlex/rails/helpers/word_wrap.rb +8 -0
- data/lib/phlex/rails/helpers.rb +243 -1458
- data/lib/phlex/rails/html/method_missing.rb +13 -0
- data/lib/phlex/rails/html.rb +11 -0
- data/lib/phlex/rails/layout.rb +33 -22
- data/lib/phlex/rails/{sgml/overrides.rb → sgml.rb} +31 -17
- data/lib/phlex/rails/streaming.rb +95 -7
- data/lib/phlex/rails/version.rb +1 -1
- data/lib/phlex/rails.rb +25 -22
- metadata +202 -29
- data/CONTRIBUTING.md +0 -23
- data/lib/generators/phlex/controller/USAGE +0 -10
- data/lib/generators/phlex/controller/controller_generator.rb +0 -74
- data/lib/generators/phlex/controller/templates/controller.rb.erb +0 -14
- data/lib/generators/phlex/controller/templates/view.rb.erb +0 -9
- data/lib/generators/rspec/view/templates/view_spec.rb.erb +0 -10
- data/lib/generators/rspec/view/view_generator.rb +0 -14
- data/lib/generators/test_unit/templates/view_test.rb.erb +0 -15
- data/lib/generators/test_unit/view_generator.rb +0 -12
- data/lib/phlex/rails/html/format.rb +0 -8
- data/lib/phlex/rails/sgml/class_methods.rb +0 -13
data/CONTRIBUTING.md
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
# Contributing to Phlex
|
2
|
-
|
3
|
-
## Priorities
|
4
|
-
|
5
|
-
We’re trying to provide the best possible developer experience for the people using Phlex in their apps and the best possible performance for the users of those apps.
|
6
|
-
|
7
|
-
Phlex is incredibly complex and requires a lot of meta-programming but when you use it, it feels simple. Phlex views feel like plain old Ruby objects. You just subclass and define a couple of methods. That’s it. That’s how it should be.
|
8
|
-
|
9
|
-
## Setup
|
10
|
-
|
11
|
-
- Install dependencies `bundle install`
|
12
|
-
- Run the tests `bundle exec sus`
|
13
|
-
- Run Rubocop and auto-correct `bundle exec rubocop -A`
|
14
|
-
|
15
|
-
## Tests
|
16
|
-
|
17
|
-
We use the **[Sus](https://github.com/ioquatix/sus)** testing framework. It feels a bit like RSpec with a few small differences. There’s no documentation for Sus at the moment, but you should be able to pick up the basics from reading other tests or looking at the implementation in the Sus repo.
|
18
|
-
|
19
|
-
You can run all the tests with `bundle exec sus`.
|
20
|
-
|
21
|
-
## Documentation
|
22
|
-
|
23
|
-
Documentation is deployed when it’s merged into the `latest` branch with a release. But you can build and preview the docs locally by running `bin/docs`.
|
@@ -1,10 +0,0 @@
|
|
1
|
-
Description:
|
2
|
-
Generates a Rails controller with Phlex views for the supplied actions
|
3
|
-
|
4
|
-
Example:
|
5
|
-
rails generate phlex:controller Articles index show
|
6
|
-
|
7
|
-
This will create:
|
8
|
-
app/controllers/articles_controller.rb
|
9
|
-
app/views/articles/index_view.rb
|
10
|
-
app/views/articles/show_view.rb
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlex::Generators
|
4
|
-
class ControllerGenerator < ::Rails::Generators::NamedBase # :nodoc:
|
5
|
-
source_root File.expand_path("templates", __dir__)
|
6
|
-
|
7
|
-
check_class_collision suffix: "Controller"
|
8
|
-
|
9
|
-
argument :actions,
|
10
|
-
type: :array,
|
11
|
-
default: [],
|
12
|
-
banner: "action action"
|
13
|
-
|
14
|
-
class_option :skip_routes,
|
15
|
-
type: :boolean,
|
16
|
-
desc: "Don't add routes to config/routes.rb."
|
17
|
-
|
18
|
-
class_option :parent,
|
19
|
-
type: :string,
|
20
|
-
default: "ApplicationController",
|
21
|
-
desc: "The parent class for the generated controller"
|
22
|
-
|
23
|
-
def create_controllers
|
24
|
-
template "controller.rb.erb", File.join(
|
25
|
-
"app/controllers", class_path, "#{file_name}_controller.rb"
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
def copy_views
|
30
|
-
actions.each do |action|
|
31
|
-
@action = action
|
32
|
-
@path = File.join(
|
33
|
-
"app/views", class_path, file_name, "#{action}_view.rb"
|
34
|
-
)
|
35
|
-
|
36
|
-
template "view.rb.erb", @path
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def add_routes
|
41
|
-
return if options[:skip_routes]
|
42
|
-
|
43
|
-
routing_code = "resources :#{file_name}"
|
44
|
-
|
45
|
-
if actions.any?
|
46
|
-
routing_code << ", only: [#{actions.map { ":#{_1}" }.join(', ')}]"
|
47
|
-
end
|
48
|
-
|
49
|
-
route routing_code, namespace: regular_class_path
|
50
|
-
end
|
51
|
-
|
52
|
-
hook_for :test_framework, as: :controller do |generator|
|
53
|
-
invoke generator, [remove_possible_suffix(name), actions]
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def parent_class_name
|
59
|
-
options[:parent]
|
60
|
-
end
|
61
|
-
|
62
|
-
def file_name
|
63
|
-
remove_possible_suffix(super)
|
64
|
-
end
|
65
|
-
|
66
|
-
def name
|
67
|
-
remove_possible_suffix(super)
|
68
|
-
end
|
69
|
-
|
70
|
-
def remove_possible_suffix(name)
|
71
|
-
name.sub(/_?controller$/i, "")
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
<% module_namespacing do -%>
|
4
|
-
class <%= class_name %>Controller < <%= parent_class_name.classify %>
|
5
|
-
layout -> { ApplicationLayout }
|
6
|
-
|
7
|
-
<% actions.each do |action| -%>
|
8
|
-
def <%= action %>
|
9
|
-
render <%= class_name %>::<%= action.camelize %>View.new
|
10
|
-
end
|
11
|
-
<%= "\n" unless action == actions.last -%>
|
12
|
-
<% end -%>
|
13
|
-
end
|
14
|
-
<% end -%>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require "rails_helper"
|
2
|
-
|
3
|
-
RSpec.describe Views::<%= class_name %>, type: :view do
|
4
|
-
pending "renders without problem" do
|
5
|
-
result = render(described_class.new)
|
6
|
-
|
7
|
-
expect(result.css("h1").text).to eq "<%= class_name %>"
|
8
|
-
expect(result.css("p").text).to eq "Find me in <%= @path %>"
|
9
|
-
end
|
10
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Rspec
|
4
|
-
module Generators
|
5
|
-
class ViewGenerator < ::Rails::Generators::NamedBase
|
6
|
-
source_root File.expand_path("templates", __dir__)
|
7
|
-
|
8
|
-
def create_view
|
9
|
-
@path = File.join("app/views", class_path, "#{file_name}.rb")
|
10
|
-
template "view_spec.rb.erb", File.join("spec/views", class_path, "#{file_name}_spec.rb")
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
require "phlex/testing/rails"
|
3
|
-
require "phlex/testing/nokogiri"
|
4
|
-
|
5
|
-
class Views::<%= class_name %>Test < ActionView::TestCase
|
6
|
-
include Phlex::Testing::Rails::ViewHelper
|
7
|
-
include Phlex::Testing::Nokogiri::FragmentHelper
|
8
|
-
|
9
|
-
test "should render without problems" do
|
10
|
-
result = render(Views::<%= class_name %>.new)
|
11
|
-
|
12
|
-
assert_equal result.css("h1").first.text, "<%= class_name %>"
|
13
|
-
assert_equal result.css("p").first.text, "Find me in <%= @path %>"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module TestUnit
|
4
|
-
class ViewGenerator < ::Rails::Generators::NamedBase
|
5
|
-
source_root File.expand_path("templates", __dir__)
|
6
|
-
|
7
|
-
def create_view
|
8
|
-
@path = File.join("app/views", class_path, "#{file_name}.rb")
|
9
|
-
template "view_test.rb.erb", File.join("test/views", class_path, "#{file_name}_test.rb")
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|