wagn 1.13.0.pre1 → 1.13.0.pre2
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/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
|