theo-rails 0.5.2 → 0.5.3
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/lib/theo-rails/theo.rb +25 -21
- metadata +17 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8e0ab52b01e897648f607bf041e5359c2806e2b3e5c99ffd235bedd6b8b72409
         | 
| 4 | 
            +
              data.tar.gz: 634201a3d407430d17ae551a1e424d997468a1cdf9653d74197d7be55453a73e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7083141582de9a0c31441f847b5d2058f2bff0622caa14972b65377c8767811525ddbde2b172f4dafeec784633a09913aee9b2bf85cad07d0362dcb42bb442e0
         | 
| 7 | 
            +
              data.tar.gz: 6416d6961d28ae4ae105fad90ca2a3fb1478c19036ecbcd7179bd9ef3b802ef4a0a496a0fa841e185ce978dd39b28e050fb0b2a3b4aeb851f045a7502f340747
         | 
    
        data/lib/theo-rails/theo.rb
    CHANGED
    
    | @@ -6,29 +6,40 @@ module Theo | |
| 6 6 |  | 
| 7 7 | 
             
                ATTRIBUTE_NAME = /(?<name>[\w:@_%][-\w:@_.]*)/
         | 
| 8 8 | 
             
                ATTRIBUTE_VALUE = /(?:(?:"(?<value>[^"]*)")|(?:'(?<value>[^']*)'))/
         | 
| 9 | 
            -
                ATTRIBUTE = /(?:(?:#{ATTRIBUTE_NAME.source}\s*=\s*#{attribute_value})|#{ATTRIBUTE_NAME.source})/
         | 
| 10 | 
            -
                DYNAMIC_ATTRIBUTE = /(?:(?:#{ATTRIBUTE_NAME.source}\s*%=\s*#{attribute_value('dynvalue')})|(?:#{ATTRIBUTE_NAME.source}%))/
         | 
| 9 | 
            +
                ATTRIBUTE = /(?:(?<=\s)(?:(?:#{ATTRIBUTE_NAME.source}\s*=\s*#{attribute_value})|#{ATTRIBUTE_NAME.source}))/
         | 
| 10 | 
            +
                DYNAMIC_ATTRIBUTE = /(?:(?<=\s)(?:(?:#{ATTRIBUTE_NAME.source}\s*%=\s*#{attribute_value('dynvalue')})|(?:#{ATTRIBUTE_NAME.source}%)))/
         | 
| 11 11 | 
             
                RESERVED_ATTRIBUTE_NAME = %w[alias and begin break case class def do else elsif end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield].to_set
         | 
| 12 | 
            -
                 | 
| 13 | 
            -
                 | 
| 12 | 
            +
                # Source: https://meiert.com/blog/boolean-attributes-of-html/
         | 
| 13 | 
            +
                BOOLEAN_ATTRIBUTE_NAME = %w[allowfullscreen alpha async autofocus autoplay checked controls default defer disabled formnovalidate inert ismap itemscope loop multiple muted nomodule novalidate open playsinline readonly required reversed selected shadowrootclonable shadowrootcustomelementregistry shadowrootdelegatesfocus shadowrootserializable]
         | 
| 14 | 
            +
                CLASS_ATTRIBUTE = /(?:\s+class\s*=\s*#{attribute_value})/
         | 
| 15 | 
            +
                STYLE_ATTRIBUTE = /(?:\s+style\s*=\s*#{attribute_value})/
         | 
| 14 16 | 
             
                ATTRIBUTES = /(?<attrs>(?:\s+#{ATTRIBUTE.source})*)/
         | 
| 15 | 
            -
                ATTRIBUTES_INCLUDING_DYNAMIC = /(?<attrs>(?:\s | 
| 16 | 
            -
                TAG_WITH_DYNAMIC_ATTRIBUTE = /( | 
| 17 | 
            +
                ATTRIBUTES_INCLUDING_DYNAMIC = /(?<attrs>(?:\s+(?:#{ATTRIBUTE.source}|#{DYNAMIC_ATTRIBUTE.source}))*)/
         | 
| 18 | 
            +
                TAG_WITH_DYNAMIC_ATTRIBUTE = /(?:<(?<tagname>\w+)#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s+#{DYNAMIC_ATTRIBUTE.source}#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*\/?>)/m
         | 
| 17 19 | 
             
                SPECIAL_ATTRIBUTES = %i[%path %as %yields %collection %if].freeze
         | 
| 18 | 
            -
                VOID_TAGS | 
| 19 | 
            -
                IF_SPECIAL_ATTRIBUTE = /(?<special | 
| 20 | 
            -
                TAG_WITH_IF_SPECIAL_ATTRIBUTE = /(?:<(?<tag>\w+)#{ | 
| 20 | 
            +
                VOID_TAGS = %i[area base br col embed hr img input link meta source track wbr]
         | 
| 21 | 
            +
                IF_SPECIAL_ATTRIBUTE = /(?<special>\s%if\s*=\s*#{attribute_value('specvalue')})/
         | 
| 22 | 
            +
                TAG_WITH_IF_SPECIAL_ATTRIBUTE = /(?:<(?<tag>\w+)#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*#{IF_SPECIAL_ATTRIBUTE.source}#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*>.*?<\/\k<tag>>)|(?:<(?<tag>\w+)#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*#{IF_SPECIAL_ATTRIBUTE.source}#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*\/>)|(?:<(?<tag>#{VOID_TAGS.join('|')})#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*#{IF_SPECIAL_ATTRIBUTE.source}#{ATTRIBUTES_INCLUDING_DYNAMIC.source}\s*>)/m
         | 
| 21 23 | 
             
                PARTIAL_TAG = /(?:(?<partial>[A-Z]\w+)|(?<partial>_[\w-]+))/
         | 
| 22 24 | 
             
                PARTIAL = /(?:<#{PARTIAL_TAG.source}#{ATTRIBUTES.source}\s*>(?<content>.*?)<\/\k<partial>>)|(?:<#{PARTIAL_TAG.source}#{ATTRIBUTES.source}\s*\/>)/m
         | 
| 23 25 | 
             
                DYNAMIC_EXPRESSION = /^<%=([^%]*)%>$/
         | 
| 24 26 |  | 
| 25 27 | 
             
                class Theo
         | 
| 26 28 | 
             
                  def process(source)
         | 
| 29 | 
            +
                    # Specials
         | 
| 30 | 
            +
                    source = source.gsub(TAG_WITH_IF_SPECIAL_ATTRIBUTE) do |_|
         | 
| 31 | 
            +
                      match = Regexp.last_match
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                      "<% if #{match[:specvalue]} %>\n#{match[0].sub(match[:special], '')}\n<% end %>" \
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
             | 
| 27 36 | 
             
                    # Attributes
         | 
| 28 37 | 
             
                    source = source.gsub(TAG_WITH_DYNAMIC_ATTRIBUTE) do |_|
         | 
| 29 38 | 
             
                      match = Regexp.last_match
         | 
| 30 39 |  | 
| 31 40 | 
             
                      tag = match[0]
         | 
| 41 | 
            +
                      # TODO: maybe separate matching partials and non-partial attributes completely
         | 
| 42 | 
            +
                      is_partial = /^[_A-Z]/.match?(match[:tagname])
         | 
| 32 43 |  | 
| 33 44 | 
             
                      remove_attributes = []
         | 
| 34 45 |  | 
| @@ -45,19 +56,19 @@ module Theo | |
| 45 56 |  | 
| 46 57 | 
             
                          if class_attribute
         | 
| 47 58 | 
             
                            remove_attributes += [class_attribute[0]]
         | 
| 48 | 
            -
                             | 
| 59 | 
            +
                            value = "(#{value}).to_s + ' #{class_attribute[:value]}'"
         | 
| 49 60 | 
             
                          end
         | 
| 50 | 
            -
                         | 
| 51 | 
            -
             | 
| 52 | 
            -
                        if name == 'style'
         | 
| 61 | 
            +
                        elsif name == 'style'
         | 
| 53 62 | 
             
                          style_attribute = STYLE_ATTRIBUTE.match(tag)
         | 
| 54 63 |  | 
| 55 64 | 
             
                          if style_attribute
         | 
| 56 65 | 
             
                            remove_attributes += [style_attribute[0]]
         | 
| 57 | 
            -
                             | 
| 66 | 
            +
                            value = "(#{value}).to_s + '; #{style_attribute[:value]}'"
         | 
| 58 67 | 
             
                          end
         | 
| 59 68 | 
             
                        end
         | 
| 60 69 |  | 
| 70 | 
            +
                        next "<% if #{value} %>#{name}<% end %>" if BOOLEAN_ATTRIBUTE_NAME.include?(name) unless is_partial
         | 
| 71 | 
            +
             | 
| 61 72 | 
             
                        "#{name}=\"<%= #{value} %>\""
         | 
| 62 73 | 
             
                      end
         | 
| 63 74 |  | 
| @@ -66,13 +77,6 @@ module Theo | |
| 66 77 | 
             
                      tag
         | 
| 67 78 | 
             
                    end
         | 
| 68 79 |  | 
| 69 | 
            -
                    # Specials
         | 
| 70 | 
            -
                    source = source.gsub(TAG_WITH_IF_SPECIAL_ATTRIBUTE) do |_|
         | 
| 71 | 
            -
                      match = Regexp.last_match
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                      "<% if #{match[:specvalue]} %>\n#{match[0].sub(match[:special], '')}\n<% end %>" \
         | 
| 74 | 
            -
                    end
         | 
| 75 | 
            -
             | 
| 76 80 | 
             
                    # Partials
         | 
| 77 81 | 
             
                    source.gsub(PARTIAL) do |_|
         | 
| 78 82 | 
             
                      match = Regexp.last_match
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: theo-rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.5. | 
| 4 | 
            +
              version: 0.5.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jarek Lipski
         | 
| 8 | 
            -
            autorequire: 
         | 
| 9 8 | 
             
            bindir: bin
         | 
| 10 9 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 10 | 
            +
            date: 1980-01-02 00:00:00.000000000 Z
         | 
| 12 11 | 
             
            dependencies:
         | 
| 13 12 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 13 | 
             
              name: activesupport
         | 
| @@ -24,6 +23,20 @@ dependencies: | |
| 24 23 | 
             
                - - "~>"
         | 
| 25 24 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 25 | 
             
                    version: '7'
         | 
| 26 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 27 | 
            +
              name: erubi
         | 
| 28 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - "~>"
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: 1.13.1
         | 
| 33 | 
            +
              type: :development
         | 
| 34 | 
            +
              prerelease: false
         | 
| 35 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 36 | 
            +
                requirements:
         | 
| 37 | 
            +
                - - "~>"
         | 
| 38 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 39 | 
            +
                    version: 1.13.1
         | 
| 27 40 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 41 | 
             
              name: rspec
         | 
| 29 42 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -65,7 +78,6 @@ licenses: | |
| 65 78 | 
             
            metadata:
         | 
| 66 79 | 
             
              homepage_uri: https://github.com/loomchild/theo-rails
         | 
| 67 80 | 
             
              source_code_uri: https://github.com/loomchild/theo-rails
         | 
| 68 | 
            -
            post_install_message: 
         | 
| 69 81 | 
             
            rdoc_options: []
         | 
| 70 82 | 
             
            require_paths:
         | 
| 71 83 | 
             
            - lib
         | 
| @@ -80,8 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 80 92 | 
             
                - !ruby/object:Gem::Version
         | 
| 81 93 | 
             
                  version: '0'
         | 
| 82 94 | 
             
            requirements: []
         | 
| 83 | 
            -
            rubygems_version: 3. | 
| 84 | 
            -
            signing_key: 
         | 
| 95 | 
            +
            rubygems_version: 3.6.9
         | 
| 85 96 | 
             
            specification_version: 4
         | 
| 86 97 | 
             
            summary: Theo is HTML-like template language
         | 
| 87 98 | 
             
            test_files: []
         |