Class: Hocon::Impl::SimpleConfigOrigin
- Inherits:
-
Object
- Object
- Hocon::Impl::SimpleConfigOrigin
- Defined in:
- lib/hocon/impl/simple_config_origin.rb
Constant Summary collapse
- MERGE_OF_PREFIX =
"merge of "
Instance Attribute Summary collapse
-
#comments_or_nil ⇒ Object
readonly
Returns the value of attribute comments_or_nil.
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#end_line_number ⇒ Object
readonly
Returns the value of attribute end_line_number.
-
#line_number ⇒ Object
readonly
Returns the value of attribute line_number.
-
#origin_type ⇒ Object
readonly
Returns the value of attribute origin_type.
-
#url_or_nil ⇒ Object
readonly
Returns the value of attribute url_or_nil.
Class Method Summary collapse
- .merge_origins(stack) ⇒ Object
- .merge_two(a, b) ⇒ Object
- .new_file(file_path) ⇒ Object
- .new_simple(description) ⇒ Object
- .remove_merge_of_prefix(desc) ⇒ Object
Instance Method Summary collapse
- #comments ⇒ Object
-
#initialize(description, line_number, end_line_number, origin_type, url, comments) ⇒ SimpleConfigOrigin
constructor
A new instance of SimpleConfigOrigin.
- #prepend_comments(comments) ⇒ Object
- #set_comments(comments) ⇒ Object
- #set_line_number(line_number) ⇒ Object
Constructor Details
#initialize(description, line_number, end_line_number, origin_type, url, comments) ⇒ SimpleConfigOrigin
Returns a new instance of SimpleConfigOrigin.
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 119 def initialize(description, line_number, end_line_number, origin_type, url, comments) if !description raise ArgumentError, "description may not be nil" end @description = description @line_number = line_number @end_line_number = end_line_number @origin_type = origin_type @url_or_nil = url @comments_or_nil = comments end |
Instance Attribute Details
#comments_or_nil ⇒ Object (readonly)
Returns the value of attribute comments_or_nil.
133 134 135 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 133 def comments_or_nil @comments_or_nil end |
#description ⇒ Object (readonly)
Returns the value of attribute description.
133 134 135 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 133 def description @description end |
#end_line_number ⇒ Object (readonly)
Returns the value of attribute end_line_number.
133 134 135 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 133 def end_line_number @end_line_number end |
#line_number ⇒ Object (readonly)
Returns the value of attribute line_number.
133 134 135 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 133 def line_number @line_number end |
#origin_type ⇒ Object (readonly)
Returns the value of attribute origin_type.
133 134 135 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 133 def origin_type @origin_type end |
#url_or_nil ⇒ Object (readonly)
Returns the value of attribute url_or_nil.
133 134 135 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 133 def url_or_nil @url_or_nil end |
Class Method Details
.merge_origins(stack) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 97 def self.merge_origins(stack) if stack.empty? raise ConfigBugError, "can't merge empty list of origins" elsif stack.length == 1 stack[0] elsif stack.length == 2 merge_two(stack[0], stack[1]) else remaining = stack.clone while remaining.length > 2 merged = merge_three(remaining[0], remaining[1], remaining[2]) remaining.pop remaining.pop remaining.pop end # should be down to either 1 or 2 merge_origins(remaining) end end |
.merge_two(a, b) ⇒ Object
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 29 def self.merge_two(a, b) merged_desc = nil merged_start_line = nil merged_end_line = nil merged_comments = nil merged_type = if a.origin_type == b.origin_type a.origin_type else Hocon::Impl::OriginType.GENERIC end # first use the "description" field which has no line numbers # cluttering it. a_desc = remove_merge_of_prefix(a.description) b_desc = remove_merge_of_prefix(b.description) if a_desc == b_desc merged_desc = a_desc if a.line_number < 0 merged_start_line = b.line_number elsif b.line_number < 0 merged_start_line = a.line_number else merged_start_line = [a.line_number, b.line_number].min end merged_end_line = [a.end_line_number, b.end_line_number].max else # this whole merge song-and-dance was intended to avoid this case # whenever possible, but we've lost. Now we have to lose some # structured information and cram into a string. # # description() method includes line numbers, so use it instead # of description field. a_full = remove_merge_of_prefix(a.description) b_full = remove_merge_of_prefix(b.description) merged_desc = "#{MERGE_OF_PREFIX}#{a_full},#{b_full}" merged_start_line = -1 merged_end_line = -1 end merged_url = if Hocon::Impl::ConfigImplUtil.equals_handling_nil?(a.url_or_nil, b.url_or_nil) a.url_or_nil else nil end if Hocon::Impl::ConfigImplUtil.equals_handling_nil?(a.comments_or_nil, b.comments_or_nil) merged_comments = a.comments_or_nil else merged_comments = [] if a.comments_or_nil merged_comments.concat(a.comments_or_nil) end if b.comments_or_nil merged_comments.concat(b.comments_or_nil) end end Hocon::Impl::SimpleConfigOrigin.new( merged_desc, merged_start_line, merged_end_line, merged_type, merged_url, merged_comments) end |
.new_file(file_path) ⇒ Object
9 10 11 12 13 14 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 9 def self.new_file(file_path) url = URI.join('file:///', file_path) self.new(file_path, -1, -1, Hocon::Impl::OriginType::FILE, url, nil) end |
.new_simple(description) ⇒ Object
16 17 18 19 20 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 16 def self.new_simple(description) self.new(description, -1, -1, Hocon::Impl::OriginType::GENERIC, nil, nil) end |
.remove_merge_of_prefix(desc) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 22 def self.remove_merge_of_prefix(desc) if desc.start_with?(MERGE_OF_PREFIX) desc = desc[MERGE_OF_PREFIX.length, desc.length - 1] end desc end |
Instance Method Details
#comments ⇒ Object
170 171 172 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 170 def comments @comments_or_nil || [] end |
#prepend_comments(comments) ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 157 def prepend_comments(comments) if Hocon::Impl::ConfigImplUtil.equals_handling_nil?(comments, @comments_or_nil) self elsif @comments_or_nil.nil? set_comments(comments) else merged = [] merged.concat(comments) merged.concat(@comments_or_nil) set_comments(merged) end end |
#set_comments(comments) ⇒ Object
147 148 149 150 151 152 153 154 155 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 147 def set_comments(comments) if Hocon::Impl::ConfigImplUtil.equals_handling_nil?(comments, @comments_or_nil) self else Hocon::Impl::SimpleConfigOrigin.new( @description, @line_number, @end_line_number, @origin_type, @url_or_nil, comments) end end |
#set_line_number(line_number) ⇒ Object
136 137 138 139 140 141 142 143 144 145 |
# File 'lib/hocon/impl/simple_config_origin.rb', line 136 def set_line_number(line_number) if (line_number == @line_number) and (line_number == @end_line_number) self else Hocon::Impl::SimpleConfigOrigin.new( @description, line_number, line_number, @origin_type, @url_or_nil, @comments_or_nil) end end |