wagn 1.15.7 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/features/conflict.feature +3 -3
- data/features/follow.feature +4 -2
- data/features/layouts.feature +1 -1
- data/features/rules.feature +2 -2
- data/features/signup.feature +8 -7
- data/features/step_definitions/wagn_steps.rb +5 -4
- data/features/structure.feature +1 -2
- data/features/support/paths.rb +1 -1
- data/lib/decko/engine.rb +3 -2
- data/lib/wagn/application.rb +9 -19
- data/lib/wagn/config/environments/cucumber.rb +2 -0
- data/lib/wagn/config/environments/development.rb +20 -19
- data/lib/wagn/config/environments/production.rb +4 -2
- data/lib/wagn/config/environments/profile.rb +2 -0
- data/lib/wagn/config/environments/test.rb +6 -4
- data/lib/wagn/config/initializers/secret_token.rb +1 -0
- data/lib/wagn/config/initializers/session_store.rb +1 -1
- data/lib/wagn/generators/wagn/templates/Gemfile +21 -9
- data/lib/wagn/generators/wagn/wagn_generator.rb +60 -58
- data/lib/wagn/mods_spec_helper.rb +0 -1
- data/lib/wagn/tasks/wagn.rake +5 -4
- data/rails/controllers/card_controller.rb +11 -4
- data/rails/engine-routes.rb +34 -31
- data/wagn.gemspec +4 -4
- metadata +9 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 93d49fa7d1579cf958f00854309f3e7997242523
|
|
4
|
+
data.tar.gz: 5532cef0c6bf94de50006763ede9d58457d9190e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6b0c051fede97df0360f153491992e1710e5e8c0aa86211a42d7e59f83cad055b67e8b85a10a743e8eb3951ee441cd7cdfbb0e02994ae0ef63586c73fd7be03f
|
|
7
|
+
data.tar.gz: 6282214671c13d7d32d0b8d494008b1ac91750ae93d9ade65d5606b28786afb715be51d381a7afbc72d9485569dcd9c5351ddc3701a2f06bd3c9a97e3beb495b
|
data/features/conflict.feature
CHANGED
|
@@ -6,7 +6,7 @@ Feature: Conflict
|
|
|
6
6
|
Background:
|
|
7
7
|
Given I am signed in as Joe Admin
|
|
8
8
|
And I create Phrase card "Duck Soup" with content "Laurel and Hardy"
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
Scenario: Two edits on a card at the same time
|
|
11
11
|
When I edit "Duck Soup" filling in "Stan Hardy"
|
|
12
12
|
And I open a new window for Joe User
|
|
@@ -16,7 +16,7 @@ Feature: Conflict
|
|
|
16
16
|
# We resign-in as Joe Admin in Joe User's window so that we submit Joe Admin's edit as Joe Admin
|
|
17
17
|
And I am signed out
|
|
18
18
|
And I wait a sec
|
|
19
|
-
And I am signed in as Joe Admin
|
|
19
|
+
And I am signed in as Joe Admin
|
|
20
20
|
And I close window
|
|
21
21
|
And I submit
|
|
22
22
|
Then I should see "Conflict!"
|
|
@@ -34,7 +34,7 @@ Feature: Conflict
|
|
|
34
34
|
And I close window
|
|
35
35
|
And I submit
|
|
36
36
|
Then I should see "Conflict!"
|
|
37
|
-
And I should see "No difference between your changes and Joe User's version."
|
|
37
|
+
#And I should see "No difference between your changes and Joe User's version."
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
|
data/features/follow.feature
CHANGED
|
@@ -19,7 +19,8 @@ Feature: Follow interface
|
|
|
19
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
|
|
22
|
+
And I wait a sec
|
|
23
|
+
And I close the modal window
|
|
23
24
|
And I wait a sec
|
|
24
25
|
And I open the main card menu
|
|
25
26
|
Then In the main card menu I should see "unfollow"
|
|
@@ -31,7 +32,8 @@ Feature: Follow interface
|
|
|
31
32
|
And I am on the homepage
|
|
32
33
|
And I open the main card menu
|
|
33
34
|
And In the main card menu I click "unfollow"
|
|
34
|
-
And I
|
|
35
|
+
And I wait a sec
|
|
36
|
+
And I close the modal window
|
|
35
37
|
And I wait a sec
|
|
36
38
|
And I open the main card menu
|
|
37
39
|
Then In the main card menu I should see "follow"
|
data/features/layouts.feature
CHANGED
|
@@ -12,7 +12,7 @@ Feature: Layouts
|
|
|
12
12
|
And I create Pointer card "User+*type+*layout" with content "[[user layout]]"
|
|
13
13
|
And I wait a sec
|
|
14
14
|
And I create HTML card "user layout" with content "User Header {{_main}}"
|
|
15
|
-
And I wait a sec
|
|
15
|
+
And I wait a sec
|
|
16
16
|
|
|
17
17
|
Scenario: I visit a Basic card with the simple layout
|
|
18
18
|
When I go to card "*account links"
|
data/features/rules.feature
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Feature: Set-based
|
|
1
|
+
Feature: Set-based Rles
|
|
2
2
|
In order to control settings in an efficient way
|
|
3
3
|
As a Wagneer
|
|
4
4
|
I want to be able to control rules for sets of cards
|
|
@@ -10,7 +10,7 @@ Feature: Set-based Rules
|
|
|
10
10
|
Scenario: default setting and plus card override
|
|
11
11
|
Given I create Phrase card "color+*right+*add help" with content "If colorblind, leave blank"
|
|
12
12
|
And I am signed in as Joe User
|
|
13
|
-
When I go to new card "Test"
|
|
13
|
+
When I go to new card named "Test"
|
|
14
14
|
Then I should see "spicy"
|
|
15
15
|
When I go to new card "Test+color"
|
|
16
16
|
Then I should see "colorblind"
|
data/features/signup.feature
CHANGED
|
@@ -10,7 +10,7 @@ Feature: Signing up
|
|
|
10
10
|
Given Joe Admin creates Pointer card "User+*type+*create" with content "[[Anyone]]"
|
|
11
11
|
And I am signed out
|
|
12
12
|
#This is the needed permission configuration to allow signups without approval
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
When I go to the home page
|
|
15
15
|
And I follow "Sign up"
|
|
16
16
|
And I fill in "card_name" with "Wanna B"
|
|
@@ -19,20 +19,21 @@ Feature: Signing up
|
|
|
19
19
|
And I press "Submit"
|
|
20
20
|
Then I should see "Signup Success"
|
|
21
21
|
And "wanna@wagn.org" should receive an email with subject "verification link for My Wagn"
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
When I open the email
|
|
24
24
|
And I click the first link in the email
|
|
25
25
|
Then I should see "Wanna B"
|
|
26
|
-
|
|
27
|
-
When I
|
|
26
|
+
|
|
27
|
+
When I go to the home page
|
|
28
|
+
And I follow "Sign out"
|
|
28
29
|
Then I should not see "Wanna B"
|
|
29
|
-
|
|
30
|
+
|
|
30
31
|
When I follow "Sign in"
|
|
31
32
|
And I enter "wanna@wagn.org" into "*email"
|
|
32
33
|
And I enter "wanna_pass" into "*password"
|
|
33
34
|
And I press "Sign in"
|
|
34
35
|
Then I should see "Wanna B"
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
Scenario: Signing up with approval
|
|
37
38
|
#When I go to card "AccountRequest"
|
|
38
39
|
#And In the main card content I click "Wanna B"
|
|
@@ -42,6 +43,6 @@ Feature: Signing up
|
|
|
42
43
|
#Then I should see "Success"
|
|
43
44
|
#When I go to card "Wanna B"
|
|
44
45
|
#Then I should see "life story"
|
|
45
|
-
|
|
46
|
+
|
|
46
47
|
#Then I should see "sent"
|
|
47
48
|
|
|
@@ -68,7 +68,6 @@ When /^(.*) edits? "([^\"]*)" entering "([^\"]*)" into wysiwyg$/ do |username, c
|
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
|
|
72
71
|
When /^(.*) edits? "([^\"]*)" setting (.*) to "([^\"]*)"$/ do |username, cardname, field, content|
|
|
73
72
|
signed_in_as(username) do
|
|
74
73
|
visit "/card/edit/#{cardname.to_name.url_key}"
|
|
@@ -94,7 +93,7 @@ end
|
|
|
94
93
|
|
|
95
94
|
When /^(.*) creates?\s*a?\s*([^\s]*) card "(.*)" with content "(.*)"$/ do |username, cardtype, cardname, content|
|
|
96
95
|
create_card(username, cardtype, cardname, content) do
|
|
97
|
-
normal_textarea_card_type = ["JavaScript","CoffeeScript","HTML","CSS","
|
|
96
|
+
normal_textarea_card_type = ["JavaScript","CoffeeScript","HTML","CSS","SCSS","Search"]
|
|
98
97
|
if not normal_textarea_card_type.include? cardtype or not page.evaluate_script "typeof ace != 'undefined'"
|
|
99
98
|
fill_in("card[content]", :with=>content)
|
|
100
99
|
else
|
|
@@ -164,8 +163,6 @@ Then /debug/ do
|
|
|
164
163
|
nil
|
|
165
164
|
end
|
|
166
165
|
|
|
167
|
-
|
|
168
|
-
|
|
169
166
|
def create_card(username,cardtype,cardname,content="")
|
|
170
167
|
signed_in_as(username) do
|
|
171
168
|
if cardtype=='Pointer'
|
|
@@ -218,6 +215,10 @@ When /^I open the main card menu$/ do
|
|
|
218
215
|
page.find('#main .menu-slot .card-menu a').click
|
|
219
216
|
end
|
|
220
217
|
|
|
218
|
+
When /^I close the modal window$/ do
|
|
219
|
+
page.find('.modal-menu .close-modal').click
|
|
220
|
+
end
|
|
221
|
+
|
|
221
222
|
When /^I pick (.*)$/ do |menu_item|
|
|
222
223
|
end
|
|
223
224
|
|
data/features/structure.feature
CHANGED
|
@@ -11,11 +11,10 @@ Feature: Structure Rules
|
|
|
11
11
|
|
|
12
12
|
Scenario: New structured card
|
|
13
13
|
When I edit "Movie+*type+*structure"
|
|
14
|
-
|
|
14
|
+
Then I should see "{{+lead}}"
|
|
15
15
|
When I go to new Movie
|
|
16
16
|
Then I should see "+director"
|
|
17
17
|
And I should see "+lead"
|
|
18
|
-
#And I should see "[+lead]"
|
|
19
18
|
|
|
20
19
|
Scenario: Create and edit templated card
|
|
21
20
|
When I create Movie card "Star Wars" with plusses:
|
data/features/support/paths.rb
CHANGED
data/lib/decko/engine.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
require 'rails/all'
|
|
3
|
+
require 'activerecord/session_store'
|
|
3
4
|
require 'cardio'
|
|
4
5
|
|
|
5
6
|
# TODO: Move these to modules that use them
|
|
@@ -20,7 +21,7 @@ module Decko
|
|
|
20
21
|
|
|
21
22
|
paths.add "app/controllers", :with => 'rails/controllers', :eager_load => true
|
|
22
23
|
paths.add 'gem-assets', :with => 'rails/assets'
|
|
23
|
-
paths.add 'config/routes', :with => 'rails/engine-routes.rb'
|
|
24
|
+
paths.add 'config/routes.rb', :with => 'rails/engine-routes.rb'
|
|
24
25
|
paths.add 'lib/tasks', :with => "#{::Wagn.gem_root}/lib/wagn/tasks", :glob => '**/*.rake'
|
|
25
26
|
paths.add 'lib/wagn/config/initializers',
|
|
26
27
|
:with => File.join( Wagn.gem_root, 'lib/wagn/config/initializers' ), :glob => "**/*.rb"
|
|
@@ -42,7 +43,7 @@ module Decko
|
|
|
42
43
|
|
|
43
44
|
initializer :connect_on_load do
|
|
44
45
|
ActiveSupport.on_load(:active_record) do
|
|
45
|
-
ActiveRecord::Base.establish_connection(::Rails.env)
|
|
46
|
+
ActiveRecord::Base.establish_connection(::Rails.env.to_sym)
|
|
46
47
|
end
|
|
47
48
|
ActiveSupport.on_load(:after_initialize) do
|
|
48
49
|
begin
|
data/lib/wagn/application.rb
CHANGED
|
@@ -9,14 +9,6 @@ if defined?(Bundler)
|
|
|
9
9
|
# Bundler.require(:default, :assets, Rails.env)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
module ActiveSupport::BufferedLogger::Severity
|
|
13
|
-
WAGN = UNKNOWN + 1
|
|
14
|
-
|
|
15
|
-
def wagn progname, &block
|
|
16
|
-
add(WAGN, nil, progname, &block)
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
12
|
|
|
21
13
|
module Wagn
|
|
22
14
|
class Application < Rails::Application
|
|
@@ -39,19 +31,18 @@ module Wagn
|
|
|
39
31
|
|
|
40
32
|
class << self
|
|
41
33
|
def inherited(base)
|
|
42
|
-
|
|
43
|
-
Rails.
|
|
34
|
+
super
|
|
35
|
+
Rails.app_class = base
|
|
36
|
+
add_lib_to_load_path!(find_root(base.called_from))
|
|
44
37
|
ActiveSupport.run_load_hooks(:before_configuration, base.instance)
|
|
45
38
|
end
|
|
46
39
|
end
|
|
47
40
|
|
|
48
41
|
def add_path paths, path, options={}
|
|
49
42
|
root = options.delete(:root) || Wagn.gem_root
|
|
50
|
-
gem_path = File.join( root, path )
|
|
51
|
-
with =
|
|
52
|
-
|
|
53
|
-
#warn "add gem path #{path}, #{with}, #{gem_path}, #{options.inspect}"
|
|
54
|
-
paths[path] = Rails::Paths::Path.new(paths, gem_path, with, options)
|
|
43
|
+
#gem_path = File.join( root, path )
|
|
44
|
+
options[:with] = File.join(root, (options[:with] || path) )
|
|
45
|
+
paths.add path, options
|
|
55
46
|
end
|
|
56
47
|
|
|
57
48
|
|
|
@@ -62,7 +53,7 @@ module Wagn
|
|
|
62
53
|
Cardio.set_config config
|
|
63
54
|
|
|
64
55
|
config.i18n.enforce_available_locales = true
|
|
65
|
-
|
|
56
|
+
#config.active_record.raise_in_transactional_callbacks = true
|
|
66
57
|
|
|
67
58
|
config.assets.enabled = false
|
|
68
59
|
config.assets.version = '1.0'
|
|
@@ -81,7 +72,7 @@ module Wagn
|
|
|
81
72
|
config
|
|
82
73
|
end
|
|
83
74
|
end
|
|
84
|
-
|
|
75
|
+
|
|
85
76
|
def paths
|
|
86
77
|
@paths ||= begin
|
|
87
78
|
paths = super
|
|
@@ -93,12 +84,11 @@ module Wagn
|
|
|
93
84
|
paths['app/models'] = []
|
|
94
85
|
paths['app/mailers'] = []
|
|
95
86
|
|
|
96
|
-
add_path paths, 'config/routes', :with => 'rails/application-routes.rb'
|
|
87
|
+
add_path paths, 'config/routes.rb', :with => 'rails/application-routes.rb'
|
|
97
88
|
|
|
98
89
|
paths
|
|
99
90
|
end
|
|
100
91
|
end
|
|
101
|
-
|
|
102
92
|
end
|
|
103
93
|
end
|
|
104
94
|
|
|
@@ -3,6 +3,8 @@ Wagn.application.class.configure do
|
|
|
3
3
|
# Edit at your own peril - it's recommended to regenerate this file
|
|
4
4
|
# in the future when you upgrade to a newer version of Cucumber.
|
|
5
5
|
|
|
6
|
+
config.eager_load = false
|
|
7
|
+
|
|
6
8
|
# IMPORTANT: Setting config.cache_classes to false is known to
|
|
7
9
|
# break Cucumber's use_transactional_fixtures method.
|
|
8
10
|
# For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165
|
|
@@ -9,6 +9,8 @@ end
|
|
|
9
9
|
Wagn.application.class.configure do
|
|
10
10
|
# Settings specified here will take precedence over those in config/application.rb
|
|
11
11
|
|
|
12
|
+
config.eager_load = false
|
|
13
|
+
|
|
12
14
|
# In the development environment your application's code is reloaded on
|
|
13
15
|
# every request. This slows down response time but is perfect for development
|
|
14
16
|
# since you don't have to restart the web server when you make code changes.
|
|
@@ -21,8 +23,8 @@ Wagn.application.class.configure do
|
|
|
21
23
|
skip /view\=status/
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
|
|
27
|
+
|
|
26
28
|
# Log error messages when you accidentally call methods on nil.
|
|
27
29
|
config.whiny_nils = true
|
|
28
30
|
|
|
@@ -38,38 +40,37 @@ Wagn.application.class.configure do
|
|
|
38
40
|
|
|
39
41
|
# See everything in the log (default is :info)
|
|
40
42
|
config.log_level = :debug
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
|
|
44
|
+
config.active_record.raise_in_transactional_callbacks = true
|
|
45
|
+
|
|
43
46
|
# config.performance_logger = {
|
|
44
|
-
# :methods
|
|
45
|
-
# :min_time
|
|
47
|
+
# :methods => [:event, :search, :fetch, :view], # choose methods to log
|
|
48
|
+
# :min_time => 100, # show only method calls that are slower than 100ms
|
|
46
49
|
# :max_depth => 3, # show nested method calls only up to depth 3
|
|
47
|
-
# :details=> true # show method arguments and sql
|
|
50
|
+
# :details => true # show method arguments and sql
|
|
51
|
+
# :log_level => :info
|
|
48
52
|
# }
|
|
49
|
-
|
|
53
|
+
|
|
50
54
|
# Only use best-standards-support built into browsers
|
|
51
55
|
config.action_dispatch.best_standards_support = :builtin
|
|
52
56
|
|
|
53
57
|
# Do not compress assets
|
|
54
58
|
# config.assets.compress = false
|
|
55
|
-
#
|
|
59
|
+
#
|
|
56
60
|
# # Expands the lines which load the assets
|
|
57
61
|
# config.assets.debug = false
|
|
58
|
-
#
|
|
62
|
+
#
|
|
59
63
|
# # This needs to be on for tinymce to work, because several important files (themes, etc) are only served statically
|
|
60
|
-
# config.
|
|
61
|
-
#
|
|
64
|
+
# config.serve_static_files = ENV['STATIC_ASSETS'] || true
|
|
65
|
+
#
|
|
62
66
|
# # Setting a bogus directory so rails won't find public/assets in dev mode.
|
|
63
67
|
# # Normally you could skip that by not serving static assets, but that breaks tinymce (see above)
|
|
64
68
|
# config.assets.prefix = "dynamic-assets"
|
|
65
69
|
|
|
66
|
-
# Raise exception on mass assignment protection for Active Record models
|
|
67
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
|
68
|
-
|
|
69
70
|
# Log the query plan for queries taking more than this (works
|
|
70
71
|
# with SQLite, MySQL, and PostgreSQL)
|
|
71
|
-
config.active_record.auto_explain_threshold_in_seconds = 0.5
|
|
72
|
-
|
|
72
|
+
# config.active_record.auto_explain_threshold_in_seconds = 0.5
|
|
73
|
+
|
|
73
74
|
|
|
74
75
|
# if File.exists?(File.join(Rails.root,'tmp', 'debug.txt'))
|
|
75
76
|
# require 'ruby-debug'
|
|
@@ -79,7 +80,7 @@ Wagn.application.class.configure do
|
|
|
79
80
|
# end
|
|
80
81
|
|
|
81
82
|
config.action_mailer.perform_deliveries = false
|
|
82
|
-
|
|
83
|
+
|
|
83
84
|
# Use Pry instead of IRB
|
|
84
85
|
silence_warnings do
|
|
85
86
|
begin
|
|
@@ -91,4 +92,4 @@ Wagn.application.class.configure do
|
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
#Paperclip.options[:command_path] = "/opt/local/bin"
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Wagn.application.class.configure do
|
|
3
3
|
# Settings specified here will take precedence over those in config/application.rb
|
|
4
4
|
|
|
5
|
+
config.eager_load = true
|
|
6
|
+
|
|
5
7
|
# Code is not reloaded between requests
|
|
6
8
|
config.cache_classes = true
|
|
7
9
|
|
|
@@ -10,7 +12,7 @@ Wagn.application.class.configure do
|
|
|
10
12
|
config.action_controller.perform_caching = true
|
|
11
13
|
|
|
12
14
|
# Disable Rails's static asset server (Apache or nginx will already do this)
|
|
13
|
-
config.
|
|
15
|
+
config.serve_static_files = defined?( Rails::Server )
|
|
14
16
|
|
|
15
17
|
# Compress JavaScripts and CSS
|
|
16
18
|
config.assets.compress = true
|
|
@@ -32,7 +34,7 @@ Wagn.application.class.configure do
|
|
|
32
34
|
# config.force_ssl = true
|
|
33
35
|
|
|
34
36
|
# See everything in the log (default is :info)
|
|
35
|
-
|
|
37
|
+
config.log_level = :info
|
|
36
38
|
|
|
37
39
|
# Use a different logger for distributed setups
|
|
38
40
|
# config.logger = SyslogLogger.new
|
|
@@ -6,6 +6,8 @@ Wagn.application.class.configure do
|
|
|
6
6
|
# approximation of performance. However, it should
|
|
7
7
|
# definitely not use the production databse!
|
|
8
8
|
|
|
9
|
+
config.eager_load = true
|
|
10
|
+
|
|
9
11
|
# Cache classes - otherwise your code
|
|
10
12
|
# will run approximately 5 times slower and the
|
|
11
13
|
# profiling results will be overwhelmed by Rails
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Wagn.application.class.configure do
|
|
3
3
|
# Settings specified here will take precedence over those in config/application.rb
|
|
4
4
|
|
|
5
|
+
config.eager_load = false
|
|
6
|
+
|
|
5
7
|
# The test environment is used exclusively to run your application's
|
|
6
8
|
# test suite. You never need to work with it otherwise. Remember that
|
|
7
9
|
# your test database is "scratch space" for the test suite and is wiped
|
|
@@ -12,7 +14,7 @@ Wagn.application.class.configure do
|
|
|
12
14
|
config.assets.enabled = true if Object.const_defined?( :JasmineRails )
|
|
13
15
|
|
|
14
16
|
# Configure static asset server for tests with Cache-Control for performance
|
|
15
|
-
config.
|
|
17
|
+
config.serve_static_files = true
|
|
16
18
|
config.static_cache_control = "public, max-age=3600"
|
|
17
19
|
|
|
18
20
|
# Log error messages when you accidentally call methods on nil
|
|
@@ -34,10 +36,10 @@ Wagn.application.class.configure do
|
|
|
34
36
|
config.action_mailer.delivery_method = :test
|
|
35
37
|
config.action_mailer.perform_deliveries = true
|
|
36
38
|
config.action_mailer.default :charset=>"utf-8"
|
|
37
|
-
|
|
39
|
+
|
|
38
40
|
#config.action_mailer.delivery_method = :smtp
|
|
39
41
|
#config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }
|
|
40
|
-
|
|
42
|
+
|
|
41
43
|
# Use SQL instead of Active Record's schema dumper when creating the test database.
|
|
42
44
|
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
|
43
45
|
# like if you have constraints or database-specific column types
|
|
@@ -49,7 +51,7 @@ Wagn.application.class.configure do
|
|
|
49
51
|
|
|
50
52
|
# Print deprecation notices to the stderr
|
|
51
53
|
config.active_support.deprecation = :stderr
|
|
52
|
-
|
|
54
|
+
|
|
53
55
|
# Use Pry instead of IRB
|
|
54
56
|
silence_warnings do
|
|
55
57
|
begin
|
|
@@ -7,3 +7,4 @@
|
|
|
7
7
|
# no regular words or you'll be exposed to dictionary attacks.
|
|
8
8
|
|
|
9
9
|
Wagn.config.secret_token = '65632e048d6c80d1e63c911e1a40a51072413543f3182e0261b52e3812b2c9f0ee81828fa5688a34c13a78e438a4b56f497135dc079a4e4460733d555968a2f8'
|
|
10
|
+
Wagn.config.secret_key_base = '65632e048d6c80d1e63c911e1a40a51072413543f3182e0261b52e3812b2c9f0ee81828fa5688a34c13a78e438a4b56f497135dc079a4e4460733d555968a2f8'
|
|
@@ -6,4 +6,4 @@ Wagn.config.session_store :active_record_store
|
|
|
6
6
|
# Use the database for sessions instead of the cookie-based default,
|
|
7
7
|
# which shouldn't be used to store highly confidential information
|
|
8
8
|
# (create the session table with "rails generate session_migration")
|
|
9
|
-
|
|
9
|
+
Cardio.config.session_store :active_record_store
|
|
@@ -7,7 +7,11 @@ gem 'card', :path=>"<%= @gemfile_gem_path %>/card", :require => false
|
|
|
7
7
|
gem 'wagn'
|
|
8
8
|
<% end %>
|
|
9
9
|
|
|
10
|
-
<%= database_gemfile_entry -%>
|
|
10
|
+
gem '<%= database_gemfile_entry.name %>'<%= %(, '#{database_gemfile_entry.version}') if database_gemfile_entry.version -%>
|
|
11
|
+
|
|
12
|
+
# Use Unicorn or Thin as server
|
|
13
|
+
# gem 'unicorn'
|
|
14
|
+
# gem 'thin'
|
|
11
15
|
|
|
12
16
|
<% if options['mod-dev'] -%>
|
|
13
17
|
group :test do
|
|
@@ -22,9 +26,12 @@ group :test, :development do
|
|
|
22
26
|
gem 'jasmine-rails', :git=>"https://github.com/chuenlok/jasmine-rails.git"
|
|
23
27
|
gem 'jasmine-jquery-rails'
|
|
24
28
|
gem 'sprockets' # just so above works
|
|
25
|
-
|
|
26
|
-
#
|
|
27
|
-
|
|
29
|
+
<%- if spring_install? %>
|
|
30
|
+
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
|
|
31
|
+
gem 'spring'
|
|
32
|
+
gem 'spring-commands-rspec'
|
|
33
|
+
gem 'spring-commands-cucumber'
|
|
34
|
+
<% end -%>
|
|
28
35
|
# gem 'pry-rails'
|
|
29
36
|
# gem 'pry-rescue'
|
|
30
37
|
# gem 'pry-stack_explorer'
|
|
@@ -64,7 +71,7 @@ group :test do
|
|
|
64
71
|
if RUBY_PLATFORM =~ /darwin/
|
|
65
72
|
# gem 'terminal-notifier-guard', '~> 1.5' # use growler notifications on macs
|
|
66
73
|
# gem 'rspec-legacy_formatters'
|
|
67
|
-
# gem 'wagn-rspec-formatter', :
|
|
74
|
+
# gem 'wagn-rspec-formatter', :git=>'https://github.com/xithan/wagn-rspec-formatter.git'
|
|
68
75
|
end
|
|
69
76
|
|
|
70
77
|
# CUKES see features dir
|
|
@@ -79,22 +86,25 @@ group :test do
|
|
|
79
86
|
|
|
80
87
|
|
|
81
88
|
gem 'email_spec' #
|
|
82
|
-
gem 'database_cleaner', '~>
|
|
89
|
+
gem 'database_cleaner', '~> 1.4' # used by cucumber for db transactions
|
|
83
90
|
|
|
84
|
-
gem 'turn',
|
|
85
|
-
gem 'minitest'
|
|
91
|
+
gem 'turn', :require => false # Pretty printed test output. (version constraint is to avoid minitest requirement)
|
|
92
|
+
gem 'minitest'
|
|
86
93
|
end
|
|
87
94
|
|
|
88
95
|
gem 'ruby-prof', :group=>:profile # profiling
|
|
89
96
|
|
|
90
97
|
group :development, :test do
|
|
98
|
+
<%- if spring_install? %>
|
|
99
|
+
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
|
|
91
100
|
gem 'spring'
|
|
92
101
|
gem 'spring-commands-rspec'
|
|
93
102
|
gem 'spring-commands-cucumber'
|
|
94
103
|
gem 'spring-watcher-listen'
|
|
104
|
+
<% end -%>
|
|
95
105
|
gem 'pry-rails'
|
|
96
106
|
gem 'pry-rescue'
|
|
97
|
-
gem 'pry-stack_explorer'
|
|
107
|
+
# gem 'pry-stack_explorer'
|
|
98
108
|
gem 'jasmine'
|
|
99
109
|
gem 'jasmine-rails', :git=>"https://github.com/chuenlok/jasmine-rails.git"
|
|
100
110
|
gem 'jasmine-jquery-rails'
|
|
@@ -107,6 +117,8 @@ group :debug do
|
|
|
107
117
|
else
|
|
108
118
|
gem 'debugger'
|
|
109
119
|
end
|
|
120
|
+
gem 'better_errors', :git=>"https://github.com/xithan/better_errors.git"
|
|
121
|
+
gem 'binding_of_caller'
|
|
110
122
|
end
|
|
111
123
|
<% end %>
|
|
112
124
|
|
|
@@ -6,27 +6,29 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
6
6
|
#class WagnGenerator < Rails::Generators::AppGenerator
|
|
7
7
|
|
|
8
8
|
source_root File.expand_path('../templates', __FILE__)
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
argument :deck_path, :required=>false
|
|
11
11
|
|
|
12
12
|
class_option :database, :type => :string, :aliases => "-d", :default => "mysql",
|
|
13
13
|
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
|
14
|
-
|
|
15
|
-
class_option 'core-dev', :type => :boolean, aliases: '-c', :default => false, :group => :runtime,
|
|
14
|
+
|
|
15
|
+
class_option 'core-dev', :type => :boolean, aliases: '-c', :default => false, :group => :runtime,
|
|
16
16
|
desc: "Prepare deck for wagn core testing"
|
|
17
|
-
|
|
18
|
-
class_option 'gem-path', :type => :string, aliases: '-g', :default => false, :group => :runtime,
|
|
17
|
+
|
|
18
|
+
class_option 'gem-path', :type => :string, aliases: '-g', :default => false, :group => :runtime,
|
|
19
19
|
desc: "Path to local gem installation (Default, use env WAGN_GEM_PATH)"
|
|
20
|
-
|
|
21
|
-
class_option 'mod-dev', :type => :boolean, aliases: '-m', :default => false, :group => :runtime,
|
|
20
|
+
|
|
21
|
+
class_option 'mod-dev', :type => :boolean, aliases: '-m', :default => false, :group => :runtime,
|
|
22
22
|
desc: "Prepare deck for mod testing"
|
|
23
|
-
|
|
24
|
-
class_option 'interactive', :type => :boolean, aliases: '-i', :default => false, :group => :runtime,
|
|
23
|
+
|
|
24
|
+
class_option 'interactive', :type => :boolean, aliases: '-i', :default => false, :group => :runtime,
|
|
25
25
|
desc: "Prompt with dynamic installation options"
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
public_task :set_default_accessors!
|
|
27
29
|
public_task :create_root
|
|
28
|
-
|
|
29
|
-
## should probably eventually use rails-like AppBuilder approach, but this is a first step.
|
|
30
|
+
|
|
31
|
+
## should probably eventually use rails-like AppBuilder approach, but this is a first step.
|
|
30
32
|
def dev_setup
|
|
31
33
|
# TODO: rename or split, gem_path points to the source repo, card and wagn gems are subdirs
|
|
32
34
|
@gemfile_gem_path = @gem_path = options['gem-path']
|
|
@@ -35,7 +37,7 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
35
37
|
@gemfile_gem_path = %q{#{ENV['WAGN_GEM_PATH']}}
|
|
36
38
|
@gem_path = env_gem_path
|
|
37
39
|
end
|
|
38
|
-
|
|
40
|
+
|
|
39
41
|
@include_jasmine_engine = false
|
|
40
42
|
if options['core-dev']
|
|
41
43
|
unless @gem_path
|
|
@@ -49,7 +51,7 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
49
51
|
inside 'spec' do
|
|
50
52
|
copy_file File.join('javascripts', 'support', 'wagn_jasmine.yml'), File.join('javascripts', 'support','jasmine.yml')
|
|
51
53
|
end
|
|
52
|
-
|
|
54
|
+
|
|
53
55
|
@features_path = File.join @gem_path, 'wagn/features/' # ending slash is important in order to load support and step folders
|
|
54
56
|
@simplecov_config = "card_core_dev_simplecov_filters"
|
|
55
57
|
elsif options['mod-dev']
|
|
@@ -62,7 +64,7 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
62
64
|
copy_file File.join( 'javascripts', 'support', 'deck_jasmine.yml'), File.join('javascripts', 'support','jasmine.yml')
|
|
63
65
|
end
|
|
64
66
|
end
|
|
65
|
-
|
|
67
|
+
|
|
66
68
|
if options['core-dev'] || options['mod-dev']
|
|
67
69
|
template "rspec", ".rspec"
|
|
68
70
|
template "simplecov", ".simplecov"
|
|
@@ -80,23 +82,23 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
80
82
|
# def readme
|
|
81
83
|
# copy_file "README", "README.rdoc"
|
|
82
84
|
# end
|
|
83
|
-
|
|
85
|
+
|
|
84
86
|
def mod
|
|
85
|
-
|
|
87
|
+
empty_directory_with_keep_file 'mod'
|
|
86
88
|
end
|
|
87
|
-
|
|
89
|
+
|
|
88
90
|
def log
|
|
89
|
-
|
|
91
|
+
empty_directory_with_keep_file 'log'
|
|
90
92
|
end
|
|
91
|
-
|
|
93
|
+
|
|
92
94
|
def files
|
|
93
|
-
|
|
95
|
+
empty_directory_with_keep_file 'files'
|
|
94
96
|
end
|
|
95
|
-
|
|
97
|
+
|
|
96
98
|
def tmp
|
|
97
99
|
empty_directory 'tmp'
|
|
98
100
|
end
|
|
99
|
-
|
|
101
|
+
|
|
100
102
|
def gemfile
|
|
101
103
|
template "Gemfile"
|
|
102
104
|
end
|
|
@@ -104,11 +106,11 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
104
106
|
def configru
|
|
105
107
|
template "config.ru"
|
|
106
108
|
end
|
|
107
|
-
|
|
109
|
+
|
|
108
110
|
def gitignore
|
|
109
111
|
copy_file "gitignore", ".gitignore"
|
|
110
112
|
end
|
|
111
|
-
|
|
113
|
+
|
|
112
114
|
def config
|
|
113
115
|
empty_directory "config"
|
|
114
116
|
|
|
@@ -117,41 +119,41 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
117
119
|
template 'routes.erb', "routes.rb"
|
|
118
120
|
template "environment.rb"
|
|
119
121
|
template "boot.rb"
|
|
120
|
-
template "databases/#{options[:database]}.yml", "database.yml"
|
|
122
|
+
template "databases/#{options[:database]}.yml", "database.yml"
|
|
121
123
|
if options['core-dev']
|
|
122
124
|
template "cucumber.yml"
|
|
123
125
|
end
|
|
124
126
|
end
|
|
125
127
|
end
|
|
126
|
-
|
|
128
|
+
|
|
127
129
|
def public
|
|
128
130
|
empty_directory "public"
|
|
129
|
-
|
|
131
|
+
|
|
130
132
|
inside "public" do
|
|
131
133
|
template "robots.txt"
|
|
132
134
|
empty_directory "files"
|
|
133
|
-
|
|
135
|
+
|
|
134
136
|
inside "files" do
|
|
135
137
|
template "htaccess", ".htaccess"
|
|
136
138
|
end
|
|
137
139
|
end
|
|
138
140
|
end
|
|
139
|
-
|
|
141
|
+
|
|
140
142
|
def script
|
|
141
143
|
directory "script" do |content|
|
|
142
144
|
"#{shebang}\n" + content
|
|
143
145
|
end
|
|
144
146
|
chmod "script", 0755 & ~File.umask, :verbose => false
|
|
145
147
|
end
|
|
146
|
-
|
|
148
|
+
|
|
147
149
|
public_task :run_bundle
|
|
148
|
-
|
|
150
|
+
|
|
149
151
|
def seed_data
|
|
150
152
|
if options['interactive']
|
|
151
153
|
|
|
152
154
|
require File.join destination_root, 'config', 'application' # need this for Rails.env
|
|
153
155
|
menu_options = ActiveSupport::OrderedHash.new()
|
|
154
|
-
|
|
156
|
+
|
|
155
157
|
database_seeded = proc do
|
|
156
158
|
menu_options['x'][:desc] = "exit"
|
|
157
159
|
menu_options['r'] = {
|
|
@@ -160,67 +162,67 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
160
162
|
:code => proc { system "cd #{destination_root} && wagn server" }
|
|
161
163
|
}
|
|
162
164
|
end
|
|
163
|
-
|
|
164
|
-
menu_options['d'] = {
|
|
165
|
+
|
|
166
|
+
menu_options['d'] = {
|
|
165
167
|
:desc => 'edit database configuration file',
|
|
166
168
|
:command => 'nano config/database.yml',
|
|
167
169
|
:code => proc { system "nano #{File.join destination_root, 'config', 'database.yml'}" }
|
|
168
170
|
}
|
|
169
|
-
menu_options['c'] = {
|
|
171
|
+
menu_options['c'] = {
|
|
170
172
|
:desc => 'configure Wagn (e.g. email settings)',
|
|
171
173
|
:command => 'nano config/application.rb',
|
|
172
174
|
:code => proc { system "nano #{File.join destination_root, 'config', 'application.rb'}" }
|
|
173
175
|
}
|
|
174
|
-
menu_options['s'] = {
|
|
176
|
+
menu_options['s'] = {
|
|
175
177
|
:desc => "seed #{Rails.env}#{ " and test" if options['core-dev'] or options['mod-dev']} database",
|
|
176
178
|
:command => 'wagn seed',
|
|
177
179
|
:code => proc do
|
|
178
|
-
system("cd #{destination_root} && bundle exec rake wagn:seed")
|
|
180
|
+
system("cd #{destination_root} && bundle exec rake wagn:seed")
|
|
179
181
|
if options['core-dev'] or options['mod-dev']
|
|
180
|
-
system("cd #{destination_root} && RAILS_ENV=test bundle exec rake wagn:seed")
|
|
182
|
+
system("cd #{destination_root} && RAILS_ENV=test bundle exec rake wagn:seed")
|
|
181
183
|
end
|
|
182
184
|
database_seeded.call
|
|
183
185
|
end
|
|
184
186
|
}
|
|
185
|
-
menu_options['a'] = {
|
|
187
|
+
menu_options['a'] = {
|
|
186
188
|
:desc => 'seed all databases (production, development, and test)',
|
|
187
189
|
:command => 'wagn seed --all',
|
|
188
190
|
:code => proc do
|
|
189
191
|
%w( production development test ).each do |env|
|
|
190
|
-
system("cd #{destination_root} && RAILS_ENV=#{env} bundle exec rake wagn:seed")
|
|
192
|
+
system("cd #{destination_root} && RAILS_ENV=#{env} bundle exec rake wagn:seed")
|
|
191
193
|
end
|
|
192
194
|
database_seeded.call
|
|
193
195
|
end
|
|
194
196
|
}
|
|
195
|
-
menu_options['x'] = {
|
|
196
|
-
:desc => "exit (run 'wagn seed' to complete the installation later)"
|
|
197
|
+
menu_options['x'] = {
|
|
198
|
+
:desc => "exit (run 'wagn seed' to complete the installation later)"
|
|
197
199
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
+
|
|
201
|
+
|
|
200
202
|
def build_menu options
|
|
201
203
|
lines = ["What would you like to do next?"]
|
|
202
|
-
lines += options.map do |key, v|
|
|
203
|
-
command = ' '*(65-v[:desc].size) + '[' + v[:command] + ']' if v[:command]
|
|
204
|
+
lines += options.map do |key, v|
|
|
205
|
+
command = ' '*(65-v[:desc].size) + '[' + v[:command] + ']' if v[:command]
|
|
204
206
|
" #{key} - #{v[:desc]}#{command if command}"
|
|
205
207
|
end
|
|
206
208
|
lines << "[#{options.keys.join}]"
|
|
207
209
|
"\n#{lines.join("\n")}\n"
|
|
208
210
|
end
|
|
209
|
-
|
|
210
|
-
while (answer = ask(build_menu(menu_options))) != 'x'
|
|
211
|
-
menu_options[answer][:code].call
|
|
211
|
+
|
|
212
|
+
while (answer = ask(build_menu(menu_options))) != 'x'
|
|
213
|
+
menu_options[answer][:code].call
|
|
212
214
|
end
|
|
213
|
-
|
|
215
|
+
|
|
214
216
|
else
|
|
215
217
|
puts "Review the database configuration in config/database.yml and run 'wagn seed' to complete the installation.\nStart the server with 'wagn server'."
|
|
216
218
|
end
|
|
217
219
|
end
|
|
218
|
-
|
|
220
|
+
|
|
219
221
|
protected
|
|
220
222
|
def self.banner
|
|
221
223
|
"wagn new #{self.arguments.map(&:usage).join(' ')} [options]"
|
|
222
224
|
end
|
|
223
|
-
|
|
225
|
+
|
|
224
226
|
def mysql_socket
|
|
225
227
|
@mysql_socket ||= [
|
|
226
228
|
"/tmp/mysql.sock", # default
|
|
@@ -234,11 +236,11 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
234
236
|
"/opt/lampp/var/mysql/mysql.sock" # xampp for linux
|
|
235
237
|
].find { |f| File.exist?(f) } unless RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
|
236
238
|
end
|
|
237
|
-
|
|
239
|
+
|
|
238
240
|
### the following is straight from rails and is focused on checking the validity of the app name.
|
|
239
241
|
### needs wagn-specific tuning
|
|
240
|
-
|
|
241
|
-
|
|
242
|
+
|
|
243
|
+
|
|
242
244
|
def app_name
|
|
243
245
|
@app_name ||= defined_app_const_base? ? defined_app_name : File.basename(destination_root)
|
|
244
246
|
end
|
|
@@ -253,12 +255,12 @@ class WagnGenerator < Rails::Generators::AppBase
|
|
|
253
255
|
end
|
|
254
256
|
|
|
255
257
|
alias :defined_app_const_base? :defined_app_const_base
|
|
256
|
-
|
|
258
|
+
|
|
257
259
|
def app_const_base
|
|
258
260
|
@app_const_base ||= defined_app_const_base || app_name.gsub(/\W/, '_').squeeze('_').camelize
|
|
259
261
|
end
|
|
260
262
|
alias :camelized :app_const_base
|
|
261
|
-
|
|
263
|
+
|
|
262
264
|
def app_const
|
|
263
265
|
@app_const ||= "#{app_const_base}::Application"
|
|
264
266
|
end
|
data/lib/wagn/tasks/wagn.rake
CHANGED
|
@@ -105,7 +105,7 @@ namespace :wagn do
|
|
|
105
105
|
stamp = ENV['STAMP_MIGRATIONS']
|
|
106
106
|
|
|
107
107
|
puts 'migrating structure'
|
|
108
|
-
Rake::Task['
|
|
108
|
+
Rake::Task['wagn:migrate:structure'].invoke
|
|
109
109
|
if stamp
|
|
110
110
|
Rake::Task['wagn:migrate:stamp'].invoke :structure
|
|
111
111
|
end
|
|
@@ -118,6 +118,7 @@ namespace :wagn do
|
|
|
118
118
|
Rake::Task['wagn:migrate:stamp'].invoke :core_cards
|
|
119
119
|
end
|
|
120
120
|
|
|
121
|
+
|
|
121
122
|
puts 'migrating deck cards'
|
|
122
123
|
Rake::Task['wagn:migrate:deck_cards'].execute #not invoke because we don't want to reload environment
|
|
123
124
|
if stamp
|
|
@@ -137,9 +138,9 @@ namespace :wagn do
|
|
|
137
138
|
|
|
138
139
|
namespace :migrate do
|
|
139
140
|
desc "migrate cards"
|
|
140
|
-
task :cards do
|
|
141
|
+
task :cards => :environment do
|
|
141
142
|
Rake::Task['wagn:migrate:core_cards'].invoke
|
|
142
|
-
Rake::Task['wagn:migrate:deck_cards'].
|
|
143
|
+
Rake::Task['wagn:migrate:deck_cards'].execute
|
|
143
144
|
end
|
|
144
145
|
|
|
145
146
|
desc "migrate structure"
|
|
@@ -160,8 +161,8 @@ namespace :wagn do
|
|
|
160
161
|
ENV['SCHEMA'] ||= "#{Cardio.gem_root}/db/schema.rb"
|
|
161
162
|
prepare_migration
|
|
162
163
|
paths = ActiveRecord::Migrator.migrations_paths = Cardio.migration_paths(:core_cards)
|
|
164
|
+
Cardio.schema_mode :core_cards do
|
|
163
165
|
|
|
164
|
-
Card::CoreMigration.schema_mode :core_cards do
|
|
165
166
|
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
|
|
166
167
|
ActiveRecord::Migrator.migrate paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil
|
|
167
168
|
end
|
|
@@ -27,6 +27,9 @@ class CardController < ActionController::Base
|
|
|
27
27
|
attr_reader :card
|
|
28
28
|
|
|
29
29
|
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
30
33
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
31
34
|
# CORE METHODS
|
|
32
35
|
|
|
@@ -54,6 +57,7 @@ class CardController < ActionController::Base
|
|
|
54
57
|
send_file_inside Decko::Engine.paths['gem-assets'].existent.first, [ params[:filename], params[:format] ].join('.'), :x_sendfile => true
|
|
55
58
|
end
|
|
56
59
|
|
|
60
|
+
|
|
57
61
|
private
|
|
58
62
|
|
|
59
63
|
# make sure that filename doesn't leave allowed_path using ".."
|
|
@@ -219,7 +223,12 @@ class CardController < ActionController::Base
|
|
|
219
223
|
render :text => target
|
|
220
224
|
else
|
|
221
225
|
@card = target
|
|
222
|
-
|
|
226
|
+
#Card::Env[:params] =
|
|
227
|
+
if new_params.delete :soft_redirect
|
|
228
|
+
self.params = new_params
|
|
229
|
+
else
|
|
230
|
+
self.params.merge! new_params # #need tests. insure we get slot, main...
|
|
231
|
+
end
|
|
223
232
|
show
|
|
224
233
|
end
|
|
225
234
|
end
|
|
@@ -235,8 +244,6 @@ class CardController < ActionController::Base
|
|
|
235
244
|
show view, status
|
|
236
245
|
end
|
|
237
246
|
|
|
238
|
-
|
|
239
|
-
|
|
240
247
|
def show view = nil, status = 200
|
|
241
248
|
# ActiveSupport::Notifications.instrument('card', message: 'CardController#show') do
|
|
242
249
|
format = request.parameters[:format]
|
|
@@ -246,7 +253,7 @@ class CardController < ActionController::Base
|
|
|
246
253
|
view ||= params[:view]
|
|
247
254
|
|
|
248
255
|
if params[:edit_draft] && card.drafts.present?
|
|
249
|
-
card.content = card.drafts.last.
|
|
256
|
+
card.content = card.drafts.last.card_changes.last.value
|
|
250
257
|
end
|
|
251
258
|
formatter = card.format(format.to_sym)
|
|
252
259
|
result = formatter.show view, opts
|
data/rails/engine-routes.rb
CHANGED
|
@@ -1,49 +1,52 @@
|
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
Decko::Engine.routes.draw do
|
|
4
5
|
|
|
5
6
|
#most common
|
|
6
|
-
root
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
match '
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
root 'card#read'
|
|
8
|
+
get "#{ Decko::Engine.config.files_web_path }/:id(-:size)-:rev_id.:format" =>
|
|
9
|
+
'card#read', :id => /[^-]+/, :explicit_file=>true
|
|
10
|
+
get "assets/*filename" => 'card#asset'
|
|
11
|
+
get "javascripts/*filename" => 'card#asset'
|
|
12
|
+
get "jasmine/*filename" => 'card#asset'
|
|
13
|
+
|
|
14
|
+
get 'recent(.:format)' => 'card#read', :id => ':recent' #obviate by making links use codename
|
|
15
|
+
# match ':view:(:id(.:format))' => 'card#read', :via=>:get
|
|
16
|
+
get '(/wagn)/:id(.:format)' => 'card#read' #/wagn is deprecated
|
|
17
|
+
|
|
18
|
+
|
|
18
19
|
# RESTful
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
post '/' => 'card#create'
|
|
21
|
+
put '/' => 'card#update'
|
|
22
|
+
delete '/' => 'card#delete'
|
|
23
|
+
|
|
23
24
|
match ':id(.:format)' => 'card#create', :via=>:post
|
|
24
25
|
match ':id(.:format)' => 'card#update', :via=>:put
|
|
25
26
|
match ':id(.:format)' => 'card#delete', :via=>:delete
|
|
26
27
|
|
|
27
28
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
28
|
-
# legacy
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
# legacy
|
|
30
|
+
get 'new/:type' => 'card#read', :view=>'new'
|
|
31
|
+
get 'card/:view(/:id(.:format))' => 'card#read', :view=> /new|options|edit/
|
|
32
|
+
|
|
33
|
+
get 'account/signin' => 'card#read', :id=>':signin'
|
|
34
|
+
get 'account/signout' => 'card#delete', :id=>':signin'
|
|
35
|
+
get 'account/signup' => 'card#read', :view=>'new', :card=>{ :type_code=>:signup }
|
|
36
|
+
get 'account/invite' => 'card#read', :view=>'new', :card=>{ :type_code=>:signup }
|
|
37
|
+
get 'account/accept' => 'card#read', :view=>'edit', :card=>{ :type_code=>:signup }
|
|
37
38
|
# use type_code rather than id because in some cases (eg populating test data) routes must get loaded without loading Card
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
get 'admin/stats' => 'card#read', :id=>':stats'
|
|
41
|
+
get 'admin/:task' => 'card#update', :id=>':all'
|
|
41
42
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
42
|
-
|
|
43
|
-
# standard non-RESTful
|
|
44
|
-
match '(card)/:action(/:id(.:format))' => 'card', :action => /create|read|update|delete|asset/
|
|
45
43
|
|
|
44
|
+
# standard non-RESTful
|
|
45
|
+
get '(card)/:action(/:id(.:format))' => 'card', :action => /create|read|update|delete|asset/
|
|
46
|
+
match '(card)/create(/:id(.:format))' => 'card#create', :via=>[:post, :patch]
|
|
47
|
+
match '(card)/update(/:id(.:format))' => 'card#update', :via=>[:post, :put, :patch]
|
|
48
|
+
match '(card)/delete(/:id(.:format))' => 'card#delete', :via=>:delete
|
|
46
49
|
# other
|
|
47
|
-
|
|
50
|
+
get '*id' => 'card#read', :view => 'bad_address'
|
|
48
51
|
|
|
49
52
|
end
|
data/wagn.gemspec
CHANGED
|
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
|
7
7
|
s.version = version
|
|
8
8
|
s.authors = ["Ethan McCutchen", "Lewis Hoffman", "Gerry Gleason", "Philipp Kühl"]
|
|
9
9
|
s.email = ['info@wagn.org']
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
# s.date = '2013-12-20'
|
|
12
12
|
s.summary = "structured wiki web platform"
|
|
13
13
|
s.description = "a wiki approach to stuctured data, dynamic interaction, and web design"
|
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.license = 'GPL'
|
|
16
16
|
|
|
17
17
|
s.files = `git ls-files`.split($/)
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
s.bindir = 'bin'
|
|
20
20
|
s.executables = [ 'wagn' ]
|
|
21
21
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
|
@@ -24,10 +24,10 @@ Gem::Specification.new do |s|
|
|
|
24
24
|
s.required_ruby_version = '>= 1.8.7'
|
|
25
25
|
|
|
26
26
|
[
|
|
27
|
-
[ 'rails', '
|
|
27
|
+
[ 'rails', '~> 4.2' ],
|
|
28
28
|
[ 'card', version ]
|
|
29
29
|
].each do |dep|
|
|
30
30
|
s.add_runtime_dependency *dep
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
end
|
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.
|
|
4
|
+
version: 1.16.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ethan McCutchen
|
|
@@ -11,36 +11,36 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2015-
|
|
14
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: rails
|
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
|
19
19
|
requirements:
|
|
20
|
-
- -
|
|
20
|
+
- - "~>"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version:
|
|
22
|
+
version: '4.2'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
|
-
- -
|
|
27
|
+
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version:
|
|
29
|
+
version: '4.2'
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: card
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
33
|
requirements:
|
|
34
34
|
- - '='
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: 1.
|
|
36
|
+
version: 1.16.0
|
|
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.
|
|
43
|
+
version: 1.16.0
|
|
44
44
|
description: a wiki approach to stuctured data, dynamic interaction, and web design
|
|
45
45
|
email:
|
|
46
46
|
- info@wagn.org
|
|
@@ -794,3 +794,4 @@ test_files:
|
|
|
794
794
|
- test/script/run_engine_deck.sh
|
|
795
795
|
- test/script/run_mig.sh
|
|
796
796
|
- test/test_helper.rb
|
|
797
|
+
has_rdoc:
|