wschema 0.0.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.
- checksums.yaml +7 -0
- data/Rakefile +8 -0
- data/bin/wschema +4 -0
- data/lib/wschema.rb +110 -0
- data/test/test_wschema.rb +13 -0
- metadata +75 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 0571bbc7b1887087bf9f9cb841a6b1f55fe594e5fbbc448b2fe8c50e68b2abbc
         | 
| 4 | 
            +
              data.tar.gz: c2a856017f8e405ba2d7897780732c64bc0885799d2705d1235669eccddd4eae
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 710c2a550de64977fa556cbdccfa08cf52d068eab194c7ad3c968fc185b9f7813db8e195732218e6ee8e723af2ba9d111d87beac4ccdf9e64474cff451e7e7bc
         | 
| 7 | 
            +
              data.tar.gz: 6c03d94882777e2820b9a0f6d85f2a15abde0691327bc46bb9a34b334c5058e2d4cc49ab35c6114a2f09ca42711c713733384d60b76773f3f4aa4839106c5a9e
         | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/wschema
    ADDED
    
    
    
        data/lib/wschema.rb
    ADDED
    
    | @@ -0,0 +1,110 @@ | |
| 1 | 
            +
            require 'json'
         | 
| 2 | 
            +
            # class Wschema
         | 
| 3 | 
            +
            class Wschema
         | 
| 4 | 
            +
              def self.labelize(options)
         | 
| 5 | 
            +
                options
         | 
| 6 | 
            +
                  .tr('_'.freeze, ' '.freeze)
         | 
| 7 | 
            +
                  .strip
         | 
| 8 | 
            +
                  .gsub(/([a-z\d]*)/i) { |s| s.downcase }
         | 
| 9 | 
            +
                  .gsub(/\A\w/) { |s|  s.upcase }
         | 
| 10 | 
            +
                  .gsub(/ id\z/, ' ID'.freeze)
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def self.run_format_schema(schema)
         | 
| 14 | 
            +
                schema&.each_with_object([]) do |field, array|
         | 
| 15 | 
            +
                  field_name = field['name']
         | 
| 16 | 
            +
                  if (props = field['properties'])
         | 
| 17 | 
            +
                    field['properties'] = run_format_schema(props)
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  # removing type for type=string
         | 
| 21 | 
            +
                  if field['type'] == 'string' || field['type'] == :string
         | 
| 22 | 
            +
                    field.delete('type')
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  # removing label for field_name.labelize == field[:label]
         | 
| 26 | 
            +
                  if field['label'] &&
         | 
| 27 | 
            +
                     (field['label'] == 'id' || labelize(field_name) == field['label'])
         | 
| 28 | 
            +
                    field.delete('label')
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  case field_name
         | 
| 32 | 
            +
                  when 'os'
         | 
| 33 | 
            +
                    field['label'] = 'OS'
         | 
| 34 | 
            +
                  when 'guid'
         | 
| 35 | 
            +
                    field['label'] = 'GUID'
         | 
| 36 | 
            +
                  when 'uuid'
         | 
| 37 | 
            +
                    field['label'] = 'UUID'
         | 
| 38 | 
            +
                  when 'uri'
         | 
| 39 | 
            +
                    field['label'] = 'URI'
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  # removing control_type for control_type=text
         | 
| 43 | 
            +
                  if field['control_type'] == 'text' || field['control_type'] == :text
         | 
| 44 | 
            +
                    field.delete('control_type')
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  # changing control_type for type=boolean || integer
         | 
| 48 | 
            +
                  if field['type'] == 'boolean' || field['type'] == :boolean
         | 
| 49 | 
            +
                    field['control_type'] = 'checkbox'
         | 
| 50 | 
            +
                  elsif field['type'] == 'integer' || field['type'] == :integer
         | 
| 51 | 
            +
                    field['control_type'] = 'integer'
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  field_info = [field['name'].downcase,
         | 
| 55 | 
            +
                                field['label']&.downcase,
         | 
| 56 | 
            +
                                field['hint']&.downcase].compact
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  if field_info.include?('email')
         | 
| 59 | 
            +
                    field['control_type'] = 'email'
         | 
| 60 | 
            +
                  elsif field_info.include?('phone')
         | 
| 61 | 
            +
                    field['control_type'] = 'phone'
         | 
| 62 | 
            +
                  elsif field_info.include?('uri')
         | 
| 63 | 
            +
                    field['control_type'] = 'url'
         | 
| 64 | 
            +
                  elsif field_info.include?('url')
         | 
| 65 | 
            +
                    field['control_type'] = 'url'
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  array << {
         | 
| 69 | 
            +
                    name: field['name'],
         | 
| 70 | 
            +
                    label: field['label'],
         | 
| 71 | 
            +
                    hint: field['hint'],
         | 
| 72 | 
            +
                    default: field['default'],
         | 
| 73 | 
            +
                    sticky: field['sticky'],
         | 
| 74 | 
            +
                    optional: field['optional'],
         | 
| 75 | 
            +
                    extends_schema: field['extends_schema'],
         | 
| 76 | 
            +
                    schema_neutral: field['schema_neutral'],
         | 
| 77 | 
            +
                    add_field_label: field['add_field_label'],
         | 
| 78 | 
            +
                    sample_data_type: field['sample_data_type'],
         | 
| 79 | 
            +
                    custom_properties: field['custom_properties'],
         | 
| 80 | 
            +
                    control_type: field['control_type'],
         | 
| 81 | 
            +
                    empty_list_title: field['empty_list_title'],
         | 
| 82 | 
            +
                    empty_list_text: field['empty_list_text'],
         | 
| 83 | 
            +
                    item_label: field['item_label'],
         | 
| 84 | 
            +
                    pick_list: field['pick_list'],
         | 
| 85 | 
            +
                    toggle_hint: field['toggle_hint'],
         | 
| 86 | 
            +
                    # TODO: handle toggle_fields like properties
         | 
| 87 | 
            +
                    toggle_field: field['toggle_field'],
         | 
| 88 | 
            +
                    render_input: field['render_input'],
         | 
| 89 | 
            +
                    parse_output: field['parse_output'],
         | 
| 90 | 
            +
                    type: field['type'],
         | 
| 91 | 
            +
                    of: field['of'],
         | 
| 92 | 
            +
                    properties: field['properties']
         | 
| 93 | 
            +
                  }.compact
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              def self.format_schema(workato_schema)
         | 
| 98 | 
            +
                {
         | 
| 99 | 
            +
                  formatted_schema: run_format_schema(JSON.parse(workato_schema))
         | 
| 100 | 
            +
                    .to_json
         | 
| 101 | 
            +
                }
         | 
| 102 | 
            +
              end
         | 
| 103 | 
            +
            end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            # p Wschema.format_schema('[ {
         | 
| 106 | 
            +
            # "control_type": "text",
         | 
| 107 | 
            +
            # "label": "Name",
         | 
| 108 | 
            +
            # "type": "string",
         | 
| 109 | 
            +
            # "name": "name"
         | 
| 110 | 
            +
            # }]')
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
            require 'wschema'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class WschemaTest < Test::Unit::TestCase
         | 
| 5 | 
            +
              def test_format_schema
         | 
| 6 | 
            +
                assert_equal %q({:formatted_schema=>"[{\"name\":\"name\"}]"}).strip, Wschema.format_schema(%q([ {
         | 
| 7 | 
            +
            "control_type": "text",
         | 
| 8 | 
            +
            "label": "Name",
         | 
| 9 | 
            +
            "type": "string",
         | 
| 10 | 
            +
            "name": "name"
         | 
| 11 | 
            +
            }])).to_s.strip
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: wschema
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Sharat Hegde
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2020-09-26 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: json
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 1.8.3
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 1.8.3
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: json
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            description: Workato schema gem. Formats Workato schema to remove defaults and sanitize
         | 
| 42 | 
            +
              schema
         | 
| 43 | 
            +
            email: sharat.developer@gmail.com
         | 
| 44 | 
            +
            executables: []
         | 
| 45 | 
            +
            extensions: []
         | 
| 46 | 
            +
            extra_rdoc_files: []
         | 
| 47 | 
            +
            files:
         | 
| 48 | 
            +
            - Rakefile
         | 
| 49 | 
            +
            - bin/wschema
         | 
| 50 | 
            +
            - lib/wschema.rb
         | 
| 51 | 
            +
            - test/test_wschema.rb
         | 
| 52 | 
            +
            homepage: http://rubygems.org/gems/wschema
         | 
| 53 | 
            +
            licenses: []
         | 
| 54 | 
            +
            metadata: {}
         | 
| 55 | 
            +
            post_install_message: 
         | 
| 56 | 
            +
            rdoc_options: []
         | 
| 57 | 
            +
            require_paths:
         | 
| 58 | 
            +
            - lib
         | 
| 59 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 60 | 
            +
              requirements:
         | 
| 61 | 
            +
              - - ">="
         | 
| 62 | 
            +
                - !ruby/object:Gem::Version
         | 
| 63 | 
            +
                  version: '0'
         | 
| 64 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
              requirements:
         | 
| 66 | 
            +
              - - ">="
         | 
| 67 | 
            +
                - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                  version: '0'
         | 
| 69 | 
            +
            requirements: []
         | 
| 70 | 
            +
            rubygems_version: 3.0.6
         | 
| 71 | 
            +
            signing_key: 
         | 
| 72 | 
            +
            specification_version: 3
         | 
| 73 | 
            +
            summary: Wschema!
         | 
| 74 | 
            +
            test_files:
         | 
| 75 | 
            +
            - test/test_wschema.rb
         |