ki_middleman 0.0.6 → 0.0.7
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/bin/ki_middleman +13 -2
- data/ki_middleman.gemspec +7 -7
- data/lib/ki_middleman/config.rb +45 -4
- data/lib/ki_middleman/version.rb +1 -1
- metadata +32 -32
    
        data/bin/ki_middleman
    CHANGED
    
    | @@ -8,7 +8,7 @@ module KiMiddleman | |
| 8 8 | 
             
                include Methadone::Main
         | 
| 9 9 | 
             
                include Methadone::CLILogging
         | 
| 10 10 |  | 
| 11 | 
            -
                def init
         | 
| 11 | 
            +
                def self.init
         | 
| 12 12 | 
             
                  config_dir = Kiseru::ConfigDir.new
         | 
| 13 13 | 
             
                  assets_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'assets'))
         | 
| 14 14 | 
             
                  assets_file = File.join(assets_dir, 'default_transforms.rb')
         | 
| @@ -23,15 +23,24 @@ module KiMiddleman | |
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                main do |arg|
         | 
| 26 | 
            +
                  help_now! "argument '#{arg}' not supported"  if arg
         | 
| 27 | 
            +
             | 
| 26 28 | 
             
                  if options[:init]
         | 
| 27 29 | 
             
                    init
         | 
| 30 | 
            +
                  elsif options[:list]
         | 
| 31 | 
            +
                    config = KiMiddleman::Config.from_file(Kiseru::ConfigDir.new.file('transforms.rb'))
         | 
| 32 | 
            +
                    $stdout.puts(config.textual_mapping)
         | 
| 28 33 | 
             
                  elsif options[:to]
         | 
| 29 34 | 
             
                    begin
         | 
| 30 35 | 
             
                      pretty = $stdout.tty?
         | 
| 31 36 |  | 
| 32 37 | 
             
                      output_type = options[:to]
         | 
| 33 38 | 
             
                      config = KiMiddleman::Config.from_file(Kiseru::ConfigDir.new.file('transforms.rb'))
         | 
| 34 | 
            -
                       | 
| 39 | 
            +
                      if options[:file]
         | 
| 40 | 
            +
                        input = MultiJson.load(File.read(options[:file]))
         | 
| 41 | 
            +
                      else
         | 
| 42 | 
            +
                        input = MultiJson.load($stdin.read)
         | 
| 43 | 
            +
                      end
         | 
| 35 44 | 
             
                      output = config.convert_data_to_format(input, output_type)
         | 
| 36 45 | 
             
                      $stdout.write MultiJson.dump(output, :pretty => pretty)
         | 
| 37 46 | 
             
                    rescue MultiJson::DecodeError => e
         | 
| @@ -49,6 +58,8 @@ module KiMiddleman | |
| 49 58 |  | 
| 50 59 | 
             
                on("--to FORMAT", "The output JSON format")
         | 
| 51 60 | 
             
                on("--init", "Set up the default config files")
         | 
| 61 | 
            +
                on("--file FILE", "Read JSON from file")
         | 
| 62 | 
            +
                on("--list", "List available transformations")
         | 
| 52 63 | 
             
                go!
         | 
| 53 64 |  | 
| 54 65 | 
             
              end
         | 
    
        data/ki_middleman.gemspec
    CHANGED
    
    | @@ -15,12 +15,12 @@ Gem::Specification.new do |gem| | |
| 15 15 | 
             
              gem.require_paths = ["lib"]
         | 
| 16 16 | 
             
              gem.version       = KiMiddleman::VERSION
         | 
| 17 17 |  | 
| 18 | 
            -
              gem.add_dependency | 
| 19 | 
            -
              gem.add_dependency('methadone')
         | 
| 20 | 
            -
              gem.add_dependency('map')
         | 
| 18 | 
            +
              gem.add_dependency('multi_json', '~> 1.3.6')
         | 
| 19 | 
            +
              gem.add_dependency('methadone', '~> 1.2.1')
         | 
| 20 | 
            +
              gem.add_dependency('map', '~> 4.6.1')
         | 
| 21 21 |  | 
| 22 | 
            -
              gem.add_development_dependency('debugger')
         | 
| 23 | 
            -
              gem.add_development_dependency('rake')
         | 
| 24 | 
            -
              gem.add_development_dependency(' | 
| 25 | 
            -
              gem.add_development_dependency(' | 
| 22 | 
            +
              gem.add_development_dependency('debugger', '~> 1.2.0')
         | 
| 23 | 
            +
              gem.add_development_dependency('rake', '~> 0.9.2')
         | 
| 24 | 
            +
              gem.add_development_dependency('rspec', '~> 2.11.0')
         | 
| 25 | 
            +
              gem.add_development_dependency('simplecov', '~> 0.6.4')
         | 
| 26 26 | 
             
            end
         | 
    
        data/lib/ki_middleman/config.rb
    CHANGED
    
    | @@ -9,6 +9,24 @@ module KiMiddleman | |
| 9 9 | 
             
                  parse(code)
         | 
| 10 10 | 
             
                end
         | 
| 11 11 |  | 
| 12 | 
            +
                def textual_mapping
         | 
| 13 | 
            +
                  output = ""
         | 
| 14 | 
            +
                  @mapping.each do |key, sub_hash|
         | 
| 15 | 
            +
                    subkeys = sub_hash.keys.reject  { |x| x.to_s=="outer_block"}
         | 
| 16 | 
            +
                    subkeys.each_with_index do |sub_key, i|
         | 
| 17 | 
            +
                      case i
         | 
| 18 | 
            +
                      when 0
         | 
| 19 | 
            +
                        output << "#{key} +-> #{sub_key}\n"
         | 
| 20 | 
            +
                      when subkeys.length - 1
         | 
| 21 | 
            +
                        output << "#{' '*key.length} \\-> #{sub_key}\n"
         | 
| 22 | 
            +
                      else
         | 
| 23 | 
            +
                        output << "#{' '*key.length} |-> #{sub_key}\n"
         | 
| 24 | 
            +
                      end
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  output
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 12 30 | 
             
                def self.parse(code)
         | 
| 13 31 | 
             
                  Config.new(code)
         | 
| 14 32 | 
             
                end
         | 
| @@ -28,19 +46,42 @@ module KiMiddleman | |
| 28 46 |  | 
| 29 47 | 
             
                def convert_data_to_format(data, format)
         | 
| 30 48 | 
             
                  self.detect_from_format(data)
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  self.set_evaluation_context
         | 
| 49 | 
            +
             | 
| 33 50 | 
             
                  raise ConfigError, "No transform from '#{@from_format}' found." unless @mapping.has_key?(@from_format.to_sym)
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  best_to_format = find_best_to_format(@from_format, format)
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  if !@mapping[@current_from].has_key?(best_to_format)
         | 
| 55 | 
            +
                    raise ConfigError, "No transform from '#{@current_from}' to '#{format}' found."
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  if best_to_format != format
         | 
| 59 | 
            +
                    $stderr.puts "WARNING: Using unambiguous match '#{best_to_format}' for '#{format}'"
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  @format_to_evaluate = best_to_format
         | 
| 63 | 
            +
                  self.set_evaluation_context
         | 
| 34 64 | 
             
                  evaluation_context = @mapping[@from_format.to_sym][:outer_block]
         | 
| 35 65 | 
             
                  converted_data = evaluation_context.call Map.new(data)
         | 
| 36 | 
            -
                  converted_data['ki_type'] =  | 
| 66 | 
            +
                  converted_data['ki_type'] = best_to_format
         | 
| 37 67 |  | 
| 38 68 | 
             
                  converted_data
         | 
| 39 69 | 
             
                end
         | 
| 40 70 |  | 
| 71 | 
            +
                def find_best_to_format(from_format, format)
         | 
| 72 | 
            +
                  keys = @mapping[from_format].keys.map(&:to_s)
         | 
| 73 | 
            +
                  matching = keys.select { |key| key.include?(format.to_s) }
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  if matching.length == 1
         | 
| 76 | 
            +
                    match = matching.first
         | 
| 77 | 
            +
                  else
         | 
| 78 | 
            +
                    format
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 41 82 | 
             
                def initialize(code)
         | 
| 42 83 | 
             
                  self.set_parsing_context
         | 
| 43 | 
            -
                  @mapping = {}
         | 
| 84 | 
            +
                  @mapping = Map.new({})
         | 
| 44 85 | 
             
                  instance_eval code
         | 
| 45 86 | 
             
                end
         | 
| 46 87 |  | 
    
        data/lib/ki_middleman/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ki_middleman
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.7
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,85 +10,85 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2012-08- | 
| 13 | 
            +
            date: 2012-08-16 00:00:00.000000000Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: multi_json
         | 
| 17 | 
            -
              requirement: & | 
| 17 | 
            +
              requirement: &70146996153140 !ruby/object:Gem::Requirement
         | 
| 18 18 | 
             
                none: false
         | 
| 19 19 | 
             
                requirements:
         | 
| 20 | 
            -
                - -  | 
| 20 | 
            +
                - - ~>
         | 
| 21 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            -
                    version:  | 
| 22 | 
            +
                    version: 1.3.6
         | 
| 23 23 | 
             
              type: :runtime
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 | 
            -
              version_requirements: * | 
| 25 | 
            +
              version_requirements: *70146996153140
         | 
| 26 26 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 27 27 | 
             
              name: methadone
         | 
| 28 | 
            -
              requirement: & | 
| 28 | 
            +
              requirement: &70146996152640 !ruby/object:Gem::Requirement
         | 
| 29 29 | 
             
                none: false
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - -  | 
| 31 | 
            +
                - - ~>
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: 1.2.1
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 | 
            -
              version_requirements: * | 
| 36 | 
            +
              version_requirements: *70146996152640
         | 
| 37 37 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 38 38 | 
             
              name: map
         | 
| 39 | 
            -
              requirement: & | 
| 39 | 
            +
              requirement: &70146996152180 !ruby/object:Gem::Requirement
         | 
| 40 40 | 
             
                none: false
         | 
| 41 41 | 
             
                requirements:
         | 
| 42 | 
            -
                - -  | 
| 42 | 
            +
                - - ~>
         | 
| 43 43 | 
             
                  - !ruby/object:Gem::Version
         | 
| 44 | 
            -
                    version:  | 
| 44 | 
            +
                    version: 4.6.1
         | 
| 45 45 | 
             
              type: :runtime
         | 
| 46 46 | 
             
              prerelease: false
         | 
| 47 | 
            -
              version_requirements: * | 
| 47 | 
            +
              version_requirements: *70146996152180
         | 
| 48 48 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 49 49 | 
             
              name: debugger
         | 
| 50 | 
            -
              requirement: & | 
| 50 | 
            +
              requirement: &70146996151720 !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                none: false
         | 
| 52 52 | 
             
                requirements:
         | 
| 53 | 
            -
                - -  | 
| 53 | 
            +
                - - ~>
         | 
| 54 54 | 
             
                  - !ruby/object:Gem::Version
         | 
| 55 | 
            -
                    version:  | 
| 55 | 
            +
                    version: 1.2.0
         | 
| 56 56 | 
             
              type: :development
         | 
| 57 57 | 
             
              prerelease: false
         | 
| 58 | 
            -
              version_requirements: * | 
| 58 | 
            +
              version_requirements: *70146996151720
         | 
| 59 59 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 60 60 | 
             
              name: rake
         | 
| 61 | 
            -
              requirement: & | 
| 61 | 
            +
              requirement: &70146996151260 !ruby/object:Gem::Requirement
         | 
| 62 62 | 
             
                none: false
         | 
| 63 63 | 
             
                requirements:
         | 
| 64 | 
            -
                - -  | 
| 64 | 
            +
                - - ~>
         | 
| 65 65 | 
             
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            -
                    version:  | 
| 66 | 
            +
                    version: 0.9.2
         | 
| 67 67 | 
             
              type: :development
         | 
| 68 68 | 
             
              prerelease: false
         | 
| 69 | 
            -
              version_requirements: * | 
| 69 | 
            +
              version_requirements: *70146996151260
         | 
| 70 70 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 71 | 
            -
              name:  | 
| 72 | 
            -
              requirement: & | 
| 71 | 
            +
              name: rspec
         | 
| 72 | 
            +
              requirement: &70146996150800 !ruby/object:Gem::Requirement
         | 
| 73 73 | 
             
                none: false
         | 
| 74 74 | 
             
                requirements:
         | 
| 75 | 
            -
                - -  | 
| 75 | 
            +
                - - ~>
         | 
| 76 76 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            -
                    version:  | 
| 77 | 
            +
                    version: 2.11.0
         | 
| 78 78 | 
             
              type: :development
         | 
| 79 79 | 
             
              prerelease: false
         | 
| 80 | 
            -
              version_requirements: * | 
| 80 | 
            +
              version_requirements: *70146996150800
         | 
| 81 81 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 82 | 
            -
              name:  | 
| 83 | 
            -
              requirement: & | 
| 82 | 
            +
              name: simplecov
         | 
| 83 | 
            +
              requirement: &70146996150340 !ruby/object:Gem::Requirement
         | 
| 84 84 | 
             
                none: false
         | 
| 85 85 | 
             
                requirements:
         | 
| 86 | 
            -
                - -  | 
| 86 | 
            +
                - - ~>
         | 
| 87 87 | 
             
                  - !ruby/object:Gem::Version
         | 
| 88 | 
            -
                    version:  | 
| 88 | 
            +
                    version: 0.6.4
         | 
| 89 89 | 
             
              type: :development
         | 
| 90 90 | 
             
              prerelease: false
         | 
| 91 | 
            -
              version_requirements: * | 
| 91 | 
            +
              version_requirements: *70146996150340
         | 
| 92 92 | 
             
            description: Transforms JSON into other JSON
         | 
| 93 93 | 
             
            email:
         | 
| 94 94 | 
             
            - ben@freeagent.com
         |