wagn 1.15.1 → 1.15.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3725ae3455417578f3878bab3b872c0cee591298
4
- data.tar.gz: 1d4fa7ee2b49833b47865d5ce16ab42de70fc644
3
+ metadata.gz: 7634e6129ba3078eda44196fe405262b0519a279
4
+ data.tar.gz: 85b5cc8ea6c45cd2d392c70f36d255780235f43d
5
5
  SHA512:
6
- metadata.gz: 94c44d3664ce629b6fceea1a35783cd131d77fb8669640d1c755e6045aef41b29b1a5ae77d8b2dc175e3a23d9c7ad16cadbf548238b74ceef2266f4e6f53f2ec
7
- data.tar.gz: 840dd6e60e94e29c7347f416ed080ab3ee72a220e007b0ce68d2967f84cb4f594d55a1abe531ab1c9cf330aed19dfe89be9cdb9da8c02ec9b50db8422733d5f2
6
+ metadata.gz: 49bf10bcef74a75db93ea3a973fbcd888fa1f20fa091841d22b80c1ec323183d402bd5fae40011ed492d4b037b550b8d658e6257bda36e8c28a53ab422391803
7
+ data.tar.gz: a7e7d4d785443c7dfb71b0233d05272917c50e8cb5d78d898ff8ad189d88e6c1d25e8a088b3039a18874a833ff22d9847fc65f81024b921fbaa8c0c28d33338a
@@ -10,39 +10,43 @@ Feature: Follow interface
10
10
  Scenario: Anonymous User should not see follow UI
11
11
  Given I follow "Sign out"
12
12
  When I go to the homepage
13
- And I hover over the main menu
13
+ And I open the main card menu
14
14
  Then I should not see "follow"
15
15
 
16
16
  Scenario: Following a Card
17
17
  Given Joe User is not watching "Home+*self"
18
18
  When I go to the homepage
19
- And I hover over the main menu
19
+ And I open the main card menu
20
20
  And In the main card menu I should not see "unfollow"
21
21
  And In the main card menu I click "follow"
22
- And I hover over the main menu
22
+ And I follow "Close"
23
+ And I wait a sec
24
+ And I open the main card menu
23
25
  Then In the main card menu I should see "unfollow"
24
26
  And the card Home+*self+Joe User+*follow should point to "always"
25
-
27
+
26
28
  Scenario: Unfollowing a Card
27
29
  Given Joe User is watching "Home+*self"
28
30
  And the card Home+*self+Joe User+*follow should point to "always"
29
31
  And I am on the homepage
30
- And I hover over the main menu
32
+ And I open the main card menu
31
33
  And In the main card menu I click "unfollow"
32
- And I hover over the main menu
34
+ And I follow "Close"
35
+ And I wait a sec
36
+ And I open the main card menu
33
37
  Then In the main card menu I should see "follow"
34
38
  And the card Home+*self+Joe User+*follow should point to "never"
35
39
 
36
-
40
+
37
41
  Scenario: Following a Cardtype
38
42
  When I go to card User
39
- And I hover over the main menu
40
- And In the main card menu I should see "follow"
43
+ And I open the main card menu
44
+ Then In the main card menu I should see "follow"
41
45
 
42
46
  Scenario: A Card whose Cardtype is Followed
43
47
  Given Joe User is watching "User+*type"
44
48
  And I go to card Joe User
45
- And I hover over the main menu
49
+ And I open the main card menu
46
50
  Then In the main card menu I should see "(following)|unfollow"
47
51
 
48
52
  #too long for menu
@@ -18,7 +18,7 @@ Given /^site stops simulating setup need$/ do
18
18
  Card::Auth.simulate_setup_need! false
19
19
  step 'I am signed out'
20
20
  end
21
-
21
+
22
22
  Given /^I am signed in as (.+)$/ do |account_name|
23
23
  accounted = Card[account_name]
24
24
  visit "/update/:signin?card[subcards][%2B*email][content]=#{accounted.account.email}&card[subcards][%2B*password][content]=joe_pass"
@@ -145,7 +145,7 @@ When /I wait a sec/ do
145
145
  sleep 1
146
146
  end
147
147
 
148
- When /I wait (.+) seconds$/ do |period|
148
+ When /I wait (\d+) seconds$/ do |period|
149
149
  sleep period.to_i
150
150
  end
151
151
 
@@ -213,8 +213,9 @@ Then /I submit$/ do
213
213
  click_button("Submit")
214
214
  end
215
215
 
216
- When /^I hover over the main menu$/ do
217
- page.execute_script "$('#main > .card-slot > .card-header > .card-menu-link').trigger('mouseenter')"
216
+ When /^I open the main card menu$/ do
217
+ page.execute_script "$('#main .menu-slot .vertical-card-menu.show-on-hover .card-slot').show()"
218
+ page.find('#main .menu-slot .card-menu a').click
218
219
  end
219
220
 
220
221
  When /^I pick (.*)$/ do |menu_item|
@@ -4,16 +4,16 @@ module ScopeHelpers
4
4
  case section
5
5
 
6
6
  when /main card content/
7
- '#main > .card-slot > .card-content'
8
-
7
+ '#main > .card-slot > .card-frame > .card-content'
8
+
9
9
  when /pointer card content/
10
- '#main > .card-slot > .card-content > .pointer-list'
10
+ '#main > .card-slot > .card-frame > .card-content > .pointer-list'
11
11
 
12
12
  when /main card header/
13
- '#main > .card-slot > .card-header'
14
-
13
+ '#main > .card-slot > .card-frame > .card-header'
14
+
15
15
  when /main card menu/
16
- '#main > .card-slot > ul.card-menu'
16
+ '#main > .card-slot > .menu-slot > .card-menu'
17
17
 
18
18
  else
19
19
  raise "Can't find mapping from \"#{section}\" to a scope.\n" +
data/lib/decko/engine.rb CHANGED
@@ -5,13 +5,12 @@ require 'cardio'
5
5
  # TODO: Move these to modules that use them
6
6
  require 'htmlentities'
7
7
  require 'recaptcha'
8
- require 'airbrake'
9
8
  require 'coderay'
10
9
  require 'haml'
11
10
  require 'kaminari'
12
11
  require 'bootstrap-kaminari-views'
13
12
  require 'diff/lcs'
14
- require 'diffy'
13
+ require 'builder'
15
14
 
16
15
  require 'wagn'
17
16
 
@@ -9,14 +9,6 @@ gem 'wagn'
9
9
 
10
10
  <%= database_gemfile_entry -%>
11
11
 
12
- # A javascript runtime is required for JavaScript cards.
13
- <% if RUBY_PLATFORM =~ /darwin/ -%>
14
- # Macs have one included, but on other platforms you'll need this or another runtime
15
- # gem 'therubyracer'
16
- <% else -%>
17
- gem 'therubyracer'
18
- <% end -%>
19
-
20
12
  <% if options['mod-dev'] -%>
21
13
  group :test do
22
14
  gem 'rspec-rails', '~> 3.1.0' # behavior-driven-development suite
@@ -37,8 +29,8 @@ group :test, :development do
37
29
  # gem 'pry-rescue'
38
30
  # gem 'pry-stack_explorer'
39
31
  if RUBY_VERSION =~ /^2/
40
- gem 'byebug'
41
- # gem 'pry-byebug'
32
+ gem 'byebug'
33
+ # gem 'pry-byebug'
42
34
  else
43
35
  gem 'debugger'
44
36
  end
@@ -46,7 +38,7 @@ end
46
38
 
47
39
  <% end -%>
48
40
 
49
- <% if options['core-dev'] -%>
41
+ <% if options['core-dev'] -%>
50
42
  group :assets do
51
43
  gem 'jquery-rails', '~> 3.1' # main js framework, along with rails-specific unobtrusive lib
52
44
  gem 'jquery-ui-rails', '~> 4.2' # main js framework, along with rails-specific unobtrusive lib
@@ -61,13 +53,13 @@ group :development do
61
53
  end
62
54
 
63
55
  group :test do
64
- gem 'rspec'
56
+ gem 'rspec'
65
57
  gem 'rspec-rails', '~> 3.1.0' # behavior-driven-development suite
66
- gem 'spork', '>=0.9'
58
+ gem 'spork', '>=0.9'
67
59
  gem 'rr'#, '=1.0.0'
68
60
  gem 'simplecov', '~> 0.7.1', :require => false #test coverage
69
-
70
- # gem 'guard-rspec', '~> 4.2' # trigger test runs based on file edits,
61
+
62
+ # gem 'guard-rspec', '~> 4.2' # trigger test runs based on file edits,
71
63
  # currently not compatible with spring-watcher-listen
72
64
  if RUBY_PLATFORM =~ /darwin/
73
65
  # gem 'terminal-notifier-guard', '~> 1.5' # use growler notifications on macs
@@ -77,16 +69,16 @@ group :test do
77
69
 
78
70
  # CUKES see features dir
79
71
  gem 'cucumber-rails', '~> 1.3', :require=>false # feature-driven-development suite
80
- gem 'capybara', '~> 2.4.4'
72
+ gem 'capybara', '~> 2.4.4'
81
73
  gem 'selenium-webdriver', '~> 2.39'
82
74
  # gem 'capybara-webkit'
83
75
  gem 'launchy' # lets cucumber launch browser windows
84
76
 
85
- gem 'timecop', '=0.3.5' # not clear on use/need. referred to in shared_data.rb
77
+ gem 'timecop', '=0.3.5' # not clear on use/need. referred to in shared_data.rb
86
78
  # NOTE: had weird errors with timecop 0.4.4. would like to update when possible
87
79
 
88
80
 
89
- gem 'email_spec' #
81
+ gem 'email_spec' #
90
82
  gem 'database_cleaner', '~> 0.7' # used by cucumber for db transactions
91
83
 
92
84
  gem 'turn', "~>0.8.3", :require => false # Pretty printed test output. (version constraint is to avoid minitest requirement)
@@ -99,7 +91,7 @@ group :development, :test do
99
91
  gem 'spring'
100
92
  gem 'spring-commands-rspec'
101
93
  gem 'spring-commands-cucumber'
102
- gem 'spring-watcher-listen'
94
+ gem 'spring-watcher-listen'
103
95
  gem 'pry-rails'
104
96
  gem 'pry-rescue'
105
97
  gem 'pry-stack_explorer'
@@ -31,14 +31,15 @@ unless Rake::TaskManager.methods.include?(:redefine_task)
31
31
  end
32
32
 
33
33
 
34
- namespace :db do
34
+ namespace :db do
35
35
  namespace :fixtures do
36
36
  desc "Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y"
37
37
  task :load => :environment do
38
38
  require 'active_record/fixtures'
39
+ fixture_path = File.join(Cardio.gem_root, 'db','seed', 'test', 'fixtures')
39
40
  ActiveRecord::Base.establish_connection(::Rails.env.to_sym)
40
- (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(Cardio.gem_root, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
41
- ActiveRecord::Fixtures.create_fixtures(File.join(Cardio.gem_root, 'test', 'fixtures'), File.basename(fixture_file, '.*'))
41
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(fixture_path, '*.{yml,csv}'))).each do |fixture_file|
42
+ ActiveRecord::Fixtures.create_fixtures(fixture_path, File.basename(fixture_file, '.*'))
42
43
  end
43
44
  end
44
45
  end
@@ -17,12 +17,12 @@ namespace :test do
17
17
  puts 'put 2'
18
18
  Rake::Task['test:functionals'].invoke
19
19
  puts 'put 3'
20
-
20
+
21
21
  # Rake::Task['test'].invoke
22
22
  # Rake::Task['spec'].invoke
23
23
  # Rake::Task['cucumber'].invoke
24
24
  end
25
-
25
+
26
26
  ## FIXME: this generates an "Adminstrator links" card with the wrong reader_id, I have been
27
27
  ## setting it by hand after fixture generation.
28
28
  desc "recreate test fixtures from fresh db"
@@ -57,9 +57,9 @@ namespace :test do
57
57
  # go ahead and load the fixtures into the test database
58
58
  puts ">> preparing test database"
59
59
  puts `env RELOAD_TEST_DATA=true rake db:test:prepare --trace`
60
-
60
+
61
61
  Rake::Task['wagn:assume_card_migrations'].invoke
62
-
62
+
63
63
  end
64
64
 
65
65
 
@@ -74,7 +74,7 @@ namespace :test do
74
74
  ActiveRecord::Base.establish_connection
75
75
  tables.each do |table_name|
76
76
  i = "000"
77
- File.open("#{Cardio.gem_root}/test/fixtures/#{table_name}.yml", 'w') do |file|
77
+ File.open("#{Cardio.gem_root}/db/seed/test/fixtures/#{table_name}.yml", 'w') do |file|
78
78
  data = ActiveRecord::Base.connection.select_all(sql % table_name)
79
79
  file.write data.inject({}) { |hash, record|
80
80
  record['trash'] = false if record.has_key? 'trash'
@@ -89,7 +89,7 @@ namespace :test do
89
89
  desc "create sample data for testing"
90
90
  task :populate_template_database => :environment do
91
91
  puts "populate test data\n"
92
- load "#{Cardio.gem_root}/test/seed.rb"
92
+ load "#{Cardio.gem_root}/db/seed/test/seed.rb"
93
93
  SharedData.add_test_data
94
94
  end
95
95
 
@@ -1,13 +1,14 @@
1
1
 
2
2
  require 'wagn/application'
3
3
 
4
- WAGN_BOOTSTRAP_TABLES = %w{ cards card_actions card_acts card_changes card_references }
4
+ WAGN_SEED_TABLES = %w{ cards card_actions card_acts card_changes card_references }
5
+ WAGN_SEED_PATH = File.join( Cardio.gem_root, 'db/seed/new')
5
6
 
6
7
  def prepare_migration
7
8
  Card::Cache.reset_global
8
9
  Card.config.action_mailer.perform_deliveries = false
9
10
  Card.reset_column_information
10
- Card::Reference.reset_column_information # this is needed in production mode to insure core db
11
+ Card::Reference.reset_column_information # this is needed in production mode to insure core db
11
12
  # structures are loaded before schema_mode is set
12
13
  end
13
14
 
@@ -47,7 +48,7 @@ namespace :wagn do
47
48
  conn = ActiveRecord::Base.connection
48
49
 
49
50
  puts "delete all data in bootstrap tables"
50
- WAGN_BOOTSTRAP_TABLES.each do |table|
51
+ WAGN_SEED_TABLES.each do |table|
51
52
  conn.delete "delete from #{table}"
52
53
  end
53
54
  end
@@ -159,7 +160,7 @@ namespace :wagn do
159
160
  ENV['SCHEMA'] ||= "#{Cardio.gem_root}/db/schema.rb"
160
161
  prepare_migration
161
162
  paths = ActiveRecord::Migrator.migrations_paths = Cardio.migration_paths(:core_cards)
162
-
163
+
163
164
  Card::CoreMigration.schema_mode :core_cards do
164
165
  ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
165
166
  ActiveRecord::Migrator.migrate paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil
@@ -174,7 +175,7 @@ namespace :wagn do
174
175
  ENV['SCHEMA'] ||= "#{Cardio.gem_root}/db/schema.rb"
175
176
  prepare_migration
176
177
  paths = ActiveRecord::Migrator.migrations_paths = Cardio.migration_paths(:deck_cards)
177
-
178
+
178
179
  Cardio.schema_mode(:deck_cards) do
179
180
  ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
180
181
  ActiveRecord::Migrator.migrate paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil
@@ -290,9 +291,9 @@ namespace :wagn do
290
291
  # use old engine while we're supporting ruby 1.8.7 because it can't support Psych,
291
292
  # which dumps with slashes that syck can't understand
292
293
 
293
- WAGN_BOOTSTRAP_TABLES.each do |table|
294
+ WAGN_SEED_TABLES.each do |table|
294
295
  i = "000"
295
- File.open("#{Cardio.gem_root}/db/bootstrap/#{table}.yml", 'w') do |file|
296
+ File.open(File.join(WAGN_SEED_PATH, "#{table}.yml"), 'w') do |file|
296
297
  data = ActiveRecord::Base.connection.select_all( "select * from #{table}" )
297
298
  file.write YAML::dump( data.inject({}) do |hash, record|
298
299
  record['trash'] = false if record.has_key? 'trash'
@@ -316,24 +317,24 @@ namespace :wagn do
316
317
  # add a fourth line to the raw content of each image (or file) to identify it as a mod file
317
318
  Card::Auth.as_bot do
318
319
  Card.search( :type=>['in', 'Image', 'File'], :ne=>'' ).each do |card|
319
-
320
+
320
321
  if card.attach_mod
321
- puts "skipping #{card.name}: already in code"
322
+ # puts "skipping #{card.name}: already in code"
322
323
  next
323
324
  else
324
- puts "working on #{card.name}"
325
+ # puts "working on #{card.name}"
325
326
  end
326
327
 
327
328
  base_card = card.cardname.junction? ? card.left : card
328
329
  raise "need codename for file" unless base_card.codename.present?
329
-
330
+
330
331
  mod_name = base_card.type_id==Card::SkinID ? '06_bootstrap' : '05_standard'
331
332
  source_dir = "#{source_files_dir}/#{card.id}"
332
333
 
333
334
  target_dir = "#{Cardio.gem_root}/mod/#{mod_name}/file/#{base_card.codename}"
334
- FileUtils.remove_dir target_dir, force=true if Dir.exists? target_dir
335
+ FileUtils.remove_dir target_dir, force=true if Dir.exists? target_dir
335
336
  FileUtils.mkdir_p target_dir
336
-
337
+
337
338
  # if card.name =~ /icon/
338
339
  # require 'pry'; binding.pry
339
340
  # end
@@ -344,8 +345,8 @@ namespace :wagn do
344
345
  target_filename = filename.gsub /\d+/, card.type_code.to_s
345
346
  FileUtils.cp "#{source_dir}/#{filename}", "#{target_dir}/#{target_filename}"
346
347
  end
347
-
348
-
348
+
349
+
349
350
  unless card.db_content.split(/\n/).last == mod_name
350
351
  new_content = card.db_content + "\n#{mod_name}"
351
352
  card.update_column :db_content, new_content
@@ -361,11 +362,11 @@ namespace :wagn do
361
362
  task :load => :environment do
362
363
  #FIXME - shouldn't we be more standard and use seed.rb for this code?
363
364
  Rake.application.options.trace = true
364
- puts "bootstrap load starting #{File.join( Cardio.gem_root, 'db/bootstrap')}"
365
+ puts "bootstrap load starting #{WAGN_SEED_PATH}"
365
366
  require 'active_record/fixtures'
366
367
  # require 'time'
367
368
 
368
- ActiveRecord::Fixtures.create_fixtures File.join( Cardio.gem_root, 'db/bootstrap'), WAGN_BOOTSTRAP_TABLES
369
+ ActiveRecord::Fixtures.create_fixtures WAGN_SEED_PATH, WAGN_SEED_TABLES
369
370
  end
370
371
 
371
372
  end
@@ -14,22 +14,22 @@ class CardController < ActionController::Base
14
14
  before_filter :start_performance_logger if Wagn.config.performance_logger
15
15
  after_filter :stop_performance_logger if Wagn.config.performance_logger
16
16
  after_filter :request_logger if Wagn.config.request_logger
17
-
17
+
18
18
  before_filter :per_request_setup, :except => [:asset]
19
19
  before_filter :load_id, :only => [ :read ]
20
20
  before_filter :load_card, :except => [:asset]
21
21
  before_filter :refresh_card, :only=> [ :create, :update, :delete, :rollback ]
22
-
23
22
 
24
-
23
+
24
+
25
25
  layout nil
26
26
 
27
27
  attr_reader :card
28
-
29
-
30
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28
+
29
+
30
+ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31
31
  # CORE METHODS
32
-
32
+
33
33
  def create
34
34
  handle { card.save }
35
35
  end
@@ -48,14 +48,14 @@ class CardController < ActionController::Base
48
48
  params[:success] ||= 'REDIRECT: *previous'
49
49
  handle { card.delete }
50
50
  end
51
-
51
+
52
52
  def asset
53
53
  Rails.logger.info "Routing assets through Card. Recommend symlink from Deck to Card gem using 'rake wagn:update_assets_symlink'"
54
54
  send_file_inside Decko::Engine.paths['gem-assets'].existent.first, [ params[:filename], params[:format] ].join('.'), :x_sendfile => true
55
55
  end
56
-
56
+
57
57
  private
58
-
58
+
59
59
  # make sure that filename doesn't leave allowed_path using ".."
60
60
  def send_file_inside(allowed_path, filename, options = {})
61
61
  if filename.include? "../"
@@ -64,7 +64,7 @@ class CardController < ActionController::Base
64
64
  send_file File.join(allowed_path, filename), options
65
65
  end
66
66
  end
67
-
67
+
68
68
  #-------( FILTERS )
69
69
 
70
70
  def per_request_setup
@@ -72,7 +72,7 @@ class CardController < ActionController::Base
72
72
  Card::Cache.renew
73
73
  Card::Env.reset :controller=>self
74
74
  Card::Auth.set_current_from_session
75
-
75
+
76
76
  if params[:id] && !params[:id].valid_encoding? # slightly better way to handle encoding issues (than the rescue in load_id)
77
77
  # we should find the place where we produce these bad urls
78
78
  params[:id] = params[:id].force_encoding('ISO-8859-1').encode('UTF-8')
@@ -90,13 +90,13 @@ class CardController < ActionController::Base
90
90
  params[:card][:name]
91
91
  when Card::Format.tagged( params[:view], :unknown_ok )
92
92
  ''
93
- else
93
+ else
94
94
  Card.setting(:home) || 'Home'
95
95
  end
96
96
  rescue ArgumentError # less than perfect way to handle encoding issues.
97
97
  raise Wagn::BadAddress
98
98
  end
99
-
99
+
100
100
 
101
101
  def load_card
102
102
  @card = case params[:id]
@@ -106,7 +106,7 @@ class CardController < ActionController::Base
106
106
  opts = params[:card] ? params[:card].clone : {} # clone so that original params remain unaltered. need deeper clone?
107
107
  opts[:type] ||= params[:type] if params[:type] # for /new/:type shortcut. we should fix and deprecate this.
108
108
  opts[:name] ||= params[:id].to_s.gsub( '_', ' ') # move handling to Card::Name?
109
-
109
+
110
110
  if params[:action] == 'create'
111
111
  # FIXME we currently need a "new" card to catch duplicates (otherwise #save will just act like a normal update)
112
112
  # I think we may need to create a "#create" instance method that handles this checking.
@@ -118,10 +118,10 @@ class CardController < ActionController::Base
118
118
  end
119
119
  end
120
120
  raise Card::NotFound unless @card
121
-
121
+
122
122
  card.select_action_by_params params
123
123
  Card::Env[:main_name] = params[:main] || (card && card.name) || ''
124
-
124
+
125
125
  render_errors if card.errors.any?
126
126
  true
127
127
  end
@@ -131,17 +131,17 @@ class CardController < ActionController::Base
131
131
  end
132
132
 
133
133
  def request_logger
134
- Card::Log::Request.write_log_entry self
134
+ Card::Log::Request.write_log_entry self
135
135
  end
136
-
136
+
137
137
  def start_performance_logger
138
- Card::Log::Performance.start :method=>env["REQUEST_METHOD"], :message=>env["PATH_INFO"]
138
+ Card::Log::Performance.start :method=>env["REQUEST_METHOD"], :message=>env["PATH_INFO"]
139
139
  end
140
-
140
+
141
141
  def stop_performance_logger
142
142
  Card::Log::Performance.stop
143
143
  end
144
-
144
+
145
145
  protected
146
146
 
147
147
  def ajax?
@@ -225,12 +225,15 @@ class CardController < ActionController::Base
225
225
  format = :file if params[:explicit_file] or !Card::Format.registered.member? format #unknown format
226
226
 
227
227
  opts = ( params[:slot] || {} ).deep_symbolize_keys
228
- view ||= params[:view]
228
+ view ||= params[:view]
229
229
 
230
+ if params[:edit_draft] && card.drafts.present?
231
+ card.content = card.drafts.last.changes.last.value
232
+ end
230
233
  formatter = card.format(format.to_sym)
231
234
  result = formatter.show view, opts
232
235
  status = formatter.error_status || status
233
-
236
+
234
237
  if format==:file && status==200
235
238
  send_file *result
236
239
  elsif status == 302
@@ -249,13 +252,13 @@ class CardController < ActionController::Base
249
252
 
250
253
  @card ||= Card.new
251
254
  Card::Error.current = exception
252
-
255
+
253
256
 
254
257
  view = case exception
255
258
  ## arguably the view and status should be defined in the error class;
256
259
  ## some are redundantly defined in view
257
260
  when Card::Oops, Card::Query
258
- card.errors.add :exception, exception.message
261
+ card.errors.add :exception, exception.message
259
262
  # these error messages are visible to end users and are generally not treated as bugs.
260
263
  # Probably want to rename accordingly.
261
264
  :errors
@@ -267,7 +270,7 @@ class CardController < ActionController::Base
267
270
  :bad_address
268
271
  else #the following indicate a code problem and therefore require full logging
269
272
  @card.notable_exception_raised
270
-
273
+
271
274
  if ActiveRecord::RecordInvalid === exception
272
275
  :errors
273
276
  elsif Rails.logger.level == 0 # could also just check non-production mode...
@@ -21,7 +21,7 @@ describe CardController do
21
21
  it "should handle RESTful posts" do
22
22
  expect({ :put => '/mycard' }).to route_to( :controller=>'card', :action=>'update', :id=>'mycard')
23
23
  expect({ :put => '/' }).to route_to( :controller=>'card', :action=>'update')
24
-
24
+
25
25
  end
26
26
 
27
27
  it "handle asset requests" do
@@ -47,7 +47,7 @@ describe CardController do
47
47
  :controller=>"card",:action=>"read",:id=>"random"
48
48
  )
49
49
  end
50
-
50
+
51
51
  end
52
52
  end
53
53
  end
@@ -101,7 +101,7 @@ describe CardController do
101
101
  expect(c.type_code).to eq(:phrase)
102
102
  end
103
103
 
104
-
104
+
105
105
 
106
106
  context "multi-create" do
107
107
  it "catches missing name error" do
@@ -179,7 +179,7 @@ describe CardController do
179
179
  get :read, {:id=>'Sample_Fako'}
180
180
  assert_response 404
181
181
  end
182
-
182
+
183
183
  it "handles nonexistent card ids" do
184
184
  get :read, {:id=>'~9999999'}
185
185
  assert_response 404
@@ -193,9 +193,9 @@ describe CardController do
193
193
  assert_response 403
194
194
  get :read, :id=>'Strawberry', :format=>'txt'
195
195
  assert_response 403
196
-
196
+
197
197
  end
198
-
198
+
199
199
  context "view = new" do
200
200
  before do
201
201
  login_as 'joe_user'
@@ -218,34 +218,34 @@ describe CardController do
218
218
  get :read, :card=>{:name=>"A"}, :view=>'new'
219
219
  assert_response :success, "response should succeed" #really?? how come this is ok?
220
220
  end
221
-
221
+
222
222
  it "new with type_code" do
223
223
  post :read, :card => {:type=>'Date'}, :view=>'new'
224
224
  assert_response :success, "response should succeed"
225
225
  assert_equal Card::DateID, assigns['card'].type_id, "@card type should == Date"
226
226
  end
227
-
227
+
228
228
  it "new should work for creatable nonviewable cardtype" do
229
229
  login_as :anonymous
230
230
  get :read, :type=>"Fruit", :view=>'new'
231
231
  assert_response :success
232
232
  end
233
-
233
+
234
234
  it "should use card params name over id in new cards" do
235
235
  get :read, :id=>'my_life', :card=>{:name =>'My LIFE'}, :view=>'new'
236
236
  expect(assigns['card'].name).to eq('My LIFE')
237
237
  end
238
-
238
+
239
239
  end
240
-
241
-
242
-
240
+
241
+
242
+
243
243
  context 'css' do
244
244
  before do
245
245
  @all_style = Card[ "#{ Card[:all].name }+#{ Card[:style].name }" ]
246
246
  @all_style.reset_machine_output!
247
247
  end
248
-
248
+
249
249
  it 'should create missing machine output file' do
250
250
  args = { :id=>@all_style.machine_output_card.name, :format=>'css', :explicit_file=>true }
251
251
  get :read, args
@@ -255,23 +255,23 @@ describe CardController do
255
255
  expect(response.status).to eq(200)
256
256
  end
257
257
  end
258
-
259
-
258
+
259
+
260
260
  context "file" do
261
261
  before do
262
262
  Card::Auth.as_bot do
263
- Card.create :name => "mao2", :type_code=>'image', :attach=>File.new("#{Cardio.gem_root}/test/fixtures/mao2.jpg")
263
+ Card.create :name => "mao2", :type_code=>'image', :attach=>File.new( File.join FIXTURES_PATH, 'mao2.jpg' )
264
264
  Card.create :name => 'mao2+*self+*read', :content=>'[[Administrator]]'
265
265
  end
266
266
  end
267
-
267
+
268
268
  it "handles image with no read permission" do
269
269
  get :read, :id=>'mao2'
270
270
  assert_response 403, "should deny html card view"
271
271
  get :read, :id=>'mao2', :format=>'jpg'
272
272
  assert_response 403, "should deny simple file view"
273
273
  end
274
-
274
+
275
275
  it "handles image with read permission" do
276
276
  login_as :joe_admin
277
277
  get :read, :id=>'mao2'
@@ -282,8 +282,8 @@ describe CardController do
282
282
  end
283
283
 
284
284
  end
285
-
286
- describe "#asset" do
285
+
286
+ describe "#asset" do
287
287
  it 'serves file' do
288
288
  filename = "asset-test.txt"
289
289
  args = { :id=>filename, :format=>'txt', :explicit_file=>true }
@@ -294,10 +294,10 @@ describe CardController do
294
294
  expect(page.body).to eq ("test\n")
295
295
  FileUtils.rm path
296
296
  end
297
-
297
+
298
298
  it 'denies access to other directories' do
299
299
  args = { :filename => "/../../Gemfile" }
300
- get :asset, args
300
+ get :asset, args
301
301
  expect(response.status).to eq(404)
302
302
  end
303
303
  end
@@ -316,7 +316,7 @@ describe CardController do
316
316
  assert_response :success, "edited card"
317
317
  assert_equal 'brand new content', Card['Sample Basic'].content, "content was updated"
318
318
  end
319
-
319
+
320
320
  it "rename without update references should work" do
321
321
  f = Card.create! :type=>"Cardtype", :name=>"Apple"
322
322
  xhr :post, :update, :id => "~#{f.id}", :card => {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wagn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.1
4
+ version: 1.15.2
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: 2015-03-28 00:00:00.000000000 Z
14
+ date: 2015-05-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -33,14 +33,14 @@ dependencies:
33
33
  requirements:
34
34
  - - '='
35
35
  - !ruby/object:Gem::Version
36
- version: 1.15.1
36
+ version: 1.15.2
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - '='
42
42
  - !ruby/object:Gem::Version
43
- version: 1.15.1
43
+ version: 1.15.2
44
44
  description: a wiki approach to stuctured data, dynamic interaction, and web design
45
45
  email:
46
46
  - info@wagn.org