card 1.20.2 → 1.20.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/card.gemspec +3 -1
- data/config/initializers/01_core_extensions/array.rb +1 -1
- data/config/initializers/01_core_extensions/module.rb +1 -1
- data/config/initializers/02_patches/active_record.rb +66 -0
- data/config/initializers/patches.rb +4 -0
- data/db/migrate_core_cards/20170314175313_add_notification_event_card.rb +21 -0
- data/db/seed/new/card_actions.yml +723 -475
- data/db/seed/new/card_acts.yml +45 -45
- data/db/seed/new/card_changes.yml +2306 -1675
- data/db/seed/new/card_references.yml +389 -116
- data/db/seed/new/cards.yml +2537 -2067
- data/db/seed/test/fixtures/card_actions.yml +1709 -1445
- data/db/seed/test/fixtures/card_acts.yml +302 -290
- data/db/seed/test/fixtures/card_changes.yml +5494 -4818
- data/db/seed/test/fixtures/card_references.yml +1137 -794
- data/db/seed/test/fixtures/cards.yml +3631 -3120
- data/db/version_core_cards.txt +1 -1
- data/lib/card/auth/current.rb +21 -0
- data/lib/card/env.rb +7 -2
- data/lib/card/env/success.rb +13 -3
- data/lib/card/format/render.rb +13 -4
- data/lib/card/migration.rb +4 -6
- data/lib/card/mod/loader.rb +8 -0
- data/lib/card/model/save_helper.rb +45 -0
- data/lib/card/name/view_name.rb +8 -6
- data/lib/card/query/join.rb +4 -2
- data/lib/card/query/sorting.rb +26 -22
- data/lib/card/reference.rb +2 -2
- data/lib/card/set/advanced_api.rb +31 -6
- data/lib/card/set/event.rb +16 -8
- data/lib/card/set/format.rb +15 -0
- data/lib/card/set/format/haml_views.rb +78 -0
- data/lib/card/set/loader.rb +3 -2
- data/lib/cardio.rb +17 -1
- data/mod/Modfile +2 -1
- data/mod/account/spec/set/all/account_spec.rb +1 -1
- data/mod/basic_formats/set/all/all_css.rb +4 -5
- data/mod/bootstrap/set/all/bootstrap/navbar.rb +6 -0
- data/mod/bootstrap/set/all/bootstrap/tabs.rb +13 -6
- data/mod/carrierwave/set/abstract/attachment/upload_cache.rb +6 -0
- data/mod/core/set/all/assign_attributes.rb +3 -0
- data/mod/core/set/all/fetch.rb +3 -3
- data/mod/core/spec/set/all/collection_spec.rb +5 -3
- data/mod/history/lib/card/change.rb +2 -2
- data/mod/machines/file/all_script_machine_output/file.js +37 -121
- data/mod/machines/file/all_style_machine_output/file.css +4 -4
- data/mod/machines/lib/javascript/wagn.js.coffee +4 -0
- data/mod/machines/lib/javascript/wagn_mod.js.coffee +0 -2
- data/mod/machines/set/type/css.rb +6 -0
- data/mod/{email → notifications}/format/email_html_format.rb +0 -0
- data/mod/{email → notifications}/format/email_text_format.rb +0 -0
- data/mod/{email → notifications}/lib/card/follow_option.rb +0 -0
- data/mod/{email → notifications}/set/abstract/test_context.rb +0 -0
- data/mod/{email → notifications}/set/all/email_html.rb +0 -0
- data/mod/{email → notifications}/set/all/email_text.rb +0 -0
- data/mod/{email → notifications}/set/all/follow.rb +0 -0
- data/mod/notifications/set/all/observer.rb +22 -0
- data/mod/{email/set/all/notify.rb → notifications/set/all/send_notifications.rb} +0 -0
- data/mod/notifications/set/all/show_notifications.rb +7 -0
- data/mod/{email → notifications}/set/right/bcc.rb +0 -0
- data/mod/{email → notifications}/set/right/cc.rb +0 -0
- data/mod/{email → notifications}/set/right/follow.rb +0 -0
- data/mod/{email → notifications}/set/right/follow_fields.rb +0 -0
- data/mod/{email → notifications}/set/right/followers.rb +0 -0
- data/mod/{email → notifications}/set/right/following.rb +0 -0
- data/mod/{email → notifications}/set/right/from.rb +0 -0
- data/mod/{email → notifications}/set/right/html_message.rb +0 -0
- data/mod/{email → notifications}/set/right/subject.rb +0 -0
- data/mod/{email → notifications}/set/right/text_message.rb +0 -0
- data/mod/{email → notifications}/set/right/to.rb +0 -0
- data/mod/{email → notifications}/set/self/always.rb +0 -0
- data/mod/{email → notifications}/set/self/created.rb +0 -0
- data/mod/{email → notifications}/set/self/edited.rb +0 -0
- data/mod/{email → notifications}/set/self/follow.rb +0 -0
- data/mod/{email → notifications}/set/self/follow_defaults.rb +0 -0
- data/mod/{email → notifications}/set/self/never.rb +0 -0
- data/mod/{email → notifications}/set/type/email_template.rb +0 -0
- data/mod/{email → notifications}/set/type/email_template/email_config.rb +0 -0
- data/mod/notifications/set/type/notification_template.rb +23 -0
- data/mod/{email → notifications}/set/type_plus_right/user/follow.rb +0 -0
- data/mod/{email → notifications}/spec/set/all/follow_spec.rb +14 -5
- data/mod/{email → notifications}/spec/set/all/notify_spec.rb +1 -1
- data/mod/{email → notifications}/spec/set/all/observer_spec.rb +1 -1
- data/mod/{email → notifications}/spec/set/right/followers_spec.rb +0 -0
- data/mod/{email → notifications}/spec/set/right/following_spec.rb +0 -0
- data/mod/{email → notifications}/spec/set/self/follow_defaults_spec.rb +0 -0
- data/mod/notifications/spec/set/type/notification_template_spec.rb +58 -0
- data/mod/{standard/set/abstract/search/paging.rb → pointer/set/abstract/00_paging.rb} +10 -1
- data/mod/{standard/set/abstract/search/paging → pointer/set/abstract/00_paging}/paging_links.rb +0 -0
- data/mod/pointer/set/abstract/01_pointer.rb +13 -1
- data/mod/pointer/spec/set/type/pointer_spec.rb +7 -0
- data/mod/standard/set/abstract/01_search_params.rb +4 -0
- data/mod/standard/set/abstract/search.rb +1 -0
- data/mod/standard/set/abstract/wql_search.rb +6 -4
- data/mod/standard/set/all/rich_html/toolbar.rb +31 -16
- data/mod/standard/set/all/rich_html/wrapper.rb +3 -1
- data/mod/standard/set/self/search.rb +28 -8
- data/mod/standard/set/type/search_type.rb +10 -8
- data/mod/standard/spec/set/all/rich_html/editing_spec.rb +2 -1
- data/mod/standard/spec/set/all/rich_html/form_spec.rb +2 -2
- data/mod/standard/spec/set/self/search_spec.rb +8 -1
- data/mod/standard/spec/set/type/phrase_spec.rb +2 -1
- data/mod/twitter/Gemfile +3 -0
- data/mod/twitter/db/migrate_cards/20170305112346_add_twitter_cards.rb +30 -0
- data/mod/twitter/set/type/twitter_template.rb +22 -0
- data/spec/lib/card/query/sorting_spec.rb +68 -0
- data/spec/lib/card/query_spec.rb +0 -65
- metadata +78 -40
- data/mod/email/set/all/observer.rb +0 -26
- data/mod/standard/spec/set/all/email_html_spec.rb +0 -15
data/db/version_core_cards.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
20170314175313
|
data/lib/card/auth/current.rb
CHANGED
@@ -49,6 +49,27 @@ class Card
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
def serialize
|
53
|
+
{ as_id: as_id, current_id: current_id }
|
54
|
+
end
|
55
|
+
|
56
|
+
# @param auth_data [Integer|Hash] user id or a hash
|
57
|
+
# @opts auth_data [Integer] current_id
|
58
|
+
# @opts auth_data [Integer] as_id
|
59
|
+
def with auth_data
|
60
|
+
auth_data = { current_id: auth_data } if auth_data.is_a?(Integer)
|
61
|
+
raise ArgumentError unless auth_data.is_a? Hash
|
62
|
+
|
63
|
+
tmp_current = current_id
|
64
|
+
tmp_as_id = as_id
|
65
|
+
@current_id = auth_data[:current_id]
|
66
|
+
@as_id = auth_data[:as_id] if auth_data[:as_id]
|
67
|
+
yield
|
68
|
+
ensure
|
69
|
+
@current_id = tmp_current
|
70
|
+
@as_id = tmp_as_id
|
71
|
+
end
|
72
|
+
|
52
73
|
# get session object from Env
|
53
74
|
# return [Session]
|
54
75
|
def session
|
data/lib/card/env.rb
CHANGED
@@ -64,9 +64,14 @@ class Card
|
|
64
64
|
@env.select { |k, _v| SERIALIZABLE_ATTRIBUTES.include?(k) }
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
# @param serialized_env [Hash]
|
68
|
+
def with serialized_env
|
69
|
+
tmp_env = serialize if @env
|
68
70
|
@env ||= {}
|
69
|
-
@env.update
|
71
|
+
@env.update serialized_env
|
72
|
+
yield
|
73
|
+
ensure
|
74
|
+
@env.update tmp_env if tmp_env
|
70
75
|
end
|
71
76
|
|
72
77
|
private
|
data/lib/card/env/success.rb
CHANGED
@@ -43,7 +43,9 @@ class Card
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def id= id
|
46
|
-
|
46
|
+
# for backwards compatibility use mark here.
|
47
|
+
# id was often used for the card name
|
48
|
+
self.mark = id
|
47
49
|
end
|
48
50
|
|
49
51
|
def type= type
|
@@ -63,7 +65,7 @@ class Card
|
|
63
65
|
case value
|
64
66
|
when "" then ""
|
65
67
|
when "*previous", :previous then :previous
|
66
|
-
when
|
68
|
+
when %r{^(http|/)} then value
|
67
69
|
when /^TEXT:\s*(.+)/ then Regexp.last_match(1)
|
68
70
|
when /^REDIRECT:\s*(.+)/
|
69
71
|
@redirect = true
|
@@ -89,7 +91,9 @@ class Card
|
|
89
91
|
end
|
90
92
|
|
91
93
|
def target name_context=@name_context
|
92
|
-
card(name_context) ||
|
94
|
+
card(name_context) ||
|
95
|
+
(@target == :previous ? Card::Env.previous_location : @target) ||
|
96
|
+
Card.fetch(name_context)
|
93
97
|
end
|
94
98
|
|
95
99
|
def []= key, value
|
@@ -112,6 +116,12 @@ class Card
|
|
112
116
|
end
|
113
117
|
end
|
114
118
|
|
119
|
+
def flash message=nil
|
120
|
+
@params[:flash] ||= []
|
121
|
+
@params[:flash] << message if message
|
122
|
+
@params[:flash]
|
123
|
+
end
|
124
|
+
|
115
125
|
def params
|
116
126
|
@params.marshal_dump
|
117
127
|
end
|
data/lib/card/format/render.rb
CHANGED
@@ -113,10 +113,19 @@ class Card
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def view_method view
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
116
|
+
unless supports_view? view
|
117
|
+
voo.unsupported_view = view
|
118
|
+
view = :unsupported_view
|
119
|
+
end
|
120
|
+
method view_method_name(view)
|
121
|
+
end
|
122
|
+
|
123
|
+
def supports_view? view
|
124
|
+
respond_to? view_method_name(view)
|
125
|
+
end
|
126
|
+
|
127
|
+
def view_method_name view
|
128
|
+
"_view_#{view}"
|
120
129
|
end
|
121
130
|
|
122
131
|
def current_view view
|
data/lib/card/migration.rb
CHANGED
@@ -62,12 +62,10 @@ class Card::Migration < ActiveRecord::Migration
|
|
62
62
|
Card::Cache.reset_all
|
63
63
|
Cardio.schema_mode "" do
|
64
64
|
Card::Auth.as_bot do
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
Card::Cache.reset_all
|
70
|
-
end
|
65
|
+
begin
|
66
|
+
yield
|
67
|
+
ensure
|
68
|
+
Card::Cache.reset_all
|
71
69
|
end
|
72
70
|
end
|
73
71
|
end
|
data/lib/card/mod/loader.rb
CHANGED
@@ -18,6 +18,7 @@ class Card
|
|
18
18
|
module Loader
|
19
19
|
class << self
|
20
20
|
def load_mods
|
21
|
+
load_initializers
|
21
22
|
load_set_patterns
|
22
23
|
load_formats
|
23
24
|
load_sets
|
@@ -89,6 +90,13 @@ class Card
|
|
89
90
|
files.flatten
|
90
91
|
end
|
91
92
|
|
93
|
+
def load_initializers
|
94
|
+
Card.config.paths["mod/config/initializers"].existent
|
95
|
+
.sort.each do |initializer|
|
96
|
+
load initializer
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
92
100
|
def load_set_patterns
|
93
101
|
generate_set_pattern_tmp_files if rewrite_tmp_files?
|
94
102
|
load_dir Card.paths["tmp/set_pattern"].first
|
@@ -9,6 +9,14 @@ class Card
|
|
9
9
|
# All !-methods in this module rename existing cards
|
10
10
|
# to resolve name conflicts)
|
11
11
|
module SaveHelper
|
12
|
+
def as_user user_name
|
13
|
+
current = Card::Auth.current_id
|
14
|
+
Card::Auth.current_id = Card.fetch_id user_name
|
15
|
+
result = yield
|
16
|
+
Card::Auth.current_id = current
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
12
20
|
def create_card name_or_args, content_or_args=nil
|
13
21
|
args = standardize_args name_or_args, content_or_args
|
14
22
|
resolve_name_conflict args
|
@@ -75,6 +83,43 @@ class Card
|
|
75
83
|
end
|
76
84
|
end
|
77
85
|
|
86
|
+
|
87
|
+
# Creates or updates a trait card with codename and right rules.
|
88
|
+
# Content for rules that are pointer cards by default
|
89
|
+
# is converted to pointer format.
|
90
|
+
# @example
|
91
|
+
# ensure_trait "*a_or_b", :a_or_b,
|
92
|
+
# default: { type_id: Card::PointerID },
|
93
|
+
# options: ["A", "B"],
|
94
|
+
# input: "radio"
|
95
|
+
def ensure_trait name, codename, args={}
|
96
|
+
ensure_card name, codename: codename
|
97
|
+
args.each do |setting, value|
|
98
|
+
ensure_trait_rule name, setting, value
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def ensure_trait_rule trait, setting, value
|
103
|
+
validate_setting setting
|
104
|
+
card_args = normalize_trait_rule_args setting, value
|
105
|
+
ensure_card [trait, :right, setting], card_args
|
106
|
+
end
|
107
|
+
|
108
|
+
def validate_setting setting
|
109
|
+
unless Card::Codename[setting] &&
|
110
|
+
Card.fetch_type_id(setting) == SettingID
|
111
|
+
raise ArgumentError, "not a valid setting: #{setting}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def normalize_trait_rule_args setting, value
|
116
|
+
return value if value.is_a? Hash
|
117
|
+
if Card.fetch_type_id([setting, :right, :default]) == PointerID
|
118
|
+
value = Array(value).to_pointer_content
|
119
|
+
end
|
120
|
+
{ content: value }
|
121
|
+
end
|
122
|
+
|
78
123
|
# if card with same name exists move it out of the way
|
79
124
|
def create_card! name_or_args, content_or_args=nil
|
80
125
|
args = standardize_args name_or_args, content_or_args
|
data/lib/card/name/view_name.rb
CHANGED
@@ -12,7 +12,7 @@ class Card
|
|
12
12
|
def new obj
|
13
13
|
return obj if self.class === obj
|
14
14
|
str = Array === obj ? obj * joint : obj.to_s
|
15
|
-
if known_name = @@name2viewnameobject[str]
|
15
|
+
if (known_name = @@name2viewnameobject[str])
|
16
16
|
known_name
|
17
17
|
else
|
18
18
|
super str.strip
|
@@ -23,13 +23,14 @@ class Card
|
|
23
23
|
def initialize str
|
24
24
|
@s = str.to_s.strip
|
25
25
|
@s = @s.encode("UTF-8") if RUBYENCODING
|
26
|
-
@key =
|
27
|
-
|
26
|
+
@key =
|
27
|
+
if @s.index(self.class.joint)
|
28
|
+
@parts = @s.split(/\s*#{JOINT_RE}\s*/)
|
28
29
|
@parts << "" if @s[-1, 1] == self.class.joint
|
29
30
|
@simple = false
|
30
31
|
@parts.map { |p| p.to_name.key } * self.class.joint
|
31
|
-
|
32
|
-
|
32
|
+
else
|
33
|
+
@parts = [str]
|
33
34
|
@simple = true
|
34
35
|
str.empty? ? "" : simple_key
|
35
36
|
end
|
@@ -37,7 +38,8 @@ class Card
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def simple_key
|
40
|
-
decoded.underscore.gsub(/[^#{OK4KEY_RE}]+/, "_")
|
41
|
+
decoded.underscore.gsub(/[^#{OK4KEY_RE}]+/, "_")
|
42
|
+
.split(/_+/).reject(&:empty?) * "_"
|
41
43
|
end
|
42
44
|
|
43
45
|
def to_viewname
|
data/lib/card/query/join.rb
CHANGED
@@ -8,6 +8,7 @@ class Card
|
|
8
8
|
:from_field, :to_field,
|
9
9
|
:superjoin, :subjoins
|
10
10
|
|
11
|
+
# documentation??? -pk
|
11
12
|
def initialize opts={}
|
12
13
|
from_and_to opts
|
13
14
|
opts.each do |key, value|
|
@@ -15,8 +16,9 @@ class Card
|
|
15
16
|
end
|
16
17
|
@from_field ||= :id
|
17
18
|
@to_field ||= :id
|
18
|
-
|
19
|
-
@
|
19
|
+
|
20
|
+
@conditions = Array @conditions
|
21
|
+
@subjoins = Array @subjoins
|
20
22
|
if @from.is_a? Join
|
21
23
|
@superjoin = @from
|
22
24
|
@superjoin.subjoins << self
|
data/lib/card/query/sorting.rb
CHANGED
@@ -22,30 +22,34 @@ class Card
|
|
22
22
|
|
23
23
|
# EXPERIMENTAL!
|
24
24
|
def sort_by_count val, item
|
25
|
-
|
26
|
-
|
27
|
-
cs = Query.new(
|
28
|
-
return: "coalesce(count(*), 0) as count",
|
29
|
-
group: "sort_join_field",
|
30
|
-
superquery: self
|
31
|
-
)
|
32
|
-
subselect = Query.new val.merge(return: "id", superquery: self)
|
33
|
-
cs.add_condition "referer_id in (#{subselect.sql})"
|
34
|
-
# FIXME: - SQL generated before SQL phase
|
35
|
-
cs.joins << Join.new(
|
36
|
-
from: cs,
|
37
|
-
to: %w(card_references wr referee_id)
|
38
|
-
)
|
39
|
-
cs.mods[:sort_join_field] = "#{cs.table_alias}.id as sort_join_field"
|
40
|
-
# HACK!
|
41
|
-
|
42
|
-
joins << Join.new(
|
43
|
-
from: self,
|
44
|
-
to: [cs, "srtbl", "sort_join_field"]
|
45
|
-
)
|
46
|
-
else
|
25
|
+
method_name = "sort_by_count_#{item}"
|
26
|
+
unless respond_to?(method_name)
|
47
27
|
raise Card::Error::BadQuery, "count with item: #{item} not yet implemented"
|
48
28
|
end
|
29
|
+
send method_name, val
|
30
|
+
end
|
31
|
+
|
32
|
+
def sort_by_count_referred_to val
|
33
|
+
@mods[:sort] = "coalesce(count,0)" # needed for postgres
|
34
|
+
cs = Query.new(
|
35
|
+
return: "coalesce(count(*), 0) as count",
|
36
|
+
group: "sort_join_field",
|
37
|
+
superquery: self
|
38
|
+
)
|
39
|
+
subselect = Query.new val.merge(return: "id", superquery: self)
|
40
|
+
cs.add_condition "referer_id in (#{subselect.sql})"
|
41
|
+
# FIXME: - SQL generated before SQL phase
|
42
|
+
cs.joins << Join.new(
|
43
|
+
from: cs,
|
44
|
+
to: %w(card_references wr referee_id)
|
45
|
+
)
|
46
|
+
cs.mods[:sort_join_field] = "#{cs.table_alias}.id as sort_join_field"
|
47
|
+
# HACK!
|
48
|
+
|
49
|
+
joins << Join.new(
|
50
|
+
from: self,
|
51
|
+
to: [cs, "srtbl", "sort_join_field"]
|
52
|
+
)
|
49
53
|
end
|
50
54
|
end
|
51
55
|
end
|
data/lib/card/reference.rb
CHANGED
@@ -41,10 +41,10 @@ class Card
|
|
41
41
|
"LEFT JOIN cards ON card_references.referer_id = cards.id"
|
42
42
|
).where(
|
43
43
|
"cards.id IS NULL"
|
44
|
-
).
|
44
|
+
).pluck_in_batches(:id) do |group_ids|
|
45
45
|
# used to be .delete_all here, but that was failing on large dbs
|
46
46
|
puts "deleting batch of references"
|
47
|
-
where("id in (#{
|
47
|
+
where("id in (#{group_ids.join ','})").delete_all
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
@@ -4,14 +4,11 @@ class Card
|
|
4
4
|
module AdvancedApi
|
5
5
|
def ensure_set &block
|
6
6
|
set_module = yield
|
7
|
+
set_module = card_set_module_const_get(set_module) unless set_module.is_a?(Module)
|
8
|
+
set_module
|
7
9
|
rescue NameError => e
|
8
10
|
if e.message =~ /uninitialized constant (?:Card::Set::)?(.+)$/
|
9
|
-
|
10
|
-
constant_pieces.inject(Card::Set) do |set_mod, module_name|
|
11
|
-
set_mod.const_get_or_set module_name do
|
12
|
-
Module.new
|
13
|
-
end
|
14
|
-
end
|
11
|
+
define_set Regexp.last_match(1)
|
15
12
|
end
|
16
13
|
# try again - there might be another submodule that doesn't exist
|
17
14
|
ensure_set(&block)
|
@@ -40,6 +37,34 @@ class Card
|
|
40
37
|
end
|
41
38
|
end
|
42
39
|
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# @param set_name [String] name of the constant to be defined
|
44
|
+
def define_set set_name
|
45
|
+
constant_pieces = set_name.split("::")
|
46
|
+
constant_pieces.inject(Card::Set) do |set_mod, module_name|
|
47
|
+
set_mod.const_get_or_set module_name do
|
48
|
+
Module.new
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# "set" is the noun not the verb
|
54
|
+
def card_set_module_const_get const
|
55
|
+
Card::Set.const_get normalize_const(const)
|
56
|
+
end
|
57
|
+
|
58
|
+
def normalize_const const
|
59
|
+
case const
|
60
|
+
when Array
|
61
|
+
const.map { |piece| piece.to_s.camelcase }.join("::")
|
62
|
+
when Symbol
|
63
|
+
const.to_s.camelcase
|
64
|
+
else
|
65
|
+
const
|
66
|
+
end
|
67
|
+
end
|
43
68
|
end
|
44
69
|
end
|
45
70
|
end
|
data/lib/card/set/event.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Card
|
2
|
-
def deserialize_for_active_job! attr
|
2
|
+
def deserialize_for_active_job! attr
|
3
3
|
attr.each do |attname, args|
|
4
4
|
# symbols are not allowed so all symbols arrive here as strings
|
5
5
|
# convert strings that were symbols before back to symbols
|
@@ -7,15 +7,21 @@ class Card
|
|
7
7
|
instance_variable_set("@#{attname}", value)
|
8
8
|
end
|
9
9
|
include_set_modules
|
10
|
+
end
|
11
|
+
|
12
|
+
def with_env_and_auth env, auth
|
10
13
|
# If active jobs (and hence the integrate_with_delay events) don't run
|
11
14
|
# in a background process then Card::Env.deserialize! decouples the
|
12
15
|
# controller's params hash and the Card::Env's params hash with the
|
13
16
|
# effect that params changes in the CardController get lost
|
14
17
|
# (a crucial example are success params that are processed in
|
15
18
|
# CardController#update_params_for_success)
|
16
|
-
return if Wagn.config.active_job.queue_adapter == :inline
|
17
|
-
Card::
|
18
|
-
|
19
|
+
return yield if Wagn.config.active_job.queue_adapter == :inline
|
20
|
+
Card::Auth.with auth do
|
21
|
+
Card::Env.with env do
|
22
|
+
yield
|
23
|
+
end
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
27
|
def serialize_for_active_job
|
@@ -115,16 +121,18 @@ class Card
|
|
115
121
|
define_method(method_name, proc do
|
116
122
|
IntegrateWithDelayJob.set(queue: event).perform_later(
|
117
123
|
self, serialize_for_active_job, Card::Env.serialize,
|
118
|
-
Card::Auth.
|
124
|
+
Card::Auth.serialize, final_method_name
|
119
125
|
)
|
120
126
|
end)
|
121
127
|
end
|
122
128
|
end
|
123
129
|
|
124
130
|
class IntegrateWithDelayJob < ActiveJob::Base
|
125
|
-
def perform card, card_attribs, env,
|
126
|
-
card.deserialize_for_active_job! card_attribs
|
127
|
-
card.
|
131
|
+
def perform card, card_attribs, env, auth, method_name
|
132
|
+
card.deserialize_for_active_job! card_attribs
|
133
|
+
card.with_env_and_auth env, auth do
|
134
|
+
card.send method_name
|
135
|
+
end
|
128
136
|
end
|
129
137
|
end
|
130
138
|
|