masterview 0.2.5 → 0.3.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.
- data/CHANGELOG +31 -1
- data/README +70 -69
- data/RELEASE_NOTES +70 -64
- data/Rakefile +26 -27
- data/TODO +13 -29
- data/doc/about.html +246 -0
- data/doc/configuration.html +49 -36
- data/doc/developer.html +423 -41
- data/doc/directives.html +139 -51
- data/doc/guide.html +19 -9
- data/doc/index.html +90 -224
- data/doc/installation.html +36 -28
- data/doc/media_list.html +30 -20
- data/doc/simple_diagram.html +3 -5
- data/doc/stylesheets/masterview.css +16 -1
- data/examples/rails_app_config/masterview/settings.rb +2 -1
- data/init.rb +1 -1
- data/lib/#ChangeLog# +6 -0
- data/lib/masterview/analyzer.rb +48 -34
- data/lib/masterview/attr_string_parser.rb +5 -1
- data/lib/masterview/case_insensitive_hash.rb +69 -0
- data/lib/masterview/{pathname_extensions.rb → core_ext/pathname.rb} +0 -0
- data/lib/masterview/{string_extensions.rb → core_ext/string.rb} +0 -0
- data/lib/masterview/deprecated/directive_base.rb +362 -0
- data/lib/masterview/directive_base.rb +201 -179
- data/lib/masterview/directive_dsl.rb +457 -0
- data/lib/masterview/directive_helpers.rb +28 -141
- data/lib/masterview/directive_load_path.rb +388 -0
- data/lib/masterview/directive_metadata.rb +377 -0
- data/lib/masterview/directive_registry.rb +259 -69
- data/lib/masterview/directives/.metadata +16 -0
- data/lib/masterview/directives/attr.rb +9 -8
- data/lib/masterview/directives/block.rb +11 -14
- data/lib/masterview/directives/check_box.rb +13 -18
- data/lib/masterview/directives/collection_select.rb +15 -29
- data/lib/masterview/directives/content.rb +9 -3
- data/lib/masterview/directives/else.rb +15 -13
- data/lib/masterview/directives/elsif.rb +14 -13
- data/lib/masterview/directives/eval.rb +20 -0
- data/lib/masterview/directives/form.rb +56 -9
- data/lib/masterview/directives/form_remote.rb +26 -0
- data/lib/masterview/directives/global_inline_erb.rb +10 -14
- data/lib/masterview/directives/hidden_field.rb +11 -20
- data/lib/masterview/directives/if.rb +13 -12
- data/lib/masterview/directives/image_tag.rb +20 -28
- data/lib/masterview/directives/import.rb +5 -12
- data/lib/masterview/directives/import_render.rb +7 -19
- data/lib/masterview/directives/insert_generated_comment.rb +8 -11
- data/lib/masterview/directives/javascript_include.rb +21 -12
- data/lib/masterview/directives/link_to.rb +14 -8
- data/lib/masterview/directives/link_to_function.rb +22 -0
- data/lib/masterview/directives/link_to_if.rb +15 -13
- data/lib/masterview/directives/link_to_remote.rb +13 -8
- data/lib/masterview/directives/omit_tag.rb +32 -16
- data/lib/masterview/directives/password_field.rb +10 -22
- data/lib/masterview/directives/radio_button.rb +11 -22
- data/lib/masterview/directives/replace.rb +7 -8
- data/lib/masterview/directives/select.rb +11 -24
- data/lib/masterview/directives/stylesheet_link.rb +20 -12
- data/lib/masterview/directives/submit.rb +11 -5
- data/lib/masterview/directives/text_area.rb +10 -23
- data/lib/masterview/directives/text_field.rb +10 -22
- data/lib/masterview/exceptions.rb +21 -0
- data/lib/masterview/extras/app/controllers/masterview_controller.rb +102 -75
- data/lib/masterview/extras/app/views/layouts/masterview_admin.rhtml +24 -23
- data/lib/masterview/extras/app/views/layouts/masterview_admin_config.rhtml +81 -0
- data/lib/masterview/extras/app/views/masterview/admin/configuration.rhtml +5 -1
- data/lib/masterview/extras/app/views/masterview/admin/create.rhtml +2 -2
- data/lib/masterview/extras/app/views/masterview/admin/directives.rhtml +5 -0
- data/lib/masterview/extras/app/views/masterview/admin/features.rhtml +5 -79
- data/lib/masterview/extras/app/views/masterview/admin/interact.rhtml +5 -0
- data/lib/masterview/extras/app/views/masterview/admin/list.rhtml +3 -71
- data/lib/masterview/extras/init_mv_admin_pages.rb +42 -23
- data/lib/masterview/filter_helpers.rb +26 -0
- data/lib/masterview/initializer.rb +99 -53
- data/lib/masterview/io.rb +19 -15
- data/lib/masterview/keyword_expander.rb +7 -2
- data/lib/masterview/masterview_info.rb +229 -23
- data/lib/masterview/masterview_version.rb +2 -2
- data/lib/masterview/parser.rb +275 -105
- data/lib/masterview/parser_helpers.rb +54 -0
- data/lib/masterview/rails_ext/action_controller_erb_direct.rb +29 -0
- data/lib/masterview/rails_ext/action_controller_reparse_checking.rb +27 -0
- data/lib/masterview/{extras/init_rails_erb_mv_direct.rb → rails_ext/action_view_erb_direct.rb} +12 -59
- data/lib/masterview/template_spec.rb +3 -2
- data/lib/masterview.rb +21 -12
- data/lib/rexml/parsers/baseparser_with_doctype_fix.rb +473 -0
- data/lib/rexml/parsers/sax2parser_with_doctype_fix.rb +243 -0
- data/test/directive_test_helper.rb +135 -0
- data/test/fixtures/directives/id_check.rb +18 -0
- data/test/fixtures/directives/test_directive_events.rb +70 -0
- data/test/test_helper.rb +18 -5
- data/test/tmp/views/layouts/product.rhtml +10 -10
- data/test/tmp/views/product/_form.rhtml +4 -4
- data/test/tmp/views/product/_product.rhtml +3 -3
- data/test/tmp/views/product/destroy.rhtml +5 -5
- data/test/tmp/views/product/edit.rhtml +4 -4
- data/test/tmp/views/product/list.rhtml +3 -3
- data/test/tmp/views/product/new.rhtml +4 -4
- data/test/tmp/views/product/show.rhtml +2 -2
- data/test/unit/attr_string_parser_test.rb +105 -0
- data/test/unit/case_insensitive_hash_mod_test.rb +104 -0
- data/test/unit/config_settings_test.rb +13 -1
- data/test/unit/default_generate_mio_filter_test.rb +3 -3
- data/test/unit/deprecated_directive_base_test.rb +30 -0
- data/test/unit/directive_attr_test.rb +111 -35
- data/test/unit/directive_base_test.rb +520 -1
- data/test/unit/directive_block_test.rb +30 -22
- data/test/unit/directive_content_test.rb +24 -11
- data/test/unit/directive_else_test.rb +18 -15
- data/test/unit/directive_elsif_test.rb +17 -15
- data/test/unit/directive_form_remote_test.rb +59 -0
- data/test/unit/directive_form_test.rb +31 -39
- data/test/unit/directive_global_inline_erb_test.rb +28 -17
- data/test/unit/directive_grid_test_notready.rb +38 -0
- data/test/unit/directive_helpers_test.rb +39 -0
- data/test/unit/directive_hidden_field_test.rb +44 -29
- data/test/unit/directive_if_test.rb +10 -7
- data/test/unit/directive_image_tag_test.rb +69 -61
- data/test/unit/directive_import_render_test.rb +28 -38
- data/test/unit/directive_import_test.rb +16 -14
- data/test/unit/directive_insert_generated_comment_test.rb +32 -0
- data/test/unit/directive_javascript_include_test.rb +40 -43
- data/test/unit/directive_link_to_function_test.rb +40 -0
- data/test/unit/directive_link_to_if_test.rb +52 -12
- data/test/unit/directive_link_to_remote_test.rb +58 -0
- data/test/unit/directive_link_to_test.rb +46 -31
- data/test/unit/directive_load_path_test.rb +257 -0
- data/test/unit/directive_metadata_test.rb +313 -0
- data/test/unit/directive_omit_tag_test.rb +73 -21
- data/test/unit/directive_password_field_test.rb +44 -38
- data/test/unit/directive_registry_test.rb +44 -0
- data/test/unit/directive_replace_test.rb +28 -12
- data/test/unit/directive_stylesheet_link_test.rb +43 -36
- data/test/unit/directive_submit_test.rb +29 -30
- data/test/unit/directive_text_area_test.rb +40 -36
- data/test/unit/directive_text_field_test.rb +44 -38
- data/test/unit/example_directive_child_events_test.rb +41 -0
- data/test/unit/example_test.rb +31 -4
- data/test/unit/file_mio_test.rb +18 -13
- data/test/unit/filter_helpers_test.rb +10 -8
- data/test/unit/find_directive_parent_test.rb +174 -0
- data/test/unit/keyword_expander_test.rb +4 -2
- data/test/unit/mio_test.rb +18 -11
- data/test/unit/mtime_string_hash_mio_tree_test.rb +5 -1
- data/test/unit/parser_test.rb +41 -29
- data/test/unit/pathname_extensions_test.rb +1 -1
- data/test/unit/run_parser_test.rb +2 -2
- data/test/unit/simplified_directive_base_test.rb +256 -0
- data/test/unit/string_hash_mio_test.rb +5 -1
- data/test/unit/template_file_watcher_test.rb +2 -2
- data/test/unit/template_test.rb +221 -46
- metadata +86 -45
- data/lib/masterview/directives/testfilter.rb +0 -55
- data/lib/masterview/extras/init_rails_reparse_checking.rb +0 -62
@@ -4,29 +4,45 @@ module MasterView
|
|
4
4
|
# omit tag if attr_value is empty or if at runtime the condition evaluates to true
|
5
5
|
# mv:omit_tag="" will not render the tag,
|
6
6
|
# mv:omit_tag="true" will not render the tag,
|
7
|
-
# mv:omit_tag="false" will render the tag
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
# mv:omit_tag="false" will render the tag unconditionally
|
8
|
+
# mv:omit_tag="expression" will conditionally render the tag subject to the expression
|
9
|
+
class OmitTag < MasterView::DirectiveBase
|
10
|
+
|
11
|
+
metadata :priority => 'UltraLow',
|
12
|
+
:category => 'general',
|
13
|
+
:description => 'Omits the element\'s tag from the generated output if the value is empty or evaluates to true'
|
14
|
+
|
15
|
+
event :before_stag do
|
16
|
+
# determine whether tag is omitted or included and if latter whether conditional
|
17
|
+
spec = attr_value.strip()
|
18
|
+
@omit_tag = spec.empty? || spec == 'true'
|
19
|
+
@tag_condition = (@omit_tag || spec == 'false' ) ? nil : spec
|
11
20
|
end
|
12
21
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
22
|
+
event :stag do
|
23
|
+
if @omit_tag
|
24
|
+
render :nothing
|
25
|
+
elsif @tag_condition.nil?
|
26
|
+
render render_result
|
27
|
+
else # had something we need to evaluate so wrap tag in condition
|
28
|
+
render erb_eval( 'if', @tag_condition )
|
29
|
+
render render_result
|
30
|
+
render erb_eval( 'end' )
|
19
31
|
end
|
20
32
|
end
|
21
33
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
event :etag do
|
35
|
+
if @omit_tag
|
36
|
+
render :nothing
|
37
|
+
elsif @tag_condition.nil?
|
38
|
+
render render_result
|
39
|
+
else # had something we need to evaluate so wrap tag in condition
|
40
|
+
render erb_eval( 'if', @tag_condition )
|
41
|
+
render render_result
|
42
|
+
render erb_eval( 'end' )
|
28
43
|
end
|
29
44
|
end
|
45
|
+
|
30
46
|
end
|
31
47
|
end
|
32
48
|
end
|
@@ -1,31 +1,19 @@
|
|
1
1
|
module MasterView
|
2
2
|
module Directives
|
3
3
|
|
4
|
-
class
|
5
|
-
def stag(dcs)
|
6
|
-
#eat
|
7
|
-
end
|
8
|
-
|
9
|
-
def etag(dcs)
|
10
|
-
args = parse_attr_value
|
11
|
-
obj = args[0]
|
12
|
-
method = args[1]
|
4
|
+
class PasswordField < MasterView::DirectiveBase
|
13
5
|
|
14
|
-
|
15
|
-
|
6
|
+
metadata :priority => :default,
|
7
|
+
:category => 'form',
|
8
|
+
:description => 'Replaces the element with a password input element using the Rails password_field helper',
|
9
|
+
:element_usage => 'input'
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
options.merge! common_html_options(attrs_lck)
|
21
|
-
remove_strings_from_attr_value!
|
22
|
-
merge_hash_attr_value!(0, options)
|
11
|
+
attr_arg :name, :quote => true
|
12
|
+
attr_arg :method, :quote => true
|
13
|
+
attr_arg :options, :append_element_attrs => [:common_html]
|
23
14
|
|
24
|
-
|
25
|
-
|
26
|
-
a << method
|
27
|
-
a << attr_value unless attr_value.strip.empty?
|
28
|
-
erb_content(a.join(', '))
|
15
|
+
event :element do
|
16
|
+
render erb_content( 'password_field', :name, :method, :options )
|
29
17
|
end
|
30
18
|
|
31
19
|
end
|
@@ -3,31 +3,20 @@ module MasterView
|
|
3
3
|
|
4
4
|
# create radio_button helper, quoting object and method if necessary
|
5
5
|
# merging in any html options specified
|
6
|
-
class
|
7
|
-
def stag(dcs)
|
8
|
-
#eat
|
9
|
-
end
|
10
|
-
|
11
|
-
def etag(dcs)
|
12
|
-
args = parse_attr_value
|
13
|
-
obj = args[0]
|
14
|
-
method = args[1]
|
15
|
-
tag_value = args[2]
|
6
|
+
class RadioButton < MasterView::DirectiveBase
|
16
7
|
|
17
|
-
|
18
|
-
|
8
|
+
metadata :priority => :default,
|
9
|
+
:category => 'form',
|
10
|
+
:description => 'Replaces the element with a Rails radio_button helper.',
|
11
|
+
:element_usage => 'input'
|
19
12
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
attr_arg :name, :quote => true
|
14
|
+
attr_arg :method, :quote => true
|
15
|
+
attr_arg :value
|
16
|
+
attr_arg :options, :append_element_attrs => [:common_html]
|
24
17
|
|
25
|
-
|
26
|
-
|
27
|
-
a << method
|
28
|
-
a << tag_value
|
29
|
-
a << attr_value unless attr_value.strip.empty?
|
30
|
-
erb_content(a.join(', '))
|
18
|
+
event :element do
|
19
|
+
render erb_content( 'radio_button', :name, :method, :value, :options )
|
31
20
|
end
|
32
21
|
|
33
22
|
end
|
@@ -2,17 +2,16 @@ module MasterView
|
|
2
2
|
module Directives
|
3
3
|
|
4
4
|
class Replace < MasterView::DirectiveBase
|
5
|
-
def priority
|
6
|
-
DirectivePriorities::MediumLow
|
7
|
-
end
|
8
5
|
|
9
|
-
|
10
|
-
|
6
|
+
metadata :priority => 'MediumLow',
|
7
|
+
:category => 'general',
|
8
|
+
:description => 'Replaces the element and its content with the value of the expression'
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
erb_content(attr_value)
|
10
|
+
# replace the entire element with <%= attr_value %>
|
11
|
+
event :element do
|
12
|
+
render erb_content( attr_value )
|
15
13
|
end
|
14
|
+
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
@@ -4,33 +4,20 @@ module MasterView
|
|
4
4
|
# creates a select helper. quotes object and method if necessary, merges
|
5
5
|
# html options specfied on element into any html options in attr_value
|
6
6
|
class Select < MasterView::DirectiveBase
|
7
|
-
def stag(dcs)
|
8
|
-
#eat
|
9
|
-
end
|
10
|
-
|
11
|
-
def etag(dcs)
|
12
|
-
args = parse_attr_value
|
13
|
-
obj = args[0]
|
14
|
-
method = args[1]
|
15
|
-
choices = args[2]
|
16
|
-
|
17
|
-
obj = quote_if(obj)
|
18
|
-
method = quote_if(method)
|
19
7
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
merge_hash_attr_value!(1, options)
|
8
|
+
metadata :priority => :default,
|
9
|
+
:category => 'form',
|
10
|
+
:description => 'Replaces the element with a Rails select helper.',
|
11
|
+
:element_usage => 'select'
|
25
12
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
13
|
+
attr_arg :obj, :quote => true
|
14
|
+
attr_arg :method, :quote => true
|
15
|
+
attr_arg :choices, :default => []
|
16
|
+
attr_arg :options, :default => {}
|
17
|
+
attr_arg :html_options, :append_element_attrs => [:common_html]
|
31
18
|
|
32
|
-
|
33
|
-
erb_content(
|
19
|
+
event :element do
|
20
|
+
render erb_content( 'select', :obj, :method, :choices, :options, :html_options )
|
34
21
|
end
|
35
22
|
|
36
23
|
end
|
@@ -2,24 +2,32 @@ module MasterView
|
|
2
2
|
module Directives
|
3
3
|
|
4
4
|
#creates a link_to
|
5
|
-
class
|
5
|
+
class StylesheetLink < MasterView::DirectiveBase
|
6
6
|
|
7
7
|
# /public\/stylesheets\/(.*)/
|
8
|
-
STYLESHEET_SRC_EXTRACT_REGEX = MasterView::ConfigSettings.template_asset_base_ref_pattern[:stylesheets]
|
8
|
+
STYLESHEET_SRC_EXTRACT_REGEX = MasterView::ConfigSettings.template_asset_base_ref_pattern[:stylesheets]
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
metadata :priority => :default,
|
11
|
+
:category => 'asset',
|
12
|
+
:description => 'Replaces the element using the Rails stylesheet_link_tag helper',
|
13
|
+
:element_usage => 'link'
|
14
|
+
|
15
|
+
attr_arg :src, :varargs => true
|
12
16
|
|
13
|
-
|
14
|
-
src
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
event :element do
|
18
|
+
if @src.nil? or @src.empty?
|
19
|
+
if src_attr = element_attrs[:src]
|
20
|
+
if match = STYLESHEET_SRC_EXTRACT_REGEX.match(src_attr)
|
21
|
+
@src = [match[1]]
|
22
|
+
else
|
23
|
+
@src = [src_attr]
|
24
|
+
end
|
25
|
+
end
|
20
26
|
end
|
21
|
-
|
27
|
+
@src.collect! { |x| quote(x) }
|
28
|
+
render erb_content('stylesheet_link_tag', :src)
|
22
29
|
end
|
30
|
+
|
23
31
|
end
|
24
32
|
|
25
33
|
end
|
@@ -2,13 +2,19 @@ module MasterView
|
|
2
2
|
module Directives
|
3
3
|
|
4
4
|
class Submit < MasterView::DirectiveBase
|
5
|
-
def stag(directive_call_stack); end
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
metadata :priority => :default,
|
7
|
+
:category => 'form',
|
8
|
+
:description => 'Replaces the element with a submit input element using the Rails submit_tag helper.',
|
9
|
+
:element_usage => 'input'
|
10
|
+
|
11
|
+
attr_arg :text do |x,args,inst| if (x and x.include?('=>')) : args.unshift(x); end; inst.quote(inst.element_attrs[:value]) end # if hash found push it back on, override with quoted element_attrs[:value]
|
12
|
+
attr_arg :options, :append_element_attrs => [:common_html]
|
13
|
+
|
14
|
+
event :element do
|
15
|
+
render erb_content( 'submit_tag', :text, :options )
|
11
16
|
end
|
17
|
+
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
@@ -1,32 +1,19 @@
|
|
1
1
|
module MasterView
|
2
2
|
module Directives
|
3
3
|
|
4
|
-
class
|
5
|
-
def stag(dcs)
|
6
|
-
#eat
|
7
|
-
end
|
8
|
-
|
9
|
-
def etag(dcs)
|
10
|
-
args = parse_attr_value
|
11
|
-
obj = args[0]
|
12
|
-
method = args[1]
|
4
|
+
class TextArea < MasterView::DirectiveBase
|
13
5
|
|
14
|
-
|
15
|
-
|
6
|
+
metadata :priority => :default,
|
7
|
+
:category => 'form',
|
8
|
+
:description => 'Replaces the element with a textarea input element using the Rails text_area helper.',
|
9
|
+
:element_usage => 'textarea'
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
options.merge! common_html_options(attrs_lck)
|
21
|
-
remove_strings_from_attr_value!
|
22
|
-
merge_hash_attr_value!(0, options)
|
11
|
+
attr_arg :obj, :quote => true
|
12
|
+
attr_arg :method, :quote => true
|
13
|
+
attr_arg :options, :append_element_attrs => [:common_html]
|
23
14
|
|
24
|
-
|
25
|
-
|
26
|
-
a << method
|
27
|
-
a << attr_value unless attr_value.strip.empty?
|
28
|
-
self.content=''
|
29
|
-
erb_content(a.join(', '))
|
15
|
+
event :element do
|
16
|
+
render erb_content( 'text_area', :obj, :method, :options )
|
30
17
|
end
|
31
18
|
|
32
19
|
end
|
@@ -1,31 +1,19 @@
|
|
1
1
|
module MasterView
|
2
2
|
module Directives
|
3
3
|
|
4
|
-
class
|
5
|
-
def stag(dcs)
|
6
|
-
#eat
|
7
|
-
end
|
8
|
-
|
9
|
-
def etag(dcs)
|
10
|
-
args = parse_attr_value
|
11
|
-
obj = args[0]
|
12
|
-
method = args[1]
|
4
|
+
class TextField < MasterView::DirectiveBase
|
13
5
|
|
14
|
-
|
15
|
-
|
6
|
+
metadata :priority => :default,
|
7
|
+
:category => 'form',
|
8
|
+
:description => 'Replaces the element with a text input element using the Rails text_field helper.',
|
9
|
+
:element_usage => 'textarea'
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
options.merge! common_html_options(attrs_lck)
|
21
|
-
remove_strings_from_attr_value!
|
22
|
-
merge_hash_attr_value!(0, options)
|
11
|
+
attr_arg :obj, :quote => true
|
12
|
+
attr_arg :method, :quote => true
|
13
|
+
attr_arg :options, :append_element_attrs => [:common_html]
|
23
14
|
|
24
|
-
|
25
|
-
|
26
|
-
a << method
|
27
|
-
a << attr_value unless attr_value.strip.empty?
|
28
|
-
erb_content(a.join(', '))
|
15
|
+
event :element do
|
16
|
+
render erb_content( 'text_field', :obj, :method, :options )
|
29
17
|
end
|
30
18
|
|
31
19
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module MasterView
|
2
|
+
|
3
|
+
# Raised when an invalid path is encountered.
|
4
|
+
#
|
5
|
+
# Used by both directive loading and template IO processing.
|
6
|
+
#
|
7
|
+
class InvalidPathError < RuntimeError
|
8
|
+
|
9
|
+
# the file system path
|
10
|
+
def path
|
11
|
+
@path || nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize( path, err_msg)
|
15
|
+
super(err_msg)
|
16
|
+
@path = path.to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|