skeleton-ui 0.1.0 → 0.1.1
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/.gitignore +3 -0
- data/.rubocop.yml +26 -0
- data/README.md +8 -1
- data/bin/skeleton +4 -2
- data/html/server.rb +2 -0
- data/html/template.html.erb +2 -2
- data/lib/skeleton.rb +35 -18
- data/lib/skeleton/android.rb +24 -11
- data/lib/skeleton/base.rb +20 -28
- data/lib/skeleton/ios.rb +37 -36
- data/lib/skeleton/languages.rb +10 -10
- data/lib/skeleton/version.rb +1 -1
- data/skeleton.gemspec +1 -0
- metadata +17 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c8ef2154e88b5a4fa1a97058af39362b3336a44827407110bcb8b640fa9a08fd
         | 
| 4 | 
            +
              data.tar.gz: 68aaa372fa4ed72015cf96524e3d376b359249fb4a0b023e55293ab2eb99897a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 2412554c9d911309c6ae7c626b85c5af8a00fe4b0ac0b733129b3096527b7f3f3a7459137e2d2695def1c9ae32f8105c67e8f7bf27c5f6a387f23f0bc0c648a6
         | 
| 7 | 
            +
              data.tar.gz: 5543e179d7f1a6e85f3231ff1546ba126d0cff836d5254e0f6bb94c846fab22da4f5d6e8316df7d058bc7e8e6a8eeda8bc3aa87e37b6ff9a73a41b2779356868
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/.rubocop.yml
    ADDED
    
    | @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            Style/Tab:
         | 
| 2 | 
            +
              Enabled: false
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            Layout/IndentationWidth:
         | 
| 5 | 
            +
              Enabled: false
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Metrics/MethodLength:
         | 
| 8 | 
            +
              Enabled: false
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            Metrics/ClassLength:
         | 
| 11 | 
            +
              Enabled: false
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Layout/IndentationConsistency:
         | 
| 14 | 
            +
              Enabled: false
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            Layout/AlignHash:
         | 
| 17 | 
            +
              Enabled: false
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            Metrics/AbcSize:
         | 
| 20 | 
            +
              Enabled: false
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            Layout/AlignParameters:
         | 
| 23 | 
            +
              Enabled: false
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            Style/Documentation:
         | 
| 26 | 
            +
              Enabled: false
         | 
    
        data/README.md
    CHANGED
    
    | @@ -5,6 +5,9 @@ CLI for fast generating multi language page objects from iOS and Android screens | |
| 5 5 | 
             
            Prerequisites:
         | 
| 6 6 | 
             
            --------
         | 
| 7 7 |  | 
| 8 | 
            +
            #### Global
         | 
| 9 | 
            +
            - Install [imagemagick](http://brewformulas.org/Imagemagick).
         | 
| 10 | 
            +
             | 
| 8 11 | 
             
            #### Android
         | 
| 9 12 | 
             
            - Install [SDK Tools](http://developer.android.com/sdk/installing/index.html?pkg=tools).
         | 
| 10 13 | 
             
            - SDK tools are added to your $PATH. [OSX](https://stackoverflow.com/posts/19764254/revisions)
         | 
| @@ -13,7 +16,6 @@ Prerequisites: | |
| 13 16 | 
             
            #### iOS
         | 
| 14 17 | 
             
            - Install [Xcode](https://developer.apple.com/xcode/download/).
         | 
| 15 18 | 
             
            - Install [Xcode Command Line Tools](http://railsapps.github.io/xcode-command-line-tools.html).
         | 
| 16 | 
            -
            - For real devices you need to sign skeleton in xcodeproj ([like appium](https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md)).
         | 
| 17 19 |  | 
| 18 20 | 
             
            Installation:
         | 
| 19 21 | 
             
            ------
         | 
| @@ -76,6 +78,11 @@ Usage: | |
| 76 78 | 
             
                        EXAMPLES:
         | 
| 77 79 |  | 
| 78 80 | 
             
                        skeleton clear
         | 
| 81 | 
            +
                        
         | 
| 82 | 
            +
                        OPTIONS:
         | 
| 83 | 
            +
                        
         | 
| 84 | 
            +
                        -p, --port PORT
         | 
| 85 | 
            +
                        Set web-server port
         | 
| 79 86 |  | 
| 80 87 | 
             
            Docs:
         | 
| 81 88 | 
             
            ------
         | 
    
        data/bin/skeleton
    CHANGED
    
    | @@ -34,8 +34,10 @@ module Skeleton | |
| 34 34 | 
             
            		c.syntax = 'skeleton server'
         | 
| 35 35 | 
             
            		c.description = 'Run skeleton web-server'
         | 
| 36 36 | 
             
            		c.example 'description', 'skeleton server'
         | 
| 37 | 
            -
            		c. | 
| 38 | 
            -
             | 
| 37 | 
            +
            		c.option '-p', '--port PORT', String, 'Set web-server port'
         | 
| 38 | 
            +
            		c.action do |_args, options|
         | 
| 39 | 
            +
            			options.default(port: 4567)
         | 
| 40 | 
            +
            			system("cd ../html/ && ruby server.rb #{options.port}")
         | 
| 39 41 | 
             
            		end
         | 
| 40 42 | 
             
            	end
         | 
| 41 43 | 
             
            end
         | 
    
        data/html/server.rb
    CHANGED
    
    
    
        data/html/template.html.erb
    CHANGED
    
    | @@ -20,12 +20,12 @@ | |
| 20 20 | 
             
                      </div>
         | 
| 21 21 | 
             
                    </div>
         | 
| 22 22 | 
             
                    <div class="col-md-8">
         | 
| 23 | 
            -
                      <h4 class="mb-3"> | 
| 23 | 
            +
                      <h4 class="mb-3">Page Objects:</h4>
         | 
| 24 24 | 
             
                      <div class="content" id="content">
         | 
| 25 25 | 
             
                        <pre><code><%= @pageobject %></code></pre>
         | 
| 26 26 | 
             
                      </div>
         | 
| 27 27 | 
             
                      <br>
         | 
| 28 | 
            -
                      <h4 class="mb-3"> | 
| 28 | 
            +
                      <h4 class="mb-3">Elements Tree:</h4>
         | 
| 29 29 | 
             
                      <div class="content" id="content">
         | 
| 30 30 | 
             
                        <pre><code><%= @elements_tree %></code></pre>
         | 
| 31 31 | 
             
                      </div>
         | 
    
        data/lib/skeleton.rb
    CHANGED
    
    | @@ -3,6 +3,9 @@ require 'fileutils' | |
| 3 3 | 
             
            require 'nokogiri'
         | 
| 4 4 | 
             
            require 'logger'
         | 
| 5 5 | 
             
            require 'colorize'
         | 
| 6 | 
            +
            require 'mini_magick'
         | 
| 7 | 
            +
            require_relative 'skeleton/languages.rb'
         | 
| 8 | 
            +
            require_relative 'skeleton/root.rb'
         | 
| 6 9 | 
             
            require_relative 'skeleton/version'
         | 
| 7 10 | 
             
            require_relative 'skeleton/base'
         | 
| 8 11 | 
             
            require_relative 'skeleton/ios'
         | 
| @@ -10,8 +13,6 @@ require_relative 'skeleton/android' | |
| 10 13 |  | 
| 11 14 | 
             
            module Skeleton
         | 
| 12 15 | 
             
            	class Skeleton
         | 
| 13 | 
            -
            		include Language
         | 
| 14 | 
            -
             | 
| 15 16 | 
             
            	  attr_accessor :platform, :udid, :bundle_id
         | 
| 16 17 |  | 
| 17 18 | 
             
            	  def initialize(options)
         | 
| @@ -30,39 +31,55 @@ module Skeleton | |
| 30 31 | 
             
            	  end
         | 
| 31 32 |  | 
| 32 33 | 
             
            	  def udid=(udid)
         | 
| 33 | 
            -
             | 
| 34 | 
            -
            	      raise 'Not set udid [-u arg]'
         | 
| 35 | 
            -
            	    end
         | 
| 34 | 
            +
                  raise 'Not set udid [-u arg]' if udid.nil?
         | 
| 36 35 | 
             
            	    @udid = udid
         | 
| 37 36 | 
             
            	  end
         | 
| 38 37 |  | 
| 39 38 | 
             
            	  def bundle_id=(bundle_id)
         | 
| 40 | 
            -
             | 
| 41 | 
            -
            	      raise 'Not set bundle_id [-b arg]'
         | 
| 42 | 
            -
            	    end
         | 
| 39 | 
            +
                  raise 'Not set bundle_id [-b arg]' if @platform == 'ios' && bundle_id.nil?
         | 
| 43 40 | 
             
            	    @bundle_id = bundle_id
         | 
| 44 41 | 
             
            	  end
         | 
| 45 42 |  | 
| 46 | 
            -
             | 
| 43 | 
            +
                def run
         | 
| 47 44 | 
             
            			@driver.clear
         | 
| 48 45 | 
             
            			@driver.precondition
         | 
| 49 46 | 
             
            			@driver.skeletoner
         | 
| 50 47 | 
             
            			fill_html
         | 
| 51 | 
            -
            			 | 
| 52 | 
            -
             | 
| 48 | 
            +
            			open_url
         | 
| 49 | 
            +
                end
         | 
| 53 50 |  | 
| 54 51 | 
             
            		def fill_html
         | 
| 55 | 
            -
            			 | 
| 56 | 
            -
            			 | 
| 57 | 
            -
             | 
| 58 | 
            -
            				 | 
| 59 | 
            -
             | 
| 60 | 
            -
            				 | 
| 61 | 
            -
            				 | 
| 52 | 
            +
            			language = Language.new
         | 
| 53 | 
            +
            			%w[ruby java].each do |lang|
         | 
| 54 | 
            +
                    attach_image
         | 
| 55 | 
            +
            				type = language.type(lang)
         | 
| 56 | 
            +
                    folder = Base::PAGE_OBJECTS_FOLDER
         | 
| 57 | 
            +
            				@pageobject = File.read(Dir["#{folder}/*.#{type}"].first)
         | 
| 58 | 
            +
            				@elements_tree = File.read(Dir["#{folder}/*.xml"].first)
         | 
| 59 | 
            +
                    if @driver.class == Android
         | 
| 60 | 
            +
                      @elements_tree = Nokogiri::XML(@elements_tree).to_s
         | 
| 61 | 
            +
                      @elements_tree.gsub!('<', '<')
         | 
| 62 | 
            +
                      @elements_tree.gsub!('>', '>')
         | 
| 63 | 
            +
                    end
         | 
| 62 64 | 
             
            				template = File.read('../html/template.html.erb')
         | 
| 63 65 | 
             
            				result = ERB.new(template).result(binding)
         | 
| 64 66 | 
             
            				File.open("../html/#{lang}.html", 'w+') { |f| f.write(result) }
         | 
| 65 67 | 
             
            			end
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                def attach_image
         | 
| 71 | 
            +
                  screenshot = Dir["#{Base::ATTACHMENTS_FOLDER}/*.png"].first
         | 
| 72 | 
            +
                  image = MiniMagick::Image.new(screenshot)
         | 
| 73 | 
            +
                  image.rotate(90) if image.width > image.height
         | 
| 74 | 
            +
                  FileUtils.cp_r(screenshot, '../html/screenshot.png')
         | 
| 75 | 
            +
                rescue MiniMagick::Error => e
         | 
| 76 | 
            +
                  @driver.log.error(e)
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            		def open_url
         | 
| 80 | 
            +
            			url = 'http://localhost:4567/index.html'
         | 
| 81 | 
            +
            			`open #{url}`
         | 
| 82 | 
            +
            			@driver.log.info("Look at your pretty page objects: #{url} 😍")
         | 
| 66 83 | 
             
            		end
         | 
| 67 84 |  | 
| 68 85 | 
             
            	  def ios?
         | 
    
        data/lib/skeleton/android.rb
    CHANGED
    
    | @@ -1,16 +1,23 @@ | |
| 1 1 | 
             
            class Android < Base
         | 
| 2 | 
            -
              RESOURCE_ID = 'resource-id'
         | 
| 3 | 
            -
              CONTENT_DESC = 'content-desc'
         | 
| 4 | 
            -
              TEXT = 'text'
         | 
| 5 | 
            -
               | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 2 | 
            +
              RESOURCE_ID = 'resource-id'.freeze
         | 
| 3 | 
            +
              CONTENT_DESC = 'content-desc'.freeze
         | 
| 4 | 
            +
              TEXT = 'text'.freeze
         | 
| 5 | 
            +
              CLASS = 'class'.freeze
         | 
| 6 | 
            +
              ID = {
         | 
| 7 | 
            +
                java: :id,
         | 
| 8 | 
            +
                ruby: :id
         | 
| 9 | 
            +
              }.freeze
         | 
| 10 | 
            +
              XPATH = {
         | 
| 11 | 
            +
                java: :xpath,
         | 
| 12 | 
            +
                ruby: :xpath
         | 
| 13 | 
            +
              }.freeze
         | 
| 8 14 |  | 
| 9 15 | 
             
              attr_accessor :platform, :udid
         | 
| 10 16 |  | 
| 11 17 | 
             
              def initialize(options)
         | 
| 12 18 | 
             
                self.platform = options.platform
         | 
| 13 19 | 
             
                self.udid = options.udid
         | 
| 20 | 
            +
                @language = Language.new
         | 
| 14 21 | 
             
              end
         | 
| 15 22 |  | 
| 16 23 | 
             
              def skeletoner
         | 
| @@ -28,7 +35,7 @@ class Android < Base | |
| 28 35 | 
             
                method_name.slice!(/.*id\//)
         | 
| 29 36 | 
             
                code_generation(method_name: method_name,
         | 
| 30 37 | 
             
                                locator_type: ID,
         | 
| 31 | 
            -
                                 | 
| 38 | 
            +
                                locator_value: line[RESOURCE_ID])
         | 
| 32 39 | 
             
              end
         | 
| 33 40 |  | 
| 34 41 | 
             
              def create_locator_by_content_desc(line)
         | 
| @@ -37,7 +44,7 @@ class Android < Base | |
| 37 44 | 
             
                locator = "//#{line[CLASS]}[@#{CONTENT_DESC}='#{line[CONTENT_DESC]}']"
         | 
| 38 45 | 
             
                code_generation(method_name: method_name,
         | 
| 39 46 | 
             
                                locator_type: XPATH,
         | 
| 40 | 
            -
                                 | 
| 47 | 
            +
                                locator_value: locator)
         | 
| 41 48 | 
             
              end
         | 
| 42 49 |  | 
| 43 50 | 
             
              def create_locator_by_text(line)
         | 
| @@ -46,7 +53,7 @@ class Android < Base | |
| 46 53 | 
             
                locator = "//#{line[CLASS]}[@#{TEXT}='#{line[TEXT]}'"
         | 
| 47 54 | 
             
                code_generation(method_name: method_name,
         | 
| 48 55 | 
             
                                locator_type: XPATH,
         | 
| 49 | 
            -
                                 | 
| 56 | 
            +
                                locator_value: locator)
         | 
| 50 57 | 
             
              end
         | 
| 51 58 |  | 
| 52 59 | 
             
              def create_locator(line)
         | 
| @@ -65,9 +72,15 @@ class Android < Base | |
| 65 72 | 
             
                page_source_html.css('node').each { |line| create_locator(line) }
         | 
| 66 73 | 
             
              end
         | 
| 67 74 |  | 
| 68 | 
            -
              def code_generation(method_name:, locator_type:,  | 
| 69 | 
            -
                java = java(method_name, | 
| 75 | 
            +
              def code_generation(method_name:, locator_type:, locator_value:)
         | 
| 76 | 
            +
                java = @language.java(camel_method_name: camel_style(method_name),
         | 
| 77 | 
            +
                                      locator_type: locator_type,
         | 
| 78 | 
            +
                                      locator_value: locator_value)
         | 
| 79 | 
            +
                ruby = @language.ruby(snake_method_name: snake_style(method_name),
         | 
| 80 | 
            +
                                      locator_type: locator_type,
         | 
| 81 | 
            +
                                      locator_value: locator_value)
         | 
| 70 82 | 
             
                save(code: java, format: Language::JAVA)
         | 
| 83 | 
            +
                save(code: ruby, format: Language::RUBY)
         | 
| 71 84 | 
             
              end
         | 
| 72 85 |  | 
| 73 86 | 
             
              def page_source
         | 
    
        data/lib/skeleton/base.rb
    CHANGED
    
    | @@ -1,32 +1,26 @@ | |
| 1 | 
            -
            require_relative 'languages.rb'
         | 
| 2 | 
            -
            require_relative 'root.rb'
         | 
| 3 | 
            -
             | 
| 4 1 | 
             
            class Base
         | 
| 5 | 
            -
               | 
| 6 | 
            -
             | 
| 7 | 
            -
              PAGE_OBJECTS_FOLDER = "#{ROOT_DIR}/PageObjects"
         | 
| 8 | 
            -
              ATTACHMENTS_FOLDER = "#{ROOT_DIR}/Attachments"
         | 
| 2 | 
            +
              PAGE_OBJECTS_FOLDER = "#{ROOT_DIR}/PageObjects".freeze
         | 
| 3 | 
            +
              ATTACHMENTS_FOLDER = "#{ROOT_DIR}/Attachments".freeze
         | 
| 9 4 | 
             
              TIMESTAMP = (Time.now.to_f * 1000).to_i
         | 
| 10 5 |  | 
| 11 6 | 
             
              def precondition
         | 
| 12 7 | 
             
                create_logger
         | 
| 8 | 
            +
                clear
         | 
| 9 | 
            +
                FileUtils.rm_rf("#{ROOT_DIR}/html/screenshot.png")
         | 
| 13 10 | 
             
                FileUtils.mkdir_p(PAGE_OBJECTS_FOLDER)
         | 
| 14 11 | 
             
                FileUtils.mkdir_p(ATTACHMENTS_FOLDER)
         | 
| 15 12 | 
             
              end
         | 
| 16 13 |  | 
| 17 14 | 
             
              def log
         | 
| 18 | 
            -
                if @log.nil?
         | 
| 19 | 
            -
                  create_logger
         | 
| 20 | 
            -
                end
         | 
| 15 | 
            +
                create_logger if @log.nil?
         | 
| 21 16 | 
             
                @log
         | 
| 22 17 | 
             
              end
         | 
| 23 18 |  | 
| 24 | 
            -
              def skeletoner
         | 
| 25 | 
            -
              end
         | 
| 19 | 
            +
              def skeletoner; end
         | 
| 26 20 |  | 
| 27 21 | 
             
              def clear
         | 
| 28 | 
            -
                FileUtils.rm_rf( | 
| 29 | 
            -
                FileUtils.rm_rf( | 
| 22 | 
            +
                FileUtils.rm_rf(PAGE_OBJECTS_FOLDER)
         | 
| 23 | 
            +
                FileUtils.rm_rf(ATTACHMENTS_FOLDER)
         | 
| 30 24 | 
             
              end
         | 
| 31 25 |  | 
| 32 26 | 
             
              protected
         | 
| @@ -39,19 +33,20 @@ class Base | |
| 39 33 | 
             
              def create_logger
         | 
| 40 34 | 
             
                @log = Logger.new(STDOUT)
         | 
| 41 35 | 
             
                @log.level = Logger::INFO
         | 
| 42 | 
            -
                @log.formatter = proc do |severity, datetime,  | 
| 36 | 
            +
                @log.formatter = proc do |severity, datetime, _progname, msg|
         | 
| 43 37 | 
             
                  "[#{severity}] #{datetime}: " + "#{msg}\n".colorize(:light_cyan)
         | 
| 44 38 | 
             
                end
         | 
| 45 39 | 
             
              end
         | 
| 46 40 |  | 
| 47 41 | 
             
              def snake_style(method_name)
         | 
| 48 | 
            -
                method_name | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 42 | 
            +
                method_name
         | 
| 43 | 
            +
                  .tr("@()[]'\"*!?{}:;#$^.,\/\\", '')
         | 
| 44 | 
            +
                  .tr('-', '_')
         | 
| 45 | 
            +
                  .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
         | 
| 46 | 
            +
                  .gsub(/([a-z\d])([A-Z])/, '\1_\2')
         | 
| 47 | 
            +
                  .gsub(/\s/, '_')
         | 
| 48 | 
            +
                  .gsub(/__+/, '_')
         | 
| 49 | 
            +
                  .downcase
         | 
| 55 50 | 
             
              end
         | 
| 56 51 |  | 
| 57 52 | 
             
              def camel_style(method_name)
         | 
| @@ -71,12 +66,9 @@ class Base | |
| 71 66 | 
             
                @locator_index = @locator_index.nil? ? 1 : @locator_index + 1
         | 
| 72 67 | 
             
              end
         | 
| 73 68 |  | 
| 74 | 
            -
              def screenshot
         | 
| 75 | 
            -
              end
         | 
| 69 | 
            +
              def screenshot; end
         | 
| 76 70 |  | 
| 77 | 
            -
              def page_source
         | 
| 78 | 
            -
              end
         | 
| 71 | 
            +
              def page_source; end
         | 
| 79 72 |  | 
| 80 | 
            -
              def code_generation
         | 
| 81 | 
            -
              end
         | 
| 73 | 
            +
              def code_generation; end
         | 
| 82 74 | 
             
            end
         | 
    
        data/lib/skeleton/ios.rb
    CHANGED
    
    | @@ -1,16 +1,16 @@ | |
| 1 1 | 
             
            class IOS < Base
         | 
| 2 2 | 
             
              ACC_ID = {
         | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 3 | 
            +
                java: :AccessibilityId,
         | 
| 4 | 
            +
                ruby: :accessibility_id
         | 
| 5 | 
            +
              }.freeze
         | 
| 6 6 | 
             
              NSPREDICATE = {
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
              IDENTIFIER = 'identifier'
         | 
| 11 | 
            -
              LABEL = 'label'
         | 
| 12 | 
            -
              XCRESULTS_FOLDER = "#{ROOT_DIR}/XCResults"
         | 
| 13 | 
            -
              XCODEPROJ_FOLDER = "#{ROOT_DIR}/xcodeproj"
         | 
| 7 | 
            +
                java: :iOSNsPredicateString,
         | 
| 8 | 
            +
                ruby: :predicate
         | 
| 9 | 
            +
              }.freeze
         | 
| 10 | 
            +
              IDENTIFIER = 'identifier'.freeze
         | 
| 11 | 
            +
              LABEL = 'label'.freeze
         | 
| 12 | 
            +
              XCRESULTS_FOLDER = "#{ROOT_DIR}/XCResults".freeze
         | 
| 13 | 
            +
              XCODEPROJ_FOLDER = "#{ROOT_DIR}/xcodeproj".freeze
         | 
| 14 14 |  | 
| 15 15 | 
             
              attr_accessor :platform, :udid, :bundle_id
         | 
| 16 16 |  | 
| @@ -18,6 +18,7 @@ class IOS < Base | |
| 18 18 | 
             
                self.platform = options.platform
         | 
| 19 19 | 
             
                self.udid = options.udid
         | 
| 20 20 | 
             
                self.bundle_id = options.bundle
         | 
| 21 | 
            +
                @language = Language.new
         | 
| 21 22 | 
             
              end
         | 
| 22 23 |  | 
| 23 24 | 
             
              def skeletoner
         | 
| @@ -47,7 +48,7 @@ class IOS < Base | |
| 47 48 | 
             
                method_name = locator.strip
         | 
| 48 49 | 
             
                code_generation(method_name: method_name,
         | 
| 49 50 | 
             
                                locator_type: ACC_ID,
         | 
| 50 | 
            -
                                 | 
| 51 | 
            +
                                locator_value: locator)
         | 
| 51 52 | 
             
              end
         | 
| 52 53 |  | 
| 53 54 | 
             
              def create_locator_by_label(text, type)
         | 
| @@ -55,7 +56,7 @@ class IOS < Base | |
| 55 56 | 
             
                locator = "#{LABEL} like '#{text}'"
         | 
| 56 57 | 
             
                code_generation(method_name: method_name,
         | 
| 57 58 | 
             
                                locator_type: NSPREDICATE,
         | 
| 58 | 
            -
                                 | 
| 59 | 
            +
                                locator_value: locator)
         | 
| 59 60 | 
             
              end
         | 
| 60 61 |  | 
| 61 62 | 
             
              def create_page_objects
         | 
| @@ -82,11 +83,14 @@ class IOS < Base | |
| 82 83 | 
             
                locator.nil? ? '' : locator[1]
         | 
| 83 84 | 
             
              end
         | 
| 84 85 |  | 
| 85 | 
            -
              def code_generation(method_name:, locator_type:,  | 
| 86 | 
            -
                java = java(method_name, | 
| 86 | 
            +
              def code_generation(method_name:, locator_type:, locator_value:)
         | 
| 87 | 
            +
                java = @language.java(camel_method_name: camel_style(method_name),
         | 
| 88 | 
            +
                                      locator_type: locator_type,
         | 
| 89 | 
            +
                                      locator_value: locator_value)
         | 
| 90 | 
            +
                ruby = @language.ruby(snake_method_name: snake_style(method_name),
         | 
| 91 | 
            +
                                      locator_type: locator_type,
         | 
| 92 | 
            +
                                      locator_value: locator_value)
         | 
| 87 93 | 
             
                save(code: java, format: Language::JAVA)
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                ruby = ruby(method_name, locator_type, value)
         | 
| 90 94 | 
             
                save(code: ruby, format: Language::RUBY)
         | 
| 91 95 | 
             
              end
         | 
| 92 96 |  | 
| @@ -94,24 +98,23 @@ class IOS < Base | |
| 94 98 | 
             
                if @page_source.nil?
         | 
| 95 99 | 
             
                  log.info('Getting screen source tree ⚒')
         | 
| 96 100 | 
             
                  FileUtils.rm_rf(XCRESULTS_FOLDER)
         | 
| 97 | 
            -
                  start_grep | 
| 101 | 
            +
                  start_grep = 'start_grep_tag'
         | 
| 102 | 
            +
                  end_grep = 'end_grep_tag'
         | 
| 98 103 | 
             
                  ios_arch = @simulator ? 'iOS Simulator' : 'iOS'
         | 
| 99 104 | 
             
                  @page_source = `xcodebuild test \
         | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 105 | 
            +
                      -project #{XCODEPROJ_FOLDER}/Skeleton.xcodeproj \
         | 
| 106 | 
            +
                      -scheme Skeleton \
         | 
| 107 | 
            +
                      -destination 'platform=#{ios_arch},id=#{@udid}' \
         | 
| 108 | 
            +
                      -resultBundlePath #{XCRESULTS_FOLDER} \
         | 
| 109 | 
            +
                      bundle_id="#{@bundle_id}" | \
         | 
| 110 | 
            +
                      awk '/#{start_grep}/,/#{end_grep}/'`
         | 
| 106 111 | 
             
                  @page_source.slice!(start_grep)
         | 
| 107 112 | 
             
                  @page_source.slice!(end_grep)
         | 
| 108 113 | 
             
                  if @page_source.empty?
         | 
| 109 | 
            -
                    log.fatal(
         | 
| 110 | 
            -
                        "Something went wrong.\n" \
         | 
| 114 | 
            +
                    log.fatal("Something went wrong.\n" \
         | 
| 111 115 | 
             
                        "1. Try to sign Skeleton in #{XCODEPROJ_FOLDER}\n" \
         | 
| 112 116 | 
             
                        "2. Check in the iOS settings that Skeleton is trust developer.\n" \
         | 
| 113 | 
            -
                        '3. Check your app bundle_id'
         | 
| 114 | 
            -
                    )
         | 
| 117 | 
            +
                        '3. Check your app bundle_id')
         | 
| 115 118 | 
             
                    raise
         | 
| 116 119 | 
             
                  end
         | 
| 117 120 | 
             
                  log.info('Successfully getting Screen Source Tree 🔥')
         | 
| @@ -120,15 +123,13 @@ class IOS < Base | |
| 120 123 | 
             
              end
         | 
| 121 124 |  | 
| 122 125 | 
             
              def check_udid
         | 
| 123 | 
            -
                 | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
                  end
         | 
| 131 | 
            -
                end
         | 
| 126 | 
            +
                return unless @simulator.nil?
         | 
| 127 | 
            +
                log.info('Checking iOS UDID 👨💻')
         | 
| 128 | 
            +
                simulators = `xcrun simctl list`
         | 
| 129 | 
            +
                @simulator = simulators.include?(@udid)
         | 
| 130 | 
            +
                return if @simulator || `instruments -s devices`.include?(@udid)
         | 
| 131 | 
            +
                log.fatal("No such devices with UDID: #{@udid}")
         | 
| 132 | 
            +
                raise
         | 
| 132 133 | 
             
              end
         | 
| 133 134 |  | 
| 134 135 | 
             
              def save_screenshot
         | 
    
        data/lib/skeleton/languages.rb
    CHANGED
    
    | @@ -1,28 +1,28 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            class Language
         | 
| 2 2 | 
             
              JAVA = 'java'
         | 
| 3 3 | 
             
              RUBY = 'rb'
         | 
| 4 4 | 
             
              PYTHON = 'py'
         | 
| 5 5 |  | 
| 6 | 
            -
              def java( | 
| 6 | 
            +
              def java(camel_method_name:, locator_type:, locator_value:)
         | 
| 7 7 | 
             
                <<~JAVA
         | 
| 8 | 
            -
                  By #{ | 
| 9 | 
            -
                    return MobileBy.#{locator_type[:java]}("#{ | 
| 8 | 
            +
                  By #{camel_method_name}() {
         | 
| 9 | 
            +
                    return MobileBy.#{locator_type[:java]}("#{locator_value}");
         | 
| 10 10 | 
             
                  }
         | 
| 11 11 |  | 
| 12 12 | 
             
                JAVA
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            -
              def ruby( | 
| 15 | 
            +
              def ruby(snake_method_name:, locator_type:, locator_value:)
         | 
| 16 16 | 
             
                <<~RUBY
         | 
| 17 | 
            -
                  def #{ | 
| 18 | 
            -
                    return :#{locator_type[:ruby]}, "#{ | 
| 17 | 
            +
                  def #{snake_method_name}
         | 
| 18 | 
            +
                    return :#{locator_type[:ruby]}, "#{locator_value}"
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 21 | 
             
                RUBY
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 | 
            -
              def  | 
| 25 | 
            -
                case  | 
| 24 | 
            +
              def type(format)
         | 
| 25 | 
            +
                case format
         | 
| 26 26 | 
             
                when 'ruby'
         | 
| 27 27 | 
             
                  RUBY
         | 
| 28 28 | 
             
                when 'java'
         | 
| @@ -30,7 +30,7 @@ module Language | |
| 30 30 | 
             
                when 'python'
         | 
| 31 31 | 
             
                  PYTHON
         | 
| 32 32 | 
             
                else
         | 
| 33 | 
            -
                  "I haven't this language"
         | 
| 33 | 
            +
                  "I haven't this language format"
         | 
| 34 34 | 
             
                end
         | 
| 35 35 | 
             
              end
         | 
| 36 36 | 
             
            end
         | 
    
        data/lib/skeleton/version.rb
    CHANGED
    
    
    
        data/skeleton.gemspec
    CHANGED
    
    | @@ -28,6 +28,7 @@ Gem::Specification.new do |spec| | |
| 28 28 | 
             
              spec.add_development_dependency "rake", "~> 12.3.0"
         | 
| 29 29 | 
             
              spec.add_development_dependency "rspec", "~> 3.7"
         | 
| 30 30 | 
             
              spec.add_dependency "colorize", "~> 0.8.1"
         | 
| 31 | 
            +
              spec.add_dependency "mini_magick", "~> 4.8.0"
         | 
| 31 32 | 
             
              spec.add_dependency "nokogiri", "~> 1.8.2"
         | 
| 32 33 | 
             
              spec.add_dependency "fileutils"
         | 
| 33 34 | 
             
              spec.add_dependency "commander"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: skeleton-ui
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - a.alterpesotskiy
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-07- | 
| 11 | 
            +
            date: 2018-07-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -66,6 +66,20 @@ dependencies: | |
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: 0.8.1
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: mini_magick
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - "~>"
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: 4.8.0
         | 
| 76 | 
            +
              type: :runtime
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - "~>"
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: 4.8.0
         | 
| 69 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 84 | 
             
              name: nokogiri
         | 
| 71 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -119,6 +133,7 @@ files: | |
| 119 133 | 
             
            - ".githooks/commit-msg"
         | 
| 120 134 | 
             
            - ".gitignore"
         | 
| 121 135 | 
             
            - ".rspec"
         | 
| 136 | 
            +
            - ".rubocop.yml"
         | 
| 122 137 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 123 138 | 
             
            - Gemfile
         | 
| 124 139 | 
             
            - LICENSE.txt
         |