kilza 1.0.2 → 1.0.4
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/README.md +8 -2
- data/Rakefile +2 -2
- data/bin/console +4 -4
- data/bin/kilza +65 -49
- data/kilza.gemspec +27 -20
- data/lib/kilza.rb +22 -7
- data/lib/kilza/class.rb +39 -20
- data/lib/kilza/language.rb +102 -47
- data/lib/kilza/language/java.rb +29 -48
- data/lib/kilza/language/java/java.erb +12 -10
- data/lib/kilza/language/objc.rb +35 -59
- data/lib/kilza/language/objc/h.erb +1 -1
- data/lib/kilza/language/objc/m.erb +4 -4
- data/lib/kilza/property.rb +39 -35
- data/lib/kilza/source.rb +4 -0
- data/lib/kilza/version.rb +2 -1
- metadata +33 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0bb3186b37f9e9108276b4e7bb4c95217e32da34
         | 
| 4 | 
            +
              data.tar.gz: 025ba6e2147e62e5e19dbf6ba8e58be9bbffa361
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 8cde20c73473da2ff456a9ab14ddc5f2e32e60dcdf4218d91a6e62aa33127994c85046904d3318143a6b00a160b22a797c54812839bf42eadfcd24994ab02ba7
         | 
| 7 | 
            +
              data.tar.gz: c5e2fcca3ba6505713607378e8b2905730c9a296a546984f7632599de692ce604de6a400ab9b519f0dbe67cbf353a0b40ecab2e5a1de0a8ad516f0e4ce9ca41d
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,5 +1,11 @@ | |
| 1 1 | 
             
            # Kilza
         | 
| 2 2 |  | 
| 3 | 
            +
            [](https://travis-ci.org/Jaspion/Kilza)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            [](https://coveralls.io/github/Jaspion/Kilza?branch=master)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            [](http://inch-ci.org/github/jaspion/kilza)
         | 
| 8 | 
            +
             | 
| 3 9 | 
             
            Ruby gem that can convert JSON strings in Objects.
         | 
| 4 10 |  | 
| 5 11 | 
             
            It supports Objective-C and Java classes. Contribuition would be appreciate.
         | 
| @@ -150,8 +156,8 @@ public class Mybaseclass implements Serializable | |
| 150 156 | 
             
                }
         | 
| 151 157 | 
             
                @Override
         | 
| 152 158 | 
             
                public int hashCode(){
         | 
| 153 | 
            -
                    return ( | 
| 154 | 
            -
                     | 
| 159 | 
            +
                    return (code.hashCode() +
         | 
| 160 | 
            +
                    message.hashCode());
         | 
| 155 161 | 
             
                }
         | 
| 156 162 |  | 
| 157 163 | 
             
                @Override
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/bin/console
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            #!/usr/bin/env ruby
         | 
| 2 2 |  | 
| 3 | 
            -
            require  | 
| 4 | 
            -
            require  | 
| 3 | 
            +
            require 'bundler/setup'
         | 
| 4 | 
            +
            require 'kilza'
         | 
| 5 5 |  | 
| 6 6 | 
             
            # You can add fixtures and/or initialization code here to make experimenting
         | 
| 7 7 | 
             
            # with your gem easier. You can also use a different console, if you like.
         | 
| 8 8 |  | 
| 9 9 | 
             
            # (If you use this, don't forget to add pry to your Gemfile!)
         | 
| 10 | 
            -
            # require  | 
| 10 | 
            +
            # require 'pry'
         | 
| 11 11 | 
             
            # Pry.start
         | 
| 12 12 |  | 
| 13 | 
            -
            require  | 
| 13 | 
            +
            require 'irb'
         | 
| 14 14 | 
             
            IRB.start
         | 
    
        data/bin/kilza
    CHANGED
    
    | @@ -16,8 +16,8 @@ end | |
| 16 16 | 
             
            module TTY
         | 
| 17 17 | 
             
              class Prompt
         | 
| 18 18 | 
             
                class List
         | 
| 19 | 
            -
                  def  | 
| 20 | 
            -
                    @ | 
| 19 | 
            +
                  def enum(value)
         | 
| 20 | 
            +
                    @enum = value
         | 
| 21 21 | 
             
                  end
         | 
| 22 22 | 
             
                end
         | 
| 23 23 | 
             
              end
         | 
| @@ -25,6 +25,9 @@ end | |
| 25 25 |  | 
| 26 26 | 
             
            class KilzaApplication
         | 
| 27 27 |  | 
| 28 | 
            +
              OBJC = 1
         | 
| 29 | 
            +
              JAVA = 2
         | 
| 30 | 
            +
             | 
| 28 31 | 
             
              def initialize
         | 
| 29 32 | 
             
                @pastel = Pastel.new
         | 
| 30 33 | 
             
                @prompt = TTY::Prompt.new
         | 
| @@ -34,34 +37,34 @@ class KilzaApplication | |
| 34 37 | 
             
              end
         | 
| 35 38 |  | 
| 36 39 | 
             
              def get_lang
         | 
| 37 | 
            -
                action = @prompt.select(@pastel.bold( | 
| 40 | 
            +
                action = @prompt.select(@pastel.bold('Target programming language?')) do |menu|
         | 
| 38 41 | 
             
                  menu.default 1
         | 
| 39 | 
            -
                  menu. | 
| 42 | 
            +
                  menu.enum '.'
         | 
| 40 43 |  | 
| 41 | 
            -
                  menu.choice  | 
| 42 | 
            -
                  menu.choice  | 
| 44 | 
            +
                  menu.choice 'Objective-C', OBJC
         | 
| 45 | 
            +
                  menu.choice 'Java', JAVA
         | 
| 43 46 | 
             
                end
         | 
| 44 47 | 
             
                action
         | 
| 45 48 | 
             
              end
         | 
| 46 49 |  | 
| 47 50 | 
             
              def get_json
         | 
| 48 | 
            -
                action = @prompt.select(@pastel.bold( | 
| 51 | 
            +
                action = @prompt.select(@pastel.bold('Where is your JSON string content?')) do |menu|
         | 
| 49 52 | 
             
                  menu.default 1
         | 
| 50 | 
            -
                  menu. | 
| 53 | 
            +
                  menu.enum '.'
         | 
| 51 54 |  | 
| 52 | 
            -
                  menu.choice  | 
| 53 | 
            -
                  menu.choice  | 
| 55 | 
            +
                  menu.choice 'It\'s online. I have an URL.', 1
         | 
| 56 | 
            +
                  menu.choice 'It\'s offline. I have the file path.', 2
         | 
| 54 57 | 
             
                end
         | 
| 55 58 |  | 
| 56 59 | 
             
                json_string = ''
         | 
| 57 60 | 
             
                if (action == 1)
         | 
| 58 | 
            -
                  url = @prompt.ask(@pastel.bold( | 
| 61 | 
            +
                  url = @prompt.ask(@pastel.bold('Please, what is the URL?')) do |q|
         | 
| 59 62 | 
             
                    q.required true
         | 
| 60 63 | 
             
                  end
         | 
| 61 | 
            -
                  @prompt.say(@pastel.bold( | 
| 64 | 
            +
                  @prompt.say(@pastel.bold('Ok. I\'ll try to get the content right now.'))
         | 
| 62 65 | 
             
                  json_string = read_url(url)
         | 
| 63 66 | 
             
                else
         | 
| 64 | 
            -
                  file_path = File.expand_path(@prompt.ask(@pastel.bold( | 
| 67 | 
            +
                  file_path = File.expand_path(@prompt.ask(@pastel.bold('Please, what is the file path? '))) do |q|
         | 
| 65 68 | 
             
                    q.required true
         | 
| 66 69 | 
             
                  end
         | 
| 67 70 | 
             
                  json_string = File.read(file_path.chomp)
         | 
| @@ -69,56 +72,69 @@ class KilzaApplication | |
| 69 72 | 
             
                json_string
         | 
| 70 73 | 
             
              end
         | 
| 71 74 |  | 
| 75 | 
            +
              def generate(lang, json_string, class_basename, target_path, class_package = '')
         | 
| 76 | 
            +
                if (lang == OBJC)
         | 
| 77 | 
            +
                  objc = Kilza::Objc.new(json_string)
         | 
| 78 | 
            +
                  objc.classes(class_basename).each { |c|
         | 
| 79 | 
            +
                    c.sources.each{ |s|
         | 
| 80 | 
            +
                      File.write(File.join(target_path, s.file_name), s.source)
         | 
| 81 | 
            +
                    }
         | 
| 82 | 
            +
                  }
         | 
| 83 | 
            +
                elsif (lang == JAVA)
         | 
| 84 | 
            +
                  java = Kilza::Java.new(json_string)
         | 
| 85 | 
            +
                  java.classes(class_basename).each { |c|
         | 
| 86 | 
            +
                    c.package = class_package
         | 
| 87 | 
            +
                    c.sources.each{ |s|
         | 
| 88 | 
            +
                      File.write(File.join(target_path, s.file_name), s.source)
         | 
| 89 | 
            +
                    }
         | 
| 90 | 
            +
                  }
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              def get_target_path
         | 
| 95 | 
            +
                target_path = @prompt.ask(@pastel.bold('Master, where would you like to save? ')).chomp
         | 
| 96 | 
            +
                File.expand_path(target_path)
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def get_basename
         | 
| 100 | 
            +
                @prompt.ask(@pastel.bold('Master, which name would like to call the first class? ')).chomp
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              def get_package
         | 
| 104 | 
            +
                @prompt.ask(@pastel.bold('What is the target Java package? ')).chomp
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
| 72 107 | 
             
              def run
         | 
| 73 108 | 
             
                while (not @done)
         | 
| 74 | 
            -
                  action = @prompt.select(@pastel.bold( | 
| 109 | 
            +
                  action = @prompt.select(@pastel.bold('Choose your destiny?')) do |menu|
         | 
| 75 110 | 
             
                    menu.default 1
         | 
| 76 | 
            -
                    menu. | 
| 111 | 
            +
                    menu.enum '.'
         | 
| 77 112 |  | 
| 78 113 | 
             
                    menu.choice 'I want some JSON objects.', 1
         | 
| 79 114 | 
             
                    menu.choice 'Nothing.', 2
         | 
| 80 115 | 
             
                  end
         | 
| 81 116 | 
             
                  if action == 1
         | 
| 82 117 | 
             
                    json_string = get_json
         | 
| 83 | 
            -
                    target_path =  | 
| 84 | 
            -
                     | 
| 85 | 
            -
                    class_basename = @prompt.ask(@pastel.bold("Master, which name would like to call the first class? ")).chomp
         | 
| 118 | 
            +
                    target_path = get_target_path
         | 
| 119 | 
            +
                    class_basename = get_basename
         | 
| 86 120 | 
             
                    lang = get_lang
         | 
| 87 121 |  | 
| 88 | 
            -
                    class_package =  | 
| 89 | 
            -
                    if (lang == 2)
         | 
| 90 | 
            -
                      class_package = @prompt.ask(@pastel.bold("What is the target Java package? ")).chomp
         | 
| 91 | 
            -
                    end
         | 
| 122 | 
            +
                    class_package = get_package if (lang == JAVA)
         | 
| 92 123 |  | 
| 93 | 
            -
                    @prompt.say(@pastel.bold( | 
| 94 | 
            -
                    @prompt.say(@pastel.bold( | 
| 95 | 
            -
                    @prompt.say(@pastel.bold( | 
| 96 | 
            -
                    if  | 
| 97 | 
            -
                      @prompt.say(@pastel.bold( | 
| 124 | 
            +
                    @prompt.say(@pastel.bold('Target: ') + target_path)
         | 
| 125 | 
            +
                    @prompt.say(@pastel.bold('Base class name: ') + class_basename)
         | 
| 126 | 
            +
                    @prompt.say(@pastel.bold('Target language: ') + (lang == OBJC ? 'Objective-C' : 'Java'))
         | 
| 127 | 
            +
                    if not class_package.nil?
         | 
| 128 | 
            +
                      @prompt.say(@pastel.bold('Target package: ') + class_package)
         | 
| 98 129 | 
             
                    end
         | 
| 99 130 | 
             
                    ok = @prompt.yes?('Is that correct?')
         | 
| 100 | 
            -
                    if  | 
| 101 | 
            -
                      @prompt.say(@pastel.bold( | 
| 102 | 
            -
                      @prompt.say(@pastel.bold( | 
| 103 | 
            -
             | 
| 104 | 
            -
                       | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
                          c.sources.each{ |s|
         | 
| 108 | 
            -
                            File.write(File.join(target_path, s.file_name), s.source)
         | 
| 109 | 
            -
                          }
         | 
| 110 | 
            -
                        }
         | 
| 111 | 
            -
                      else
         | 
| 112 | 
            -
                        java = Kilza::Java.new(json_string)
         | 
| 113 | 
            -
                        java.classes(class_basename).each { |c|
         | 
| 114 | 
            -
                          c.package = class_package
         | 
| 115 | 
            -
                          c.sources.each{ |s|
         | 
| 116 | 
            -
                            File.write(File.join(target_path, s.file_name), s.source)
         | 
| 117 | 
            -
                          }
         | 
| 118 | 
            -
                        }
         | 
| 119 | 
            -
                      end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                      @prompt.say(@pastel.bold("Kikera!"))
         | 
| 131 | 
            +
                    if ok.nil? or ok
         | 
| 132 | 
            +
                      @prompt.say(@pastel.bold('Yes master. Now I\'m going to generate all files.'))
         | 
| 133 | 
            +
                      @prompt.say(@pastel.bold('Berebekan Katabamba Berebekan Katabamba Berebekan Katabamba'))
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                      generate(lang, json_string, class_basename, target_path, class_package)
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                      @prompt.say(@pastel.bold('Kikera!'))
         | 
| 122 138 | 
             
                    end
         | 
| 123 139 | 
             
                  else
         | 
| 124 140 | 
             
                    @done = true
         | 
    
        data/kilza.gemspec
    CHANGED
    
    | @@ -4,35 +4,42 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 4 4 | 
             
            require 'kilza/version'
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 | 
            -
              spec.name          =  | 
| 7 | 
            +
              spec.name          = 'kilza'
         | 
| 8 8 | 
             
              spec.version       = Kilza::VERSION
         | 
| 9 | 
            -
              spec.authors       = [ | 
| 10 | 
            -
              spec.email         = [ | 
| 9 | 
            +
              spec.authors       = ['Toshiro Sugii']
         | 
| 10 | 
            +
              spec.email         = ['rtoshiro@printwtf.com']
         | 
| 11 11 |  | 
| 12 | 
            -
              spec.summary       =  | 
| 13 | 
            -
              spec.description   = %q{ | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 12 | 
            +
              spec.summary       = 'Parses JSON and generates objects into other languages'
         | 
| 13 | 
            +
              spec.description   = %q{
         | 
| 14 | 
            +
                Ruby gem that can convert JSON strings in Objects.
         | 
| 15 | 
            +
                It supports Objective-C and Java classes. Contribuition would be appreciate.
         | 
| 16 | 
            +
              }
         | 
| 17 | 
            +
              spec.homepage      = 'https://github.com/Jaspion/Kilza'
         | 
| 18 | 
            +
              spec.license       = 'MIT'
         | 
| 16 19 |  | 
| 17 20 | 
             
              # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
         | 
| 18 21 | 
             
              # delete this section to allow pushing this gem to any host.
         | 
| 19 22 | 
             
              if spec.respond_to?(:metadata)
         | 
| 20 | 
            -
                spec.metadata['allowed_push_host'] =  | 
| 23 | 
            +
                spec.metadata['allowed_push_host'] = 'rubygems.org'
         | 
| 21 24 | 
             
              else
         | 
| 22 | 
            -
                 | 
| 25 | 
            +
                fail 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
         | 
| 23 26 | 
             
              end
         | 
| 24 27 |  | 
| 25 | 
            -
              spec.files | 
| 26 | 
            -
             | 
| 27 | 
            -
               | 
| 28 | 
            -
              spec. | 
| 28 | 
            +
              spec.files= `git ls-files -z`.split("\x0").reject { |f|
         | 
| 29 | 
            +
                f.match(%r{^(test|spec|features)/})
         | 
| 30 | 
            +
              }
         | 
| 31 | 
            +
              spec.bindir = 'bin'
         | 
| 32 | 
            +
              spec.executables = ['kilza']
         | 
| 33 | 
            +
              spec.require_paths = ['lib']
         | 
| 29 34 |  | 
| 30 | 
            -
              spec.add_development_dependency  | 
| 31 | 
            -
              spec.add_development_dependency  | 
| 32 | 
            -
              spec.add_development_dependency  | 
| 35 | 
            +
              spec.add_development_dependency 'bundler', '~> 1.10'
         | 
| 36 | 
            +
              spec.add_development_dependency 'rake', '~> 10.0'
         | 
| 37 | 
            +
              spec.add_development_dependency 'rspec'
         | 
| 38 | 
            +
              spec.add_development_dependency 'minitest'
         | 
| 39 | 
            +
              spec.add_development_dependency 'coveralls'
         | 
| 33 40 |  | 
| 34 | 
            -
              spec.add_dependency  | 
| 35 | 
            -
              spec.add_dependency  | 
| 36 | 
            -
              spec.add_dependency  | 
| 37 | 
            -
              spec.add_dependency  | 
| 41 | 
            +
              spec.add_dependency 'json'
         | 
| 42 | 
            +
              spec.add_dependency 'erubis'
         | 
| 43 | 
            +
              spec.add_dependency 'tty'
         | 
| 44 | 
            +
              spec.add_dependency 'pastel'
         | 
| 38 45 | 
             
            end
         | 
    
        data/lib/kilza.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            require  | 
| 1 | 
            +
            require 'kilza/version'
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'kilza/source'
         | 
| 4 4 | 
             
            require 'kilza/class'
         | 
| @@ -7,21 +7,36 @@ require 'kilza/language' | |
| 7 7 | 
             
            require 'kilza/language/objc'
         | 
| 8 8 | 
             
            require 'kilza/language/java'
         | 
| 9 9 |  | 
| 10 | 
            +
            # Ruby class
         | 
| 10 11 | 
             
            class String
         | 
| 11 | 
            -
               | 
| 12 | 
            +
              # Test if the string can be a number
         | 
| 13 | 
            +
              #
         | 
| 14 | 
            +
              # @param str [String] string to be tested
         | 
| 15 | 
            +
              #
         | 
| 16 | 
            +
              # @return [Boolean] true in case of success
         | 
| 17 | 
            +
              def number?
         | 
| 12 18 | 
             
                true if Float(self) rescue false
         | 
| 13 19 | 
             
              end
         | 
| 14 20 | 
             
            end
         | 
| 15 21 |  | 
| 22 | 
            +
            # Tranforms a JSON string into Objects
         | 
| 16 23 | 
             
            module Kilza
         | 
| 24 | 
            +
              # Removes everything except numbers and letters.
         | 
| 25 | 
            +
              #
         | 
| 26 | 
            +
              # @param str [String] string to be cleaned
         | 
| 27 | 
            +
              #
         | 
| 28 | 
            +
              # @return [String] cleaned string
         | 
| 17 29 | 
             
              def self.clean(str)
         | 
| 18 | 
            -
                if str[0]. | 
| 19 | 
            -
             | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
                str = str.gsub(/[^a-zA-Z0-9]/, '_')
         | 
| 30 | 
            +
                str = '_' + str if str[0].number?
         | 
| 31 | 
            +
                str.gsub(/[^a-zA-Z0-9]/, '_')
         | 
| 22 32 | 
             
              end
         | 
| 23 33 |  | 
| 34 | 
            +
              # Cleans the string and make it lowercase.
         | 
| 35 | 
            +
              #
         | 
| 36 | 
            +
              # @param str [String] string to be cleaned
         | 
| 37 | 
            +
              #
         | 
| 38 | 
            +
              # @return [String] cleaned string
         | 
| 24 39 | 
             
              def self.normalize(str)
         | 
| 25 | 
            -
                 | 
| 40 | 
            +
                Kilza.clean(str).downcase
         | 
| 26 41 | 
             
              end
         | 
| 27 42 | 
             
            end
         | 
    
        data/lib/kilza/class.rb
    CHANGED
    
    | @@ -1,46 +1,65 @@ | |
| 1 1 | 
             
            module Kilza
         | 
| 2 | 
            +
              # Represents one single object class
         | 
| 2 3 | 
             
              module Class
         | 
| 4 | 
            +
                # Class name
         | 
| 3 5 | 
             
                attr_accessor :name
         | 
| 4 | 
            -
             | 
| 6 | 
            +
             | 
| 7 | 
            +
                # Array with all class dependecies
         | 
| 8 | 
            +
                # Specific for each language
         | 
| 5 9 | 
             
                attr_accessor :imports
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                # Array with all class properties
         | 
| 6 12 | 
             
                attr_accessor :properties
         | 
| 7 13 |  | 
| 8 14 | 
             
                def initialize(name)
         | 
| 9 | 
            -
                  @name = Kilza | 
| 15 | 
            +
                  @name = Kilza.normalize(name).capitalize
         | 
| 10 16 | 
             
                  @properties = []
         | 
| 11 17 | 
             
                  @imports = []
         | 
| 12 | 
            -
                  @params = []
         | 
| 13 18 | 
             
                end
         | 
| 14 19 |  | 
| 20 | 
            +
                # Search for a property by name
         | 
| 21 | 
            +
                #
         | 
| 22 | 
            +
                # @param name [String] Property name
         | 
| 23 | 
            +
                #
         | 
| 24 | 
            +
                # @return [Kilza::Property] The property found or nil
         | 
| 15 25 | 
             
                def find(name)
         | 
| 16 | 
            -
                  @properties.each { |p|
         | 
| 17 | 
            -
                    return p if (p.name == name)
         | 
| 18 | 
            -
                  }
         | 
| 26 | 
            +
                  @properties.each { |p| return p if p.name == name }
         | 
| 19 27 | 
             
                  nil
         | 
| 20 28 | 
             
                end
         | 
| 21 29 |  | 
| 30 | 
            +
                # Adds a new property
         | 
| 31 | 
            +
                #
         | 
| 32 | 
            +
                # @param property [Kilza::Property] Property to include
         | 
| 22 33 | 
             
                def push(property)
         | 
| 23 34 | 
             
                  p = find(property.name)
         | 
| 24 | 
            -
                  if p.nil?
         | 
| 25 | 
            -
                    @properties.push(property)
         | 
| 26 | 
            -
                  end
         | 
| 35 | 
            +
                  @properties.push(property) if p.nil?
         | 
| 27 36 | 
             
                end
         | 
| 28 37 |  | 
| 29 38 | 
             
                def sources
         | 
| 39 | 
            +
                  fail 'It should be implemented'
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def code(lang, file_name)
         | 
| 43 | 
            +
                  cur_path = File.expand_path(__FILE__)
         | 
| 44 | 
            +
                  erb_path = File.join(File.dirname(cur_path), 'language', lang)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  path = File.join(erb_path, file_name + '.erb')
         | 
| 47 | 
            +
                  eruby = Erubis::Eruby.new(File.read(path))
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  s = Kilza::Source.new
         | 
| 50 | 
            +
                  s.source = eruby.result(binding)
         | 
| 51 | 
            +
                  s.file_name = @name.capitalize + '.' + file_name
         | 
| 52 | 
            +
                  s
         | 
| 30 53 | 
             
                end
         | 
| 31 54 |  | 
| 32 | 
            -
                def  | 
| 55 | 
            +
                def to_s
         | 
| 33 56 | 
             
                  properties = []
         | 
| 34 | 
            -
                  @properties.each { |p|
         | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
                    : | 
| 39 | 
            -
             | 
| 40 | 
            -
                    :params => @params,
         | 
| 41 | 
            -
                    :properties => properties
         | 
| 42 | 
            -
                  }
         | 
| 43 | 
            -
                  hash
         | 
| 57 | 
            +
                  @properties.each { |p| properties.push(p.to_s) }
         | 
| 58 | 
            +
                  {
         | 
| 59 | 
            +
                    name: @name,
         | 
| 60 | 
            +
                    imports: @imports,
         | 
| 61 | 
            +
                    properties: properties
         | 
| 62 | 
            +
                  }.to_s
         | 
| 44 63 | 
             
                end
         | 
| 45 64 | 
             
              end
         | 
| 46 65 | 
             
            end
         | 
    
        data/lib/kilza/language.rb
    CHANGED
    
    | @@ -2,79 +2,134 @@ require 'json' | |
| 2 2 | 
             
            require 'erubis'
         | 
| 3 3 |  | 
| 4 4 | 
             
            module Kilza
         | 
| 5 | 
            +
              # Represents an program language
         | 
| 5 6 | 
             
              module Language
         | 
| 7 | 
            +
                # Array with all Class classes
         | 
| 6 8 | 
             
                attr_accessor :classes
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                # Name used to represent the first generated class
         | 
| 7 11 | 
             
                attr_accessor :base_name
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                # JSON that will be used to generate objects
         | 
| 8 14 | 
             
                attr_accessor :json_string
         | 
| 9 15 |  | 
| 10 | 
            -
                 | 
| 11 | 
            -
                attr_accessor : | 
| 12 | 
            -
             | 
| 16 | 
            +
                # String that will be used to prefix reserved words
         | 
| 17 | 
            +
                attr_accessor :reserved_delimiter
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                # Words that will receive an undescore before property name
         | 
| 20 | 
            +
                attr_accessor :reserved_words
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                # Array with all properties that will be used to compare other objects
         | 
| 23 | 
            +
                attr_accessor :equal_keys
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                # Hash table with all language types mapped to target language
         | 
| 26 | 
            +
                attr_accessor :types
         | 
| 13 27 |  | 
| 14 28 | 
             
                def initialize(json_string)
         | 
| 15 29 | 
             
                  @json_string = json_string
         | 
| 16 30 | 
             
                  @classes = []
         | 
| 17 31 | 
             
                  @types = {}
         | 
| 18 32 | 
             
                  @reserved_words = []
         | 
| 33 | 
            +
                  @reserved_delimiter = '_'
         | 
| 19 34 | 
             
                  @equal_keys = []
         | 
| 20 35 | 
             
                end
         | 
| 21 36 |  | 
| 22 | 
            -
                 | 
| 23 | 
            -
             | 
| 37 | 
            +
                # Returns all available classes
         | 
| 38 | 
            +
                #
         | 
| 39 | 
            +
                # @param base_name [String] First class name
         | 
| 40 | 
            +
                #
         | 
| 41 | 
            +
                # @return [Array] All available classes
         | 
| 42 | 
            +
                def classes(base_name)
         | 
| 43 | 
            +
                  hash = JSON.parse(json_string)
         | 
| 44 | 
            +
                  hash = { base_name + 'Object' => hash } if hash.is_a?(Array)
         | 
| 45 | 
            +
                  parse_hash(base_name, hash)
         | 
| 46 | 
            +
                  @classes
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                protected
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                # Creates a new Class object and checks for valid name
         | 
| 52 | 
            +
                #
         | 
| 53 | 
            +
                # @param name [String] name of the class to be created
         | 
| 54 | 
            +
                #
         | 
| 55 | 
            +
                # @return [Kilza::Class] new class
         | 
| 56 | 
            +
                def clazz(name)
         | 
| 57 | 
            +
                  name = @reserved_delimiter + name unless @reserved_words.index(name).nil?
         | 
| 24 58 | 
             
                  Class.new(name)
         | 
| 25 59 | 
             
                end
         | 
| 26 60 |  | 
| 27 | 
            -
                 | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 61 | 
            +
                # Creates a new Property object and checks for valid name
         | 
| 62 | 
            +
                #
         | 
| 63 | 
            +
                # @param name [String] name of the property to be created
         | 
| 64 | 
            +
                # @param type [String] type of the property based on class name
         | 
| 65 | 
            +
                # @param array [Boolean] indicates if this property represents an array
         | 
| 66 | 
            +
                # @param key [Boolean] indicates if this property can be used to compare
         | 
| 67 | 
            +
                # objects
         | 
| 68 | 
            +
                #
         | 
| 69 | 
            +
                # @return [Kilza::Property] new property
         | 
| 70 | 
            +
                def property(name, type, array, key)
         | 
| 71 | 
            +
                  name = @reserved_delimiter + name unless @reserved_words.index(name).nil?
         | 
| 72 | 
            +
                  Property.new(name, type, array, key.nil?)
         | 
| 30 73 | 
             
                end
         | 
| 31 74 |  | 
| 75 | 
            +
                # Searches for a Kilza::Class inside @classes
         | 
| 76 | 
            +
                # and creates a new one if it could not be found
         | 
| 77 | 
            +
                #
         | 
| 78 | 
            +
                # @param name [String] class name to find
         | 
| 79 | 
            +
                #
         | 
| 80 | 
            +
                # @return [Kilza::Class] class with the specified name
         | 
| 32 81 | 
             
                def find(name)
         | 
| 33 | 
            -
                   | 
| 34 | 
            -
             | 
| 35 | 
            -
                   | 
| 36 | 
            -
                  @classes. | 
| 37 | 
            -
                  return @classes.last
         | 
| 82 | 
            +
                  name = Kilza.normalize(name).capitalize
         | 
| 83 | 
            +
                  @classes.each { |cl| return cl if cl.name == name }
         | 
| 84 | 
            +
                  @classes.push(clazz(name))
         | 
| 85 | 
            +
                  @classes.last
         | 
| 38 86 | 
             
                end
         | 
| 39 87 |  | 
| 40 | 
            -
                 | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                            current_class.push(get_property(property_name, type, true, @equal_keys.index(property_name)))
         | 
| 58 | 
            -
                          end
         | 
| 59 | 
            -
                        }
         | 
| 60 | 
            -
                      end
         | 
| 61 | 
            -
                    when "hash"
         | 
| 62 | 
            -
                      current_class.push(get_property(property_name, 'object', false, @equal_keys.index(property_name)))
         | 
| 63 | 
            -
                      parse(value, property_name)
         | 
| 64 | 
            -
                    else
         | 
| 65 | 
            -
                      current_class.push(get_property(property_name, type, false, @equal_keys.index(property_name)))
         | 
| 66 | 
            -
                    end
         | 
| 67 | 
            -
                  }
         | 
| 88 | 
            +
                # Parses an element value an verify if it should create a new Class
         | 
| 89 | 
            +
                # inside @classes
         | 
| 90 | 
            +
                #
         | 
| 91 | 
            +
                # @param class_name [String] Name of the class the element is inside
         | 
| 92 | 
            +
                # @param name [String] The element name
         | 
| 93 | 
            +
                # @param value [Any] The element value
         | 
| 94 | 
            +
                # @param array [Boolean] Indicates the element is inside an Array
         | 
| 95 | 
            +
                def parse_el(class_name, name, value, array = false)
         | 
| 96 | 
            +
                  type = value.class.name.split('::').last.downcase
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                  return parse_array(class_name, name, value) if type == 'array'
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  cur_class = find(class_name)
         | 
| 101 | 
            +
                  key = @equal_keys.index(name)
         | 
| 102 | 
            +
                  cur_class.push(property(name, type, array, key))
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  parse_hash(name, value) if type == 'hash'
         | 
| 68 105 | 
             
                end
         | 
| 69 106 |  | 
| 70 | 
            -
                 | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 107 | 
            +
                # Parses an hash calling parse_el for each element
         | 
| 108 | 
            +
                #
         | 
| 109 | 
            +
                # @param class_name [String] Name of the class the hash is inside
         | 
| 110 | 
            +
                # @param hash [Hash] The hash value
         | 
| 111 | 
            +
                def parse_hash(class_name, hash)
         | 
| 112 | 
            +
                  hash.each do |property_name, value|
         | 
| 113 | 
            +
                    parse_el(class_name, property_name, value)
         | 
| 74 114 | 
             
                  end
         | 
| 75 | 
            -
                  parse(hash, base_name)
         | 
| 76 | 
            -
                  return @classes
         | 
| 77 115 | 
             
                end
         | 
| 78 116 |  | 
| 117 | 
            +
                # Parses an element that represents an array calling parse_el
         | 
| 118 | 
            +
                # for each element.
         | 
| 119 | 
            +
                # If the array is empty, it creates a new class to represent
         | 
| 120 | 
            +
                # each array's element.
         | 
| 121 | 
            +
                #
         | 
| 122 | 
            +
                # @param class_name [String] Name of the class the array is inside
         | 
| 123 | 
            +
                # @param name [String] The element name
         | 
| 124 | 
            +
                # @param value [Any] The element value
         | 
| 125 | 
            +
                def parse_array(class_name, name, value)
         | 
| 126 | 
            +
                  if value.length == 0
         | 
| 127 | 
            +
                    parse_el(class_name, name, nil, true)
         | 
| 128 | 
            +
                  else
         | 
| 129 | 
            +
                    value.each do |val|
         | 
| 130 | 
            +
                      parse_el(class_name, name, val, true)
         | 
| 131 | 
            +
                    end
         | 
| 132 | 
            +
                  end
         | 
| 133 | 
            +
                end
         | 
| 79 134 | 
             
              end
         | 
| 80 135 | 
             
            end
         | 
    
        data/lib/kilza/language/java.rb
    CHANGED
    
    | @@ -2,10 +2,10 @@ require 'date' | |
| 2 2 |  | 
| 3 3 | 
             
            module Kilza
         | 
| 4 4 | 
             
              class Java
         | 
| 5 | 
            -
             | 
| 6 5 | 
             
                class Class
         | 
| 7 6 | 
             
                  include Kilza::Class
         | 
| 8 7 |  | 
| 8 | 
            +
                  # Represents the Java class package
         | 
| 9 9 | 
             
                  attr_accessor :package
         | 
| 10 10 |  | 
| 11 11 | 
             
                  def initialize(name, package = nil)
         | 
| @@ -14,77 +14,58 @@ module Kilza | |
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| 16 16 | 
             
                  def sources
         | 
| 17 | 
            -
                     | 
| 18 | 
            -
                    java_path = File.join(File.dirname(cur_path), File.basename(cur_path, '.rb'), "java.erb")
         | 
| 19 | 
            -
                    eruby_java = Erubis::Eruby.new(File.read(java_path))
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    java = Kilza::Source.new
         | 
| 22 | 
            -
                    java.source = eruby_java.result(binding)
         | 
| 23 | 
            -
                    java.file_name = @name.capitalize + ".java"
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    result = [
         | 
| 26 | 
            -
                      java
         | 
| 27 | 
            -
                    ]
         | 
| 28 | 
            -
                    return result
         | 
| 17 | 
            +
                    [code('java', 'java')]
         | 
| 29 18 | 
             
                  end
         | 
| 30 19 | 
             
                end
         | 
| 31 | 
            -
             | 
| 32 20 | 
             
              end
         | 
| 33 21 | 
             
            end
         | 
| 34 22 |  | 
| 35 23 | 
             
            module Kilza
         | 
| 24 | 
            +
              # Objective-C Language parser
         | 
| 36 25 | 
             
              class Java
         | 
| 37 26 | 
             
                include Kilza::Language
         | 
| 38 27 |  | 
| 39 28 | 
             
                def initialize(json_string)
         | 
| 40 29 | 
             
                  super(json_string)
         | 
| 41 30 |  | 
| 42 | 
            -
                  @reserved_words =  | 
| 43 | 
            -
                     | 
| 44 | 
            -
                     | 
| 45 | 
            -
                     | 
| 46 | 
            -
                     | 
| 47 | 
            -
                     | 
| 48 | 
            -
                   | 
| 31 | 
            +
                  @reserved_words = %w(
         | 
| 32 | 
            +
                    abstract continue for new switch assert default goto,
         | 
| 33 | 
            +
                    package synchronized boolean do if private this break double implements,
         | 
| 34 | 
            +
                    protected throw byte else import public throws case enum instanceof,
         | 
| 35 | 
            +
                    null return transient catch extends int short try char final interface static,
         | 
| 36 | 
            +
                    void class finally long strictfp volatile const float native super while
         | 
| 37 | 
            +
                  )
         | 
| 49 38 |  | 
| 50 39 | 
             
                  @types = {
         | 
| 51 | 
            -
                     | 
| 52 | 
            -
                     | 
| 53 | 
            -
                     | 
| 54 | 
            -
                     | 
| 55 | 
            -
                     | 
| 56 | 
            -
                     | 
| 57 | 
            -
                     | 
| 40 | 
            +
                    'nilclass' => 'Object',
         | 
| 41 | 
            +
                    'string' => 'String',
         | 
| 42 | 
            +
                    'fixnum' => 'Long',
         | 
| 43 | 
            +
                    'float' => 'Double',
         | 
| 44 | 
            +
                    'falseclass' => 'Boolean',
         | 
| 45 | 
            +
                    'trueclass' => 'Boolean',
         | 
| 46 | 
            +
                    'hash' => 'Object'
         | 
| 58 47 | 
             
                  }
         | 
| 59 48 |  | 
| 60 | 
            -
                  @equal_keys =  | 
| 61 | 
            -
                    "id",
         | 
| 62 | 
            -
                    "identifier",
         | 
| 63 | 
            -
                    "uid"
         | 
| 64 | 
            -
                  ]
         | 
| 49 | 
            +
                  @equal_keys = %w(id identifier uid)
         | 
| 65 50 | 
             
                end
         | 
| 66 51 |  | 
| 67 | 
            -
                def  | 
| 52 | 
            +
                def clazz(name)
         | 
| 68 53 | 
             
                  Kilza::Java::Class.new(name)
         | 
| 69 54 | 
             
                end
         | 
| 70 55 |  | 
| 71 | 
            -
                def  | 
| 72 | 
            -
                  super( | 
| 56 | 
            +
                def classes(class_name)
         | 
| 57 | 
            +
                  super(class_name)
         | 
| 73 58 |  | 
| 74 | 
            -
                  @classes.each  | 
| 75 | 
            -
                    cl.properties.each  | 
| 76 | 
            -
                      if pr. | 
| 77 | 
            -
                        pr.type = pr.name.capitalize
         | 
| 78 | 
            -
                      end
         | 
| 59 | 
            +
                  @classes.each do |cl|
         | 
| 60 | 
            +
                    cl.properties.each do |pr|
         | 
| 61 | 
            +
                      pr.type = pr.name.capitalize if pr.object? || (pr.array? && pr.null?)
         | 
| 79 62 |  | 
| 80 | 
            -
                      if pr. | 
| 81 | 
            -
                        cl.imports. | 
| 82 | 
            -
                      end
         | 
| 63 | 
            +
                      cl.imports.push('import java.util.ArrayList;') if pr.array? &&
         | 
| 64 | 
            +
                        cl.imports.index('import java.util.ArrayList;').nil?
         | 
| 83 65 |  | 
| 84 | 
            -
                      pr.type = @types[pr.type]  | 
| 85 | 
            -
                     | 
| 86 | 
            -
                   | 
| 66 | 
            +
                      pr.type = @types[pr.type] unless @types[pr.type].nil?
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
                  end
         | 
| 87 69 | 
             
                end
         | 
| 88 | 
            -
             | 
| 89 70 | 
             
              end
         | 
| 90 71 | 
             
            end
         | 
| @@ -20,7 +20,7 @@ public class <%= @name %> implements Serializable | |
| 20 20 | 
             
            <% for @property in @properties %>
         | 
| 21 21 | 
             
                @Expose
         | 
| 22 22 | 
             
                @SerializedName(FIELD_<%= @property.name.upcase %>)
         | 
| 23 | 
            -
                <% if @property. | 
| 23 | 
            +
                <% if @property.array? %>
         | 
| 24 24 | 
             
                private ArrayList<<%= @property.type %>> <%= @property.name %>;
         | 
| 25 25 | 
             
                <% else %>
         | 
| 26 26 | 
             
                private <%= @property.type %> <%= @property.name %>;
         | 
| @@ -51,13 +51,13 @@ public class <%= @name %> implements Serializable | |
| 51 51 | 
             
                protected void parseObject(JSONObject object)
         | 
| 52 52 | 
             
                {
         | 
| 53 53 | 
             
            <% for @property in @properties %>
         | 
| 54 | 
            -
              <% if @property. | 
| 54 | 
            +
              <% if @property.array? %>
         | 
| 55 55 | 
             
                    if (object.optJSONArray(FIELD_<%= @property.name.upcase %>) != null)
         | 
| 56 56 | 
             
                    {
         | 
| 57 57 | 
             
                        this.<%= @property.name %> = new ArrayList<>();
         | 
| 58 58 | 
             
                        JSONArray <%= @property.name %>JsonArray = object.optJSONArray(FIELD_<%= @property.name.upcase %>);
         | 
| 59 59 | 
             
                        for (int i = 0; i < <%= @property.name %>JsonArray.length(); i++) {
         | 
| 60 | 
            -
                <% if @property. | 
| 60 | 
            +
                <% if @property.object? || @property.null? %>
         | 
| 61 61 | 
             
                            JSONObject <%= @property.name %> = <%= @property.name %>JsonArray.optJSONObject(i);
         | 
| 62 62 | 
             
                <% else %>
         | 
| 63 63 | 
             
                            <%= @property.type %> <%= @property.name %> = <%= @property.name %>JsonArray.optJSON<%= @property.type %>(i);
         | 
| @@ -66,10 +66,10 @@ public class <%= @name %> implements Serializable | |
| 66 66 | 
             
                        }
         | 
| 67 67 | 
             
                    }
         | 
| 68 68 | 
             
              <% else %>
         | 
| 69 | 
            -
                <% if @property. | 
| 69 | 
            +
                <% if @property.object? %>
         | 
| 70 70 | 
             
                    this.<%= @property.name %> = new <%= @property.type %>(object.optJSONObject(FIELD_<%= @property.name.upcase %>));
         | 
| 71 71 | 
             
                <% else %>
         | 
| 72 | 
            -
                  <% if @property. | 
| 72 | 
            +
                  <% if @property.null? %>
         | 
| 73 73 | 
             
                    this.<%= @property.name %> = object.opt(FIELD_<%= @property.name.upcase %>);
         | 
| 74 74 | 
             
                  <% else %>
         | 
| 75 75 | 
             
                    this.<%= @property.name %> = object.opt<%= @property.type %>(FIELD_<%= @property.name.upcase %>);
         | 
| @@ -80,14 +80,16 @@ public class <%= @name %> implements Serializable | |
| 80 80 | 
             
                }
         | 
| 81 81 |  | 
| 82 82 | 
             
            <% for @property in @properties %>
         | 
| 83 | 
            -
                public void set<%= @property.name.capitalize %>(<%= @property. | 
| 83 | 
            +
                public void set<%= @property.name.capitalize %>(<%= @property.array? ? "ArrayList<" + @property.type + ">" : @property.type %> value) {
         | 
| 84 84 | 
             
                    this.<%= @property.name %> = value;
         | 
| 85 85 | 
             
                }
         | 
| 86 86 |  | 
| 87 | 
            -
                <% if @property. | 
| 87 | 
            +
                <% if @property.array? %>
         | 
| 88 | 
            +
                public ArrayList<<%= @property.type %>> get<%= @property.name.capitalize %>() {
         | 
| 89 | 
            +
                <% elsif @property.boolean? %>
         | 
| 88 90 | 
             
                public <%= @property.type %> is<%= @property.name.capitalize %>() {
         | 
| 89 91 | 
             
                <% else %>
         | 
| 90 | 
            -
                public <%= @property. | 
| 92 | 
            +
                public <%= @property.type %> get<%= @property.name.capitalize %>() {
         | 
| 91 93 | 
             
                <% end %>
         | 
| 92 94 | 
             
                    return this.<%= @property.name %>;
         | 
| 93 95 | 
             
                }
         | 
| @@ -97,8 +99,8 @@ public class <%= @name %> implements Serializable | |
| 97 99 | 
             
            @eq = []
         | 
| 98 100 | 
             
            @hs = []
         | 
| 99 101 | 
             
            for @property in @properties
         | 
| 100 | 
            -
              @eq.push("((#{@name}) obj).get#{@property.name.capitalize}().equals(#{@property.name})") if (@property. | 
| 101 | 
            -
              @hs.push(" | 
| 102 | 
            +
              @eq.push("((#{@name}) obj).get#{@property.name.capitalize}().equals(#{@property.name})") if (@property.key)
         | 
| 103 | 
            +
              @hs.push("#{@property.name}.hashCode()") if (@property.key)
         | 
| 102 104 | 
             
            end
         | 
| 103 105 | 
             
            %>
         | 
| 104 106 | 
             
            <% if @eq.length > 0 %>
         | 
    
        data/lib/kilza/language/objc.rb
    CHANGED
    
    | @@ -2,93 +2,69 @@ require 'date' | |
| 2 2 |  | 
| 3 3 | 
             
            module Kilza
         | 
| 4 4 | 
             
              class Objc
         | 
| 5 | 
            -
             | 
| 6 5 | 
             
                class Class
         | 
| 7 6 | 
             
                  include Kilza::Class
         | 
| 8 7 |  | 
| 9 8 | 
             
                  def sources
         | 
| 10 | 
            -
                     | 
| 11 | 
            -
                    m_path = File.join(File.dirname(cur_path), File.basename(cur_path, '.rb'), "m.erb")
         | 
| 12 | 
            -
                    h_path = File.join(File.dirname(cur_path), File.basename(cur_path, '.rb'), "h.erb")
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                    eruby_m = Erubis::Eruby.new(File.read(m_path))
         | 
| 15 | 
            -
                    eruby_h = Erubis::Eruby.new(File.read(h_path))
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                    m = Kilza::Source.new
         | 
| 18 | 
            -
                    m.source = eruby_m.result(binding)
         | 
| 19 | 
            -
                    m.file_name = @name.capitalize + ".m"
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    h = Kilza::Source.new
         | 
| 22 | 
            -
                    h.source = eruby_h.result(binding)
         | 
| 23 | 
            -
                    h.file_name = @name.capitalize + ".h"
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                    result = [
         | 
| 26 | 
            -
                      h,m
         | 
| 27 | 
            -
                    ]
         | 
| 28 | 
            -
                    return result
         | 
| 9 | 
            +
                    [code('objc', 'h'), code('objc', 'm')]
         | 
| 29 10 | 
             
                  end
         | 
| 30 11 | 
             
                end
         | 
| 31 | 
            -
             | 
| 32 12 | 
             
              end
         | 
| 33 13 | 
             
            end
         | 
| 34 14 |  | 
| 35 15 | 
             
            module Kilza
         | 
| 16 | 
            +
              # Objective-C Language parser
         | 
| 36 17 | 
             
              class Objc
         | 
| 37 18 | 
             
                include Kilza::Language
         | 
| 38 19 |  | 
| 39 20 | 
             
                def initialize(json_string)
         | 
| 40 21 | 
             
                  super(json_string)
         | 
| 41 22 |  | 
| 42 | 
            -
                  @ | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
                     | 
| 46 | 
            -
                     | 
| 47 | 
            -
                     | 
| 48 | 
            -
                     | 
| 49 | 
            -
                     | 
| 50 | 
            -
                     | 
| 51 | 
            -
                     | 
| 52 | 
            -
             | 
| 23 | 
            +
                  @reserved_delimiter = '_my'
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  @reserved_words = %w(
         | 
| 26 | 
            +
                    auto break case char const continue,
         | 
| 27 | 
            +
                    class default do double else enum extern float for,
         | 
| 28 | 
            +
                    goto if id implementation inline int interface long,
         | 
| 29 | 
            +
                    new nonatomic property protocol readonly readwrite register,
         | 
| 30 | 
            +
                    restrict retain return short signed sizeof static strong,
         | 
| 31 | 
            +
                    struct switch typedef union unsafe_unretained unsigned void,
         | 
| 32 | 
            +
                    volatile weak while _bool _complex _imaginary sel imp,
         | 
| 33 | 
            +
                    bool nil yes no self super __strong __weak oneway,
         | 
| 34 | 
            +
                    in out inout bycopy byref
         | 
| 35 | 
            +
                  )
         | 
| 53 36 |  | 
| 54 37 | 
             
                  @types = {
         | 
| 55 | 
            -
                     | 
| 56 | 
            -
                     | 
| 57 | 
            -
                     | 
| 58 | 
            -
                     | 
| 59 | 
            -
                     | 
| 60 | 
            -
                     | 
| 61 | 
            -
                     | 
| 38 | 
            +
                    'nilclass' => 'id',
         | 
| 39 | 
            +
                    'string'  => 'NSString *',
         | 
| 40 | 
            +
                    'fixnum' => 'NSNumber *',
         | 
| 41 | 
            +
                    'float' => 'NSNumber *',
         | 
| 42 | 
            +
                    'falseclass' => 'NSNumber *',
         | 
| 43 | 
            +
                    'trueclass' => 'NSNumber *',
         | 
| 44 | 
            +
                    'hash' => 'NSObject *'
         | 
| 62 45 | 
             
                  }
         | 
| 63 46 |  | 
| 64 | 
            -
                  @equal_keys =  | 
| 65 | 
            -
                    "id",
         | 
| 66 | 
            -
                    "identifier",
         | 
| 67 | 
            -
                    "uid"
         | 
| 68 | 
            -
                  ]
         | 
| 47 | 
            +
                  @equal_keys = %w(id identifier uid)
         | 
| 69 48 | 
             
                end
         | 
| 70 49 |  | 
| 71 | 
            -
                def  | 
| 50 | 
            +
                def clazz(name)
         | 
| 72 51 | 
             
                  Kilza::Objc::Class.new(name)
         | 
| 73 52 | 
             
                end
         | 
| 74 53 |  | 
| 75 | 
            -
                def  | 
| 76 | 
            -
                  super( | 
| 77 | 
            -
             | 
| 78 | 
            -
                  @classes.each { |cl|
         | 
| 79 | 
            -
                    cl.properties.each { |pr|
         | 
| 80 | 
            -
                      if pr.is_object?
         | 
| 81 | 
            -
                        cl.imports.push("#import \"" + pr.name.capitalize + ".h\"")
         | 
| 82 | 
            -
                      end
         | 
| 54 | 
            +
                def classes(class_name)
         | 
| 55 | 
            +
                  super(class_name)
         | 
| 83 56 |  | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 57 | 
            +
                  @classes.each do |cl|
         | 
| 58 | 
            +
                    cl.properties.each do |pr|
         | 
| 59 | 
            +
                      if pr.object? || (pr.array? && pr.null?)
         | 
| 60 | 
            +
                        pr.type = pr.name.capitalize + ' *'
         | 
| 61 | 
            +
                        cl.imports.push("#import \"#{pr.name.capitalize}.h\"")
         | 
| 86 62 | 
             
                      end
         | 
| 87 63 |  | 
| 88 | 
            -
                      pr.type =  | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 64 | 
            +
                      pr.type = 'NSMutableArray *' if pr.array?
         | 
| 65 | 
            +
                      pr.type = @types[pr.type] unless @types[pr.type].nil?
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
                  end
         | 
| 91 68 | 
             
                end
         | 
| 92 | 
            -
             | 
| 93 69 | 
             
              end
         | 
| 94 70 | 
             
            end
         | 
| @@ -57,9 +57,9 @@ NSString * const k<%= @name %><%= @property.name.capitalize %> = @"<%= @property | |
| 57 57 | 
             
              if (self && [dict isKindOfClass:[NSDictionary class]])
         | 
| 58 58 | 
             
              {
         | 
| 59 59 | 
             
            <% for @property in @properties %>
         | 
| 60 | 
            -
            <% if @property. | 
| 60 | 
            +
            <% if @property.object? || (@property.null? && @property.array?) %>
         | 
| 61 61 | 
             
                NSObject *obj<%= @property.name.capitalize %> = [dict objectForKey:k<%= @name %><%= @property.name.capitalize %>];
         | 
| 62 | 
            -
            <% if @property. | 
| 62 | 
            +
            <% if @property.array? %>
         | 
| 63 63 | 
             
                if ([obj<%= @property.name.capitalize %> isKindOfClass:[NSArray class]])
         | 
| 64 64 | 
             
                {
         | 
| 65 65 | 
             
                  NSMutableArray *list<%= @property.name.capitalize %> = [NSMutableArray array];
         | 
| @@ -88,8 +88,8 @@ NSString * const k<%= @name %><%= @property.name.capitalize %> = @"<%= @property | |
| 88 88 | 
             
              NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
         | 
| 89 89 |  | 
| 90 90 | 
             
            <% for @property in @properties %>
         | 
| 91 | 
            -
            <% if @property. | 
| 92 | 
            -
            <% if @property. | 
| 91 | 
            +
            <% if @property.object? || (@property.null? && @property.array?) %>
         | 
| 92 | 
            +
            <% if @property.array? %>
         | 
| 93 93 | 
             
              NSMutableArray *tempArray<%= @property.name.capitalize %> = [NSMutableArray array];
         | 
| 94 94 | 
             
              for (NSObject *subArray in self.<%= @property.name %>) {
         | 
| 95 95 | 
             
                if ([subArray respondsToSelector:@selector(dictionaryRepresentation)]) {
         | 
    
        data/lib/kilza/property.rb
    CHANGED
    
    | @@ -1,58 +1,62 @@ | |
| 1 1 | 
             
            module Kilza
         | 
| 2 | 
            +
              # Represents a single Class property
         | 
| 2 3 | 
             
              class Property
         | 
| 4 | 
            +
                # Normalized property name
         | 
| 5 | 
            +
                # Starts with _ or alphanumeric character
         | 
| 6 | 
            +
                # and doesn't contain any special character
         | 
| 3 7 | 
             
                attr_accessor :name
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                # Original JSON property name
         | 
| 4 10 | 
             
                attr_accessor :original_name
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                # Ruby string type
         | 
| 13 | 
            +
                # Can be object, fixnum, float, falseclass, trueclass and nilclass
         | 
| 5 14 | 
             
                attr_accessor :type
         | 
| 6 | 
            -
                attr_accessor :params
         | 
| 7 | 
            -
                attr_accessor :is_array
         | 
| 8 | 
            -
                attr_accessor :is_key
         | 
| 9 15 |  | 
| 10 | 
            -
                 | 
| 11 | 
            -
             | 
| 16 | 
            +
                # Indicates if the property represents an array of objects
         | 
| 17 | 
            +
                attr_accessor :array
         | 
| 18 | 
            +
                alias_method :array?, :array
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                # Indicates if the property should be used for comparing purposes
         | 
| 21 | 
            +
                # Used to compare if one object is equal to another one
         | 
| 22 | 
            +
                attr_accessor :key
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def initialize(name, type, array, key)
         | 
| 25 | 
            +
                  @name = Kilza.normalize(name)
         | 
| 12 26 | 
             
                  @original_name = name
         | 
| 13 27 | 
             
                  @type = type
         | 
| 14 | 
            -
                  @ | 
| 15 | 
            -
                  @ | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                def is_array?
         | 
| 19 | 
            -
                  @is_array
         | 
| 28 | 
            +
                  @array = array
         | 
| 29 | 
            +
                  @key = key
         | 
| 30 | 
            +
                  @original_type = type
         | 
| 20 31 | 
             
                end
         | 
| 21 32 |  | 
| 22 | 
            -
                def  | 
| 23 | 
            -
                  @ | 
| 33 | 
            +
                def object?
         | 
| 34 | 
            +
                  @original_type == 'hash'
         | 
| 24 35 | 
             
                end
         | 
| 25 36 |  | 
| 26 | 
            -
                def  | 
| 27 | 
            -
                  @ | 
| 37 | 
            +
                def fixnum?
         | 
| 38 | 
            +
                  @original_type == 'fixnum'
         | 
| 28 39 | 
             
                end
         | 
| 29 40 |  | 
| 30 | 
            -
                def  | 
| 31 | 
            -
                  @ | 
| 41 | 
            +
                def boolean?
         | 
| 42 | 
            +
                  @original_type == 'trueclass' || @original_type == 'falseclass'
         | 
| 32 43 | 
             
                end
         | 
| 33 44 |  | 
| 34 | 
            -
                def  | 
| 35 | 
            -
                  @ | 
| 45 | 
            +
                def float?
         | 
| 46 | 
            +
                  @original_type == 'float'
         | 
| 36 47 | 
             
                end
         | 
| 37 48 |  | 
| 38 | 
            -
                def  | 
| 39 | 
            -
                  @ | 
| 49 | 
            +
                def null?
         | 
| 50 | 
            +
                  @original_type == 'nilclass'
         | 
| 40 51 | 
             
                end
         | 
| 41 52 |  | 
| 42 | 
            -
                def  | 
| 43 | 
            -
                   | 
| 44 | 
            -
                    : | 
| 45 | 
            -
                    : | 
| 46 | 
            -
                    : | 
| 47 | 
            -
                     | 
| 48 | 
            -
             | 
| 49 | 
            -
                    :is_object? => is_object?,
         | 
| 50 | 
            -
                    :is_fixnum? => is_fixnum?,
         | 
| 51 | 
            -
                    :is_boolean? => is_boolean?,
         | 
| 52 | 
            -
                    :is_float? => is_float?,
         | 
| 53 | 
            -
                    :is_nil? => is_nil?
         | 
| 54 | 
            -
                  }
         | 
| 55 | 
            -
                  hash
         | 
| 53 | 
            +
                def to_s
         | 
| 54 | 
            +
                  {
         | 
| 55 | 
            +
                    name: @name,
         | 
| 56 | 
            +
                    original_name: @original_name,
         | 
| 57 | 
            +
                    type: @type,
         | 
| 58 | 
            +
                    array?: @array
         | 
| 59 | 
            +
                  }.to_s
         | 
| 56 60 | 
             
                end
         | 
| 57 61 | 
             
              end
         | 
| 58 62 | 
             
            end
         | 
    
        data/lib/kilza/source.rb
    CHANGED
    
    
    
        data/lib/kilza/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: kilza
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Toshiro Sugii
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-01- | 
| 11 | 
            +
            date: 2016-01-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ~>
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '10.0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: rspec
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - '>='
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - '>='
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 41 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 56 | 
             
              name: minitest
         | 
| 43 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -52,6 +66,20 @@ dependencies: | |
| 52 66 | 
             
                - - '>='
         | 
| 53 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 68 | 
             
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: coveralls
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - '>='
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - '>='
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 55 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 84 | 
             
              name: json
         | 
| 57 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -108,7 +136,8 @@ dependencies: | |
| 108 136 | 
             
                - - '>='
         | 
| 109 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 138 | 
             
                    version: '0'
         | 
| 111 | 
            -
            description:  | 
| 139 | 
            +
            description: "\n    Ruby gem that can convert JSON strings in Objects.\n    It supports
         | 
| 140 | 
            +
              Objective-C and Java classes. Contribuition would be appreciate.\n  "
         | 
| 112 141 | 
             
            email:
         | 
| 113 142 | 
             
            - rtoshiro@printwtf.com
         | 
| 114 143 | 
             
            executables:
         | 
| @@ -162,5 +191,5 @@ rubyforge_project: | |
| 162 191 | 
             
            rubygems_version: 2.0.14
         | 
| 163 192 | 
             
            signing_key: 
         | 
| 164 193 | 
             
            specification_version: 4
         | 
| 165 | 
            -
            summary: Parses JSON  | 
| 194 | 
            +
            summary: Parses JSON and generates objects into other languages
         | 
| 166 195 | 
             
            test_files: []
         |