card 1.93.3 → 1.93.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/db/migrate/20170908114452_increase_text_size_for_delayed_jobs.rb +9 -0
- data/db/migrate_core_cards/data/cards/*header +2 -2
- data/lib/card/format/nest.rb +12 -5
- data/lib/card/format/nest/fetch.rb +1 -2
- data/lib/card/format/render.rb +2 -2
- data/lib/card/model/save_helper.rb +1 -1
- data/lib/card/set/format/haml_views.rb +7 -3
- data/lib/card/subcards.rb +27 -228
- data/lib/card/subcards/add.rb +121 -0
- data/lib/card/subcards/relate.rb +27 -0
- data/lib/card/subcards/remove.rb +42 -0
- data/lib/card/tasks/card/create.rake +35 -132
- data/lib/card/tasks/card/file_card_creator.rb +25 -0
- data/lib/card/tasks/card/file_card_creator/abstract_file_card.rb +44 -0
- data/lib/card/tasks/card/file_card_creator/abstract_file_card/migration_file.rb +49 -0
- data/lib/card/tasks/card/file_card_creator/abstract_file_card/ruby_file.rb +30 -0
- data/lib/card/tasks/card/file_card_creator/abstract_file_card/source_file.rb +36 -0
- data/lib/card/tasks/card/file_card_creator/haml_card.rb +42 -0
- data/lib/card/tasks/card/file_card_creator/output_helper.rb +50 -0
- data/lib/card/tasks/card/file_card_creator/script_card.rb +33 -0
- data/lib/card/tasks/card/file_card_creator/style_card.rb +25 -0
- data/lib/generators/card/template/template_generator.rb +1 -1
- data/mod/account/set/self/account_links.rb +1 -1
- data/mod/basic_formats/set/all/all_csv.rb +63 -0
- data/mod/basic_formats/set/all/json.rb +4 -1
- data/mod/bootstrap/db/migrate_cards/20170719163733_update_bootswatch_themes_to_4_beta.rb +5 -2
- data/mod/carrierwave/set/abstract/attachment.rb +1 -2
- data/mod/core/set/abstract/haml_file.rb +20 -0
- data/mod/core/set/all/chunk.rb +125 -0
- data/mod/core/set/all/collection.rb +2 -351
- data/mod/core/set/all/content.rb +26 -7
- data/mod/core/set/all/extended.rb +45 -0
- data/mod/core/set/all/haml.rb +3 -7
- data/mod/core/set/all/item.rb +92 -0
- data/mod/core/set/all/name.rb +36 -0
- data/mod/core/set/all/subcards.rb +21 -12
- data/mod/core/set/all/tabs.rb +50 -0
- data/mod/core/set/all/trash.rb +4 -0
- data/mod/core/spec/set/all/chunk_spec.rb +45 -0
- data/mod/core/spec/set/all/collection_spec.rb +6 -6
- data/mod/history/set/all/action_view.rb +1 -1
- data/mod/machines/lib/javascript/decko.js.coffee +3 -0
- data/mod/pointer/set/abstract/02_pointer/edit.rb +0 -2
- data/mod/search/set/abstract/search.rb +1 -1
- data/mod/search/set/all/filter.rb +0 -2
- data/mod/search/template/all/filter/_filter_input.haml +1 -1
- data/mod/search/template/all/filter/filter_form.haml +1 -1
- data/mod/standard/set/all/rich_html/editing.rb +1 -1
- data/mod/standard/set/all/rich_html/form.rb +6 -7
- data/mod/standard/set/all/rich_html/menu.rb +2 -3
- data/mod/standard/set/all/rich_html/toolbar.rb +3 -4
- data/mod/standard/set/type/cardtype.rb +1 -1
- data/mod/standard/spec/set/all/rich_html/editing_spec.rb +15 -4
- data/mod/tinymce_editor/db/migrate_cards/{20171113233150_update_tinymce_config.rb → 20171113233151_update_tinymce_config.rb} +1 -0
- metadata +25 -161
- data/.rspec +0 -4
- data/card.gemspec +0 -87
- data/db/seed/test/fixtures/.gitkeep +0 -0
- data/mod/bootstrap/vendor/bootstrap/.babelrc.js +0 -16
- data/mod/bootstrap/vendor/bootstrap/.editorconfig +0 -17
- data/mod/bootstrap/vendor/bootstrap/.eslintignore +0 -3
- data/mod/bootstrap/vendor/bootstrap/.gitattributes +0 -16
- data/mod/bootstrap/vendor/bootstrap/.github/CONTRIBUTING.md +0 -252
- data/mod/bootstrap/vendor/bootstrap/.github/ISSUE_TEMPLATE.md +0 -22
- data/mod/bootstrap/vendor/bootstrap/.gitignore +0 -46
- data/mod/bootstrap/vendor/bootstrap/.hound.yml +0 -19
- data/mod/bootstrap/vendor/bootstrap/.houndignore +0 -4
- data/mod/bootstrap/vendor/bootstrap/.travis.yml +0 -32
- data/mod/bootstrap/vendor/bootstrap/build/.htmllintrc +0 -19
- data/mod/bootstrap/vendor/bootstrap/build/.stylelintrc +0 -248
- data/mod/bootstrap/vendor/bootstrap/docs/4.0/examples/.stylelintrc +0 -12
- data/mod/bootstrap/vendor/bootstrap/js/.eslintrc.json +0 -240
- data/mod/bootstrap/vendor/bootstrap/js/tests/.eslintrc.json +0 -46
- data/mod/bootstrap/vendor/bootswatch/.gitignore +0 -7
- data/mod/bootstrap/vendor/bootswatch/.npmignore +0 -12
- data/mod/bootstrap/vendor/bootswatch/.travis.yml +0 -21
- data/mod/bootstrap/vendor/bootswatch/docs/.nojekyll +0 -0
- data/mod/bootstrap/vendor/bootswatch/docs/2/.travis.yml +0 -15
- data/mod/bootstrap/vendor/bootswatch/docs/2/bower_components/bootstrap/.bower.json +0 -20
- data/mod/bootstrap/vendor/bootswatch/docs/2/bower_components/bootstrap/.gitignore +0 -37
- data/mod/bootstrap/vendor/bootswatch/docs/2/bower_components/bootstrap/.travis.yml +0 -3
- data/mod/bootstrap/vendor/bootswatch/docs/2/bower_components/bootstrap/js/.jshintrc +0 -12
- data/mod/bootstrap/vendor/bootswatch/docs/2/bower_components/jquery/.bower.json +0 -20
- data/mod/bootstrap/vendor/bootswatch/docs/2/bower_components/jquery/.gitignore +0 -1
- data/mod/bootstrap/vendor/bootswatch/docs/2/swatchmaker/.gitignore +0 -1
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap-sass-official/.bower.json +0 -45
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap/.bower.json +0 -44
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap/grunt/.jshintrc +0 -7
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap/js/.jscsrc +0 -42
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap/js/.jshintrc +0 -15
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap/less/.csscomb.json +0 -304
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/bootstrap/less/.csslintrc +0 -19
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/font-awesome/.bower.json +0 -14
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/font-awesome/.gitignore +0 -32
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/html5shiv/.bower.json +0 -25
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/jquery/.bower.json +0 -38
- data/mod/bootstrap/vendor/bootswatch/docs/3/bower_components/respond/.bower.json +0 -20
- data/mod/bootstrap/vendor/select2/.editorconfig +0 -6
- data/mod/bootstrap/vendor/select2/.github/CONTRIBUTING.md +0 -204
- data/mod/bootstrap/vendor/select2/.github/ISSUE_TEMPLATE.md +0 -46
- data/mod/bootstrap/vendor/select2/.github/PULL_REQUEST_TEMPLATE.md +0 -13
- data/mod/bootstrap/vendor/select2/.gitignore +0 -3
- data/mod/bootstrap/vendor/select2/.jshintignore +0 -4
- data/mod/bootstrap/vendor/select2/.jshintrc +0 -25
- data/mod/bootstrap/vendor/select2/.travis.yml +0 -22
- data/script/fetch_bootswatch_themes.rb +0 -38
- data/spec/config/initializers/core_extensions_spec.rb +0 -47
- data/spec/config/initializers/patches/active_job_spec.rb +0 -7
- data/spec/lib/card/action_spec.rb +0 -15
- data/spec/lib/card/auth_spec.rb +0 -58
- data/spec/lib/card/cache_spec.rb +0 -116
- data/spec/lib/card/chunk_spec.rb +0 -18
- data/spec/lib/card/codename_spec.rb +0 -66
- data/spec/lib/card/content_spec.rb +0 -428
- data/spec/lib/card/diff_spec.rb +0 -208
- data/spec/lib/card/format/nest_spec.rb +0 -13
- data/spec/lib/card/format/render_spec.rb +0 -26
- data/spec/lib/card/format_spec.rb +0 -117
- data/spec/lib/card/i18n_spec.rb +0 -24
- data/spec/lib/card/loader/Modfile +0 -2
- data/spec/lib/card/loader_spec.rb +0 -98
- data/spec/lib/card/migration/import_spec.rb +0 -80
- data/spec/lib/card/mod/loader/mod_dirs.rb +0 -8
- data/spec/lib/card/mod/loader/set_loader_spec.rb +0 -19
- data/spec/lib/card/mod/loader/set_pattern_loader_spec.rb +0 -19
- data/spec/lib/card/name/fields_and_traits_spec.rb +0 -18
- data/spec/lib/card/name_spec.rb +0 -70
- data/spec/lib/card/query/sorting_spec.rb +0 -68
- data/spec/lib/card/query_spec.rb +0 -574
- data/spec/lib/card/reference_spec.rb +0 -212
- data/spec/lib/card/set/event_spec.rb +0 -22
- data/spec/lib/card/set/trait_spec.rb +0 -80
- data/spec/lib/card/set_pattern_spec.rb +0 -59
- data/spec/lib/card/set_spec.rb +0 -89
- data/spec/lib/card/stage_director_spec.rb +0 -482
- data/spec/lib/card/subcards_spec.rb +0 -177
- data/spec/lib/card/success_spec.rb +0 -148
- data/spec/lib/card/view_cache_spec.rb +0 -27
- data/spec/mailers/mailer_spec.rb +0 -62
- data/spec/models/card/create_spec.rb +0 -119
- data/spec/models/card/trash_spec.rb +0 -189
- data/spec/models/card_spec.rb +0 -136
- data/spec/spec_helper.rb +0 -45
- data/spec/support/card_spec_helper.rb +0 -74
- data/spec/support/card_spec_loader.rb +0 -112
- data/spec/support/helper/card_helper.rb +0 -58
- data/spec/support/helper/event_helper.rb +0 -94
- data/spec/support/helper/render_helper.rb +0 -44
- data/spec/support/helper/save_helper.rb +0 -30
- data/spec/support/helper/set_helper.rb +0 -80
- data/spec/support/matchers/card_matchers.rb +0 -160
- data/spec/support/matchers/expectations.rb +0 -5
- data/spec/support/matchers/file_matchers.rb +0 -71
- data/spec/support/matchers/html_matchers.rb +0 -29
- data/spec/support/matchers/negated_matchers.rb +0 -2
- data/spec/support/simplecov_helper.rb +0 -70
- data/spec/support/test_mods/mod1/set/all/test_set.rb +0 -3
- data/spec/support/test_mods/mod2/set_pattern/test_pattern.rb +0 -0
@@ -1,58 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
module SpecHelper
|
3
|
-
# to be included in Card
|
4
|
-
module CardHelper
|
5
|
-
module ClassMethods
|
6
|
-
def gimme! name, args={}
|
7
|
-
Card::Auth.as_bot do
|
8
|
-
c = Card.fetch(name, new: args)
|
9
|
-
c.putty args
|
10
|
-
Card.fetch name
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def gimme name, args={}
|
15
|
-
Card::Auth.as_bot do
|
16
|
-
c = Card.fetch(name, new: args)
|
17
|
-
if args[:content] && c.content != args[:content]
|
18
|
-
c.putty args
|
19
|
-
c = Card.fetch name
|
20
|
-
end
|
21
|
-
c
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
cattr_accessor :rspec_binding
|
26
|
-
end
|
27
|
-
|
28
|
-
def putty args={}
|
29
|
-
Card::Auth.as_bot do
|
30
|
-
if args.present?
|
31
|
-
update_attributes! args
|
32
|
-
else
|
33
|
-
save!
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# rubocop:disable Lint/Eval
|
39
|
-
def method_missing m, *args, &block
|
40
|
-
return super unless Card.rspec_binding
|
41
|
-
suppress_name_error do
|
42
|
-
method = eval("method(%s)" % m.inspect, Card.rspec_binding)
|
43
|
-
return method.call(*args, &block)
|
44
|
-
end
|
45
|
-
suppress_name_error do
|
46
|
-
return eval(m.to_s, Card.rspec_binding)
|
47
|
-
end
|
48
|
-
super
|
49
|
-
end
|
50
|
-
# rubocop:enable Lint/Eval
|
51
|
-
|
52
|
-
def suppress_name_error
|
53
|
-
yield
|
54
|
-
rescue NameError
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
module SpecHelper
|
3
|
-
module EventHelper
|
4
|
-
# Make expectations in the event phase.
|
5
|
-
# Takes a stage and registers the event_block in this stage as an event.
|
6
|
-
# Unknown methods in the event_block are executed in the rspec context
|
7
|
-
# instead of the card's context.
|
8
|
-
# An additionally :trigger block in opts is expected that is called
|
9
|
-
# to start the event phase.
|
10
|
-
# You can restrict the event to a specific card by passing a name
|
11
|
-
# with :for options.
|
12
|
-
# That's for example necessary if you create a card in a event.
|
13
|
-
# Otherwise you get a loop of card creations.
|
14
|
-
# @example
|
15
|
-
# in_stage :initialize,
|
16
|
-
# for: "my test card",
|
17
|
-
# trigger: -> { test_card.update_attributes! content: '' } do
|
18
|
-
# expect(item_names).to eq []
|
19
|
-
# end
|
20
|
-
def in_stage stage, opts={}, &event_block
|
21
|
-
Card.rspec_binding = binding
|
22
|
-
add_test_event stage, :in_stage_test, opts, &event_block
|
23
|
-
trigger =
|
24
|
-
if opts[:trigger].is_a?(Symbol)
|
25
|
-
method(opts[:trigger])
|
26
|
-
else
|
27
|
-
opts[:trigger]
|
28
|
-
end
|
29
|
-
trigger.call
|
30
|
-
ensure
|
31
|
-
remove_test_event stage, :in_stage_test
|
32
|
-
end
|
33
|
-
|
34
|
-
# if you need more then one test event (otherwise use #in_stage)
|
35
|
-
# @example
|
36
|
-
# with_test_events do
|
37
|
-
# test_event :store, for: "my card" do
|
38
|
-
# Card.create name: "other card"
|
39
|
-
# end
|
40
|
-
# test_event :finalize, for: "other card" do
|
41
|
-
# expect(content).to be_empty
|
42
|
-
# end
|
43
|
-
# end
|
44
|
-
def with_test_events
|
45
|
-
@events = []
|
46
|
-
Card.rspec_binding = binding
|
47
|
-
yield
|
48
|
-
ensure
|
49
|
-
@events.each do |stage, name|
|
50
|
-
remove_test_event stage, name
|
51
|
-
end
|
52
|
-
Card.rspec_binding = false
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_event stage, opts={}, &block
|
56
|
-
event_name = :"test_event_#{@events.size}"
|
57
|
-
@events << [stage, event_name]
|
58
|
-
add_test_event stage, event_name, opts, &block
|
59
|
-
end
|
60
|
-
|
61
|
-
def add_test_event stage, name, opts={}, &event_block
|
62
|
-
# use random set module that is always included so that the
|
63
|
-
# event applies to all cards
|
64
|
-
opts[:set] ||= Card::Set::All::Fetch
|
65
|
-
if (only_for_card = opts.delete(:for))
|
66
|
-
opts[:when] = proc { |c| c.name == only_for_card }
|
67
|
-
end
|
68
|
-
Card.class_eval do
|
69
|
-
extend Card::Set::Event
|
70
|
-
event name, stage, opts, &event_block
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def remove_test_event stage, name
|
75
|
-
stage_sym = :"#{stage}_stage"
|
76
|
-
Card.skip_callback stage_sym, :after, name
|
77
|
-
end
|
78
|
-
|
79
|
-
# Turn delayed jobs on and run jobs after the given block.
|
80
|
-
# If count is given check if it matches the number of created jobs.
|
81
|
-
def with_delayed_jobs count=nil
|
82
|
-
Delayed::Worker.delay_jobs = true
|
83
|
-
expect(Delayed::Job.count).to eq(0), "expected delayed job to start with an empty queue"
|
84
|
-
yield
|
85
|
-
if count
|
86
|
-
expect(Delayed::Job.count).to eq(count)
|
87
|
-
end
|
88
|
-
Delayed::Worker.new.work_off
|
89
|
-
expect(Delayed::Job.count).to eq(0), "not all delayed jobs were executed"
|
90
|
-
Delayed::Worker.delay_jobs = false
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
module SpecHelper
|
3
|
-
module RenderHelper
|
4
|
-
def view view_name, card: { name: "test card", type: :basic }, format: :html
|
5
|
-
render_card_with_args view_name, card, format: format
|
6
|
-
end
|
7
|
-
|
8
|
-
def render_editor type
|
9
|
-
card = Card.create(name: "my favority #{type} + #{rand(4)}", type: type)
|
10
|
-
card.format.render!(:edit)
|
11
|
-
end
|
12
|
-
|
13
|
-
def render_content content, format_args={}
|
14
|
-
render_content_with_args content, format_args
|
15
|
-
end
|
16
|
-
|
17
|
-
def render_content_with_args content, format_args={}, view_args={}
|
18
|
-
@card ||= Card.new name: "Tempo Rary 2"
|
19
|
-
@card.content = content
|
20
|
-
@card.format(format_args)._render :core, view_args
|
21
|
-
end
|
22
|
-
|
23
|
-
def render_card view, card_args={}, format_args={}
|
24
|
-
render_card_with_args view, card_args, format_args
|
25
|
-
end
|
26
|
-
|
27
|
-
alias_method :render_view, :render_card
|
28
|
-
|
29
|
-
def render_card_with_args view, card_args={}, format_args={}, view_args={}
|
30
|
-
card =
|
31
|
-
if card_args.is_a?(Card)
|
32
|
-
card_args
|
33
|
-
elsif card_args.is_a?(Symbol) || card_args.is_a?(String)
|
34
|
-
Card.fetch card_args
|
35
|
-
elsif card_args[:name]
|
36
|
-
Card.fetch card_args[:name], new: card_args
|
37
|
-
else
|
38
|
-
Card.new card_args.merge(name: "Tempo Rary")
|
39
|
-
end
|
40
|
-
card.format(format_args)._render(view, view_args)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
module SpecHelper
|
3
|
-
module SaveHelper
|
4
|
-
include Card::Model::SaveHelper
|
5
|
-
def create! name, content=""
|
6
|
-
Card.create! name: name, content: content
|
7
|
-
end
|
8
|
-
|
9
|
-
def create name_or_args, content_or_args=nil
|
10
|
-
Card::Auth.as_bot { super }
|
11
|
-
end
|
12
|
-
|
13
|
-
def create_or_update name_or_args, content_or_args=nil
|
14
|
-
Card::Auth.as_bot { super }
|
15
|
-
end
|
16
|
-
|
17
|
-
def update name_or_args, content_or_args={}
|
18
|
-
Card::Auth.as_bot { super }
|
19
|
-
end
|
20
|
-
|
21
|
-
def update! name_or_args, content_or_args={}
|
22
|
-
update_card name_or_args, content_or_args
|
23
|
-
end
|
24
|
-
|
25
|
-
def delete name
|
26
|
-
Card::Auth.as_bot { Card[name].delete! }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
class Card
|
2
|
-
module SpecHelper
|
3
|
-
# To be included in Card.
|
4
|
-
# Defines helper to change card sets and formats
|
5
|
-
module SetHelper
|
6
|
-
# define dynamically views (or other things) on format objects
|
7
|
-
# @return format object
|
8
|
-
# @example add a view to a card's html format
|
9
|
-
# format =
|
10
|
-
# Card["A"].format_with(:html) do
|
11
|
-
# view :my_test_view do
|
12
|
-
# card.name
|
13
|
-
# end
|
14
|
-
# end
|
15
|
-
# format.render :my_test_view # => "A"
|
16
|
-
def format_with format_type=:html, &block
|
17
|
-
dynamic_set =
|
18
|
-
create_dynamic_set do
|
19
|
-
format(format_type, &block)
|
20
|
-
end
|
21
|
-
format_with_set dynamic_set, format_type
|
22
|
-
#::Card::Set::Self::DynamicSet, :html
|
23
|
-
end
|
24
|
-
|
25
|
-
# define dynamically sets on card objects
|
26
|
-
# @return card object
|
27
|
-
def set_with &block
|
28
|
-
with_set create_dynamic_set(&block)
|
29
|
-
end
|
30
|
-
|
31
|
-
# load set into card object
|
32
|
-
def with_set set
|
33
|
-
set = include_set_in_test_set(set) if set.abstract_set?
|
34
|
-
singleton_class.send :include, set
|
35
|
-
yield set if block_given?
|
36
|
-
self
|
37
|
-
end
|
38
|
-
|
39
|
-
# load set into a card's format object
|
40
|
-
def format_with_set set, format_type=:base
|
41
|
-
format = format format_type
|
42
|
-
with_set set do |extended_set|
|
43
|
-
format_class = set_format_class(extended_set, format_type)
|
44
|
-
format.singleton_class.send :include, format_class
|
45
|
-
end
|
46
|
-
block_given? ? yield(format) : format
|
47
|
-
end
|
48
|
-
|
49
|
-
def set_format_class set, format_type
|
50
|
-
format_class = Card::Format.format_class_name format_type
|
51
|
-
set.const_get format_class
|
52
|
-
end
|
53
|
-
|
54
|
-
def include_set_in_test_set set
|
55
|
-
# rubocop:disable Lint/Eval
|
56
|
-
::Card::Set::Self.const_remove_if_defined :TestSet
|
57
|
-
eval <<-RUBY
|
58
|
-
class ::Card::Set::Self
|
59
|
-
module TestSet
|
60
|
-
extend Card::Set
|
61
|
-
include_set #{set}
|
62
|
-
end
|
63
|
-
end
|
64
|
-
RUBY
|
65
|
-
::Card::Set::Self::TestSet
|
66
|
-
# rubocop:enable Lint/Eval
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def create_dynamic_set &block
|
72
|
-
::Card::Set::Self.const_remove_if_defined :DynamicSet
|
73
|
-
::Card::Set::Self.const_set :DynamicSet, Module.new
|
74
|
-
::Card::Set::Self::DynamicSet.extend Card::Set
|
75
|
-
::Card::Set::Self::DynamicSet.module_eval &block
|
76
|
-
::Card::Set::Self::DynamicSet
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,160 +0,0 @@
|
|
1
|
-
#TODO: is this global namespace? module?
|
2
|
-
def expect_card *marks
|
3
|
-
expect Card.cardish(marks)
|
4
|
-
end
|
5
|
-
|
6
|
-
RSpec::Matchers.define :exist do
|
7
|
-
match do |card|
|
8
|
-
should_be_true =
|
9
|
-
case card
|
10
|
-
when String
|
11
|
-
Card.exists? card
|
12
|
-
when Card
|
13
|
-
card.real?
|
14
|
-
else
|
15
|
-
card.present?
|
16
|
-
end
|
17
|
-
values_match? true, should_be_true
|
18
|
-
end
|
19
|
-
|
20
|
-
failure_message do |actual|
|
21
|
-
case actual
|
22
|
-
when String
|
23
|
-
"card '#{actual}' doesn't exist"
|
24
|
-
when Card
|
25
|
-
"#{actual.name} doesn't exist"
|
26
|
-
else
|
27
|
-
"#{actual} doesn't exist"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
RSpec::Matchers.define :be_valid do
|
33
|
-
match do |card|
|
34
|
-
values_match?(true, card.errors.empty?)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
[:name, :codename, :db_content, :type_id].each do |field|
|
39
|
-
RSpec::Matchers.define "have_#{field}".to_sym do |name|
|
40
|
-
match do |card|
|
41
|
-
values_match?(name, card.send(field))
|
42
|
-
end
|
43
|
-
|
44
|
-
failure_message do |card|
|
45
|
-
super() + ", but was #{card.send(field)}"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
RSpec::Matchers.define :have_a_field do |field_key|
|
51
|
-
chain(:with_content) do |content|
|
52
|
-
@content = content
|
53
|
-
end
|
54
|
-
|
55
|
-
chain(:pointing_to) do |pointing_to|
|
56
|
-
@pointing_to = pointing_to
|
57
|
-
end
|
58
|
-
|
59
|
-
match do |card|
|
60
|
-
return unless card.is_a?(Card)
|
61
|
-
return unless (@field = card.fetch(trait: field_key))
|
62
|
-
if @content
|
63
|
-
values_match?(@content, @field.content)
|
64
|
-
elsif @pointing_to
|
65
|
-
values_match?(:pointer, @field.type_code) &&
|
66
|
-
@field.content.include?("[[#{@pointing_to}]]")
|
67
|
-
else
|
68
|
-
values_match(Card, @field.class)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
failure_message do |card|
|
73
|
-
return super() unless @field
|
74
|
-
if @content
|
75
|
-
"expected #{card} to have a field '#{field_key}' with content '#{@content}',
|
76
|
-
but content is #{@field.content.present? ? @field.content : "empty" }"
|
77
|
-
elsif @pointing_to
|
78
|
-
"expected #{card} to have a field #{field_key} pointing to #{@pointing_to} but
|
79
|
-
content is #{@field.content}"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
RSpec::Matchers.define :have_type do |type|
|
85
|
-
match do |card|
|
86
|
-
case type
|
87
|
-
when Symbol
|
88
|
-
values_match?(type, card.type_code)
|
89
|
-
when Integer
|
90
|
-
values_match?(type, card.type_id)
|
91
|
-
when String
|
92
|
-
values_match?(type, card.type_name)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
RSpec::Matchers.define :have_content do |content|
|
98
|
-
match do |card|
|
99
|
-
values_match?(content, card.content)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
RSpec::Matchers.define :increase_card_count do
|
104
|
-
chain(:by) do |diff|
|
105
|
-
@diff = diff
|
106
|
-
end
|
107
|
-
|
108
|
-
match do |card_creation|
|
109
|
-
count = Card.count
|
110
|
-
card_creation.call
|
111
|
-
if @diff
|
112
|
-
values_match?(count + @diff, Card.count)
|
113
|
-
else
|
114
|
-
Card.count > count
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
supports_block_expectations
|
119
|
-
end
|
120
|
-
|
121
|
-
RSpec::Matchers.define :be_a_new_card do
|
122
|
-
match do |card|
|
123
|
-
card.is_a?(Card) && card.new_record?
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
RSpec::Matchers.define :be_invalid do
|
128
|
-
match do |card|
|
129
|
-
# valid? clears errors
|
130
|
-
# For a new card we have to call valid? to create the errors.
|
131
|
-
# For a updated card we have to check errors because with valid? we would
|
132
|
-
# loose the errors.
|
133
|
-
@valid = card.errors.empty? && card.valid?
|
134
|
-
# card.errors returns an array, hence we need an extra include matcher
|
135
|
-
values_match?(false, @valid) &&
|
136
|
-
values_match?(include(@error_msg), card.errors[@error_key])
|
137
|
-
end
|
138
|
-
|
139
|
-
description do
|
140
|
-
"be invalid #{"because of #{@error_key} #{@error_msg}" if @error_key}"
|
141
|
-
end
|
142
|
-
|
143
|
-
chain(:because_of) do |reason|
|
144
|
-
@error_key, @error_msg = reason.to_a.first
|
145
|
-
end
|
146
|
-
|
147
|
-
failure_message do |actual|
|
148
|
-
super() + fail_reason(actual)
|
149
|
-
end
|
150
|
-
|
151
|
-
def fail_reason actual
|
152
|
-
if @valid
|
153
|
-
"but file is valid"
|
154
|
-
else
|
155
|
-
"but it is invalid because of #{actual.errors.messages}"
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
|