card 1.99.3 → 1.99.4
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/config/initializers/core_extensions.rb +8 -14
- data/db/migrate_core_cards/20180712042655_head_rule.rb +1 -1
- data/db/migrate_core_cards/20180905061537_migrate_layouts.rb +1 -0
- data/lib/card/codename.rb +16 -13
- data/lib/cardio.rb +0 -1
- data/mod/account/set/all/account.rb +9 -9
- data/mod/account/set/right/account.rb +1 -1
- data/mod/account/set/right/email.rb +1 -1
- data/mod/account/set/self/signin.rb +1 -1
- data/mod/account/set/type/signup/views.rb +1 -1
- data/mod/admin/set/self/admin.rb +1 -1
- data/mod/core/set/abstract/code_file.rb +6 -6
- data/mod/core/set/all/assign_attributes.rb +2 -2
- data/mod/core/set/all/codename.rb +1 -0
- data/mod/core/set/all/permissions.rb +2 -2
- data/mod/core/set/all/rules.rb +19 -19
- data/mod/core/set/all/states.rb +1 -1
- data/mod/email/set/type/email_template/email_config.rb +1 -1
- data/mod/follow/set/all/follow/follower_ids.rb +1 -1
- data/mod/follow/set/all/notify.rb +1 -1
- data/mod/follow/set/right/following.rb +1 -1
- data/mod/machines/set/abstract/machine/output_cache.rb +1 -1
- data/mod/machines/set/abstract/machine/output_update.rb +2 -1
- data/mod/machines/set/all/reset_machines.rb +2 -2
- data/mod/navbar/set/right/enabled_roles.rb +1 -1
- data/mod/navbar/set/self/account_links.rb +2 -2
- data/mod/pointer/set/abstract/02_pointer/events.rb +1 -1
- data/mod/pointer/set/abstract/02_pointer/options_api.rb +1 -1
- data/mod/rules/set/rule/editor.rb +2 -2
- data/mod/rules/set/rule/html_views.rb +1 -1
- data/mod/rules/spec/set/type/set_spec.rb +1 -1
- data/mod/search/set/self/search.rb +1 -1
- data/mod/settings/set/abstract/permission.rb +2 -2
- data/mod/settings/set/right/structure.rb +1 -1
- data/mod/settings/set/right/style.rb +1 -1
- data/mod/settings/set/type/setting.rb +5 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04d3826e0397bc85a47f38887e9237206850f9cfca9bf0035d926b515c593556
|
4
|
+
data.tar.gz: 8d573ce53bc6f230965f46c7904c551eb93585c4dc7d7929c6cc78c42d706e37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40eab4353ed2bf29dfb6f7d451900c426250c5f1bf7dbe1242b9477afe40087065f3d04ed8c55975826d1ca681192d026d3122743abc9edbbf88514ccd762d42
|
7
|
+
data.tar.gz: 34b2ede0e2924c71c6b91adbdeeff9695ec42ff03544773c121c902300dc341cc7ea624d266c9d94c496bf6561af03f55bd6b24ef000e889b00813313d92b03e
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.4
|
@@ -2,20 +2,14 @@
|
|
2
2
|
|
3
3
|
# extend core Ruby object classes
|
4
4
|
|
5
|
-
class Module
|
6
|
-
def include_extension extension
|
7
|
-
include extension
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
5
|
module CoreExtensions
|
12
|
-
::Kernel.
|
13
|
-
::Object.
|
14
|
-
::Module.
|
15
|
-
::Array.
|
16
|
-
::Hash.
|
17
|
-
::Symbol.
|
18
|
-
::Integer.
|
6
|
+
::Kernel.include Kernel
|
7
|
+
::Object.include Object
|
8
|
+
::Module.include Module
|
9
|
+
::Array.include Array
|
10
|
+
::Hash.include Hash::Merging
|
11
|
+
::Symbol.include PersistentIdentifier
|
12
|
+
::Integer.include PersistentIdentifier
|
19
13
|
::Hash.extend Hash::ClassMethods::Nesting
|
20
|
-
::MatchData.
|
14
|
+
::MatchData.include MatchData
|
21
15
|
end
|
@@ -4,7 +4,7 @@ class HeadRule < Card::Migration::Core
|
|
4
4
|
def up
|
5
5
|
update_card! :head, type_id: Card::SettingID
|
6
6
|
ensure_card [:all, :head],
|
7
|
-
type_id: Card::
|
7
|
+
type_id: Card::HtmlID,
|
8
8
|
content: "{{*head|core}}"
|
9
9
|
ensure_card [:head, :right, :help],
|
10
10
|
content: "head tag content"
|
@@ -16,6 +16,7 @@ class MigrateLayouts < Card::Migration::Core
|
|
16
16
|
puts "updating layout '#{card.name}'"
|
17
17
|
card.update! content: body.to_s
|
18
18
|
rescue Card::Error => e
|
19
|
+
card = Card.fetch card.id, skip_modules: true
|
19
20
|
card.update! type_id: Card::HtmlID, content: body.to_s
|
20
21
|
puts "failed to complete layout upgrade for '#{card.name}': #{e.message}.\n" \
|
21
22
|
"To fix, go to /#{card.name.url_key}?view=edit and change type to Layout. \n" \
|
data/lib/card/codename.rb
CHANGED
@@ -89,6 +89,16 @@ class Card
|
|
89
89
|
Card::Name[codename.to_sym]
|
90
90
|
end
|
91
91
|
|
92
|
+
def generate_id_constants
|
93
|
+
# If a card has the codename _example_, then Card::ExampleID will
|
94
|
+
# return the id for that card.
|
95
|
+
codehash.each do |codename, id|
|
96
|
+
next unless codename.is_a?(Symbol) && !codename.to_s.match?(/\W/)
|
97
|
+
|
98
|
+
id_constant codename, id
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
92
102
|
private
|
93
103
|
|
94
104
|
# iterate through every card with a codename
|
@@ -131,20 +141,13 @@ class Card
|
|
131
141
|
scope: "lib.card.codename",
|
132
142
|
codename: mark)
|
133
143
|
end
|
144
|
+
|
145
|
+
def id_constant codename, id=nil
|
146
|
+
id ||= id! codename
|
147
|
+
Card.const_get_or_set(codename.to_s.camelize + "ID") { id }
|
148
|
+
end
|
134
149
|
end
|
135
|
-
end
|
136
150
|
|
137
|
-
|
138
|
-
# return the id for that card. This method makes that help.
|
139
|
-
#
|
140
|
-
# @param const [Const]
|
141
|
-
# @return [Integer]
|
142
|
-
# @raise error if codename is missing
|
143
|
-
def self.const_missing const
|
144
|
-
return super unless const.to_s =~ /^([A-Z]\S*)ID$/
|
145
|
-
|
146
|
-
code = Regexp.last_match(1).underscore
|
147
|
-
code_id = Card::Codename.id!(code)
|
148
|
-
const_set const, code_id
|
151
|
+
generate_id_constants
|
149
152
|
end
|
150
153
|
end
|
data/lib/cardio.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module ClassMethods
|
2
2
|
def default_accounted_type_id
|
3
|
-
|
3
|
+
UserID
|
4
4
|
end
|
5
5
|
end
|
6
6
|
|
@@ -14,8 +14,8 @@ end
|
|
14
14
|
|
15
15
|
def among? ok_ids
|
16
16
|
ok_ids.any? do |ok_id|
|
17
|
-
ok_id ==
|
18
|
-
(ok_id ==
|
17
|
+
ok_id == AnyoneID ||
|
18
|
+
(ok_id == AnyoneWithRoleID && all_enabled_roles.size > 1) ||
|
19
19
|
parties.member?(ok_id)
|
20
20
|
end
|
21
21
|
end
|
@@ -31,9 +31,9 @@ def read_rules
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def fetch_read_rules
|
34
|
-
return [] if id ==
|
34
|
+
return [] if id == WagnBotID # always_ok, so not needed
|
35
35
|
|
36
|
-
([
|
36
|
+
([AnyoneID] + parties).each_with_object([]) do |party_id, rule_ids|
|
37
37
|
next unless self.class.read_rule_cache[party_id]
|
38
38
|
rule_ids.concat self.class.read_rule_cache[party_id]
|
39
39
|
end
|
@@ -51,11 +51,11 @@ ensure
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def all_enabled_roles
|
54
|
-
@all_active_roles ||= (id ==
|
54
|
+
@all_active_roles ||= (id == AnonymousID ? [] : enabled_role_ids)
|
55
55
|
end
|
56
56
|
|
57
57
|
def all_roles
|
58
|
-
@all_roles ||= (id ==
|
58
|
+
@all_roles ||= (id == AnonymousID ? [] : fetch_roles)
|
59
59
|
end
|
60
60
|
|
61
61
|
def enabled_role_ids
|
@@ -63,13 +63,13 @@ def enabled_role_ids
|
|
63
63
|
# workaround for broken migrations
|
64
64
|
return fetch_roles unless Card::Codename.exists? :enabled_roles
|
65
65
|
|
66
|
-
role_trait = fetch(:enabled_roles, new: { type_id:
|
66
|
+
role_trait = fetch(:enabled_roles, new: { type_id: SessionID })
|
67
67
|
role_trait.virtual? ? role_trait.item_ids : fetch_roles
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
71
|
def fetch_roles
|
72
|
-
[
|
72
|
+
[AnyoneSignedInID] + role_ids_from_roles_trait
|
73
73
|
end
|
74
74
|
|
75
75
|
def role_ids_from_roles_trait
|
@@ -9,7 +9,7 @@ end
|
|
9
9
|
event :validate_unique_email, after: :validate_email, on: :save do
|
10
10
|
if content.present?
|
11
11
|
Auth.as_bot do
|
12
|
-
wql = { right_id:
|
12
|
+
wql = { right_id: EmailID, eq: content, return: :id }
|
13
13
|
wql[:not] = { id: id } if id
|
14
14
|
wql_comment = tr(:search_email_duplicate, content: content)
|
15
15
|
if Card.search(wql, wql_comment).first
|
data/mod/admin/set/self/admin.rb
CHANGED
@@ -9,17 +9,17 @@ end
|
|
9
9
|
# @return [Array<String>, String] the name of file(s) to be loaded
|
10
10
|
def source_files
|
11
11
|
case type_id
|
12
|
-
when
|
13
|
-
when
|
14
|
-
when
|
15
|
-
when
|
12
|
+
when CoffeeScriptID then "#{codename}.js.coffee"
|
13
|
+
when JavaScriptID then "#{codename}.js"
|
14
|
+
when CssID then "#{codename}.css"
|
15
|
+
when ScssID then "#{codename}.scss"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
def source_dir
|
20
20
|
case type_id
|
21
|
-
when
|
22
|
-
when
|
21
|
+
when CoffeeScriptID, JavaScriptID then "lib/javascript"
|
22
|
+
when CssID, ScssID then "lib/stylesheets"
|
23
23
|
else
|
24
24
|
"lib"
|
25
25
|
end
|
@@ -77,10 +77,10 @@ def assign_with_subcards args
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def refresh_set_modules
|
80
|
-
|
80
|
+
reinclude_set_modules = @set_mods_loaded
|
81
81
|
yield
|
82
82
|
reset_patterns
|
83
|
-
include_set_modules if
|
83
|
+
include_set_modules if reinclude_set_modules
|
84
84
|
end
|
85
85
|
|
86
86
|
def stash_set_specific_attributes args
|
@@ -46,7 +46,7 @@ def who_can action
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def anyone_can? action
|
49
|
-
who_can(action).include?
|
49
|
+
who_can(action).include? AnyoneID
|
50
50
|
end
|
51
51
|
|
52
52
|
def direct_rule_card action
|
@@ -97,7 +97,7 @@ def require_permission_rule! rule_id, action
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def rule_class_name
|
100
|
-
trunk.type_id ==
|
100
|
+
trunk.type_id == SetID ? name.trunk_name.tag : nil
|
101
101
|
end
|
102
102
|
|
103
103
|
def you_cant what
|
data/mod/core/set/all/rules.rb
CHANGED
@@ -10,13 +10,13 @@ RULE_SQL = %(
|
|
10
10
|
FROM cards rules
|
11
11
|
JOIN cards sets ON rules.left_id = sets.id
|
12
12
|
JOIN cards settings ON rules.right_id = settings.id
|
13
|
-
WHERE sets.type_id = #{
|
14
|
-
AND settings.type_id = #{
|
13
|
+
WHERE sets.type_id = #{SetID}
|
14
|
+
AND settings.type_id = #{SettingID}
|
15
15
|
AND (settings.codename != 'follow' OR rules.db_content != '')
|
16
16
|
AND rules.trash is false
|
17
17
|
AND sets.trash is false
|
18
18
|
AND settings.trash is false;
|
19
|
-
)
|
19
|
+
)
|
20
20
|
|
21
21
|
# FIXME: "follow" hardcoded above
|
22
22
|
|
@@ -27,11 +27,11 @@ READ_RULE_SQL = %(
|
|
27
27
|
FROM cards read_rules
|
28
28
|
JOIN card_references refs ON refs.referer_id = read_rules.id
|
29
29
|
JOIN cards sets ON read_rules.left_id = sets.id
|
30
|
-
WHERE read_rules.right_id = #{
|
31
|
-
AND sets.type_id = #{
|
30
|
+
WHERE read_rules.right_id = #{ReadID}
|
31
|
+
AND sets.type_id = #{SetID}
|
32
32
|
AND read_rules.trash is false
|
33
33
|
AND sets.trash is false;
|
34
|
-
)
|
34
|
+
)
|
35
35
|
|
36
36
|
PREFERENCE_SQL = %(
|
37
37
|
SELECT
|
@@ -46,15 +46,15 @@ PREFERENCE_SQL = %(
|
|
46
46
|
JOIN cards settings ON preferences.right_id = settings.id
|
47
47
|
JOIN cards users ON user_sets.right_id = users.id
|
48
48
|
JOIN cards sets ON user_sets.left_id = sets.id
|
49
|
-
WHERE sets.type_id = #{
|
50
|
-
AND settings.type_id = #{
|
49
|
+
WHERE sets.type_id = #{SetID}
|
50
|
+
AND settings.type_id = #{SettingID}
|
51
51
|
AND (%s or users.codename = 'all')
|
52
52
|
AND sets.trash is false
|
53
53
|
AND settings.trash is false
|
54
54
|
AND users.trash is false
|
55
55
|
AND user_sets.trash is false
|
56
56
|
AND preferences.trash is false;
|
57
|
-
)
|
57
|
+
)
|
58
58
|
|
59
59
|
def is_rule?
|
60
60
|
is_standard_rule? || is_preference?
|
@@ -62,20 +62,20 @@ end
|
|
62
62
|
|
63
63
|
def is_standard_rule?
|
64
64
|
(r = right(skip_modules: true)) &&
|
65
|
-
r.type_id ==
|
65
|
+
r.type_id == SettingID &&
|
66
66
|
(l = left(skip_modules: true)) &&
|
67
|
-
l.type_id ==
|
67
|
+
l.type_id == SetID
|
68
68
|
end
|
69
69
|
|
70
70
|
# TODO: abstract so account doesn't have to have User type.
|
71
71
|
def is_preference?
|
72
72
|
name.parts.length > 2 &&
|
73
73
|
(r = right(skip_modules: true)) &&
|
74
|
-
r.type_id ==
|
74
|
+
r.type_id == SettingID &&
|
75
75
|
(set = self[0..-3, skip_modules: true]) &&
|
76
|
-
set.type_id ==
|
76
|
+
set.type_id == SetID &&
|
77
77
|
(user = self[-2, skip_modules: true]) &&
|
78
|
-
(user.type_id ==
|
78
|
+
(user.type_id == UserID || user.codename == :all)
|
79
79
|
end
|
80
80
|
|
81
81
|
def rule setting_code, options={}
|
@@ -106,7 +106,7 @@ end
|
|
106
106
|
def preference_card_id_lookups setting_code, options={}
|
107
107
|
user_id = options[:user_id] || options[:user]&.id || Auth.current_id
|
108
108
|
return unless user_id
|
109
|
-
["#{setting_code}+#{
|
109
|
+
["#{setting_code}+#{AllID}", "#{setting_code}+#{user_id}"]
|
110
110
|
end
|
111
111
|
|
112
112
|
def related_sets with_self=false
|
@@ -129,7 +129,7 @@ module ClassMethods
|
|
129
129
|
if user_id
|
130
130
|
"users.id = #{user_id}"
|
131
131
|
else
|
132
|
-
"users.type_id = #{
|
132
|
+
"users.type_id = #{UserID}"
|
133
133
|
end
|
134
134
|
PREFERENCE_SQL % user_restriction
|
135
135
|
end
|
@@ -190,8 +190,8 @@ module ClassMethods
|
|
190
190
|
"#{set_class_code}+#{setting_code}"
|
191
191
|
end
|
192
192
|
user_ids = user_ids_cache[key] || []
|
193
|
-
if user_ids.include?
|
194
|
-
Card.where(type_id:
|
193
|
+
if user_ids.include? AllID # rule for all -> return all user ids
|
194
|
+
Card.where(type_id: UserID).pluck(:id)
|
195
195
|
else
|
196
196
|
user_ids
|
197
197
|
end
|
@@ -201,7 +201,7 @@ module ClassMethods
|
|
201
201
|
Card.search(
|
202
202
|
{ right: { codename: setting_code },
|
203
203
|
left: {
|
204
|
-
left: { type_id:
|
204
|
+
left: { type_id: SetID }, right: user_name
|
205
205
|
},
|
206
206
|
return: :name }, "preference cards for user: #{user_name}"
|
207
207
|
)
|
data/mod/core/set/all/states.rb
CHANGED
@@ -28,7 +28,7 @@ format :html do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
view :rule_editor, cache: :never do
|
31
|
-
rule_context = Card.fetch preference_name, new: { type_id:
|
31
|
+
rule_context = Card.fetch preference_name, new: { type_id: PointerID }
|
32
32
|
wrap_with :div, class: "edit-rule" do
|
33
33
|
follow_context = current_follow_rule_card || rule_context
|
34
34
|
subformat(follow_context).rule_form :open, rule_context, :modal
|
@@ -5,7 +5,7 @@ module ClassMethods
|
|
5
5
|
if card
|
6
6
|
card.update_columns trash: true
|
7
7
|
card.expire
|
8
|
-
Card::Virtual.where(right_id:
|
8
|
+
Card::Virtual.where(right_id: MachineCacheID).delete_all
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -16,7 +16,7 @@ module ClassMethods
|
|
16
16
|
card.update_columns trash: true
|
17
17
|
card.expire
|
18
18
|
end
|
19
|
-
Card::Virtual.where(right_id:
|
19
|
+
Card::Virtual.where(right_id: MachineCacheID).delete_all
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -67,7 +67,7 @@ format :html do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def enabled_roles_card
|
70
|
-
Auth.current.fetch :enabled_roles, new: { type_id:
|
70
|
+
Auth.current.fetch :enabled_roles, new: { type_id: SessionID }
|
71
71
|
end
|
72
72
|
|
73
73
|
def role_list
|
@@ -89,7 +89,7 @@ format :html do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def show_signup_link?
|
92
|
-
!Auth.signed_in? && Card.new(type_id:
|
92
|
+
!Auth.signed_in? && Card.new(type_id: SignupID).ok?(:create)
|
93
93
|
end
|
94
94
|
|
95
95
|
def show_invite_link?
|
@@ -84,9 +84,9 @@ format :html do
|
|
84
84
|
return super unless card.is_template?
|
85
85
|
|
86
86
|
case Card.fetch_id(card.rule_set_pattern_name) # set_pattern_id
|
87
|
-
when
|
87
|
+
when TypeID
|
88
88
|
card.rule_set.anchor_name
|
89
|
-
when
|
89
|
+
when SelfID
|
90
90
|
card.rule_set.anchor.type_name
|
91
91
|
else
|
92
92
|
super
|
@@ -4,7 +4,7 @@ format :html do
|
|
4
4
|
# in the search query. In that case the search doesn't work
|
5
5
|
# properly in the context of the rule card itself. Hence we show the query syntax
|
6
6
|
# and not the search result.
|
7
|
-
if card.type_id ==
|
7
|
+
if card.type_id == SearchTypeID
|
8
8
|
render_raw
|
9
9
|
else
|
10
10
|
super()
|
@@ -64,7 +64,7 @@ format :html do
|
|
64
64
|
|
65
65
|
def group_options
|
66
66
|
Auth.as_bot do
|
67
|
-
Card.search({ type_id:
|
67
|
+
Card.search({ type_id: RoleID, sort: "name" }, "roles by name")
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
@@ -73,7 +73,7 @@ format :html do
|
|
73
73
|
begin
|
74
74
|
set_name = card.name.trunk_name
|
75
75
|
set_card = Card.fetch(set_name)
|
76
|
-
not_set = set_card && set_card.type_id !=
|
76
|
+
not_set = set_card && set_card.type_id != SetID
|
77
77
|
not_set ? false : set_card.inheritable?
|
78
78
|
end
|
79
79
|
end
|
@@ -38,7 +38,7 @@ end
|
|
38
38
|
|
39
39
|
event :customize_theme, :prepare_to_validate, on: :update, when: :customize_theme? do
|
40
40
|
skin_name = free_skin_name
|
41
|
-
add_subcard skin_name, type_id:
|
41
|
+
add_subcard skin_name, type_id: CustomizedBootswatchSkinID
|
42
42
|
self.content = "[[#{skin_name}]]"
|
43
43
|
end
|
44
44
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
def self.member_names
|
4
4
|
@@member_names ||= begin
|
5
5
|
Card.search(
|
6
|
-
{ type_id:
|
6
|
+
{ type_id: SettingID, return: "key" },
|
7
7
|
"all setting cards"
|
8
8
|
).each_with_object({}) do |card_key, hash|
|
9
9
|
hash[card_key] = true
|
@@ -13,7 +13,7 @@ end
|
|
13
13
|
|
14
14
|
format :data do
|
15
15
|
view :core do
|
16
|
-
wql = { left: { type:
|
16
|
+
wql = { left: { type: SetID },
|
17
17
|
right: card.id,
|
18
18
|
limit: 0 }
|
19
19
|
Card.search(wql).compact.map { |c| nest c }
|
@@ -21,12 +21,12 @@ format :data do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def count
|
24
|
-
Card.search left: { type:
|
24
|
+
Card.search left: { type: SetID }, right: id, limit: 0, return: :count
|
25
25
|
end
|
26
26
|
|
27
27
|
def set_classes_with_rules
|
28
28
|
Card.set_patterns.reverse.map do |set_class|
|
29
|
-
wql = { left: { type:
|
29
|
+
wql = { left: { type: SetID },
|
30
30
|
right: id,
|
31
31
|
sort: %w[content name],
|
32
32
|
limit: 0 }
|
@@ -74,6 +74,6 @@ end
|
|
74
74
|
|
75
75
|
format :json do
|
76
76
|
def items_for_export
|
77
|
-
Card.search left: { type:
|
77
|
+
Card.search left: { type: SetID }, right: card.id, limit: 0
|
78
78
|
end
|
79
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.99.
|
4
|
+
version: 1.99.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2020-02-
|
14
|
+
date: 2020-02-21 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: cardname
|
@@ -19,14 +19,14 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.9.
|
22
|
+
version: 0.9.4
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.9.
|
29
|
+
version: 0.9.4
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: haml
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|