lm_docstache 3.0.5 → 3.0.10
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/CHANGELOG.md +38 -0
- data/lib/lm_docstache/document.rb +29 -28
- data/lib/lm_docstache/version.rb +1 -1
- data/spec/example_input/ExampleTemplate.docx +0 -0
- data/spec/integration_spec.rb +15 -3
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c0fd5eae0f079701b3e226ae771b1d155adb69e7766dc57e67f54574c3800663
         | 
| 4 | 
            +
              data.tar.gz: 2142350801b95b13ce03d2d9d34d7e077e08b257d938b65c833d25f368530a12
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 716af477b2e3c4c9b85a968836c9af7e698a0d047fb31a2801cc139eebee35968e6e47447dfbda154c70263e7b253a3d1f06aedaf6589ef12c51d9258f9ddc61
         | 
| 7 | 
            +
              data.tar.gz: a85b2b58ca5590a392ff65373250049987ca14c9894fe0ba18e3731d3cb74a706104046f03f5a9053402490c1d664b012ddb74790c30a8226a722e3bc891f5db
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,43 @@ | |
| 1 1 | 
             
            # Changelog
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 3.0.10
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            #### Bug fixes
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Only try to access and set text node's "xml:space" attribute if the text node
         | 
| 8 | 
            +
              exists (in `LMDocstache::Document#flatten_text_blocks` private method).
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            ## 3.0.9
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            #### Bug fixes
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * Text nodes merged in paragraphs with problems through `fix_errors` private
         | 
| 15 | 
            +
              method have now the "xml:space" attribute preserved from now on.
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            ## 3.0.8
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            #### Bug fixes
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            * Fix a bug on `usable_tags` method, so it now properly and expectedly
         | 
| 22 | 
            +
              includes conditional tag names that have its opening tag markup as the sole
         | 
| 23 | 
            +
              content of paragraphs (which represents conditional blocks where both
         | 
| 24 | 
            +
              opening and closing tags are in separate parapraghs sorrounding one or more
         | 
| 25 | 
            +
              paragraphs as its conditional block content).
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            ## 3.0.7
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            #### Bug fixes
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            * Fix a bug on `usable_tag_names` method, so it now properly and expectedly
         | 
| 32 | 
            +
              includes conditional tag names as well, as before.
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ## 3.0.6
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            #### Bug fixes
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            * Fix bug on `LMDocstache::Docstache#unusable_tags` method, where `nil` could be
         | 
| 39 | 
            +
              passed to `broken_tags.deleted_at` call.
         | 
| 40 | 
            +
             | 
| 3 41 | 
             
            ## 3.0.5
         | 
| 4 42 |  | 
| 5 43 | 
             
            #### Bug fixes and improvements
         | 
| @@ -6,6 +6,8 @@ module LMDocstache | |
| 6 6 | 
             
                BLOCK_CHILDREN_ELEMENTS = 'w|r,w|hyperlink,w|ins,w|del'
         | 
| 7 7 | 
             
                RUN_LIKE_ELEMENTS = 'w|r,w|ins'
         | 
| 8 8 |  | 
| 9 | 
            +
                attr_reader :document
         | 
| 10 | 
            +
             | 
| 9 11 | 
             
                def initialize(*paths)
         | 
| 10 12 | 
             
                  raise ArgumentError if paths.empty?
         | 
| 11 13 |  | 
| @@ -38,7 +40,7 @@ module LMDocstache | |
| 38 40 | 
             
                def tags
         | 
| 39 41 | 
             
                  @documents.values.flat_map do |document|
         | 
| 40 42 | 
             
                    document_text = document.text
         | 
| 41 | 
            -
                    extract_tag_names(document_text) + extract_tag_names(document_text,  | 
| 43 | 
            +
                    extract_tag_names(document_text) + extract_tag_names(document_text, :full_block)
         | 
| 42 44 | 
             
                  end
         | 
| 43 45 | 
             
                end
         | 
| 44 46 |  | 
| @@ -47,7 +49,8 @@ module LMDocstache | |
| 47 49 | 
             
                    document.css('w|t').reduce(tags) do |document_tags, text_node|
         | 
| 48 50 | 
             
                      text = text_node.text
         | 
| 49 51 | 
             
                      document_tags.push(*extract_tag_names(text))
         | 
| 50 | 
            -
                      document_tags.push(*extract_tag_names(text,  | 
| 52 | 
            +
                      document_tags.push(*extract_tag_names(text, :start_block))
         | 
| 53 | 
            +
                      document_tags.push(*extract_tag_names(text, :full_block))
         | 
| 51 54 | 
             
                    end
         | 
| 52 55 | 
             
                  end
         | 
| 53 56 | 
             
                end
         | 
| @@ -56,24 +59,16 @@ module LMDocstache | |
| 56 59 | 
             
                  usable_tags.reduce([]) do |memo, tag|
         | 
| 57 60 | 
             
                    next memo if !tag.is_a?(Regexp) && tag =~ ROLES_REGEXP
         | 
| 58 61 |  | 
| 59 | 
            -
                    tag = tag.source if tag.is_a?(Regexp)
         | 
| 62 | 
            +
                    tag = unescape_escaped_start_block(tag.source) if tag.is_a?(Regexp)
         | 
| 60 63 | 
             
                    memo << (tag.scan(GENERAL_TAG_REGEX) && $1)
         | 
| 61 64 | 
             
                  end.compact.uniq
         | 
| 62 65 | 
             
                end
         | 
| 63 66 |  | 
| 64 67 | 
             
                def unusable_tags
         | 
| 65 | 
            -
                  conditional_start_tags = text_nodes_containing_only_starting_conditionals.map(&:text)
         | 
| 66 | 
            -
             | 
| 67 68 | 
             
                  usable_tags.reduce(tags) do |broken_tags, usable_tag|
         | 
| 68 | 
            -
                    broken_tags | 
| 69 | 
            -
                  end.reject do |broken_tag|
         | 
| 70 | 
            -
                    operator = broken_tag.is_a?(Regexp) ? :=~ : :==
         | 
| 71 | 
            -
                    start_tags_index = conditional_start_tags.find_index do |start_tag|
         | 
| 72 | 
            -
                      broken_tag.send(operator, start_tag)
         | 
| 73 | 
            -
                    end
         | 
| 69 | 
            +
                    next broken_tags unless index = broken_tags.index(usable_tag)
         | 
| 74 70 |  | 
| 75 | 
            -
                     | 
| 76 | 
            -
                    !!start_tags_index
         | 
| 71 | 
            +
                    broken_tags.delete_at(index) && broken_tags
         | 
| 77 72 | 
             
                  end
         | 
| 78 73 | 
             
                end
         | 
| 79 74 |  | 
| @@ -112,23 +107,26 @@ module LMDocstache | |
| 112 107 |  | 
| 113 108 | 
             
                private
         | 
| 114 109 |  | 
| 115 | 
            -
                def  | 
| 116 | 
            -
                   | 
| 117 | 
            -
                     | 
| 118 | 
            -
             | 
| 110 | 
            +
                def unescape_escaped_start_block(regex_source_string)
         | 
| 111 | 
            +
                  regex_source_string
         | 
| 112 | 
            +
                    .gsub('\\{', '{')
         | 
| 113 | 
            +
                    .gsub('\\#', '#')
         | 
| 114 | 
            +
                    .gsub('\\}', '}')
         | 
| 115 | 
            +
                    .gsub('\\^', '^')
         | 
| 116 | 
            +
                    .gsub('\\ ', ' ')
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                def extract_tag_names(text, tag_type = :variable)
         | 
| 120 | 
            +
                  text, regex, extractor =
         | 
| 121 | 
            +
                    if tag_type == :variable
         | 
| 122 | 
            +
                      [text, Parser::VARIABLE_MATCHER, ->(match) { "{{%s}}" % match }]
         | 
| 123 | 
            +
                    else
         | 
| 124 | 
            +
                      extractor = ->(match) { /#{Regexp.escape("{{%s%s %s %s}}" % match)}/ }
         | 
| 125 | 
            +
                      tag_type == :full_block ? [text, Parser::BLOCK_MATCHER, extractor] :
         | 
| 126 | 
            +
                        [text.strip, WHOLE_BLOCK_START_REGEX, extractor]
         | 
| 119 127 | 
             
                    end
         | 
| 120 | 
            -
                  end
         | 
| 121 | 
            -
                end
         | 
| 122 128 |  | 
| 123 | 
            -
             | 
| 124 | 
            -
                  if conditional_tag
         | 
| 125 | 
            -
                    text.scan(Parser::BLOCK_MATCHER).map do |match|
         | 
| 126 | 
            -
                      start_block_tag = "{{#{match[0]}#{match[1]} #{match[2]} #{match[3]}}}"
         | 
| 127 | 
            -
                      /#{Regexp.escape(start_block_tag)}/
         | 
| 128 | 
            -
                    end
         | 
| 129 | 
            -
                  else
         | 
| 130 | 
            -
                    text.scan(Parser::VARIABLE_MATCHER).map { |match| "{{#{match[0]}}}" }
         | 
| 131 | 
            -
                  end
         | 
| 129 | 
            +
                  text.scan(regex).map(&extractor)
         | 
| 132 130 | 
             
                end
         | 
| 133 131 |  | 
| 134 132 | 
             
                def render_documents(data, text = nil, render_options = {})
         | 
| @@ -180,7 +178,10 @@ module LMDocstache | |
| 180 178 | 
             
                    next if style_html != previous_style_html
         | 
| 181 179 | 
             
                    next if current_text_node.nil? || previous_text_node.nil?
         | 
| 182 180 |  | 
| 181 | 
            +
                    whitespace_attr = current_text_node['xml:space']
         | 
| 182 | 
            +
                    previous_text_node['xml:space'] = whitespace_attr if whitespace_attr
         | 
| 183 183 | 
             
                    previous_text_node.content = previous_text_node.text + current_text_node.text
         | 
| 184 | 
            +
             | 
| 184 185 | 
             
                    node.unlink
         | 
| 185 186 | 
             
                  end
         | 
| 186 187 | 
             
                end
         | 
    
        data/lib/lm_docstache/version.rb
    CHANGED
    
    
| Binary file | 
    
        data/spec/integration_spec.rb
    CHANGED
    
    | @@ -62,7 +62,7 @@ describe 'integration test', integration: true do | |
| 62 62 | 
             
                it 'fixes nested xml errors breaking tags' do
         | 
| 63 63 | 
             
                  expect { document.fix_errors }.to change {
         | 
| 64 64 | 
             
                    document.send(:problem_paragraphs).size
         | 
| 65 | 
            -
                  }.from( | 
| 65 | 
            +
                  }.from(10).to(1)
         | 
| 66 66 |  | 
| 67 67 | 
             
                  expect(document.send(:problem_paragraphs).first.text).to eq(
         | 
| 68 68 | 
             
                    '{{TAG123-\\-//WITH WE👻IRD CHARS}}'
         | 
| @@ -70,7 +70,18 @@ describe 'integration test', integration: true do | |
| 70 70 | 
             
                end
         | 
| 71 71 |  | 
| 72 72 | 
             
                it 'has the expected amount of usable tags' do
         | 
| 73 | 
            -
                  expect | 
| 73 | 
            +
                  expect { document.fix_errors }.to change {
         | 
| 74 | 
            +
                    document.usable_tags.count
         | 
| 75 | 
            +
                  }.from(29).to(37)
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                it 'keeps "xml:space" attribute when fixing errors' do
         | 
| 79 | 
            +
                  document.fix_errors
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  text_node = document.document.css('w|p').last
         | 
| 82 | 
            +
                    .css('w|t').find { |node| node.text.include?('that occurred on') }
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  expect(text_node['xml:space']).to eq('preserve')
         | 
| 74 85 | 
             
                end
         | 
| 75 86 |  | 
| 76 87 | 
             
                it 'has the expected amount of usable roles tags' do
         | 
| @@ -79,13 +90,14 @@ describe 'integration test', integration: true do | |
| 79 90 | 
             
                end
         | 
| 80 91 |  | 
| 81 92 | 
             
                it 'has the expected amount of unique tag names' do
         | 
| 82 | 
            -
                  expect(document.usable_tag_names.count).to eq( | 
| 93 | 
            +
                  expect(document.usable_tag_names.count).to eq(20)
         | 
| 83 94 | 
             
                end
         | 
| 84 95 |  | 
| 85 96 | 
             
                it 'renders file using data' do
         | 
| 86 97 | 
             
                  document.render_file(output_file, data)
         | 
| 87 98 | 
             
                end
         | 
| 88 99 | 
             
              end
         | 
| 100 | 
            +
             | 
| 89 101 | 
             
              context "testing hide custom tags" do
         | 
| 90 102 | 
             
                before do
         | 
| 91 103 | 
             
                  FileUtils.rm_rf(output_dir) if File.exist?(output_dir)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: lm_docstache
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3.0. | 
| 4 | 
            +
              version: 3.0.10
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Roey Chasman
         | 
| @@ -12,7 +12,7 @@ authors: | |
| 12 12 | 
             
            autorequire:
         | 
| 13 13 | 
             
            bindir: bin
         | 
| 14 14 | 
             
            cert_chain: []
         | 
| 15 | 
            -
            date: 2021- | 
| 15 | 
            +
            date: 2021-07-12 00:00:00.000000000 Z
         | 
| 16 16 | 
             
            dependencies:
         | 
| 17 17 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 18 18 | 
             
              name: nokogiri
         | 
| @@ -148,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 148 148 | 
             
                - !ruby/object:Gem::Version
         | 
| 149 149 | 
             
                  version: '0'
         | 
| 150 150 | 
             
            requirements: []
         | 
| 151 | 
            -
            rubygems_version: 3.0. | 
| 151 | 
            +
            rubygems_version: 3.0.8
         | 
| 152 152 | 
             
            signing_key:
         | 
| 153 153 | 
             
            specification_version: 4
         | 
| 154 154 | 
             
            summary: Merges Hash of Data into Word docx template files using mustache syntax
         |