decko 0.11.4 → 0.11.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/bin/decko +2 -2
  3. data/lib/card_controller.rb +25 -0
  4. data/{rails/controllers → lib}/card_controller/errors.rb +1 -0
  5. data/lib/card_controller/mark.rb +66 -0
  6. data/lib/{decko → card_controller}/response.rb +5 -55
  7. data/lib/card_controller/rest.rb +105 -0
  8. data/lib/decko.rb +1 -2
  9. data/lib/decko/application.rb +1 -0
  10. data/lib/decko/commands.rb +9 -9
  11. data/lib/decko/commands/application.rb +1 -1
  12. data/lib/decko/commands/cucumber_command.rb +2 -2
  13. data/lib/decko/commands/cucumber_command/parser.rb +28 -24
  14. data/lib/decko/commands/rake_command.rb +3 -2
  15. data/lib/decko/commands/rake_command/parser.rb +2 -1
  16. data/lib/decko/commands/rspec_command.rb +2 -2
  17. data/lib/decko/commands/rspec_command/parser.rb +1 -0
  18. data/lib/decko/config/environments/cucumber.rb +1 -0
  19. data/lib/decko/config/environments/development.rb +1 -1
  20. data/lib/decko/config/environments/production.rb +3 -1
  21. data/lib/decko/config/environments/profile.rb +1 -0
  22. data/lib/decko/config/environments/test.rb +1 -0
  23. data/lib/decko/config/initializers/secret_token.rb +1 -0
  24. data/lib/decko/config/initializers/sedate_parser.rb +3 -2
  25. data/lib/decko/engine.rb +0 -2
  26. data/lib/decko/generators/deck/deck_generator.rb +2 -1
  27. data/lib/decko/generators/deck/deck_generator/interactive.rb +4 -4
  28. data/lib/decko/script_decko_loader.rb +1 -0
  29. data/lib/decko/tasks/alias.rb +4 -5
  30. data/lib/decko/tasks/cucumber.rake +52 -44
  31. data/lib/decko/tasks/db.rake +9 -2
  32. data/lib/decko/tasks/decko.rake +6 -4
  33. data/lib/decko/tasks/decko/seed.rake +3 -0
  34. data/rails/engine-routes.rb +1 -1
  35. data/script/decko +2 -2
  36. data/script/rails +4 -4
  37. metadata +11 -11
  38. data/rails/controllers/application_controller.rb +0 -2
  39. data/rails/controllers/card_controller.rb +0 -122
  40. data/script/test_filter +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98dd5887f73f65f3b84bab40ddf902f93c56dfbfeea2da826d8eaa2aee9d7bd4
4
- data.tar.gz: b4c0bdf1ee67823675b78aa04ab11dc4f69f5a6b45f35ae85775dad115b965be
3
+ metadata.gz: 1c726ee70f0d8daba2891b23aab64090c43d088cc3300290a52eddee922dc7d0
4
+ data.tar.gz: c3e610b82510c510d2dfb16ecd1c408fe0be17c7e0b1d1209ce92432d52513e9
5
5
  SHA512:
6
- metadata.gz: 2a9f0f9de1c86d450689c19766436f7d001437603a55bbd7c040ce0655fd60004408357ebe5deb5577836dcb08aa2c89cfd6233066dc1812a62c4204327f9482
7
- data.tar.gz: 61af0fa92f3dae055ca3c8278cde3a924e1882dc13dccd46d16ff130c69323396b476c5be7fca2dc560dd6b12b36f8ce5e3f6999ce3ea2f39733eb8c02f5398c
6
+ metadata.gz: 8c18ed07879923d174cea1cc75a860406a5f6548dfbc56dfe4d27610ee64d29ce0df3cbfdd500362b2ce2780948d48f2e54aac487d437141e0b91c29a78d9935
7
+ data.tar.gz: a76d39182e7d95ac2192a4a90017dd337f07d786379379dc3a5166765a2f7241b3abc8b025ae8a7210aa0dd7431552dab7c1ce877acc4c394801d4cd410e2250
data/bin/decko CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- git_path = File.expand_path("../../../.git", __FILE__)
3
+ git_path = File.expand_path("../../.git", __dir__)
4
4
 
5
5
  if File.exist?(git_path)
6
- railties_path = File.expand_path("../../lib", __FILE__)
6
+ railties_path = File.expand_path("../lib", __dir__)
7
7
  $LOAD_PATH.unshift(railties_path)
8
8
  end
9
9
  require "decko/cli"
@@ -0,0 +1,25 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ # Decko's only controller.
4
+ class CardController < ActionController::Base
5
+ include Mark
6
+ include Rest
7
+ include Response
8
+ include Errors
9
+
10
+ # NOTE: including Card::Env::Location triggers card loading, which triggers mod loading,
11
+ # which can include initializers that add to the CardController class.
12
+ # It's important that it come *after* the modules above, so that mod modules
13
+ # can override them.
14
+ include ::Card::Env::Location
15
+
16
+ layout nil
17
+ attr_reader :card
18
+
19
+ before_action :setup, except: [:asset]
20
+ before_action :authenticate, except: [:asset]
21
+ before_action :load_mark, only: [:read]
22
+ before_action :load_card, except: [:asset]
23
+ before_action :load_action, only: [:read]
24
+ before_action :refresh_card, only: %i[create update delete]
25
+ end
@@ -16,6 +16,7 @@ class CardController
16
16
  module Errors
17
17
  def handle_exception exception
18
18
  raise exception if debug_exception?(exception)
19
+
19
20
  @card ||= Card.new
20
21
  error = Card::Error.report exception, card
21
22
  show error.class.view, error.class.status_code
@@ -0,0 +1,66 @@
1
+ class CardController
2
+ # methods for interpretation of card marks requested
3
+ module Mark
4
+ private
5
+
6
+ def load_mark
7
+ params[:mark] = interpret_mark params[:mark]
8
+ end
9
+
10
+ def interpret_mark mark
11
+ case mark
12
+ when "*previous"
13
+ # Why support this? It's only needed in Success, right? Deprecate?
14
+ hard_redirect Card::Env.previous_location
15
+ when nil
16
+ implicit_mark
17
+ else
18
+ explicit_mark mark
19
+ end
20
+ end
21
+
22
+ def explicit_mark mark
23
+ # we should find the place where we produce these bad urls
24
+ mark.valid_encoding? ? mark : mark.force_encoding("ISO-8859-1").encode("UTF-8")
25
+ end
26
+
27
+ def implicit_mark
28
+ case
29
+ when initial_setup
30
+ ""
31
+ when (name = mark_from_card_hash)
32
+ name
33
+ when view_does_not_require_name?
34
+ ""
35
+ else
36
+ home_mark
37
+ end
38
+ end
39
+
40
+ def home_mark
41
+ Card::Rule.global_setting(:home) || "Home"
42
+ end
43
+
44
+ def view_does_not_require_name?
45
+ return false unless (view = params[:view]&.to_sym)
46
+
47
+ Card::Set::Format::AbstractFormat::ViewOpts.unknown_ok[view]
48
+ end
49
+
50
+ def mark_from_card_hash
51
+ params.dig :card, :name
52
+ end
53
+
54
+ # alters params
55
+ def initial_setup
56
+ return unless Card::Auth.needs_setup? && Card::Env.html?
57
+
58
+ prepare_setup_card!
59
+ end
60
+
61
+ def prepare_setup_card!
62
+ params[:card] = { type_id: Card.default_accounted_type_id }
63
+ params[:view] = "setup"
64
+ end
65
+ end
66
+ end
@@ -1,4 +1,4 @@
1
- module Decko
1
+ class CardController
2
2
  # methods for managing decko responses
3
3
  module Response
4
4
  def response_format
@@ -72,6 +72,7 @@ module Decko
72
72
 
73
73
  def require_card_for_soft_redirect!
74
74
  return if card.is_a? Card
75
+
75
76
  raise Card::Error, "tried to do soft redirect without a card"
76
77
  end
77
78
 
@@ -101,64 +102,13 @@ module Decko
101
102
  end
102
103
 
103
104
  def format_name_from_params
104
- if explicit_file_format? then :file
105
- elsif params[:format].present? then params[:format].to_sym
106
- else request.format.to_sym
107
- end
105
+ return :file if explicit_file_format?
106
+
107
+ (params[:format].present? ? params[:format] : request.format).to_sym
108
108
  end
109
109
 
110
110
  def explicit_file_format?
111
111
  params[:explicit_file] || !Card::Format.registered.member?(request.format)
112
112
  end
113
-
114
- def interpret_mark mark
115
- case mark
116
- when "*previous"
117
- # Why support this? It's only needed in Success, right? Deprecate?
118
- return hard_redirect(Card::Env.previous_location)
119
- when nil
120
- implicit_mark
121
- else
122
- explicit_mark mark
123
- end
124
- end
125
-
126
- def explicit_mark mark
127
- # we should find the place where we produce these bad urls
128
- mark.valid_encoding? ? mark : mark.force_encoding("ISO-8859-1").encode("UTF-8")
129
- end
130
-
131
- def implicit_mark
132
- case
133
- when initial_setup then ""
134
- when (name = params.dig :card, :name) then name
135
- when view_does_not_require_name? then ""
136
- else home_mark
137
- end
138
- end
139
-
140
- def home_mark
141
- Card::Rule.global_setting(:home) || "Home"
142
- end
143
-
144
- def view_does_not_require_name?
145
- return false unless (view = params[:view]&.to_sym)
146
- Card::Set::Format::AbstractFormat::ViewOpts.unknown_ok[view]
147
- end
148
-
149
- # alters params
150
- def initial_setup
151
- return unless initial_setup?
152
- prepare_setup_card!
153
- end
154
-
155
- def initial_setup?
156
- Card::Auth.needs_setup? && Card::Env.html?
157
- end
158
-
159
- def prepare_setup_card!
160
- params[:card] = { type_id: Card.default_accounted_type_id }
161
- params[:view] = "setup"
162
- end
163
113
  end
164
114
  end
@@ -0,0 +1,105 @@
1
+ class CardController
2
+ # RESTful action methods for card
3
+ module Rest
4
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
+ # PUBLIC METHODS
6
+
7
+ def create
8
+ handle { card.save! }
9
+ end
10
+
11
+ def read
12
+ show
13
+ end
14
+
15
+ def update
16
+ card.new_card? ? create : handle { card.update! params[:card]&.to_unsafe_h }
17
+ end
18
+
19
+ def delete
20
+ handle { card.delete! }
21
+ end
22
+
23
+ # @deprecated
24
+ def asset
25
+ body = "Decko installation error: missing asset symlinks"
26
+ Rails.logger.info "#{body}.\n >>> Try `rake decko:update_assets_symlink`"
27
+ render body: body, status: 404
28
+ end
29
+
30
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31
+ # PRIVATE METHODS
32
+
33
+ private
34
+
35
+ def setup
36
+ Card::Machine.refresh_script_and_style unless params[:explicit_file]
37
+ Card::Cache.renew
38
+ Card::Env.reset controller: self
39
+ end
40
+
41
+ def authenticate
42
+ Card::Auth.signin_with params
43
+ end
44
+
45
+ def load_card
46
+ @card = Card.uri_fetch params
47
+ raise Card::Error::NotFound unless card
48
+
49
+ record_as_main
50
+ end
51
+
52
+ def load_action
53
+ card.select_action_by_params params
54
+ return unless params[:edit_draft] && card.drafts.present?
55
+
56
+ card.content = card.last_draft_content
57
+ end
58
+
59
+ # TODO: refactor this away this when new layout handling is ready
60
+ def record_as_main
61
+ Card::Env[:main_name] = params[:main] || card&.name || ""
62
+ end
63
+
64
+ def refresh_card
65
+ @card = card.refresh
66
+ end
67
+
68
+ # ----------( HELPER METHODS ) -------------
69
+
70
+ def handle
71
+ Card::Env.success card.name
72
+ yield ? cud_success : raise(Card::Error::UserError)
73
+ end
74
+
75
+ # successful create, update, or delete act
76
+ def cud_success
77
+ success = Card::Env.success.in_context card.name
78
+ if success.reload?
79
+ reload # instruct JSON to reload
80
+ else
81
+ redirect_cud_success success
82
+ end
83
+ end
84
+
85
+ def show view=nil, status=200
86
+ card.action = :read
87
+ format = load_format status
88
+ result = render_page format, view
89
+ status = format.error_status || status
90
+ respond format, result, status
91
+ end
92
+
93
+ def render_page format, view
94
+ view ||= view_from_params
95
+ card.act do
96
+ format.page self, view, Card::Env.slot_opts
97
+ end
98
+ end
99
+
100
+ def view_from_params
101
+ %i[view v].each { |k| return params[k] if params[k].present? }
102
+ nil
103
+ end
104
+ end
105
+ end
data/lib/decko.rb CHANGED
@@ -1,6 +1,5 @@
1
-
2
1
  module Decko
3
- DECKO_GEM_ROOT = File.expand_path("../..", __FILE__)
2
+ DECKO_GEM_ROOT = File.expand_path("..", __dir__)
4
3
 
5
4
  class << self
6
5
  def root
@@ -79,6 +79,7 @@ module Decko
79
79
 
80
80
  paths["app/models"] = []
81
81
  paths["app/mailers"] = []
82
+ paths["app/controllers"] = []
82
83
 
83
84
  unless paths["config/routes.rb"].existent.present?
84
85
  add_path paths, "config/routes.rb",
@@ -7,21 +7,21 @@ def load_rake_tasks
7
7
  Decko::Application.load_tasks
8
8
  end
9
9
 
10
- RAILS_COMMANDS = %w( generate destroy plugin benchmarker profiler console
11
- server dbconsole application runner ).freeze
12
- DECKO_COMMANDS = %w(new cucumber rspec jasmine).freeze
13
- DECKO_DB_COMMANDS = %w(seed reseed load update).freeze
10
+ RAILS_COMMANDS = %w[ generate destroy plugin benchmarker profiler console
11
+ server dbconsole application runner ].freeze
12
+ DECKO_COMMANDS = %w[new cucumber rspec jasmine].freeze
13
+ DECKO_DB_COMMANDS = %w[seed reseed load update].freeze
14
14
 
15
15
  ALIAS = {
16
16
  "rs" => "rspec",
17
17
  "cc" => "cucumber",
18
18
  "jm" => "jasmine",
19
- "g" => "generate",
20
- "d" => "destroy",
21
- "c" => "console",
22
- "s" => "server",
19
+ "g" => "generate",
20
+ "d" => "destroy",
21
+ "c" => "console",
22
+ "s" => "server",
23
23
  "db" => "dbconsole",
24
- "r" => "runner"
24
+ "r" => "runner"
25
25
  }.freeze
26
26
 
27
27
  def supported_rails_command? arg
@@ -1,5 +1,5 @@
1
1
  require "rails/generators"
2
- require File.expand_path("../../generators/deck/deck_generator", __FILE__)
2
+ require File.expand_path("../generators/deck/deck_generator", __dir__)
3
3
 
4
4
  if ARGV.first != "new"
5
5
  ARGV[0] = "--help"
@@ -1,4 +1,4 @@
1
- require File.expand_path("../command", __FILE__)
1
+ require File.expand_path("command", __dir__)
2
2
 
3
3
  module Decko
4
4
  module Commands
@@ -45,4 +45,4 @@ module Decko
45
45
  end
46
46
  end
47
47
 
48
- require File.expand_path("../cucumber_command/parser", __FILE__)
48
+ require File.expand_path("cucumber_command/parser", __dir__)
@@ -1,38 +1,42 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require "optparse"
3
4
 
4
5
  module Decko
5
6
  module Commands
6
7
  class CucumberCommand
7
8
  class Parser < OptionParser
9
+ class Flagger
10
+ def initialize parser, opts
11
+ @parser = parser
12
+ @opts = opts
13
+ end
14
+
15
+ def add_flags
16
+ add_flag "DEBUG", "-d", "--debug", "Drop into debugger on failure"
17
+ add_flag "FAST", "-f", "--fast", "Stop on first failure"
18
+ add_flag "LAUNCH", "-l", "--launchy", "Open page on failure"
19
+ add_flag "STEP", "-s", "--step", "Pause after each step"
20
+ end
21
+
22
+ def add_flag flag, *args
23
+ @parser.on(*args) { |a| @opts[:env] << "#{flag}=1" if a }
24
+ end
25
+ end
26
+
27
+ def parse_spring parser, opts
28
+ parser.on("--[no-]spring", "Run with spring") do |spring|
29
+ opts[:executer] = spring ? "spring" : "bundle exec"
30
+ end
31
+ end
32
+
8
33
  def initialize opts
9
34
  super() do |parser|
10
35
  parser.banner = "Usage: decko cucumber [DECKO ARGS] -- [CUCUMBER ARGS]\n\n"
11
- parser.separator <<-EOT.strip_heredoc
12
-
13
- DECKO ARGS
14
- EOT
36
+ parser.separator "\nDECKO ARGS"
15
37
  opts[:env] = ["RAILS_ROOT=."]
16
- parser.on("-d", "--debug", "Drop into debugger on failure") do |a|
17
- opts[:env] << "DEBUG=1" if a
18
- end
19
- parser.on("-f", "--fast", "Stop on first failure") do |a|
20
- opts[:env] << "FAST=1" if a
21
- end
22
- parser.on("-l", "--launchy", "Open page on failure") do |a|
23
- opts[:env] << "LAUNCHY=1" if a
24
- end
25
- parser.on("-s", "--step", "Pause after each step") do |a|
26
- opts[:env] << "STEP=1" if a
27
- end
28
- parser.on("--[no-]spring", "Run with spring") do |spring|
29
- opts[:executer] =
30
- if spring
31
- "spring"
32
- else
33
- "bundle exec"
34
- end
35
- end
38
+ Flagger.new(parser, opts).add_flags
39
+ parse_spring parser, opts
36
40
  end
37
41
  end
38
42
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path("../command", __FILE__)
1
+ require File.expand_path("command", __dir__)
2
2
  # require "pry"
3
3
 
4
4
  module Decko
@@ -30,6 +30,7 @@ module Decko
30
30
  def commands
31
31
  task_cmd = "bundle exec rake #{@task}"
32
32
  return [task_cmd] if !@envs || @envs.empty?
33
+
33
34
  @envs.map do |env|
34
35
  "env RAILS_ENV=#{env} #{task_cmd}"
35
36
  end
@@ -38,4 +39,4 @@ module Decko
38
39
  end
39
40
  end
40
41
 
41
- require File.expand_path("../rake_command/parser", __FILE__)
42
+ require File.expand_path("rake_command/parser", __dir__)
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require "optparse"
3
4
 
4
5
  module Decko
@@ -24,7 +25,7 @@ module Decko
24
25
  end
25
26
  parser.on("--all", "-a",
26
27
  "#{command} production, test, and development database") do
27
- opts[:envs] = %w(production development test)
28
+ opts[:envs] = %w[production development test]
28
29
  end
29
30
  end
30
31
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path("../command", __FILE__)
1
+ require File.expand_path("command", __dir__)
2
2
 
3
3
  module Decko
4
4
  module Commands
@@ -33,4 +33,4 @@ module Decko
33
33
  end
34
34
  end
35
35
 
36
- require File.expand_path("../rspec_command/parser", __FILE__)
36
+ require File.expand_path("rspec_command/parser", __dir__)
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require "optparse"
3
4
 
4
5
  module Decko
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  Decko.application.class.configure do
3
4
  # Edit at your own peril - it's recommended to regenerate this file
4
5
  # in the future when you upgrade to a newer version of Cucumber.
@@ -89,7 +89,7 @@ Decko.application.class.configure do
89
89
  rescue LoadError
90
90
  end
91
91
 
92
- #config.session_store :cookie_store
92
+ # config.session_store :cookie_store
93
93
  end
94
94
 
95
95
  # Paperclip.options[:command_path] = "/opt/local/bin"
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  Decko.application.class.configure do
3
4
  # Settings specified here will take precedence over those in config/application.rb
4
5
 
@@ -50,7 +51,8 @@ Decko.application.class.configure do
50
51
  # config.action_controller.asset_host = "http://assets.example.com"
51
52
 
52
53
  # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
53
- config.assets.precompile += %w(application-all.css application-print.css barebones.css html5shiv-printshiv.js)
54
+ config.assets.precompile += %w[application-all.css application-print.css barebones.css
55
+ html5shiv-printshiv.js]
54
56
 
55
57
  # Disable delivery errors, bad email addresses will be ignored
56
58
  # config.action_mailer.raise_delivery_errors = false
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  Decko.application.class.configure do
3
4
  # Settings specified here will take precedence over those in config/environment.rb
4
5
  # The profile environment should match the same settings
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  Decko.application.class.configure do
3
4
  # Settings specified here will take precedence over those in config/application.rb
4
5
 
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  # Be sure to restart your server when you modify this file.
3
4
 
4
5
  # Your secret key for verifying the integrity of signed cookies.
@@ -1,7 +1,8 @@
1
1
  # Hack to get rid of annoying parser warnings
2
2
  module Parser
3
3
  def self.warn msg
4
- return if msg =~ %r{^warning: (?:parser/current|[\d\.]+-compliant syntax|please see)}
5
- super
4
+ super unless msg.match?(
5
+ %r{^warning: (?:parser/current|[\d.]+-compliant syntax|please see)}
6
+ )
6
7
  end
7
8
  end
data/lib/decko/engine.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require "rails/all"
3
2
  require "cardio"
4
3
 
@@ -15,7 +14,6 @@ require "decko"
15
14
 
16
15
  module Decko
17
16
  class Engine < ::Rails::Engine
18
- paths.add "app/controllers", with: "rails/controllers", eager_load: true
19
17
  paths.add "gem-assets", with: "rails/assets"
20
18
  paths.add "config/routes.rb", with: "rails/engine-routes.rb"
21
19
  paths.add "lib/tasks", with: "#{::Decko.gem_root}/lib/decko/tasks",
@@ -11,7 +11,7 @@ module Decko
11
11
  include RailsOverrides
12
12
  include DeckHelper
13
13
 
14
- source_root File.expand_path("../templates", __FILE__)
14
+ source_root File.expand_path("templates", __dir__)
15
15
 
16
16
  # All but the first aliases should be considered deprecated
17
17
  class_option "monkey",
@@ -123,6 +123,7 @@ module Decko
123
123
 
124
124
  def database_gemfile_entry
125
125
  return [] if options[:skip_active_record]
126
+
126
127
  gem_name, gem_version = gem_for_database
127
128
  msg = "Use #{options[:database]} as the database for Active Record"
128
129
  GemfileEntry.version gem_name, gem_version, msg
@@ -52,8 +52,8 @@ module Decko
52
52
  end
53
53
 
54
54
  def build_option key, desc, command
55
- command &&= " " * (65 - desc.size) + "[" + command + "]"
56
- " #{key} - #{desc}#{command if command}"
55
+ command &&= "#{' ' * (65 - desc.size)}[#{command}]"
56
+ " #{key} - #{desc}#{command}"
57
57
  end
58
58
 
59
59
  def add_config_options
@@ -108,9 +108,9 @@ module Decko
108
108
  def add_after_seed_options
109
109
  @menu["x"][:desc] = "exit"
110
110
  @menu["r"] = {
111
- desc: "run decko server",
111
+ desc: "run decko server",
112
112
  command: "decko server",
113
- code: proc { bundle_exec "decko server" }
113
+ code: proc { bundle_exec "decko server" }
114
114
  }
115
115
  end
116
116
  end
@@ -10,6 +10,7 @@ module Decko
10
10
  def exec!
11
11
  cwd = Dir.pwd
12
12
  return unless continue?
13
+
13
14
  exec_decko_script
14
15
  recurse cwd
15
16
  rescue SystemCallError
@@ -16,16 +16,15 @@ def link_task task, from: nil, to: nil, namespace: nil
16
16
  case task
17
17
  when Hash
18
18
  task.each do |key, val|
19
- link_task val, from: from, to: to ,
20
- namespace: append_to_namespace(namespace, key)
21
-
19
+ link_task val, from: from, to: to,
20
+ namespace: append_to_namespace(namespace, key)
22
21
  end
23
22
  when Array
24
23
  task.each do |t|
25
- link_task t, from: from, to: to, namespace: namespace
24
+ link_task t, from: from, to: to, namespace: namespace
26
25
  end
27
26
  else
28
27
  shared_part = append_to_namespace namespace, task
29
28
  alias_task "#{from}:#{shared_part}", "#{to}:#{shared_part}"
30
29
  end
31
- end
30
+ end
@@ -5,61 +5,69 @@
5
5
  # files.
6
6
 
7
7
  unless ARGV.any? { |a| a =~ /^gems/ } # Don't load anything when running the gems:* tasks
8
+ vendored_cucumber_bin =
9
+ Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
10
+ unless vendored_cucumber_bin.nil?
11
+ $LOAD_PATH.unshift("#{File.dirname(vendored_cucumber_bin)}/../lib")
12
+ end
8
13
 
9
- vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
10
- $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + "/../lib") unless vendored_cucumber_bin.nil?
11
-
12
- begin
13
- require "cucumber/rake/task"
14
+ begin
15
+ require "cucumber/rake/task"
14
16
 
15
- namespace :cucumber do
16
- Cucumber::Rake::Task.new({ ok: "db:test:prepare" }, "Run features that should pass") do |t|
17
- t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
18
- t.fork = true # You may get faster startup if you set this to false
19
- t.profile = "default"
20
- end
17
+ namespace :cucumber do
18
+ Cucumber::Rake::Task.new({ ok: "db:test:prepare" },
19
+ "Run features that should pass") do |t|
20
+ t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
21
+ t.fork = true # You may get faster startup if you set this to false
22
+ t.profile = "default"
23
+ end
21
24
 
22
- Cucumber::Rake::Task.new({ wip: "db:test:prepare" }, "Run features that are being worked on") do |t|
23
- t.binary = vendored_cucumber_bin
24
- t.fork = true # You may get faster startup if you set this to false
25
- t.profile = "wip"
26
- end
25
+ Cucumber::Rake::Task.new({ wip: "db:test:prepare" },
26
+ "Run features that are being worked on") do |t|
27
+ t.binary = vendored_cucumber_bin
28
+ t.fork = true # You may get faster startup if you set this to false
29
+ t.profile = "wip"
30
+ end
27
31
 
28
- Cucumber::Rake::Task.new({ rerun: "db:test:prepare" }, "Record failing features and run only them if any exist") do |t|
29
- t.binary = vendored_cucumber_bin
30
- t.fork = true # You may get faster startup if you set this to false
31
- t.profile = "rerun"
32
- end
32
+ Cucumber::Rake::Task.new(
33
+ { rerun: "db:test:prepare" },
34
+ "Record failing features and run only them if any exist"
35
+ ) do |t|
36
+ t.binary = vendored_cucumber_bin
37
+ t.fork = true # You may get faster startup if you set this to false
38
+ t.profile = "rerun"
39
+ end
33
40
 
34
- desc "Run all features"
35
- task all: [:ok, :wip]
41
+ desc "Run all features"
42
+ task all: %i[ok wip]
36
43
 
37
- task :statsetup do
38
- require "rails/code_statistics"
39
- ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?("features")
40
- ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?("features")
41
- ::STATS_DIRECTORIES << %w(Mods mods) if File.exist?("mods") # hack! should be elsewhere
44
+ task :statsetup do
45
+ require "rails/code_statistics"
46
+ ::STATS_DIRECTORIES << %w[Cucumber\ features features] if File.exist?("features")
47
+ ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?("features")
48
+ ::STATS_DIRECTORIES << %w[Mods mods] if File.exist?("mods")
49
+ end
42
50
  end
43
- end
44
- desc "Alias for cucumber:ok"
45
- task cucumber: "cucumber:ok"
51
+ desc "Alias for cucumber:ok"
52
+ task cucumber: "cucumber:ok"
46
53
 
47
- task default: :cucumber
54
+ task default: :cucumber
48
55
 
49
- task features: :cucumber do
50
- STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
51
- end
56
+ task features: :cucumber do
57
+ warn "*** The 'features' task is deprecated. See rake -T cucumber ***"
58
+ end
52
59
 
53
- # In case we don't have ActiveRecord, append a no-op task that we can depend upon.
54
- task "db:test:prepare" do
55
- end
60
+ # In case we don't have ActiveRecord, append a no-op task that we can depend upon.
61
+ task "db:test:prepare" do
62
+ end
56
63
 
57
- task stats: "cucumber:statsetup"
58
- rescue LoadError
59
- desc "cucumber rake task not available (cucumber not installed)"
60
- task :cucumber do
61
- abort "Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin"
64
+ task stats: "cucumber:statsetup"
65
+ rescue LoadError
66
+ desc "cucumber rake task not available (cucumber not installed)"
67
+ task :cucumber do
68
+ abort "Cucumber rake task is not available. " \
69
+ "Be sure to install cucumber as a gem or plugin"
70
+ end
62
71
  end
63
- end
64
72
 
65
73
  end
@@ -19,6 +19,7 @@ unless Rake::TaskManager.methods.include?(:redefine_task)
19
19
  task
20
20
  end
21
21
  end
22
+
22
23
  class Task
23
24
  class << self
24
25
  def redefine_task args, &block
@@ -36,8 +37,14 @@ namespace :db do
36
37
  require "active_record/fixtures"
37
38
  fixture_path = File.join(Cardio.gem_root, "db", "seed", "test", "fixtures")
38
39
  ActiveRecord::Base.establish_connection(::Rails.env.to_sym)
39
- (ENV["FIXTURES"] ? ENV["FIXTURES"].split(/,/) : Dir.glob(File.join(fixture_path, "*.{yml,csv}"))).each do |fixture_file|
40
- ActiveRecord::FixtureSet.create_fixtures(fixture_path, File.basename(fixture_file, ".*"))
40
+ (if ENV["FIXTURES"]
41
+ ENV["FIXTURES"].split(/,/)
42
+ else
43
+ Dir.glob(File.join(fixture_path,
44
+ "*.{yml,csv}"))
45
+ end).each do |fixture_file|
46
+ ActiveRecord::FixtureSet.create_fixtures(fixture_path,
47
+ File.basename(fixture_file, ".*"))
41
48
  end
42
49
  end
43
50
  end
@@ -5,9 +5,9 @@ require "card/seed_consts"
5
5
  CARD_TASKS =
6
6
  [
7
7
  :migrate,
8
- { migrate: [:cards, :structure, :core_cards, :deck_cards, :redo, :stamp] },
8
+ { migrate: %i[cards structure core_cards deck_cards redo stamp] },
9
9
  :reset_cache
10
- ]
10
+ ].freeze
11
11
 
12
12
  link_task CARD_TASKS, from: :decko, to: :card
13
13
 
@@ -80,6 +80,7 @@ decko_namespace = namespace :decko do
80
80
  if Decko.paths["tmp"].existent
81
81
  Dir.foreach(tmp_dir) do |filename|
82
82
  next if filename.starts_with? "."
83
+
83
84
  FileUtils.rm_rf File.join(tmp_dir, filename), secure: true
84
85
  end
85
86
  else
@@ -111,6 +112,7 @@ decko_namespace = namespace :decko do
111
112
 
112
113
  def prepped_asset_path
113
114
  return if Rails.root.to_s == Decko.gem_root # inside decko gem
115
+
114
116
  assets_path = File.join Rails.public_path, "assets"
115
117
  if File.symlink?(assets_path) || !File.directory?(assets_path)
116
118
  FileUtils.rm_rf assets_path
@@ -133,7 +135,7 @@ decko_namespace = namespace :decko do
133
135
  # creates!
134
136
  begin
135
137
  Rake::Task["db:drop"].invoke
136
- rescue
138
+ rescue StandardError
137
139
  puts "not dropped"
138
140
  end
139
141
 
@@ -152,7 +154,7 @@ end
152
154
 
153
155
  def failing_loudly task
154
156
  yield
155
- rescue
157
+ rescue StandardError
156
158
  # TODO: fix this so that message appears *after* the errors.
157
159
  # Solution should ensure that rake still exits with error code 1!
158
160
  raise "\n>>>>>> FAILURE! #{task} did not complete successfully." \
@@ -33,6 +33,7 @@ namespace :decko do
33
33
 
34
34
  def delete_ignored_cards
35
35
  return unless (ignore = Card["*ignore"])
36
+
36
37
  Card::Auth.as_bot do
37
38
  ignore.item_cards.each(&:delete!)
38
39
  end
@@ -62,6 +63,7 @@ namespace :decko do
62
63
  Card.search(right: { codename: codename }).each do |card|
63
64
  FileUtils.rm_rf File.join("files", card.id.to_s), secure: true
64
65
  next if reserved_output? card.name
66
+
65
67
  card.delete!
66
68
  end
67
69
  end
@@ -116,6 +118,7 @@ namespace :decko do
116
118
 
117
119
  def add_test_data
118
120
  return unless Rails.env == "test"
121
+
119
122
  load CARD_TEST_SEED_SCRIPT_PATH
120
123
  SharedData.add_test_data
121
124
  end
@@ -37,7 +37,7 @@ Decko::Engine.routes.draw do
37
37
 
38
38
  # explicit GET alternatives for transactions
39
39
  %w[create read update delete asset].each do |action|
40
- get "(card)/#{action}(/:mark(.:format))" => "card", action: action
40
+ get "(card)/#{action}(/:mark(.:format))" => "card", action: action
41
41
  end
42
42
 
43
43
  # for super-explicit over-achievers
data/script/decko CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
3
 
4
- APP_PATH = File.expand_path("../../config/application", __FILE__)
5
- require File.expand_path("../../config/boot", __FILE__)
4
+ APP_PATH = File.expand_path("../config/application", __dir__)
5
+ require File.expand_path("../config/boot", __dir__)
6
6
  require "decko/commands"
data/script/rails CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+ # This command will automatically be run when you run "rails"
3
3
 
4
- APP_PATH = File.expand_path("../../config/application", __FILE__)
5
- require File.expand_path("../../config/boot", __FILE__)
6
- require "rails/commands"
4
+ # APP_PATH = File.expand_path("../config/application", __dir__)
5
+ # require File.expand_path("../config/boot", __dir__)
6
+ # require "rails/commands"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decko
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.4
4
+ version: 0.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-05-05 00:00:00.000000000 Z
13
+ date: 2021-05-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: card
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.101.4
21
+ version: 1.101.5
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 1.101.4
28
+ version: 1.101.5
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: card-mod-defaults
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.11.4
35
+ version: 0.11.5
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.11.4
42
+ version: 0.11.5
43
43
  description: a wiki approach to structured data, dynamic interaction, and web design
44
44
  email:
45
45
  - info@decko.org
@@ -66,6 +66,11 @@ files:
66
66
  - app/assets/images/smoothness/ui-icons_888888_256x240.png
67
67
  - app/assets/images/smoothness/ui-icons_cd0a0a_256x240.png
68
68
  - bin/decko
69
+ - lib/card_controller.rb
70
+ - lib/card_controller/errors.rb
71
+ - lib/card_controller/mark.rb
72
+ - lib/card_controller/response.rb
73
+ - lib/card_controller/rest.rb
69
74
  - lib/decko.rb
70
75
  - lib/decko/all.rb
71
76
  - lib/decko/application.rb
@@ -131,7 +136,6 @@ files:
131
136
  - lib/decko/generators/deck/templates/spec/javascripts/support/decko_jasmine.yml.erb
132
137
  - lib/decko/generators/deck/templates/spec/spec_helper.rb
133
138
  - lib/decko/mods_spec_helper.rb
134
- - lib/decko/response.rb
135
139
  - lib/decko/rest_spec_helper.rb
136
140
  - lib/decko/script_decko_loader.rb
137
141
  - lib/decko/swagger.rb
@@ -150,14 +154,10 @@ files:
150
154
  - rails/assets/jasmine/500.html
151
155
  - rails/assets/jasmine/card_form.html
152
156
  - rails/assets/jquery.min.map
153
- - rails/controllers/application_controller.rb
154
- - rails/controllers/card_controller.rb
155
- - rails/controllers/card_controller/errors.rb
156
157
  - rails/engine-routes.rb
157
158
  - script/autospec
158
159
  - script/decko
159
160
  - script/rails
160
- - script/test_filter
161
161
  homepage: https://decko.org
162
162
  licenses:
163
163
  - GPL-3.0
@@ -1,2 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
- end
@@ -1,122 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
-
3
- # Decko's only controller.
4
- class CardController < ApplicationController
5
- include ::Card::Env::Location
6
- include ::Recaptcha::Verify
7
- include ::Decko::Response
8
- include Errors
9
-
10
- layout nil
11
- attr_reader :card
12
-
13
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14
- # PUBLIC METHODS
15
-
16
- def create
17
- handle { card.save! }
18
- end
19
-
20
- def read
21
- show
22
- end
23
-
24
- def update
25
- card.new_card? ? create : handle { card.update! params[:card]&.to_unsafe_h }
26
- end
27
-
28
- def delete
29
- handle { card.delete! }
30
- end
31
-
32
- def asset
33
- body = "Decko installation error: missing asset symlinks"
34
- Rails.logger.info "#{body}.\n >>> Try `rake decko:update_assets_symlink`"
35
- render body: body, status: 404
36
- end
37
-
38
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39
- # PRIVATE METHODS
40
-
41
- private
42
-
43
- #-------( FILTERS )
44
-
45
- before_action :setup, except: [:asset]
46
- before_action :authenticate, except: [:asset]
47
- before_action :load_mark, only: [:read]
48
- before_action :load_card, except: [:asset]
49
- before_action :load_action, only: [:read]
50
- before_action :refresh_card, only: [:create, :update, :delete]
51
-
52
- def setup
53
- Card::Machine.refresh_script_and_style unless params[:explicit_file]
54
- Card::Cache.renew
55
- Card::Env.reset controller: self
56
- end
57
-
58
- def authenticate
59
- Card::Auth.signin_with params
60
- end
61
-
62
- def load_mark
63
- params[:mark] = interpret_mark params[:mark]
64
- end
65
-
66
- def load_card
67
- @card = Card.controller_fetch params
68
- raise Card::Error::NotFound unless card
69
- record_as_main
70
- end
71
-
72
- def load_action
73
- card.select_action_by_params params
74
- card.content = card.last_draft_content if params[:edit_draft] && card.drafts.present?
75
- end
76
-
77
- # TODO: refactor this away this when new layout handling is ready
78
- def record_as_main
79
- Card::Env[:main_name] = params[:main] || card&.name || ""
80
- end
81
-
82
- def refresh_card
83
- @card = card.refresh
84
- end
85
-
86
- # ----------( HELPER METHODS ) -------------
87
-
88
- def handle
89
- Card::Env.success card.name
90
- yield ? cud_success : raise(Card::Error::UserError)
91
- end
92
-
93
- # successful create, update, or delete act
94
- def cud_success
95
- success = Card::Env.success.in_context card.name
96
- if success.reload?
97
- reload # instruct JSON to reload
98
- else
99
- redirect_cud_success success
100
- end
101
- end
102
-
103
- def show view=nil, status=200
104
- card.action = :read
105
- format = load_format status
106
- result = render_page format, view
107
- status = format.error_status || status
108
- respond format, result, status
109
- end
110
-
111
- def render_page format, view
112
- view ||= view_from_params
113
- card.act do
114
- format.page self, view, Card::Env.slot_opts
115
- end
116
- end
117
-
118
- def view_from_params
119
- %i[view v].each { |k| return params[k] if params[k].present? }
120
- nil
121
- end
122
- end
data/script/test_filter DELETED
@@ -1,25 +0,0 @@
1
- #!/usr/local/bin/ruby
2
-
3
- STDOUT.sync = true
4
- errors_filename = "./log/err.out"
5
- err_out = File.new(errors_filename, "a")
6
-
7
- ARGF.each_line do |l|
8
- error_section = false
9
- if error_section
10
- error_section = false if l =~ /^\s*$/
11
- elsif l =~ /^\s*\d+\)\s*$/
12
- error_section = true
13
- elsif l =~ /^\*{40,}$/ ||
14
- l =~ /^be removed from a future version of RSpec\.$/ ||
15
- l =~ /^\* simple_matcher is deprecated\.$/ ||
16
- l =~ /^\* please use Matcher DSL \(http\:\/\/rspec\.rubyforge\.org\/rspec\/1\.3.0\/classes\/Spec\/Matchers\.html\) instead\.$/
17
- err_out << l if err_out
18
- next
19
- elsif l =~ /^([\.\[\]F\*\s]*)((\/| \(called from create_or_update_thumbnail|DEPRECATION WARN|The \{\{key\}\} interpolation syntax in|from \/).*\n?$)/
20
- STDOUT << Regexp.last_match(1)
21
- err_out << Regexp.last_match(2) if err_out
22
- next
23
- end
24
- STDOUT << l
25
- end