card 1.103.3 → 1.104.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/config/environments/development.rb +4 -2
  4. data/config/environments/test.rb +1 -1
  5. data/config/initializers/01_core_extensions/array.rb +4 -1
  6. data/config/initializers/01_core_extensions/object.rb +1 -1
  7. data/config/initializers/02_patches/active_record.rb +16 -17
  8. data/config/locales/de.yml +8 -564
  9. data/config/locales/es.yml +2 -3
  10. data/db/migrate/20110511221913_require_earlier_migrations.rb +1 -1
  11. data/db/migrate/20120105203350_require_1_8_migrations.rb +1 -1
  12. data/db/migrate/20121111025347_require_1_10_migrations.rb +1 -1
  13. data/db/migrate/20211128040849_virtuals_updated_at.rb +11 -0
  14. data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +0 -1
  15. data/db/migrate_core_cards/20190502130029_add_shark_and_help_desk_role.rb +0 -1
  16. data/db/schema.rb +19 -16
  17. data/db/seed/new/card_actions.yml +1323 -2091
  18. data/db/seed/new/card_acts.yml +2 -2
  19. data/db/seed/new/card_references.yml +629 -741
  20. data/db/seed/new/cards.yml +2593 -5557
  21. data/db/seed/new/schema_migrations.yml +2 -0
  22. data/db/seed/new/schema_migrations_core_cards.yml +8 -0
  23. data/db/seed/test/fixtures/card_actions.yml +4304 -5144
  24. data/db/seed/test/fixtures/card_acts.yml +780 -840
  25. data/db/seed/test/fixtures/card_changes.yml +110 -110
  26. data/db/seed/test/fixtures/card_references.yml +2908 -2992
  27. data/db/seed/test/fixtures/cards.yml +8781 -11961
  28. data/db/seed/test/fixtures/schema_migrations.yml +2 -0
  29. data/db/seed/test/fixtures/schema_migrations_core_cards.yml +8 -0
  30. data/db/test_seed.rb +2 -5
  31. data/db/version.txt +1 -1
  32. data/db/version_core_cards.txt +1 -1
  33. data/lib/card/auth/current.rb +1 -1
  34. data/lib/card/auth/permissions.rb +37 -35
  35. data/lib/card/content/all.rb +3 -3
  36. data/lib/card/content/chunk.rb +1 -0
  37. data/lib/card/director/act_direction.rb +1 -3
  38. data/lib/card/director/card_methods.rb +0 -1
  39. data/lib/card/director/phases.rb +1 -0
  40. data/lib/card/director.rb +1 -0
  41. data/lib/card/env/location.rb +8 -8
  42. data/lib/card/env/serializable.rb +33 -0
  43. data/lib/card/env/serialization.rb +14 -6
  44. data/lib/card/env/slot_options.rb +1 -1
  45. data/lib/card/env/support.rb +30 -0
  46. data/lib/card/env.rb +13 -68
  47. data/lib/card/fetch/all.rb +3 -3
  48. data/lib/card/fetch/card_class.rb +5 -11
  49. data/lib/card/fetch/results.rb +2 -2
  50. data/lib/card/format/error.rb +2 -2
  51. data/lib/card/format.rb +1 -1
  52. data/lib/card/model/save_helper/save_arguments.rb +2 -2
  53. data/lib/card/model/save_helper.rb +2 -2
  54. data/lib/card/name/all/descendants.rb +9 -7
  55. data/lib/card/name/all/parts.rb +1 -1
  56. data/lib/card/name/all.rb +4 -3
  57. data/lib/card/name/card_class.rb +1 -0
  58. data/lib/card/name/fields_and_traits.rb +6 -30
  59. data/lib/card/name/name_variants.rb +5 -1
  60. data/lib/card/name.rb +0 -8
  61. data/lib/card/query/abstract_query/tie.rb +2 -3
  62. data/lib/card/query/card_query/normalization.rb +1 -1
  63. data/lib/card/query/sql_statement/order.rb +5 -6
  64. data/lib/card/query/value.rb +10 -7
  65. data/lib/card/reference/all.rb +9 -7
  66. data/lib/card/reference.rb +36 -41
  67. data/lib/card/rule/all.rb +3 -3
  68. data/lib/card/set/advanced_api.rb +5 -0
  69. data/lib/card/set/event/delayed_event.rb +8 -1
  70. data/lib/card/set/event.rb +1 -0
  71. data/lib/card/set/helpers.rb +30 -17
  72. data/lib/card/set/pattern/all.rb +13 -4
  73. data/lib/card/set/pattern/base.rb +12 -18
  74. data/lib/card/set/pattern/class_methods.rb +13 -13
  75. data/lib/card/set/pattern.rb +30 -19
  76. data/lib/card/set/trait.rb +16 -1
  77. data/lib/card/set/type.rb +3 -0
  78. data/lib/card/subcards/add.rb +1 -3
  79. data/lib/card/subcards/all.rb +30 -56
  80. data/lib/card/view/options.rb +7 -5
  81. data/lib/card/view/permission.rb +4 -11
  82. data/lib/cardio/cli.rb +1 -0
  83. data/lib/cardio/commands/custom.rb +60 -0
  84. data/lib/cardio/commands/rake_command/parser.rb +49 -48
  85. data/lib/cardio/commands/rake_command.rb +17 -15
  86. data/lib/cardio/commands/rspec_command.rb +2 -0
  87. data/lib/cardio/commands.rb +69 -69
  88. data/lib/cardio/generators.rb +56 -3
  89. data/lib/cardio/migration/deck.rb +0 -0
  90. data/lib/cardio/migration/deck_structure.rb +2 -0
  91. data/lib/cardio/migration/import/import_data/card_content.rb +1 -1
  92. data/lib/cardio/migration/import.rb +2 -2
  93. data/lib/cardio/migration.rb +26 -2
  94. data/lib/cardio/mod/class_methods.rb +112 -0
  95. data/lib/cardio/mod/dirs.rb +15 -11
  96. data/lib/cardio/mod/eat/edibles.rb +92 -0
  97. data/lib/cardio/mod/eat.rb +81 -0
  98. data/lib/cardio/mod/load_strategy/tmp_files.rb +1 -1
  99. data/lib/cardio/mod/modfile_api.rb +5 -0
  100. data/lib/cardio/mod/poop.rb +135 -0
  101. data/lib/cardio/mod.rb +20 -80
  102. data/lib/cardio/railtie.rb +20 -8
  103. data/lib/cardio/schema.rb +11 -10
  104. data/lib/cardio/version.rb +35 -0
  105. data/lib/cardio.rb +12 -0
  106. data/lib/generators/deck/deck_generator.rb +3 -2
  107. data/lib/generators/deck/templates/Gemfile.erb +0 -4
  108. data/lib/generators/deck/templates/config/application.rb.erb +74 -55
  109. data/lib/generators/deck/templates/rspec.erb +1 -1
  110. data/lib/generators/deck/templates/spec/javascripts/support/decko_jasmine.yml.erb +0 -1
  111. data/lib/generators/mod/USAGE +1 -0
  112. data/lib/tasks/card/migrate.rake +41 -1
  113. data/lib/tasks/card/mod.rake +15 -8
  114. data/lib/tasks/card.rake +47 -87
  115. data/mod/admin/locales/de.yml +4 -0
  116. data/mod/admin/set/self/admin.rb +10 -8
  117. data/mod/core/data/production.yml +7 -0
  118. data/mod/core/data/test.yml +30 -0
  119. data/mod/core/locales/de.yml +28 -0
  120. data/mod/core/set/all/assign_attributes.rb +1 -33
  121. data/mod/core/set/all/content.rb +3 -1
  122. data/mod/core/set/all/initialize.rb +1 -4
  123. data/mod/core/set/all/name_events.rb +3 -18
  124. data/mod/core/set/all/reference_events.rb +29 -28
  125. data/mod/core/set/all/subcards.rb +6 -2
  126. data/mod/core/set/all/trash.rb +2 -3
  127. data/mod/core/set/all/type.rb +67 -18
  128. data/mod/core/set/self/version.rb +1 -1
  129. data/mod/core/spec/set/self/trash_spec.rb +1 -1
  130. data/mod/standard/{file → data/files}/favicon/image-icon.png +0 -0
  131. data/mod/standard/{file → data/files}/favicon/image-large.png +0 -0
  132. data/mod/standard/{file → data/files}/favicon/image-medium.png +0 -0
  133. data/mod/standard/{file → data/files}/favicon/image-original.png +0 -0
  134. data/mod/standard/{file → data/files}/favicon/image-small.png +0 -0
  135. data/mod/standard/{file → data/files}/logo/image-original.svg +0 -0
  136. metadata +39 -29
  137. data/db/migrate_core_cards/20150605115802_add_performance_log_card.rb +0 -7
  138. data/lib/card/env/request_assignments.rb +0 -24
  139. data/lib/card/set/code_nest.rb +0 -15
  140. data/lib/card/version.rb +0 -11
  141. data/lib/cardio/commands/USAGE +0 -28
  142. data/lib/cardio/generators/class_methods.rb +0 -35
  143. data/lib/tasks/card/asset.rake +0 -22
  144. data/mod/core/spec/set/all/clean_me_spec.rb +0 -258
  145. data/mod/core/spec/set/all/export_spec.rb +0 -71
  146. data/tmpsets/set_pattern/100-all.rb +0 -22
  147. data/tmpsets/set_pattern/101-all_plus.rb +0 -24
  148. data/tmpsets/set_pattern/102-type.rb +0 -40
  149. data/tmpsets/set_pattern/103-star.rb +0 -26
  150. data/tmpsets/set_pattern/104-rstar.rb +0 -28
  151. data/tmpsets/set_pattern/105-rule.rb +0 -28
  152. data/tmpsets/set_pattern/106-right.rb +0 -35
  153. data/tmpsets/set_pattern/107-type_plus_right.rb +0 -43
  154. data/tmpsets/set_pattern/108-self.rb +0 -34
@@ -1,54 +1,65 @@
1
1
  class Card
2
2
  module Set
3
- class Pattern
3
+ # Each deck can have countless sets of cards, each of which follows one of a small
4
+ # list of patterns. This module provides methods for managing those patterns.
5
+ module Pattern
4
6
  class << self
7
+ # Pattern classes all the patterns except for Abstract.
8
+ # They are concrete because they are defined on a set of cards
9
+ # (while abstract sets must be included on them explicitly).
10
+ #
11
+ # @return [Array <Class>]
5
12
  def concrete
6
13
  @concrete ||= []
7
14
  end
8
15
 
16
+ # Pattern classes that can be reloaded without reloading Card
17
+ # (everything but all)
18
+ # @return [Array <Class>]
19
+ def reloadables
20
+ concrete - [Set::All] + Abstract
21
+ end
22
+
23
+ # remove reloadable sets and prepare for reloading
9
24
  def reset
10
25
  reloadables.each do |set_pattern|
11
26
  Set.const_remove_if_defined set_pattern.to_s.split("::").last
12
27
  end
13
- @concrete = []
14
- @card_keys = @codes = @nonbase_codes = @ids = nil
15
- end
16
-
17
- def reloadables
18
- r = concrete.push(Abstract)
19
- r.delete Set::All
20
- r
28
+ @concrete = @codes = @type_assigner_codes = @nonbase_codes = @ids = nil
21
29
  end
22
30
 
31
+ # finds pattern class associated with codename
32
+ # e.g. find(:type) returns `Card::Set::Type`
33
+ #
34
+ # @return [Class] pattern class
23
35
  def find pattern_code
24
36
  concrete.find { |sub| sub.pattern_code == pattern_code }
25
37
  end
26
38
 
27
- def card_keys
28
- @card_keys ||=
29
- concrete.each_with_object({}) do |set_pattern, hash|
30
- hash[set_pattern.pattern_id.cardname.key] = true
31
- end
39
+ # list of codenames of pattern cards
40
+ # @return [Array <Symbol>]
41
+ def codes
42
+ @codes ||= concrete.map(&:pattern_code).to_set
32
43
  end
33
44
 
45
+ # list of lists of codenames in pattern load order
46
+ # @return [Array <Array <Symbol>>]
34
47
  def grouped_codes with_all: true
35
48
  g = [[:abstract], nonbase_codes.reverse]
36
49
  g.unshift [:all] if with_all
37
50
  g
38
51
  end
39
52
 
53
+ # list of ids of pattern cards
54
+ # @return [Array <Integer>]
40
55
  def ids
41
56
  @ids ||= concrete.map(&:pattern_id)
42
57
  end
43
58
 
44
59
  private
45
60
 
46
- def codes
47
- @codes ||= concrete.map(&:pattern_code)
48
- end
49
-
50
61
  def nonbase_codes
51
- @nonbase_codes ||= codes.tap { |list| list.delete :all }
62
+ @nonbase_codes ||= codes.to_a - [:all]
52
63
  end
53
64
  end
54
65
  end
@@ -1,6 +1,6 @@
1
1
  class Card
2
2
  module Set
3
- # ActiveCard support: accessing plus cards as attributes
3
+ # accessing plus cards as attributes
4
4
  module Trait
5
5
  def card_accessor *args
6
6
  options = args.extract_options!
@@ -45,11 +45,25 @@ class Card
45
45
  define_trait_card trait, new_opts
46
46
  define_trait_reader trait if options[:reader]
47
47
  define_trait_writer trait if options[:writer]
48
+ assign_trait_type trait, options[:type]
48
49
 
49
50
  mod_traits[trait.to_sym] = options
50
51
  end
51
52
  end
52
53
 
54
+ def assign_trait_type trait, type
55
+ return unless type && (parts = trait_module_key_parts trait)
56
+ assign_type type, normalize_const(parts)
57
+ end
58
+
59
+ def trait_module_key_parts trait
60
+ if all_set?
61
+ [:right, trait]
62
+ elsif type_set?
63
+ [:type_plus_right, set_name_parts.last, trait]
64
+ end
65
+ end
66
+
53
67
  def new_trait_opts options
54
68
  %i[type default_content].each_with_object({}).each do |key, hash|
55
69
  hash[key] = options[key] if options[key]
@@ -58,6 +72,7 @@ class Card
58
72
 
59
73
  def define_trait_card trait, opts
60
74
  define_method "#{trait}_card" do
75
+ # opts = opts.clone.merge supercard: card
61
76
  fetch trait.to_sym, new: opts.clone, eager_cache: true
62
77
  end
63
78
  end
data/lib/card/set/type.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  class Card
2
2
  module Set
3
3
  class Type < Pattern::Base
4
+ cattr_accessor :assignment
5
+ self.assignment = {}
6
+
4
7
  def initialize card
5
8
  super
6
9
  # support type inheritance
@@ -53,9 +53,7 @@ class Card
53
53
 
54
54
  def new_by_card card
55
55
  card.supercard = @context_card
56
- if !card.name.simple? && card.name.field_of?(@context_card.name)
57
- card.superleft = @context_card
58
- end
56
+ card.update_superleft card.name
59
57
  @keys << card.key
60
58
  Card.write_to_soft_cache card
61
59
  card.director = @context_card.director.subdirectors.add card
@@ -2,18 +2,6 @@ class Card
2
2
  class Subcards
3
3
  # subcard-related Card instance methods
4
4
  module All
5
- def subcard card_name
6
- subcards.card card_name
7
- end
8
-
9
- def subfield field_name
10
- subcards.field field_name
11
- end
12
-
13
- def field? tag
14
- field(tag) || subfield(tag)
15
- end
16
-
17
5
  def subcards
18
6
  @subcards ||= Card::Subcards.new self
19
7
  end
@@ -22,66 +10,50 @@ class Card
22
10
  subcards.present?
23
11
  end
24
12
 
25
- def expire_subcards
26
- subcards.clear
27
- end
28
-
29
- # phase_method :attach_subcard, before: :store do |name_or_card, args=nil|
30
- # TODO: handle differently in different stages
31
- def add_subcard name_or_card, args={}
32
- subcards.add name_or_card, args
33
- end
34
- alias_method :attach_subcard, :add_subcard
35
-
36
- def add_subcard! name_or_card, args={}
37
- subcard = subcards.add name_or_card, args
38
- subcard.director.reset_stage
39
- subcard
13
+ def subcard card_name, args={}
14
+ if (sc = subcards.card card_name)
15
+ sc.assign_attributes args
16
+ sc
17
+ else
18
+ subcards.add card_name, args
19
+ end
40
20
  end
41
- alias_method :attach_subcard!, :add_subcard!
42
21
 
43
- # phase_method :attach_subfield, before: :approve do |name_or_card, args=nil|
44
- def attach_subfield name_or_card, args={}
45
- subcards.add_field name_or_card, args
22
+ def subcard_content card_name
23
+ subcards.card(card_name)&.content
46
24
  end
47
- alias_method :add_subfield, :attach_subfield
48
25
 
49
- def attach_subfield! name_or_card, args={}
50
- subcard = subcards.add_field name_or_card, args
51
- subcard.director.reset_stage
52
- subcard
26
+ def subcard? card_name
27
+ subcards.card(card_name).present?
53
28
  end
54
29
 
55
- def detach_subcard name_or_card
56
- subcards.remove name_or_card
30
+ def subfield field_name, args={}
31
+ if (sf = subcards.field field_name)
32
+ sf.assign_attributes args
33
+ sf
34
+ else
35
+ subcards.add_field field_name, args
36
+ end
57
37
  end
58
- alias_method :remove_subcard, :detach_subcard
59
38
 
60
- def detach_subfield name_or_card
61
- subcards.remove_field name_or_card
39
+ def subfield_content field_name
40
+ subcards.field(field_name)&.content
62
41
  end
63
- alias_method :remove_subfield, :detach_subfield
64
42
 
65
- def clear_subcards
66
- subcards.clear
43
+ def subfield? field_name
44
+ subcards.field(field_name).present?
67
45
  end
68
46
 
69
- # ensures subfield is present
70
- # does NOT override subfield content if already present
71
- def ensure_subfield field_name, args={}
72
- if subfield_present? field_name
73
- subfield field_name
74
- else
75
- add_subfield field_name, args
76
- end
47
+ def field? tag
48
+ field(tag) || subfield?(tag)
77
49
  end
78
50
 
79
- def subfield_present? field_name
80
- subfield(field_name)&.content&.present?
51
+ def drop_subcard name_or_card
52
+ subcards.remove name_or_card
81
53
  end
82
54
 
83
- def deep_clear_subcards
84
- subcards.deep_clear
55
+ def drop_subfield name_or_card
56
+ subcards.remove_field name_or_card
85
57
  end
86
58
 
87
59
  def handle_subcard_errors
@@ -93,6 +65,8 @@ class Card
93
65
  end
94
66
  end
95
67
 
68
+ private
69
+
96
70
  def subcard_error subcard, error
97
71
  msg = error.message
98
72
  msg = "#{error.attribute} #{msg}" unless %i[content abort].member? error.attribute
@@ -40,6 +40,7 @@ class Card
40
40
  heir: [
41
41
  :main, # format object is page's "main" object (Boolean)
42
42
  :home_view, # view for slot to return to when no view specified
43
+ :buttons_view,
43
44
  :edit_structure, # use a different structure for editing (Array)
44
45
  :cql, # contextual cql alterations for search cards (Hash)
45
46
  :action_id, # a Card::Action id (Integer)
@@ -50,20 +51,21 @@ class Card
50
51
  :help, # cue text when editing
51
52
  :structure, # overrides the content of the card
52
53
  :title, # overrides the name of the card
53
- :variant, # override the canonical version of the name with a different
54
- # variant
54
+ :variant, # override the standard name with a different variant
55
55
  :input_type, # inline_nests makes a form within standard content (Symbol)
56
56
  :type, # set the default type of new cards
57
57
  :size, # set an image size
58
- # (also used for character limit in one_line_content)
59
- :params, # parameters for add button. deprecated!
58
+ # (also used for character limit in one_line_content)
60
59
  :items, # options for items (Hash)
61
60
  :cache, # change view cache behaviour
62
61
  # (Symbol<:always, :standard, :never>)
63
62
  :edit, # edit mode
64
63
  # (Symbol<:inline, :standard, :full>)
65
64
  :separator, # item separator in certain lists
66
- :filter
65
+ :filter,
66
+
67
+ # DEPRECATED
68
+ :params # parameters for add button
67
69
  ],
68
70
  none: [
69
71
  :skip_perms, # do not check permissions for this view (Boolean)
@@ -34,18 +34,11 @@ class Card
34
34
  def alter_unknown
35
35
  return if card.known?
36
36
 
37
- unknown_from_options || unknown_from_view_definition
38
- end
39
-
40
- def unknown_from_options
41
- unknown.to_sym if unknown.present?
42
- end
43
-
44
- def unknown_from_view_definition
45
- setting = setting(:unknown)
46
- return if setting == true # use original view
37
+ unknown_setting = setting :unknown
38
+ return if unknown_setting&.to_s == "true" # requested view supports unknown
47
39
 
48
- setting.is_a?(Symbol) ? setting : format.view_for_unknown(requested_view)
40
+ configured_view = (unknown || unknown_setting)&.to_sym
41
+ format.view_for_unknown configured_view
49
42
  end
50
43
 
51
44
  def denial
data/lib/cardio/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "rbconfig"
2
+ require "colorize"
2
3
  require "cardio/script_loader"
3
4
 
4
5
  # If we are inside a Decko application this method performs an exec and thus
@@ -0,0 +1,60 @@
1
+ require "optparse"
2
+ require "cardio/version"
3
+
4
+ module Cardio
5
+ class Commands
6
+ module Custom
7
+ private
8
+
9
+ def run_new
10
+ if !["-h", "--help"].intersection(args).empty?
11
+ require "cardio/commands/application"
12
+ else
13
+ puts "Can't initialize a new deck within the directory of another, " \
14
+ "please change to a non-deck directory first.\n"
15
+ puts "Type '#{gem}' for help."
16
+ exit 1
17
+ end
18
+ end
19
+
20
+ def run_version
21
+ puts "Card #{Version.card_release}".light_cyan
22
+ end
23
+
24
+ def run_rspec
25
+ require "cardio/commands/rspec_command"
26
+ RspecCommand.new(args).run
27
+ end
28
+
29
+ # def run_jasmine
30
+ # require "cardio/commands/rake_command"
31
+ # RakeCommand.new("spec:javascript", envs: "test").run
32
+ # end
33
+
34
+ def run_help
35
+ puts "Usage:"
36
+ puts " #{gem} COMMAND [OPTIONS]".green
37
+ puts
38
+ puts "Run commands with -h (or --help) for more info."
39
+
40
+ %i[shark monkey].each do |group|
41
+ puts
42
+ puts "For " + "#{group}s".yellow + ":"
43
+ map.each do |command, conf|
44
+ next unless conf[:group] == group
45
+ puts command_help(command, conf)
46
+ end
47
+ puts
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ # formats command string for help text
54
+ def command_help command, conf
55
+ alt = conf[:alias] ? "(or #{conf[:alias]})" : ""
56
+ " " + command.to_s.ljust(12).light_cyan + alt.ljust(10) + conf[:desc]
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,50 +1,51 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
- require "optparse"
4
-
5
- module Cardio
6
- class Commands
7
- class RakeCommand
8
- # parse decko/card -specific options for rake
9
- class Parser < OptionParser
10
- ONS = {
11
- production: {
12
- desc: "production database (default)"
13
- },
14
- test: {},
15
- development: {},
16
- all: {
17
- desc: "production, test, and development database",
18
- envs: %w[production development test]
19
- }
20
- }.freeze
21
-
22
- def initialize command, opts
23
- super() do |parser|
24
- parser.banner = "Usage: decko #{command} [options]\n\n" \
25
- "Run decko:#{command} task on the production "\
26
- " database specified in config/database.yml\n\n"
27
- parser_ons parser, command do |env_array|
28
- opts[:envs] = env_array
29
- end
30
- end
31
- end
32
-
33
- def parser_ons parser, command
34
- ONS.each do |env, vals|
35
- parser.on(*parser_on_opts(env, command, vals[:desc])) do
36
- yield (vals[:envs] || [env.to_s])
37
- end
38
- end
39
- end
40
-
41
- def parser_on_opts env, command, desc
42
- main = "--#{env}"
43
- short = "-#{env.to_s[0]}"
44
- desc ||= "#{env} database"
45
- [main, short, "#{command} #{desc}"]
46
- end
47
- end
48
- end
49
- end
50
- end
3
+ # require "optparse"
4
+ #
5
+ # module Cardio
6
+ # class Commands
7
+ # class RakeCommand
8
+ # # parse decko/card -specific options for rake
9
+ # class Parser < OptionParser
10
+ # ONS = {
11
+ # production: {
12
+ # desc: "production database (default)"
13
+ # },
14
+ # test: {},
15
+ # development: {},
16
+ # all: {
17
+ # desc: "production, test, and development database",
18
+ # envs: %w[production development test]
19
+ # }
20
+ # }.freeze
21
+ #
22
+ # def initialize command, opts
23
+ # super() do |parser|
24
+ # parser.banner =
25
+ # "Usage:\n" +
26
+ # " #{Commands.gem} #{command} [options]".green +
27
+ # "\n\nRuns `rake #{Commands.gem}:#{command}` task."
28
+ # parser_ons parser, command do |env_array|
29
+ # opts[:envs] = env_array
30
+ # end
31
+ # end
32
+ # end
33
+ #
34
+ # def parser_ons parser, command
35
+ # ONS.each do |env, vals|
36
+ # parser.on(*parser_on_opts(env, command, vals[:desc])) do
37
+ # yield (vals[:envs] || [env.to_s])
38
+ # end
39
+ # end
40
+ # end
41
+ #
42
+ # def parser_on_opts env, command, desc
43
+ # main = "--#{env}"
44
+ # short = "-#{env.to_s[0]}"
45
+ # desc ||= "#{env} database"
46
+ # [main, short, "#{command} #{desc}"]
47
+ # end
48
+ # end
49
+ # end
50
+ # end
51
+ # end
@@ -1,24 +1,25 @@
1
1
  require File.expand_path("command", __dir__)
2
- # require "pry"
3
2
 
4
3
  module Cardio
5
4
  class Commands
6
5
  # enhance standard rake command with some decko/card -specific options
7
6
  class RakeCommand < Command
8
- def initialize rake_task, args={}
9
- @task = rake_task
10
- opts = {}
11
- if args.is_a? Array
12
- Parser.new(rake_task, opts).parse!(args)
13
- else
14
- opts = args
15
- end
16
- @envs = Array(opts[:envs])
7
+ def initialize gem, command, args={}
8
+ @command = command
9
+ @task = "#{gem}:#{command}"
10
+ @args = [args].flatten
11
+ # opts = {}
12
+ # if args.is_a? Array
13
+ # Parser.new(rake_task, opts).parse!(args)
14
+ # else
15
+ # opts = args
16
+ # end
17
+ # @envs = Array(opts[:envs])
17
18
  end
18
19
 
19
20
  def run
20
21
  commands.each do |cmd|
21
- puts cmd
22
+ # puts cmd
22
23
  # exit_with_child_status cmd
23
24
 
24
25
  result = `#{cmd}`
@@ -30,14 +31,15 @@ module Cardio
30
31
 
31
32
  def commands
32
33
  task_cmd = "bundle exec rake #{@task}"
34
+ task_cmd += " -- #{@args.join ' '}" if !@args.empty?
33
35
  return [task_cmd] if !@envs || @envs.empty?
34
36
 
35
- @envs.map do |env|
36
- "env RAILS_ENV=#{env} #{task_cmd}"
37
- end
37
+ # @envs.map do |env|
38
+ # "env RAILS_ENV=#{env} #{task_cmd}"
39
+ # end
38
40
  end
39
41
  end
40
42
  end
41
43
  end
42
44
 
43
- require File.expand_path("rake_command/parser", __dir__)
45
+ # require File.expand_path("rake_command/parser", __dir__)
@@ -24,6 +24,8 @@ module Cardio
24
24
  end
25
25
 
26
26
  def coverage
27
+ return if @opts[:simplecov]
28
+
27
29
  # no coverage if rspec was started with file argument
28
30
  return unless @opts[:files] || @rspec_args.any?
29
31