wagn 1.13.0.pre1 → 1.13.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/controllers/card_controller.rb +3 -3
- data/db/migrate_cards/20140307231621_user_data_to_cards.rb +5 -1
- data/lib/card.rb +5 -7
- data/lib/card/chunk.rb +1 -0
- data/lib/card/codename.rb +48 -31
- data/lib/card/env.rb +0 -1
- data/lib/card/exceptions.rb +3 -3
- data/lib/card/format.rb +89 -166
- data/lib/card/generators/set/USAGE +1 -1
- data/lib/card/loader.rb +1 -1
- data/lib/card/set.rb +196 -112
- data/lib/card/set_pattern.rb +37 -71
- data/lib/wagn/cache.rb +8 -7
- data/lib/wagn/commands.rb +1 -1
- data/lib/wagn/config/environments/development.rb +1 -1
- data/lib/wagn/config/initializers/paperclip.rb +1 -0
- data/lib/wagn/generators/wagn/templates/Gemfile +59 -55
- data/lib/wagn/location.rb +2 -2
- data/mods/core/formats/html_format.rb +2 -6
- data/mods/core/formats/text_format.rb +1 -1
- data/mods/core/set_patterns/01_all.rb +0 -5
- data/mods/core/set_patterns/02_all_plus.rb +1 -3
- data/mods/core/set_patterns/07_type_plus_right.rb +0 -1
- data/mods/core/sets/all/active_card.rb +1 -1
- data/mods/core/sets/all/name.rb +3 -2
- data/mods/core/sets/all/pattern.rb +9 -23
- data/mods/core/sets/all/phases.rb +27 -13
- data/mods/core/sets/all/rules.rb +3 -3
- data/mods/core/sets/all/templating.rb +5 -2
- data/mods/core/sets/all/tracked_attributes.rb +2 -1
- data/mods/core/sets/right/structure.rb +13 -0
- data/mods/{standard → core}/sets/type/plain_text.rb +0 -0
- data/mods/standard/formats/email_html_format.rb +1 -1
- data/mods/standard/lib/card/machine.rb +16 -12
- data/mods/standard/lib/card/machine_input.rb +1 -1
- data/mods/standard/sets/all/attach.rb +1 -1
- data/mods/standard/sets/all/base.rb +92 -94
- data/mods/standard/sets/all/follow.rb +1 -1
- data/mods/standard/sets/all/rich_html.rb +5 -3
- data/mods/standard/sets/all/rss.rb +12 -5
- data/mods/standard/sets/right/account.rb +1 -1
- data/mods/standard/sets/right/add_help.rb +3 -1
- data/mods/standard/sets/right/comment.rb +92 -3
- data/mods/standard/sets/right/create.rb +2 -87
- data/mods/standard/sets/right/default.rb +3 -2
- data/mods/standard/sets/right/delete.rb +2 -5
- data/mods/standard/sets/right/help.rb +3 -1
- data/mods/standard/sets/right/machine_output.rb +9 -7
- data/mods/standard/sets/right/read.rb +2 -5
- data/mods/standard/sets/right/style.rb +3 -2
- data/mods/standard/sets/right/update.rb +2 -5
- data/mods/standard/sets/rstar/rules.rb +0 -2
- data/mods/standard/sets/self/head.rb +2 -3
- data/mods/standard/sets/self/navbox.rb +0 -7
- data/mods/standard/sets/self/recent.rb +2 -2
- data/mods/standard/sets/self/search.rb +10 -3
- data/mods/standard/sets/self/signin.rb +3 -3
- data/mods/standard/sets/type/cardtype.rb +2 -2
- data/mods/standard/sets/type/coffee_script.rb +4 -4
- data/mods/standard/sets/type/css.rb +12 -4
- data/mods/standard/sets/type/image.rb +19 -19
- data/mods/standard/sets/type/java_script.rb +1 -1
- data/mods/standard/sets/type/layout_type.rb +3 -2
- data/mods/standard/sets/type/pointer.rb +3 -2
- data/mods/standard/sets/type/scss.rb +6 -34
- data/mods/standard/sets/type/search_type.rb +22 -16
- data/mods/standard/sets/type/set.rb +2 -2
- data/mods/standard/sets/type/setting.rb +2 -2
- data/mods/standard/sets/type/skin.rb +4 -18
- data/spec/controllers/card_controller_spec.rb +2 -2
- data/spec/lib/card/flexmail_spec.rb +1 -0
- data/spec/lib/card/format_spec.rb +9 -9
- data/spec/lib/card/loader_spec.rb +1 -2
- data/spec/lib/card/name_spec.rb +7 -1
- data/spec/lib/card/set_pattern_spec.rb +5 -5
- data/spec/mods/core/sets/all/pattern_spec.rb +0 -9
- data/spec/mods/core/sets/all/phases_spec.rb +2 -1
- data/spec/mods/standard/lib/machine_input_spec.rb +20 -4
- data/spec/mods/standard/lib/machine_spec.rb +64 -14
- data/spec/mods/standard/sets/right/machine_output_spec.rb +2 -17
- data/spec/mods/standard/sets/right/script_spec.rb +9 -5
- data/spec/mods/standard/sets/right/style_spec.rb +11 -5
- data/spec/mods/standard/sets/type/coffeescript_spec.rb +5 -7
- data/spec/mods/standard/sets/type/css_spec.rb +3 -4
- data/spec/mods/standard/sets/type/javascript_spec.rb +3 -5
- data/spec/mods/standard/sets/type/scss_spec.rb +4 -7
- data/spec/mods/standard/sets/type/skin_spec.rb +29 -8
- metadata +5 -4
- data/mods/standard/sets/right/structure.rb +0 -12
data/lib/wagn/cache.rb
CHANGED
@@ -59,6 +59,14 @@ module Wagn
|
|
59
59
|
Card.delete_tmp_files
|
60
60
|
end
|
61
61
|
|
62
|
+
def reset_local
|
63
|
+
cache_by_class.each do |cc, cache|
|
64
|
+
if Wagn::Cache===cache
|
65
|
+
cache.reset_local
|
66
|
+
else warn "reset class #{cc}, #{cache.class} #{caller[0..8]*"\n"} ???" end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
62
70
|
private
|
63
71
|
|
64
72
|
def prepopulate
|
@@ -71,13 +79,6 @@ module Wagn
|
|
71
79
|
end
|
72
80
|
|
73
81
|
|
74
|
-
def reset_local
|
75
|
-
cache_by_class.each do |cc, cache|
|
76
|
-
if Wagn::Cache===cache
|
77
|
-
cache.reset_local
|
78
|
-
else warn "reset class #{cc}, #{cache.class} #{caller[0..8]*"\n"} ???" end
|
79
|
-
end
|
80
|
-
end
|
81
82
|
|
82
83
|
end
|
83
84
|
|
data/lib/wagn/commands.rb
CHANGED
@@ -7,7 +7,7 @@ Wagn.application.class.configure do
|
|
7
7
|
# every request. This slows down response time but is perfect for development
|
8
8
|
# since you don't have to restart the web server when you make code changes.
|
9
9
|
config.cache_classes = false
|
10
|
-
|
10
|
+
|
11
11
|
# Log error messages when you accidentally call methods on nil.
|
12
12
|
config.whiny_nils = true
|
13
13
|
|
@@ -0,0 +1 @@
|
|
1
|
+
Paperclip::Attachment.default_options[:use_timestamp] = false
|
@@ -5,68 +5,72 @@ gem 'wagn'<%= ", :path=>'#{@wagn_path}'" if @wagn_path.present? %>
|
|
5
5
|
<%= database_gemfile_entry -%>
|
6
6
|
|
7
7
|
<% if options['mod-dev'] %>
|
8
|
+
|
9
|
+
group :test do
|
8
10
|
gem 'rspec-rails', "~> 2.6" # behavior-driven-development suite
|
9
11
|
gem 'spork', '>=0.9'
|
12
|
+
end
|
13
|
+
|
10
14
|
<% end %>
|
11
|
-
|
12
15
|
<% if options['core-dev'] %>
|
13
|
-
group :assets do
|
14
|
-
gem 'jquery-rails', '~> 3.1' # main js framework, along with rails-specific unobtrusive lib
|
15
|
-
gem 'jquery-ui-rails', '~> 4.2' # main js framework, along with rails-specific unobtrusive lib
|
16
|
-
gem "jquery_mobile_rails", "~> 1.4.1"
|
17
|
-
|
18
|
-
gem 'tinymce-rails', '~> 3.4' # wysiwyg editor
|
19
|
-
|
20
|
-
# execjs is necessary for developing coffeescript. mac users have execjs built-in; don't need this one
|
21
|
-
gem 'therubyrhino', :platform=>:ruby # :ruby is MRI rubies, so if you use a mac ruby ...
|
22
|
-
end
|
23
16
|
|
17
|
+
group :assets do
|
18
|
+
gem 'jquery-rails', '~> 3.1' # main js framework, along with rails-specific unobtrusive lib
|
19
|
+
gem 'jquery-ui-rails', '~> 4.2' # main js framework, along with rails-specific unobtrusive lib
|
20
|
+
gem "jquery_mobile_rails", "~> 1.4.1"
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
22
|
+
gem 'tinymce-rails', '~> 3.4' # wysiwyg editor
|
23
|
+
|
24
|
+
# execjs is necessary for developing coffeescript. mac users have execjs built-in; don't need this one
|
25
|
+
gem 'therubyrhino', :platform=>:ruby # :ruby is MRI rubies, so if you use a mac ruby ...
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
group :test do
|
30
|
+
gem 'simplecov', '~> 0.7.1', :require => false #test coverage
|
31
|
+
|
32
|
+
# SPECS see spec dir
|
33
|
+
gem 'rspec-rails', "~> 2.6" # behavior-driven-development suite
|
34
|
+
|
35
|
+
gem 'guard-rspec', '~> 4.2' # trigger test runs based on file edits
|
36
|
+
if RUBY_PLATFORM =~ /darwin/
|
37
|
+
gem 'terminal-notifier-guard', '~> 1.5' # use growler notifications on macs
|
38
|
+
end
|
39
|
+
|
40
|
+
# CUKES see features dir
|
41
|
+
gem 'cucumber-rails', '~> 1.3', :require=>false # feature-driven-development suite
|
42
|
+
gem 'capybara', '~> 2.2.1' # note, selectors were breaking when we used 2.0.1
|
43
|
+
gem 'selenium-webdriver', '~> 2.39'
|
44
|
+
# gem 'capybara-webkit'
|
45
|
+
gem 'launchy' # lets cucumber launch browser windows
|
46
|
+
|
47
|
+
gem 'timecop', '=0.3.5' # not clear on use/need. referred to in shared_data.rb
|
48
|
+
# NOTE: had weird errors with timecop 0.4.4. would like to update when possible
|
49
|
+
|
50
|
+
gem 'spork', '>=0.9'
|
51
|
+
|
52
|
+
gem 'rr'#, '=1.0.0'
|
53
|
+
|
54
|
+
gem 'email_spec' #
|
55
|
+
gem 'database_cleaner', '~> 0.7' # used by cucumber for db transactions
|
56
|
+
|
57
|
+
gem 'turn', "~>0.8.3", :require => false # Pretty printed test output. (version constraint is to avoid minitest requirement)
|
58
|
+
gem 'minitest', "~>4.0"
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
#windows stuff
|
63
|
+
gem 'win32console', '~> 1.3', :platforms => ['mingw', 'mswin']
|
64
|
+
gem 'win32-process', '~> 0.6', :platforms => ['mingw', 'mswin']
|
65
|
+
end
|
62
66
|
|
63
|
-
|
67
|
+
gem 'ruby-prof', '~>0.12.1', :group=>:profile # profiling
|
64
68
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
69
|
+
group :debug do
|
70
|
+
if RUBY_VERSION =~ /^2/
|
71
|
+
gem 'byebug'
|
72
|
+
else
|
73
|
+
gem 'debugger'
|
71
74
|
end
|
75
|
+
end
|
72
76
|
<% end %>
|
data/lib/wagn/location.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
# helper for urls, links, redirects, and other location related things.
|
3
3
|
# note: i'm sure this isn't the optimal name..
|
4
|
+
|
4
5
|
module Wagn::Location
|
5
6
|
|
6
7
|
# we keep a history stack so that in the case of card removal
|
@@ -17,8 +18,7 @@ module Wagn::Location
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def save_location
|
20
|
-
return if ajax? || !html? || !@card.known?
|
21
|
-
|
21
|
+
return if ajax? || !html? || !@card.known? || (@card.codename == 'signin')
|
22
22
|
discard_locations_for @card
|
23
23
|
@previous_location = wagn_path @card
|
24
24
|
location_history.push @previous_location
|
@@ -34,8 +34,8 @@ class Card
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def commentable? view, args
|
37
|
-
self.class.tagged view, :comment
|
38
|
-
show_view? :comment_box, args
|
37
|
+
self.class.tagged view, :comment and
|
38
|
+
show_view? :comment_box, args.merge( :default_visibility=>:hide ) and #developer or wagneer has overridden default
|
39
39
|
ok? :comment
|
40
40
|
end
|
41
41
|
|
@@ -211,10 +211,6 @@ class Card
|
|
211
211
|
}
|
212
212
|
end
|
213
213
|
|
214
|
-
def unknown_view view
|
215
|
-
"<strong>unknown view: <em>#{view}</em></strong>"
|
216
|
-
end
|
217
|
-
|
218
214
|
def unsupported_view view
|
219
215
|
"<strong>view <em>#{view}</em> not supported for <em>#{error_cardname}</em></strong>"
|
220
216
|
end
|
data/mods/core/sets/all/name.rb
CHANGED
@@ -136,9 +136,10 @@ event :validate_unique_codename, :after=>:permit_codename do
|
|
136
136
|
end
|
137
137
|
|
138
138
|
event :validate_name, :before=>:approve, :on=>:save do
|
139
|
-
|
140
139
|
cdname = name.to_name
|
141
|
-
if
|
140
|
+
if name.length > 255
|
141
|
+
errors.add :name, "is too long (255 character maximum)"
|
142
|
+
elsif cdname.blank?
|
142
143
|
errors.add :name, "can't be blank"
|
143
144
|
elsif name_changed?
|
144
145
|
#Rails.logger.debug "valid name #{card.name.inspect} New #{name.inspect}"
|
@@ -1,21 +1,3 @@
|
|
1
|
-
MODULES={}
|
2
|
-
|
3
|
-
module ClassMethods
|
4
|
-
|
5
|
-
def find_set_pattern mark
|
6
|
-
if mark
|
7
|
-
class_key = if Card::Name === mark
|
8
|
-
key_card = Card.fetch mark.to_name.tag_name, :skip_modules=>true
|
9
|
-
key_card && key_card.codename
|
10
|
-
else
|
11
|
-
mark.to_s
|
12
|
-
end
|
13
|
-
set_patterns.find { |sub| sub.key == class_key }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
1
|
|
20
2
|
def patterns
|
21
3
|
@patterns ||= set_patterns.map { |sub| sub.new(self) }.compact
|
@@ -27,7 +9,7 @@ end
|
|
27
9
|
alias_method_chain :patterns, :new
|
28
10
|
|
29
11
|
def reset_patterns
|
30
|
-
@set_mods_loaded = @patterns = @set_modules = @junction_only = @
|
12
|
+
@set_mods_loaded = @patterns = @set_modules = @junction_only = @set_names = @template = @rule_set_keys = @virtual = nil
|
31
13
|
true
|
32
14
|
end
|
33
15
|
|
@@ -49,7 +31,14 @@ def safe_set_keys
|
|
49
31
|
end
|
50
32
|
|
51
33
|
def set_modules
|
52
|
-
@set_modules ||= patterns_without_new[0..-2].reverse.map(&:
|
34
|
+
@set_modules ||= patterns_without_new[0..-2].reverse.map(&:module_list).flatten.compact
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_format_modules klass
|
38
|
+
@set_format_modules ||= {}
|
39
|
+
@set_format_modules[klass] = patterns_without_new[0..-2].reverse.map do |pattern|
|
40
|
+
pattern.format_module_list klass
|
41
|
+
end.flatten.compact
|
53
42
|
end
|
54
43
|
|
55
44
|
def set_names
|
@@ -65,6 +54,3 @@ def rule_set_keys
|
|
65
54
|
@rule_set_keys ||= patterns.map( &:rule_set_key ).compact
|
66
55
|
end
|
67
56
|
|
68
|
-
def method_keys
|
69
|
-
@method_keys ||= patterns.map(&:get_method_key).compact
|
70
|
-
end
|
@@ -1,15 +1,33 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
2
|
+
# The Card#abort method is for cleanly exiting an action without continuing to process any further events.
|
3
|
+
#
|
4
|
+
# Three statuses are supported:
|
5
|
+
#
|
6
|
+
# failure: adds an error, returns false on save
|
7
|
+
# success: no error, returns true on save
|
8
|
+
# triumph: similar to success, but if called on a subcard it causes the entire action to abort (not just the subcard)
|
9
|
+
|
10
|
+
def abort status, msg='action canceled'
|
11
|
+
if status == :failure && errors.empty?
|
12
|
+
errors.add :abort, msg
|
13
|
+
end
|
14
|
+
raise Card::Abort.new( status, msg)
|
4
15
|
end
|
5
16
|
|
17
|
+
|
6
18
|
def abortable
|
7
19
|
yield
|
8
20
|
rescue Card::Abort => e
|
9
|
-
|
10
|
-
|
21
|
+
if e.status == :triumph
|
22
|
+
@supercard ? raise( e ) : true
|
23
|
+
else
|
24
|
+
e.status == :success
|
25
|
+
end
|
11
26
|
end
|
12
27
|
|
28
|
+
def valid_subcard?
|
29
|
+
abortable { valid? }
|
30
|
+
end
|
13
31
|
|
14
32
|
# this is an override of standard rails behavior that rescues abortmakes it so that :success abortions do not rollback
|
15
33
|
def with_transaction_returning_status
|
@@ -22,12 +40,8 @@ def with_transaction_returning_status
|
|
22
40
|
status
|
23
41
|
end
|
24
42
|
|
25
|
-
|
26
|
-
|
27
|
-
errors.add :abort, msg
|
28
|
-
end
|
29
|
-
raise Card::Abort.new( status, msg)
|
30
|
-
end
|
43
|
+
# perhaps above should be in separate module?
|
44
|
+
#~~~~~~
|
31
45
|
|
32
46
|
def approve
|
33
47
|
@action = identify_action
|
@@ -39,7 +53,7 @@ def approve
|
|
39
53
|
run_callbacks :approve
|
40
54
|
expire_pieces if errors.any?
|
41
55
|
errors.empty?
|
42
|
-
rescue
|
56
|
+
rescue =>e
|
43
57
|
rescue_event e
|
44
58
|
end
|
45
59
|
|
@@ -56,7 +70,7 @@ def store
|
|
56
70
|
yield
|
57
71
|
@virtual = false
|
58
72
|
end
|
59
|
-
rescue
|
73
|
+
rescue =>e
|
60
74
|
rescue_event e
|
61
75
|
ensure
|
62
76
|
@from_trash = nil
|
@@ -66,7 +80,7 @@ end
|
|
66
80
|
def extend
|
67
81
|
# puts "extend called"
|
68
82
|
run_callbacks :extend
|
69
|
-
rescue
|
83
|
+
rescue =>e
|
70
84
|
rescue_event e
|
71
85
|
ensure
|
72
86
|
@action = nil
|
data/mods/core/sets/all/rules.rb
CHANGED
@@ -44,9 +44,9 @@ def related_sets
|
|
44
44
|
# refers to sets that users may configure from the current card - NOT to sets to which the current card belongs
|
45
45
|
|
46
46
|
sets = []
|
47
|
-
sets << ["#{name}+*type", Card::
|
48
|
-
sets << ["#{name}+*self", Card::
|
49
|
-
sets << ["#{name}+*right", Card::
|
47
|
+
sets << ["#{name}+*type", Card::TypeSet.label( name) ] if known? && type_id==Card::CardtypeID
|
48
|
+
sets << ["#{name}+*self", Card::SelfSet.label( name) ]
|
49
|
+
sets << ["#{name}+*right", Card::RightSet.label(name) ] if known? && cardname.simple?
|
50
50
|
|
51
51
|
# Card.search(:type=>'Set',:left=>{:right=>name},:right=>'*type plus right',:return=>'name').each do |set_name|
|
52
52
|
# sets<< set_name
|
@@ -91,8 +91,11 @@ def assigns_type?
|
|
91
91
|
# for example, X+*type+*structure governs all cards of type X,
|
92
92
|
# but the content rule does not (in fact cannot) have the type X.
|
93
93
|
if is_structure?
|
94
|
-
|
95
|
-
|
94
|
+
if set_pattern = Card.fetch( cardname.trunk_name.tag_name, :skip_modules=>true )
|
95
|
+
pattern_code = set_pattern.codename and
|
96
|
+
set_class = Card::SetPattern.find( pattern_code ) and
|
97
|
+
set_class.assigns_type
|
98
|
+
end
|
96
99
|
end
|
97
100
|
end
|
98
101
|
|
@@ -50,6 +50,7 @@ def set_content new_content
|
|
50
50
|
clear_drafts if current_revision_id
|
51
51
|
new_rev = Card::Revision.create :card_id=>self.id, :content=>new_content, :creator_id =>Auth.current_id
|
52
52
|
self.current_revision_id = new_rev.id
|
53
|
+
self.selected_revision_id = nil
|
53
54
|
reset_patterns_if_rule saving=true
|
54
55
|
@name_or_content_changed = true
|
55
56
|
else
|
@@ -102,7 +103,7 @@ event :update_ruled_cards, :after=>:store do
|
|
102
103
|
in_set = {}
|
103
104
|
if !(self.trash)
|
104
105
|
if class_id = (set=left and set_class=set.tag and set_class.id)
|
105
|
-
rule_class_ids = set_patterns.map &:
|
106
|
+
rule_class_ids = set_patterns.map &:pattern_id
|
106
107
|
#warn "rule_class_id #{class_id}, #{rule_class_ids.inspect}"
|
107
108
|
|
108
109
|
#first update all cards in set that aren't governed by narrower rule
|