card 1.95.3 → 1.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/card.rb +10 -2
- data/lib/card/migration/import.rb +1 -1
- data/lib/card/set.rb +1 -1
- data/lib/card/set/event.rb +63 -65
- data/lib/card/set/event/callbacks.rb +21 -0
- data/lib/card/set/event/delayed_event.rb +11 -16
- data/lib/card/set/event/options.rb +78 -0
- data/lib/card/set/format.rb +5 -93
- data/lib/card/set/format/abstract_format.rb +104 -0
- data/mod/Modfile +1 -0
- data/mod/basic_formats/set/all/all_csv.rb +1 -1
- data/mod/basic_formats/set/all/json.rb +61 -4
- data/mod/basic_formats/spec/set/all/json_spec.rb +51 -1
- data/mod/basic_formats/spec/shared_context/json_shared_context.rb +40 -0
- data/mod/bootstrap/lib/stylesheets/style_bootstrap_cards.scss +17 -1
- data/mod/bootstrap/set/abstract/bootswatch_theme.rb +2 -12
- data/mod/bootstrap/set/abstract/bootswatch_theme/html_views.rb +31 -0
- data/mod/bootstrap/set/type/customized_bootswatch_skin.rb +12 -0
- data/mod/bootstrap/set/type/customized_bootswatch_skin/core.haml +5 -0
- data/mod/bootstrap/set/type/customized_bootswatch_skin/html_views.rb +36 -0
- data/mod/bootstrap/set/type_plus_right/customized_bootswatch_skin/colors.rb +14 -10
- data/mod/bootstrap/set/type_plus_right/customized_bootswatch_skin/colors/_colorpicker.haml +1 -1
- data/mod/bootstrap/set/type_plus_right/customized_bootswatch_skin/colors/editor.haml +13 -9
- data/mod/core/chunk/link.rb +8 -0
- data/mod/core/set/abstract/code_file.rb +5 -0
- data/mod/core/set/all/chunk.rb +46 -24
- data/mod/core/set/all/event_conditions.rb +32 -11
- data/mod/core/set/all/export.rb +3 -5
- data/mod/core/set/all/item.rb +16 -0
- data/mod/core/set/all/name.rb +1 -0
- data/mod/core/set/all/references.rb +25 -16
- data/mod/core/set/all/rename.rb +20 -21
- data/mod/core/set/all/trash.rb +13 -4
- data/mod/core/spec/set/all/actify_spec.rb +4 -4
- data/mod/core/spec/set/all/event_conditions_spec.rb +68 -10
- data/mod/core/spec/set/all/export_spec.rb +7 -4
- data/mod/core/spec/set/all/references_spec.rb +38 -1
- data/mod/core/spec/set/all/rename_spec.rb +15 -9
- data/mod/follow/spec/set/right/followers_spec.rb +1 -1
- data/mod/follow/spec/set/right/following_spec.rb +4 -8
- data/mod/follow/spec/set/type/notification_template_spec.rb +1 -1
- data/mod/history/set/all/act_view.rb +2 -2
- data/mod/item/set/all/bar.haml +12 -0
- data/mod/item/set/all/bar.rb +77 -0
- data/mod/item/set/all/box.haml +10 -0
- data/mod/item/set/all/box.rb +8 -0
- data/mod/item/set/all/expanded_bar.haml +10 -0
- data/mod/machines/file/all_script_machine_output/file.js +30622 -66
- data/mod/machines/file/all_style_machine_output/file.css +3 -3
- data/mod/machines/file/script_html5shiv_printshiv_machine_output/file.js +1 -1
- data/mod/machines/lib/javascript/decko_slot.js.coffee +18 -13
- data/mod/machines/set/abstract/skin_box.rb +34 -0
- data/mod/machines/set/abstract/skin_box/box_bottom.haml +4 -0
- data/mod/machines/set/type/skin.rb +1 -1
- data/mod/pointer/set/abstract/01_paging.rb +49 -4
- data/mod/pointer/set/abstract/01_paging/paging_links.rb +6 -6
- data/mod/pointer/set/abstract/02_pointer/html_views.rb +10 -0
- data/mod/pointer/set/abstract/02_pointer/other_views.rb +9 -5
- data/mod/pointer/spec/set/abstract/pointer/html_views_spec.rb +4 -10
- data/mod/pointer/spec/set/abstract/pointer/other_views_spec.rb +20 -1
- data/mod/search/set/abstract/01_filter_form_helper.rb +4 -4
- data/mod/search/set/abstract/02_search_params.rb +1 -1
- data/mod/search/set/abstract/03_filter.rb +8 -0
- data/mod/search/set/abstract/search.rb +10 -0
- data/mod/settings/set/right/style.rb +13 -0
- data/mod/settings/set/right/style/editor.haml +4 -4
- data/mod/standard/set/all/path.rb +6 -0
- data/mod/standard/set/type/list.rb +3 -2
- data/mod/standard/set/type/listed_by.rb +5 -1
- data/mod/standard/spec/content/chunk/include_spec.rb +2 -2
- data/mod/standard/spec/set/all/rich_html/editing_spec.rb +4 -69
- data/mod/standard/spec/set/type/listed_by_spec.rb +2 -2
- data/mod/standard/spec/set/type/search_type_spec.rb +56 -0
- data/mod/standard/spec/set/type/set/html_views_spec.rb +5 -9
- data/mod/utility/set/abstract/bs_badge.rb +21 -0
- data/mod/utility/set/abstract/bs_badge/bs_badge.haml +5 -0
- data/mod/utility/set/abstract/bs_badge/labeled_badge.haml +5 -0
- data/mod/utility/set/abstract/bs_badge/tab_badge.haml +5 -0
- data/mod/utility/set/abstract/media.rb +27 -0
- data/mod/utility/set/abstract/media/media_snippet.haml +9 -0
- metadata +28 -10
- data/mod/machines/set/abstract/skin_thumbnail.rb +0 -28
- data/mod/machines/set/abstract/skin_thumbnail/thumbnail.haml +0 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a73062a82222809672762110ca1f6892dcf22cd7
|
|
4
|
+
data.tar.gz: 5315e20f640bd0efa37e00c3f2551b18a2856160
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 03f59ad4c0428b43d47e2c81c202e630293000057e53648a702fff25401e2791d497895fe17e71ca9600b5a4d7c5182da361ef19aa9fbe0b75595be7566cc9b1
|
|
7
|
+
data.tar.gz: f9c7550d1c9ea23c1f3447bcc2c1611afe434d4bd92e778410827fc07aeb73ab2b89cf0ac3091e14905d267454fec508c14166e06ec8fda8de7fb98630b2e66b
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.6.0
|
data/lib/card.rb
CHANGED
|
@@ -141,11 +141,19 @@ class Card < ApplicationRecord
|
|
|
141
141
|
:silent_change, # and this probably too
|
|
142
142
|
# :remove_rule_stash,
|
|
143
143
|
:last_action_id_before_edit,
|
|
144
|
-
:only_storage_phase,
|
|
144
|
+
:only_storage_phase, # used to save subcards
|
|
145
145
|
:changed_attributes,
|
|
146
|
-
:
|
|
146
|
+
:skip, # skip event(s) for all cards in act
|
|
147
|
+
:skip_in_action, # skip event for just this card
|
|
148
|
+
:trigger, # trigger event(s) for all cards in act
|
|
149
|
+
:trigger_in_action # trigger event for just this card
|
|
147
150
|
)
|
|
148
151
|
|
|
152
|
+
alias_method :skip_event, :skip
|
|
153
|
+
alias_method :skip_event_in_action, :skip_in_action
|
|
154
|
+
alias_method :trigger_event, :trigger
|
|
155
|
+
alias_method :trigger_event_in_action, :trigger_in_action
|
|
156
|
+
|
|
149
157
|
def serializable_attributes
|
|
150
158
|
self.class.serializable_attributes + set_specific.keys
|
|
151
159
|
end
|
data/lib/card/set.rb
CHANGED
data/lib/card/set/event.rb
CHANGED
|
@@ -8,99 +8,97 @@ class Card
|
|
|
8
8
|
# * __integration__ deals with any ramifications of those changes
|
|
9
9
|
#
|
|
10
10
|
#
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Card.define_callbacks event
|
|
17
|
-
define_event event, opts, &final
|
|
18
|
-
set_event_callbacks event, opts
|
|
11
|
+
class Event
|
|
12
|
+
module Api
|
|
13
|
+
def event event, stage_or_opts={}, opts={}, &final
|
|
14
|
+
Event.new(event, stage_or_opts, opts, self, &final).register
|
|
15
|
+
end
|
|
19
16
|
end
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
CONDITION_OPTIONS = {
|
|
19
|
+
on: %i[create update delete save read],
|
|
20
|
+
changed: %i[name content db_content type type_id codename key],
|
|
21
|
+
skip: :allowed,
|
|
22
|
+
trigger: :required, # the event is only executed if triggered explicitly with
|
|
23
|
+
# trigger: [event_name]
|
|
24
|
+
}.freeze
|
|
25
|
+
|
|
26
|
+
CONDITIONS = ::Set.new(%i[on changed when skip trigger]).freeze
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
include DelayedEvent
|
|
29
|
+
include Options
|
|
30
|
+
include Callbacks
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
attr_reader :set_module, :opts
|
|
33
|
+
|
|
34
|
+
def initialize event, stage_or_opts, opts, set_module, &final
|
|
35
|
+
@event = event
|
|
36
|
+
@set_module = set_module
|
|
37
|
+
@opts = event_opts stage_or_opts, opts
|
|
38
|
+
@event_block = final
|
|
30
39
|
end
|
|
31
40
|
|
|
32
|
-
def
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
opts
|
|
41
|
+
def register
|
|
42
|
+
validate_conditions
|
|
43
|
+
Card.define_callbacks @event
|
|
44
|
+
define_event
|
|
45
|
+
set_event_callbacks
|
|
39
46
|
end
|
|
40
47
|
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
# @return the name of the event
|
|
49
|
+
def name
|
|
50
|
+
@event
|
|
43
51
|
end
|
|
44
52
|
|
|
45
|
-
def
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
def block
|
|
54
|
+
@event_block
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# the name for the method that only executes the code
|
|
58
|
+
# defined in the event
|
|
59
|
+
def simple_method_name
|
|
60
|
+
"#{@event}_without_callbacks"
|
|
51
61
|
end
|
|
52
62
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
# the name for the method that adds the event to
|
|
64
|
+
# the delayed job queue
|
|
65
|
+
def delaying_method_name
|
|
66
|
+
"#{@event}_with_delay"
|
|
56
67
|
end
|
|
57
68
|
|
|
69
|
+
private
|
|
70
|
+
|
|
58
71
|
# EVENT DEFINITION
|
|
59
72
|
|
|
60
|
-
def define_event
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
define_event_method event, simple_method_name, opts
|
|
73
|
+
def define_event
|
|
74
|
+
define_simple_method
|
|
75
|
+
define_event_method
|
|
64
76
|
end
|
|
65
77
|
|
|
66
|
-
def define_simple_method
|
|
67
|
-
|
|
68
|
-
define_method
|
|
78
|
+
def define_simple_method
|
|
79
|
+
@set_module.class_exec(self) do |event|
|
|
80
|
+
define_method event.simple_method_name, &event.block
|
|
69
81
|
end
|
|
70
82
|
end
|
|
71
83
|
|
|
72
|
-
def define_event_method
|
|
73
|
-
event_type
|
|
74
|
-
|
|
84
|
+
def define_event_method
|
|
85
|
+
send "define_#{event_type}_event_method"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def event_type
|
|
89
|
+
with_delay?(@opts) ? :delayed : :standard
|
|
75
90
|
end
|
|
76
91
|
|
|
77
|
-
def define_standard_event_method
|
|
78
|
-
|
|
79
|
-
define_method
|
|
80
|
-
log_event_call
|
|
81
|
-
run_callbacks
|
|
92
|
+
def define_standard_event_method method_name=simple_method_name
|
|
93
|
+
@set_module.class_exec(@event) do |event_name|
|
|
94
|
+
define_method event_name do
|
|
95
|
+
log_event_call event_name
|
|
96
|
+
run_callbacks event_name do
|
|
82
97
|
send method_name
|
|
83
98
|
end
|
|
84
99
|
end
|
|
85
100
|
end
|
|
86
101
|
end
|
|
87
|
-
|
|
88
|
-
# EVENT CALLBACKS
|
|
89
|
-
|
|
90
|
-
def set_event_callbacks event, opts
|
|
91
|
-
opts[:set] ||= self
|
|
92
|
-
[:before, :after, :around].each do |kind|
|
|
93
|
-
next unless (object_method = opts.delete kind)
|
|
94
|
-
set_event_callback object_method, kind, event, opts
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def set_event_callback object_method, kind, event, opts
|
|
99
|
-
Card.class_eval do
|
|
100
|
-
set_callback object_method, kind, event,
|
|
101
|
-
prepend: true, if: proc { |c| c.event_applies?(event, opts) }
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
102
|
end
|
|
105
103
|
end
|
|
106
104
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class Card
|
|
2
|
+
module Set
|
|
3
|
+
class Event
|
|
4
|
+
module Callbacks
|
|
5
|
+
def set_event_callbacks
|
|
6
|
+
%i[before after around].each do |kind|
|
|
7
|
+
next unless (object_method = @opts.delete kind)
|
|
8
|
+
set_event_callback object_method, kind
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def set_event_callback object_method, kind
|
|
13
|
+
Card.class_exec(self) do |event|
|
|
14
|
+
set_callback object_method, kind, event.name,
|
|
15
|
+
prepend: true, if: proc { |c| c.event_applies?(event) }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class Card
|
|
2
2
|
module Set
|
|
3
|
-
|
|
3
|
+
class Event
|
|
4
4
|
module DelayedEvent
|
|
5
5
|
DELAY_STAGES = ::Set.new([:integrate_with_delay_stage,
|
|
6
6
|
:integrate_with_delay_final_stage]).freeze
|
|
@@ -11,28 +11,23 @@ class Card
|
|
|
11
11
|
DELAY_STAGES.include?(opts[:after]) || DELAY_STAGES.include?(opts[:before])
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def define_delayed_event_method
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
define_standard_event_method event, delaying_method
|
|
14
|
+
def define_delayed_event_method
|
|
15
|
+
define_event_delaying_method
|
|
16
|
+
define_standard_event_method delaying_method_name
|
|
18
17
|
end
|
|
19
18
|
|
|
20
|
-
# creates an ActiveJob.
|
|
19
|
+
# creates a method that creates an ActiveJob that calls the event method.
|
|
21
20
|
# The scheduled job gets the card object as argument and all serializable
|
|
22
21
|
# attributes of the card.
|
|
23
22
|
# (when the job is executed ActiveJob fetches the card from the database
|
|
24
23
|
# so all attributes get lost)
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def define_event_delaying_method event, method_name, final_method_name
|
|
31
|
-
class_eval do
|
|
32
|
-
define_method(method_name, proc do
|
|
33
|
-
IntegrateWithDelayJob.set(queue: event).perform_later(
|
|
24
|
+
# It uses the event as queue name
|
|
25
|
+
def define_event_delaying_method
|
|
26
|
+
@set_module.class_exec(self) do |event|
|
|
27
|
+
define_method(event.delaying_method_name, proc do
|
|
28
|
+
IntegrateWithDelayJob.set(queue: event.name).perform_later(
|
|
34
29
|
Card::ActManager.act&.id, self, serialize_for_active_job, Card::Env.serialize,
|
|
35
|
-
Card::Auth.serialize,
|
|
30
|
+
Card::Auth.serialize, event.simple_method_name
|
|
36
31
|
)
|
|
37
32
|
end)
|
|
38
33
|
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
class Card
|
|
2
|
+
module Set
|
|
3
|
+
class Event
|
|
4
|
+
module Options
|
|
5
|
+
def validate_conditions
|
|
6
|
+
@opts.each do |key, val|
|
|
7
|
+
next if key.in? %i[in before after around]
|
|
8
|
+
validate_condition_name key
|
|
9
|
+
validate_condition_value key, val
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def validate_condition_name condition
|
|
14
|
+
return if Card::Set::Event::CONDITIONS.include? condition
|
|
15
|
+
raise ArgumentError,
|
|
16
|
+
"invalid condition key '#{condition}' in event '#{@event}'\n" \
|
|
17
|
+
"valid conditions are #{Card::Set::Event::CONDITIONS.to_a.join ', '}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def validate_condition_value condition, val
|
|
21
|
+
if condition == :when
|
|
22
|
+
validate_when_value val
|
|
23
|
+
else
|
|
24
|
+
invalid = Array.wrap(val) - Array.wrap(valid_values(condition))
|
|
25
|
+
return if invalid.empty?
|
|
26
|
+
raise ArgumentError,
|
|
27
|
+
"invalid option#{'s' if invalid.size > 1} '#{invalid}' "\
|
|
28
|
+
"for condition '#{condition}' in event '#{@event}'"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def validate_when_value val
|
|
33
|
+
return if val.is_a?(Symbol) || val.is_a?(Proc)
|
|
34
|
+
raise ArgumentError,
|
|
35
|
+
"invalid value for condition 'when' in event '#{@event}'\n" \
|
|
36
|
+
"must be a symbol or a proc"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def valid_values condition
|
|
40
|
+
Card::Set::Event::CONDITION_OPTIONS[condition]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def event_opts stage_or_opts, opts
|
|
44
|
+
opts = normalize_opts stage_or_opts, opts
|
|
45
|
+
process_stage_opts opts
|
|
46
|
+
process_action_opts opts
|
|
47
|
+
opts
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def normalize_opts stage_or_opts, opts
|
|
51
|
+
if stage_or_opts.is_a? Symbol
|
|
52
|
+
opts[:in] = stage_or_opts
|
|
53
|
+
else
|
|
54
|
+
opts = stage_or_opts
|
|
55
|
+
end
|
|
56
|
+
opts
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def process_action_opts opts
|
|
60
|
+
opts[:on] = [:create, :update] if opts[:on] == :save
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def process_stage_opts opts
|
|
64
|
+
if opts[:after] || opts[:before]
|
|
65
|
+
# ignore :in options
|
|
66
|
+
elsif (in_opt = opts.delete :in)
|
|
67
|
+
opts[:after] = callback_name in_opt, opts.delete(:after_subcards)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def callback_name stage, after_subcards=false
|
|
72
|
+
name = after_subcards ? "#{stage}_final_stage" : "#{stage}_stage"
|
|
73
|
+
name.to_sym
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
data/lib/card/set/format.rb
CHANGED
|
@@ -21,6 +21,7 @@ class Card
|
|
|
21
21
|
#
|
|
22
22
|
module Format
|
|
23
23
|
require_dependency "card/set/format/haml_views"
|
|
24
|
+
require_dependency "card/set/format/abstract_format"
|
|
24
25
|
|
|
25
26
|
def format *format_names, &block
|
|
26
27
|
format_names.compact!
|
|
@@ -39,6 +40,10 @@ class Card
|
|
|
39
40
|
format { view(*args, &block) }
|
|
40
41
|
end
|
|
41
42
|
|
|
43
|
+
def view_for_override *args, &block
|
|
44
|
+
format { view_for_override(*args, &block) }
|
|
45
|
+
end
|
|
46
|
+
|
|
42
47
|
def before view, &block
|
|
43
48
|
format { before view, &block }
|
|
44
49
|
end
|
|
@@ -75,99 +80,6 @@ class Card
|
|
|
75
80
|
modules[:base_format][format_class] ||= []
|
|
76
81
|
modules[:base_format][format_class] << mod
|
|
77
82
|
end
|
|
78
|
-
|
|
79
|
-
# All Format modules are extended with this module in order to support
|
|
80
|
-
# the basic format API (ok, view definitions. It's just view
|
|
81
|
-
# definitions.)
|
|
82
|
-
# No longer just view definitions. Also basket definitions now.
|
|
83
|
-
module AbstractFormat
|
|
84
|
-
include Set::Basket
|
|
85
|
-
include Set::Format::HamlViews
|
|
86
|
-
|
|
87
|
-
mattr_accessor :views
|
|
88
|
-
self.views = Hash.new { |h, k| h[k] = {} }
|
|
89
|
-
|
|
90
|
-
def before view, &block
|
|
91
|
-
define_method "_before_#{view}", &block
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def view view, *args, &block
|
|
95
|
-
#view = view.to_viewname.key.to_sym
|
|
96
|
-
interpret_view_opts view, args[0] if block_given?
|
|
97
|
-
view_method_block = view_block(view, args, &block)
|
|
98
|
-
if async_view? args
|
|
99
|
-
# This case makes only sense for HtmlFormat
|
|
100
|
-
# but I don't see an easy way to override class methods for a specific
|
|
101
|
-
# format. All formats are extended with this general module. So
|
|
102
|
-
# a HtmlFormat.view method would be overridden by AbstractFormat.view
|
|
103
|
-
# We need something like AbstractHtmlFormat for that.
|
|
104
|
-
define_async_view_method view, &view_method_block
|
|
105
|
-
else
|
|
106
|
-
define_standard_view_method view, &view_method_block
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def define_standard_view_method view, &block
|
|
111
|
-
views[self][view] = block
|
|
112
|
-
define_method "_view_#{view}", &block
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def define_async_view_method view, &block
|
|
116
|
-
view_content = "#{view}_async_content"
|
|
117
|
-
define_standard_view_method view_content, &block
|
|
118
|
-
define_standard_view_method view do
|
|
119
|
-
%(<card-view-placeholder data-url="#{path view: view_content}" />)
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def interpret_view_opts view, opts
|
|
124
|
-
return unless opts.present?
|
|
125
|
-
Card::Format.interpret_view_opts view, opts
|
|
126
|
-
extract_view_cache_rules view, opts.delete(:cache)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def extract_view_cache_rules view, cache_rule
|
|
130
|
-
return unless cache_rule
|
|
131
|
-
methodname = Card::Format.view_cache_setting_method view
|
|
132
|
-
define_method(methodname) { cache_rule }
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def view_block view, args, &block
|
|
136
|
-
return haml_view_block(view, wrap_with_slot?(args), &block) if haml_view?(args)
|
|
137
|
-
block_given? ? block : lookup_alias_block(view, args)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
def haml_view? args
|
|
141
|
-
args.first.is_a?(Hash) && args.first[:template] == :haml
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def wrap_with_slot? args
|
|
145
|
-
args.first.is_a?(Hash) && args.first[:slot]
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def async_view? args
|
|
149
|
-
args.first.is_a?(Hash) && args.first[:async]
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def lookup_alias_block view, args
|
|
153
|
-
opts = args[0].is_a?(Hash) ? args.shift : { view: args.shift }
|
|
154
|
-
opts[:mod] ||= self
|
|
155
|
-
opts[:view] ||= view
|
|
156
|
-
views[opts[:mod]][opts[:view]] || begin
|
|
157
|
-
raise "cannot find #{opts[:view]} view in #{opts[:mod]}; " \
|
|
158
|
-
"failed to alias #{view} in #{self}"
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def source_location
|
|
163
|
-
set_module.source_location
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
# remove the format part of the module name
|
|
167
|
-
def set_module
|
|
168
|
-
Card.const_get name.split("::")[0..-2].join("::")
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
83
|
end
|
|
172
84
|
end
|
|
173
85
|
end
|