[ 
https://issues.apache.org/jira/browse/CB-8595?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14357068#comment-14357068
 ] 

ASF GitHub Bot commented on CB-8595:
------------------------------------

Github user mmocny commented on a diff in the pull request:

    https://github.com/apache/cordova-lib/pull/183#discussion_r26224327
  
    --- Diff: cordova-lib/src/platforms/platforms.js ---
    @@ -0,0 +1,102 @@
    +/**
    +    Licensed to the Apache Software Foundation (ASF) under one
    +    or more contributor license agreements.  See the NOTICE file
    +    distributed with this work for additional information
    +    regarding copyright ownership.  The ASF licenses this file
    +    to you under the Apache License, Version 2.0 (the
    +    "License"); you may not use this file except in compliance
    +    with the License.  You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +    Unless required by applicable law or agreed to in writing,
    +    software distributed under the License is distributed on an
    +    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    +    KIND, either express or implied.  See the License for the
    +    specific language governing permissions and limitations
    +    under the License.
    +*/
    +
    +var platforms = require('./platformsConfig.json');
    +
    +// Remove this block soon. The parser property is no longer used in
    +// cordova-lib but some downstream tools still use it.
    +var addModuleProperty = require('../cordova/util').addModuleProperty;
    +Object.keys(platforms).forEach(function(key) {
    +    var obj = platforms[key];
    +    if (obj.parser_file) {
    +        addModuleProperty(module, 'parser', obj.parser_file, false, obj);
    +    }
    +});
    +
    +
    +// Avoid loading the same platform projects more than once (identified by 
path)
    +var cachedProjects = {};
    +
    +var PARSER_PUBLIC_METHODS = [
    +    'config_xml',
    +    'cordovajs_path',
    +    'update_from_config',
    +    'update_overrides',
    +    'update_project',
    +    'update_www',
    +    'www_dir',
    +];
    +
    +var HANDLER_PUBLIC_METHODS = [
    +    'package_name',
    +    'parseProjectFile',
    +    'purgeProjectFileCache',
    +];
    +
    +
    +// A single class that exposes functionality from platform specific files 
from
    +// both places cordova/metadata and plugman/platforms. Hopefully, to be 
soon
    +// replaced by real unified platform specific classes.
    +function PlatformProjectAdapter(platform, platformRootDir) {
    +    var self = this;
    +    self.root = platformRootDir;
    +    self.platform = platform;
    +    var ParserConstructor = require(platforms[platform].parser_file);
    +    self.parser = new ParserConstructor(platformRootDir);
    +    self.handler = require(platforms[platform].handler_file);
    +
    +    // Expos all public methods from the parser and handler, properly 
bound.
    +    PARSER_PUBLIC_METHODS.forEach(function(method) {
    +        if (self.parser[method]) {
    +            self[method] = self.parser[method].bind(self.parser);
    +        }
    +    });
    +
    +    HANDLER_PUBLIC_METHODS.forEach(function(method) {
    +        if (self.handler[method]) {
    +            self[method] = self.handler[method].bind(self.handler);
    +        }
    +    });
    +
    +    self.getInstaller = function(type) {
    +        return self.handler[type].install;
    +    };
    +
    +    self.getUninstaller = function(type) {
    +        return self.handler[type].uninstall;
    +    };
    +}
    +
    +// getPlatformProject() should be the only method of instantiating the
    +// PlatformProject classes for now.
    +function getPlatformProject(platform, platformRootDir) {
    +    var cached = cachedProjects[platformRootDir];
    +    if (cached && cached.platform == platform) {
    --- End diff --
    
    Okay, Fair enough.
    
    On Wed, Mar 11, 2015 at 10:57 AM Mark Koudritsky <notificati...@github.com>
    wrote:
    
    > In cordova-lib/src/platforms/platforms.js
    > <https://github.com/apache/cordova-lib/pull/183#discussion_r26218885>:
    >
    > > +    });
    > > +
    > > +    self.getInstaller = function(type) {
    > > +        return self.handler[type].install;
    > > +    };
    > > +
    > > +    self.getUninstaller = function(type) {
    > > +        return self.handler[type].uninstall;
    > > +    };
    > > +}
    > > +
    > > +// getPlatformProject() should be the only method of instantiating the
    > > +// PlatformProject classes for now.
    > > +function getPlatformProject(platform, platformRootDir) {
    > > +    var cached = cachedProjects[platformRootDir];
    > > +    if (cached && cached.platform == platform) {
    >
    > The tests sometimes reuse the same dir for several platforms. Added the
    > platform check after spending a couple of hours figuring this out. Not 
sure
    > if there is a viable real world case for using the same dir for different
    > platforms.
    >
    > —
    > Reply to this email directly or view it on GitHub
    > <https://github.com/apache/cordova-lib/pull/183/files#r26218885>.
    >



> Merge platform specific code into one place
> -------------------------------------------
>
>                 Key: CB-8595
>                 URL: https://issues.apache.org/jira/browse/CB-8595
>             Project: Apache Cordova
>          Issue Type: Improvement
>            Reporter: Mark Koudritsky
>            Assignee: Mark Koudritsky
>
> Currently we have two separate places for platform specific code
> src/cordova/metadata
> src/plugman/platforms
> This is confusing.
> Once consolidated the platform specific code will be much easier to move to 
> the platform repos where it belongs.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to