iosgen 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator.xcodeproj/project.pbxproj +501 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator.xcodeproj/xcuserdata/fran_dev.xcuserdatad/xcschemes/iOSCleanArchitectureGenerator.xcscheme +110 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator.xcodeproj/xcuserdata/fran_dev.xcuserdatad/xcschemes/xcschememanagement.plist +27 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/AppDelegate.h +17 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/AppDelegate.m +45 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Base.lproj/LaunchScreen.xib +41 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Base.lproj/Main.storyboard +25 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Images.xcassets/AppIcon.appiconset/Contents.json +68 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Info.plist +47 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Interactors/FJBNotificationsApiInteractor.h +9 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Interactors/FJBNotificationsApiInteractor.m +15 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/Interactors/FJBNotificationsApiInteractorProtocol.h +9 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewController.h +15 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewController.m +27 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewControllers/FJBNotificationsViewController.h +8 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewControllers/FJBNotificationsViewController.m +31 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewModels/FJBNotificationsViewModel.h +9 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewModels/FJBNotificationsViewModel.m +18 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/ViewModels/FJBNotificationsViewModelProtocol.h +17 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGenerator/main.m +16 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGeneratorTests/Info.plist +24 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGeneratorTests/Interactors/FJBNotificationsApiInteractorTests.m +40 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGeneratorTests/ViewModels/FJBNotificationsViewModelTests.m +50 -0
 - data/Demo/iOSCleanArchitectureGenerator/iOSCleanArchitectureGeneratorTests/iOSCleanArchitectureGeneratorTests.m +40 -0
 - data/README.md +37 -20
 - data/bin/iosgen +1 -1
 - data/iosgen.gemspec +1 -1
 - data/lib/ios_gen/generator/base_generator.rb +21 -9
 - data/lib/ios_gen/generator/objc/action_formatter.rb +15 -2
 - data/lib/ios_gen/generator/objc/interactor_formatter.rb +16 -11
 - data/lib/ios_gen/generator/objc/objc_formatter.rb +4 -0
 - data/lib/ios_gen/generator/objc/view_model_formatter.rb +18 -10
 - data/lib/ios_gen/generator/objc/xctestcase_formatter.rb +45 -0
 - data/lib/ios_gen/ios_gen_thor.rb +2 -1
 - data/spec/ios_gen/generator/base_generator_spec.rb +38 -3
 - data/spec/ios_gen/generator/objc/action_formatter_spec.rb +16 -1
 - data/spec/ios_gen/generator/objc/interactor_formatter_spec.rb +1 -1
 - data/spec/ios_gen/generator/objc/objc_formatter_spec.rb +0 -1
 - data/spec/ios_gen/generator/objc/view_model_formatter_spec.rb +0 -1
 - data/spec/ios_gen/generator/objc/xctestcase_formatter_spec.rb +91 -0
 - data/templates/objc/Interactor.h.erb +1 -1
 - data/templates/objc/InteractorProtocol.h.erb +2 -0
 - data/templates/objc/ViewModel.h.erb +1 -1
 - data/templates/objc/ViewModelProtocol.h.erb +1 -0
 - data/templates/objc/XCTestCase.m.erb +32 -0
 - metadata +31 -2
 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            //
         
     | 
| 
      
 2 
     | 
    
         
            +
            //  ViewController.m
         
     | 
| 
      
 3 
     | 
    
         
            +
            //  iOSCleanArchitectureGenerator
         
     | 
| 
      
 4 
     | 
    
         
            +
            //
         
     | 
| 
      
 5 
     | 
    
         
            +
            //  Created by Francisco J. Belchi on 29/12/14.
         
     | 
| 
      
 6 
     | 
    
         
            +
            //  Copyright (c) 2014 fjbelchi. All rights reserved.
         
     | 
| 
      
 7 
     | 
    
         
            +
            //
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            #import "ViewController.h"
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            @interface ViewController ()
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            @end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            @implementation ViewController
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - (void)viewDidLoad {
         
     | 
| 
      
 18 
     | 
    
         
            +
                [super viewDidLoad];
         
     | 
| 
      
 19 
     | 
    
         
            +
                // Do any additional setup after loading the view, typically from a nib.
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            - (void)didReceiveMemoryWarning {
         
     | 
| 
      
 23 
     | 
    
         
            +
                [super didReceiveMemoryWarning];
         
     | 
| 
      
 24 
     | 
    
         
            +
                // Dispose of any resources that can be recreated.
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #import "FJBNotificationsViewController.h"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            @interface FJBNotificationsViewController () <FJBNotificationsViewModelProtocolDelegate>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            @property (nonatomic, strong) id<FJBNotificationsViewModelProtocol> viewModel;
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            @end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            @implementation FJBNotificationsViewController
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            - (instancetype)init
         
     | 
| 
      
 12 
     | 
    
         
            +
            {
         
     | 
| 
      
 13 
     | 
    
         
            +
                self = [super init];
         
     | 
| 
      
 14 
     | 
    
         
            +
                if (self) {
         
     | 
| 
      
 15 
     | 
    
         
            +
                }
         
     | 
| 
      
 16 
     | 
    
         
            +
                return self;
         
     | 
| 
      
 17 
     | 
    
         
            +
            }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            - (instancetype)initWithViewModel:(id<FJBNotificationsViewModelProtocol>)viewModel
         
     | 
| 
      
 20 
     | 
    
         
            +
            {
         
     | 
| 
      
 21 
     | 
    
         
            +
                self = [self init];
         
     | 
| 
      
 22 
     | 
    
         
            +
                if (self) {
         
     | 
| 
      
 23 
     | 
    
         
            +
                    _viewModel = viewModel;
         
     | 
| 
      
 24 
     | 
    
         
            +
                    _viewModel.delegate = self;
         
     | 
| 
      
 25 
     | 
    
         
            +
                }
         
     | 
| 
      
 26 
     | 
    
         
            +
                return self;
         
     | 
| 
      
 27 
     | 
    
         
            +
            }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            #pragma mark - FJBNotificationsViewModelProtocolDelegate
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,9 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #import "FJBNotificationsViewModelProtocol.h"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            @interface FJBNotificationsViewModel : NSObject <FJBNotificationsViewModelProtocol>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            // -- Properties
         
     | 
| 
      
 6 
     | 
    
         
            +
            @property (nonatomic, strong) NSIndexPath *selectedIndexPath;
         
     | 
| 
      
 7 
     | 
    
         
            +
            @property (nonatomic, weak) id<FJBNotificationsViewModelProtocolDelegate> delegate;
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #import "FJBNotificationsViewModel.h"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            @interface FJBNotificationsViewModel ()
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            @end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            @implementation FJBNotificationsViewModel
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            #pragma mark - Actions
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            - (void)didTapOnCloseButton
         
     | 
| 
      
 12 
     | 
    
         
            +
            {
         
     | 
| 
      
 13 
     | 
    
         
            +
            }
         
     | 
| 
      
 14 
     | 
    
         
            +
            - (void)didTapAtIndexPath:(NSIndexPath *)indexPath
         
     | 
| 
      
 15 
     | 
    
         
            +
            {
         
     | 
| 
      
 16 
     | 
    
         
            +
            }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #import <Foundation/Foundation.h>
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            @protocol FJBNotificationsViewModelProtocol;
         
     | 
| 
      
 4 
     | 
    
         
            +
            @protocol FJBNotificationsViewModelProtocolDelegate <NSObject>
         
     | 
| 
      
 5 
     | 
    
         
            +
            @end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            @protocol FJBNotificationsViewModelProtocol <NSObject>
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            @property (nonatomic, weak) id<FJBNotificationsViewModelProtocolDelegate> delegate;
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            // -- Actions
         
     | 
| 
      
 12 
     | 
    
         
            +
            // Dismiss the ViewController when the button is tapped
         
     | 
| 
      
 13 
     | 
    
         
            +
            - (void)didTapOnCloseButton;
         
     | 
| 
      
 14 
     | 
    
         
            +
            // Mark notification as read when the notification is selected
         
     | 
| 
      
 15 
     | 
    
         
            +
            - (void)didTapAtIndexPath:(NSIndexPath *)indexPath;
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            //
         
     | 
| 
      
 2 
     | 
    
         
            +
            //  main.m
         
     | 
| 
      
 3 
     | 
    
         
            +
            //  iOSCleanArchitectureGenerator
         
     | 
| 
      
 4 
     | 
    
         
            +
            //
         
     | 
| 
      
 5 
     | 
    
         
            +
            //  Created by Fran_DEV on 29/12/14.
         
     | 
| 
      
 6 
     | 
    
         
            +
            //  Copyright (c) 2014 fjbelchi. All rights reserved.
         
     | 
| 
      
 7 
     | 
    
         
            +
            //
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            #import <UIKit/UIKit.h>
         
     | 
| 
      
 10 
     | 
    
         
            +
            #import "AppDelegate.h"
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            int main(int argc, char * argv[]) {
         
     | 
| 
      
 13 
     | 
    
         
            +
                @autoreleasepool {
         
     | 
| 
      
 14 
     | 
    
         
            +
                    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
         
     | 
| 
      
 15 
     | 
    
         
            +
                }
         
     | 
| 
      
 16 
     | 
    
         
            +
            }
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <?xml version="1.0" encoding="UTF-8"?>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
         
     | 
| 
      
 3 
     | 
    
         
            +
            <plist version="1.0">
         
     | 
| 
      
 4 
     | 
    
         
            +
            <dict>
         
     | 
| 
      
 5 
     | 
    
         
            +
            	<key>CFBundleDevelopmentRegion</key>
         
     | 
| 
      
 6 
     | 
    
         
            +
            	<string>en</string>
         
     | 
| 
      
 7 
     | 
    
         
            +
            	<key>CFBundleExecutable</key>
         
     | 
| 
      
 8 
     | 
    
         
            +
            	<string>$(EXECUTABLE_NAME)</string>
         
     | 
| 
      
 9 
     | 
    
         
            +
            	<key>CFBundleIdentifier</key>
         
     | 
| 
      
 10 
     | 
    
         
            +
            	<string>com.fjbelchi.$(PRODUCT_NAME:rfc1034identifier)</string>
         
     | 
| 
      
 11 
     | 
    
         
            +
            	<key>CFBundleInfoDictionaryVersion</key>
         
     | 
| 
      
 12 
     | 
    
         
            +
            	<string>6.0</string>
         
     | 
| 
      
 13 
     | 
    
         
            +
            	<key>CFBundleName</key>
         
     | 
| 
      
 14 
     | 
    
         
            +
            	<string>$(PRODUCT_NAME)</string>
         
     | 
| 
      
 15 
     | 
    
         
            +
            	<key>CFBundlePackageType</key>
         
     | 
| 
      
 16 
     | 
    
         
            +
            	<string>BNDL</string>
         
     | 
| 
      
 17 
     | 
    
         
            +
            	<key>CFBundleShortVersionString</key>
         
     | 
| 
      
 18 
     | 
    
         
            +
            	<string>1.0</string>
         
     | 
| 
      
 19 
     | 
    
         
            +
            	<key>CFBundleSignature</key>
         
     | 
| 
      
 20 
     | 
    
         
            +
            	<string>????</string>
         
     | 
| 
      
 21 
     | 
    
         
            +
            	<key>CFBundleVersion</key>
         
     | 
| 
      
 22 
     | 
    
         
            +
            	<string>1</string>
         
     | 
| 
      
 23 
     | 
    
         
            +
            </dict>
         
     | 
| 
      
 24 
     | 
    
         
            +
            </plist>
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            //
         
     | 
| 
      
 2 
     | 
    
         
            +
            //  FJBNotificationsApiInteractorTests.m
         
     | 
| 
      
 3 
     | 
    
         
            +
            //  FJBNotificationsApiInteractorTests
         
     | 
| 
      
 4 
     | 
    
         
            +
            //  
         
     | 
| 
      
 5 
     | 
    
         
            +
            //  Created by fran_dev on 30/12/2014.
         
     | 
| 
      
 6 
     | 
    
         
            +
            //  Copyright (c) 2014. All rights reserved.
         
     | 
| 
      
 7 
     | 
    
         
            +
            //
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            #import <XCTest/XCTest.h>
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            @interface FJBNotificationsApiInteractorTests : XCTestCase
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            @end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            @implementation FJBNotificationsApiInteractorTests
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - (void)setUp {
         
     | 
| 
      
 18 
     | 
    
         
            +
                [super setUp];
         
     | 
| 
      
 19 
     | 
    
         
            +
                // Put setup code here. This method is called before the invocation of each test method in the class.
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            - (void)tearDown {
         
     | 
| 
      
 23 
     | 
    
         
            +
                // Put teardown code here. This method is called after the invocation of each test method in the class.
         
     | 
| 
      
 24 
     | 
    
         
            +
                [super tearDown];
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            #pragma mark - Actions
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            // Perform API request to mark a notification as read
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            - (void)testmarkNotificationAsReadonCompletionBlockShouldPass
         
     | 
| 
      
 32 
     | 
    
         
            +
            {
         
     | 
| 
      
 33 
     | 
    
         
            +
                // given
         
     | 
| 
      
 34 
     | 
    
         
            +
                // when
         
     | 
| 
      
 35 
     | 
    
         
            +
                // then
         
     | 
| 
      
 36 
     | 
    
         
            +
                XCTFail(@"No implemented test");
         
     | 
| 
      
 37 
     | 
    
         
            +
            }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            //
         
     | 
| 
      
 2 
     | 
    
         
            +
            //  FJBNotificationsViewModelTests.m
         
     | 
| 
      
 3 
     | 
    
         
            +
            //  FJBNotificationsViewModelTests
         
     | 
| 
      
 4 
     | 
    
         
            +
            //  
         
     | 
| 
      
 5 
     | 
    
         
            +
            //  Created by fran_dev on 30/12/2014.
         
     | 
| 
      
 6 
     | 
    
         
            +
            //  Copyright (c) 2014. All rights reserved.
         
     | 
| 
      
 7 
     | 
    
         
            +
            //
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            #import <XCTest/XCTest.h>
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            @interface FJBNotificationsViewModelTests : XCTestCase
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            @end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            @implementation FJBNotificationsViewModelTests
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            - (void)setUp {
         
     | 
| 
      
 18 
     | 
    
         
            +
                [super setUp];
         
     | 
| 
      
 19 
     | 
    
         
            +
                // Put setup code here. This method is called before the invocation of each test method in the class.
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            - (void)tearDown {
         
     | 
| 
      
 23 
     | 
    
         
            +
                // Put teardown code here. This method is called after the invocation of each test method in the class.
         
     | 
| 
      
 24 
     | 
    
         
            +
                [super tearDown];
         
     | 
| 
      
 25 
     | 
    
         
            +
            }
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            #pragma mark - Actions
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            // Dismiss the ViewController when the button is tapped
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            - (void)testdidTapOnCloseButtonShouldPass
         
     | 
| 
      
 32 
     | 
    
         
            +
            {
         
     | 
| 
      
 33 
     | 
    
         
            +
                // given
         
     | 
| 
      
 34 
     | 
    
         
            +
                // when
         
     | 
| 
      
 35 
     | 
    
         
            +
                // then
         
     | 
| 
      
 36 
     | 
    
         
            +
                XCTFail(@"No implemented test");
         
     | 
| 
      
 37 
     | 
    
         
            +
            }
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            // Mark notification as read when the notification is selected
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            - (void)testdidTapAtIndexPathShouldPass
         
     | 
| 
      
 42 
     | 
    
         
            +
            {
         
     | 
| 
      
 43 
     | 
    
         
            +
                // given
         
     | 
| 
      
 44 
     | 
    
         
            +
                // when
         
     | 
| 
      
 45 
     | 
    
         
            +
                // then
         
     | 
| 
      
 46 
     | 
    
         
            +
                XCTFail(@"No implemented test");
         
     | 
| 
      
 47 
     | 
    
         
            +
            }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            @end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            //
         
     | 
| 
      
 2 
     | 
    
         
            +
            //  iOSCleanArchitectureGeneratorTests.m
         
     | 
| 
      
 3 
     | 
    
         
            +
            //  iOSCleanArchitectureGeneratorTests
         
     | 
| 
      
 4 
     | 
    
         
            +
            //
         
     | 
| 
      
 5 
     | 
    
         
            +
            //  Created by Fran_DEV on 29/12/14.
         
     | 
| 
      
 6 
     | 
    
         
            +
            //  Copyright (c) 2014 fjbelchi. All rights reserved.
         
     | 
| 
      
 7 
     | 
    
         
            +
            //
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            #import <UIKit/UIKit.h>
         
     | 
| 
      
 10 
     | 
    
         
            +
            #import <XCTest/XCTest.h>
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            @interface iOSCleanArchitectureGeneratorTests : XCTestCase
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            @end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            @implementation iOSCleanArchitectureGeneratorTests
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            - (void)setUp {
         
     | 
| 
      
 19 
     | 
    
         
            +
                [super setUp];
         
     | 
| 
      
 20 
     | 
    
         
            +
                // Put setup code here. This method is called before the invocation of each test method in the class.
         
     | 
| 
      
 21 
     | 
    
         
            +
            }
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            - (void)tearDown {
         
     | 
| 
      
 24 
     | 
    
         
            +
                // Put teardown code here. This method is called after the invocation of each test method in the class.
         
     | 
| 
      
 25 
     | 
    
         
            +
                [super tearDown];
         
     | 
| 
      
 26 
     | 
    
         
            +
            }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            - (void)testExample {
         
     | 
| 
      
 29 
     | 
    
         
            +
                // This is an example of a functional test case.
         
     | 
| 
      
 30 
     | 
    
         
            +
                XCTAssert(YES, @"Pass");
         
     | 
| 
      
 31 
     | 
    
         
            +
            }
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            - (void)testPerformanceExample {
         
     | 
| 
      
 34 
     | 
    
         
            +
                // This is an example of a performance test case.
         
     | 
| 
      
 35 
     | 
    
         
            +
                [self measureBlock:^{
         
     | 
| 
      
 36 
     | 
    
         
            +
                    // Put the code you want to measure the time of here.
         
     | 
| 
      
 37 
     | 
    
         
            +
                }];
         
     | 
| 
      
 38 
     | 
    
         
            +
            }
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            @end
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -3,25 +3,51 @@ Clean iOS architecture generator 
     | 
|
| 
       3 
3 
     | 
    
         
             
            [](https://travis-ci.org/fjbelchi/clean-iOS-architecture-generator)
         
     | 
| 
       4 
4 
     | 
    
         
             
            [](https://coveralls.io/r/fjbelchi/clean-iOS-architecture-generator)
         
     | 
| 
       5 
5 
     | 
    
         
             
            [](https://codeclimate.com/github/fjbelchi/clean-iOS-architecture-generator)
         
     | 
| 
      
 6 
     | 
    
         
            +
            [](http://badge.fury.io/rb/iosgen)
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            Ruby  
     | 
| 
       8 
     | 
    
         
            -
            Having the following components, the  
     | 
| 
      
 8 
     | 
    
         
            +
            Ruby gem to generate a clean iOS architecture based on a spec file written in json format. 
         
     | 
| 
      
 9 
     | 
    
         
            +
            Having the following components, the gem will generate files according and it will add some logic in order to save development time.
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
            In the [roadmap](https://github.com/fjbelchi/clean-iOS-architecture-generator/issues) there are features like estimations and creation of tickets in Github Issues and others management tools.
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            ## Install
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
      
 15 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 16 
     | 
    
         
            +
            gem install iosgen
         
     | 
| 
      
 17 
     | 
    
         
            +
            ```
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            #### Execute
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ```shell
         
     | 
| 
      
 22 
     | 
    
         
            +
            $ iosgen generate spec.json
         
     | 
| 
      
 23 
     | 
    
         
            +
            spec.json
         
     | 
| 
      
 24 
     | 
    
         
            +
            [+] Created FJBNotificationsViewController.h
         
     | 
| 
      
 25 
     | 
    
         
            +
            [+] Created FJBNotificationsViewController.m
         
     | 
| 
      
 26 
     | 
    
         
            +
            [+] Created FJBNotificationsViewModelProtocol.h
         
     | 
| 
      
 27 
     | 
    
         
            +
            [+] Created FJBNotificationsViewModel.h
         
     | 
| 
      
 28 
     | 
    
         
            +
            [+] Created FJBNotificationsViewModel.m
         
     | 
| 
      
 29 
     | 
    
         
            +
            [+] Created FJBNotificationsApiInteractorProtocol.h
         
     | 
| 
      
 30 
     | 
    
         
            +
            [+] Created FJBNotificationsApiInteractor.h
         
     | 
| 
      
 31 
     | 
    
         
            +
            [+] Created FJBNotificationsApiInteractor.m
         
     | 
| 
      
 32 
     | 
    
         
            +
            ```
         
     | 
| 
       14 
33 
     | 
    
         
             
            ## Components
         
     | 
| 
       15 
34 
     | 
    
         | 
| 
       16 
35 
     | 
    
         
             
            #### Property
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            The property object is composited of two strings, type and name, which repesent variables.
         
     | 
| 
      
 38 
     | 
    
         
            +
            * type : Any Object type
         
     | 
| 
      
 39 
     | 
    
         
            +
            * name : name of the object
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
       17 
41 
     | 
    
         
             
            ```json
         
     | 
| 
       18 
42 
     | 
    
         
             
            {
         
     | 
| 
       19 
     | 
    
         
            -
              " 
     | 
| 
       20 
     | 
    
         
            -
              " 
     | 
| 
      
 43 
     | 
    
         
            +
              "type": "NSIndexPath *",
         
     | 
| 
      
 44 
     | 
    
         
            +
              "name": "selectedIndexPath"
         
     | 
| 
       21 
45 
     | 
    
         
             
            }
         
     | 
| 
       22 
46 
     | 
    
         
             
            ```
         
     | 
| 
       23 
47 
     | 
    
         | 
| 
       24 
48 
     | 
    
         
             
            #### Action
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
       25 
51 
     | 
    
         
             
            ```json
         
     | 
| 
       26 
52 
     | 
    
         
             
            {
         
     | 
| 
       27 
53 
     | 
    
         
             
              "description": "Dismiss the ViewController when the button is tapped",
         
     | 
| 
         @@ -35,6 +61,10 @@ Working in progress project 
     | 
|
| 
       35 
61 
     | 
    
         
             
            ```
         
     | 
| 
       36 
62 
     | 
    
         | 
| 
       37 
63 
     | 
    
         
             
            #### Interactor
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            Interactor is an object which perform actions for other components. 
         
     | 
| 
      
 66 
     | 
    
         
            +
            In this example the ViewModel needs to comunicate to the server which notification has been mark as read.
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       38 
68 
     | 
    
         
             
            ```json
         
     | 
| 
       39 
69 
     | 
    
         
             
            {
         
     | 
| 
       40 
70 
     | 
    
         
             
              "description" : "Api Interactions required by Notification ViewModel",
         
     | 
| 
         @@ -61,6 +91,7 @@ Working in progress project 
     | 
|
| 
       61 
91 
     | 
    
         
             
            ```
         
     | 
| 
       62 
92 
     | 
    
         | 
| 
       63 
93 
     | 
    
         
             
            #### ViewModel
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
       64 
95 
     | 
    
         
             
            ```json
         
     | 
| 
       65 
96 
     | 
    
         
             
            {
         
     | 
| 
       66 
97 
     | 
    
         
             
              "description" : "State of NotificationViewController and perform bussiness logic",
         
     | 
| 
         @@ -72,6 +103,7 @@ Working in progress project 
     | 
|
| 
       72 
103 
     | 
    
         
             
            ```
         
     | 
| 
       73 
104 
     | 
    
         | 
| 
       74 
105 
     | 
    
         
             
            #### UIViewController
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
       75 
107 
     | 
    
         
             
            ```json
         
     | 
| 
       76 
108 
     | 
    
         
             
              "view_controller": {
         
     | 
| 
       77 
109 
     | 
    
         
             
                "description": "ViewController to show the list of notifications",
         
     | 
| 
         @@ -141,18 +173,3 @@ Working in progress project 
     | 
|
| 
       141 
173 
     | 
    
         
             
              }
         
     | 
| 
       142 
174 
     | 
    
         
             
            }
         
     | 
| 
       143 
175 
     | 
    
         
             
            ```
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
            #### Output
         
     | 
| 
       146 
     | 
    
         
            -
            ```shell
         
     | 
| 
       147 
     | 
    
         
            -
            $ ./iosgen.rb spec ../spec/ios_gen/generator/spec.json
         
     | 
| 
       148 
     | 
    
         
            -
            ../spec/ios_gen/generator/spec.json
         
     | 
| 
       149 
     | 
    
         
            -
            [+] Created FJBNotificationsViewController.h
         
     | 
| 
       150 
     | 
    
         
            -
            [+] Created FJBNotificationsViewController.m
         
     | 
| 
       151 
     | 
    
         
            -
            [+] Created FJBNotificationsViewModelProtocol.h
         
     | 
| 
       152 
     | 
    
         
            -
            [+] Created FJBNotificationsViewModel.h
         
     | 
| 
       153 
     | 
    
         
            -
            [+] Created FJBNotificationsViewModel.m
         
     | 
| 
       154 
     | 
    
         
            -
            [+] Created FJBNotificationsApiInteractorProtocol.h
         
     | 
| 
       155 
     | 
    
         
            -
            [+] Created FJBNotificationsApiInteractor.h
         
     | 
| 
       156 
     | 
    
         
            -
            [+] Created FJBNotificationsApiInteractor.m
         
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
            ```
         
     | 
    
        data/bin/iosgen
    CHANGED
    
    
    
        data/iosgen.gemspec
    CHANGED
    
    
| 
         @@ -11,7 +11,7 @@ module IOSGen 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  attr_reader :type, :file_spec, :destination
         
     | 
| 
       13 
13 
     | 
    
         
             
                  attr_reader :view_model, :view_controller
         
     | 
| 
       14 
     | 
    
         
            -
                  attr_reader :factory, :formatter
         
     | 
| 
      
 14 
     | 
    
         
            +
                  attr_reader :factory, :formatter, :test_formatter
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                  def initialize(hash = {})
         
     | 
| 
       17 
17 
     | 
    
         
             
                    @type = hash[:type]
         
     | 
| 
         @@ -22,11 +22,22 @@ module IOSGen 
     | 
|
| 
       22 
22 
     | 
    
         
             
                    view_model_formatter = Objc::ViewModelFormatter.new(interactor_formatter)
         
     | 
| 
       23 
23 
     | 
    
         
             
                    view_controller_formatter = Objc::ViewControllerFormatter.new(view_model_formatter)
         
     | 
| 
       24 
24 
     | 
    
         
             
                    @formatter = Objc::Formatter.new(view_controller_formatter, view_model_formatter, interactor_formatter)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @test_formatter = Objc::XctestcaseFormatter.new
         
     | 
| 
       25 
26 
     | 
    
         
             
                    parse
         
     | 
| 
       26 
27 
     | 
    
         
             
                  end
         
     | 
| 
       27 
28 
     | 
    
         | 
| 
       28 
29 
     | 
    
         
             
                  def generate
         
     | 
| 
       29 
     | 
    
         
            -
                     
     | 
| 
      
 30 
     | 
    
         
            +
                    @formatter.generate do |file_name, template|
         
     | 
| 
      
 31 
     | 
    
         
            +
                      generate_template(file_name, template, @destination)
         
     | 
| 
      
 32 
     | 
    
         
            +
                      puts "[+] Created Source File: #{file_name}".green
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  def generate_test
         
     | 
| 
      
 37 
     | 
    
         
            +
                    generate_test_object(@view_model)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @view_model.interactors.each do |interactor|
         
     | 
| 
      
 39 
     | 
    
         
            +
                      generate_test_object(interactor)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
       30 
41 
     | 
    
         
             
                  end
         
     | 
| 
       31 
42 
     | 
    
         | 
| 
       32 
43 
     | 
    
         
             
                  private
         
     | 
| 
         @@ -41,13 +52,6 @@ module IOSGen 
     | 
|
| 
       41 
52 
     | 
    
         
             
                    @formatter.view_controller = @view_controller unless @view_controller.nil?
         
     | 
| 
       42 
53 
     | 
    
         
             
                  end
         
     | 
| 
       43 
54 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
                  def generate_view_model
         
     | 
| 
       45 
     | 
    
         
            -
                    @formatter.generate do |file_name, template|
         
     | 
| 
       46 
     | 
    
         
            -
                      generate_template(file_name, template, @destination)
         
     | 
| 
       47 
     | 
    
         
            -
                      puts "[+] Created #{file_name}".green
         
     | 
| 
       48 
     | 
    
         
            -
                    end
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
55 
     | 
    
         
             
                  def generate_template(name, template, destination = '.')
         
     | 
| 
       52 
56 
     | 
    
         
             
                    path_template = File.expand_path("../../../#{template}", File.dirname(__FILE__))
         
     | 
| 
       53 
57 
     | 
    
         
             
                    renderer = ERB.new(File.read(path_template))
         
     | 
| 
         @@ -56,6 +60,14 @@ module IOSGen 
     | 
|
| 
       56 
60 
     | 
    
         
             
                      f.write renderer.result(binding)
         
     | 
| 
       57 
61 
     | 
    
         
             
                    end
         
     | 
| 
       58 
62 
     | 
    
         
             
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  def generate_test_object(object)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    @test_formatter.object = object
         
     | 
| 
      
 66 
     | 
    
         
            +
                    @test_formatter.generate do |file_name, template|
         
     | 
| 
      
 67 
     | 
    
         
            +
                      generate_template(file_name, template, @destination)
         
     | 
| 
      
 68 
     | 
    
         
            +
                      puts "[+] Created Test File: #{file_name}".green
         
     | 
| 
      
 69 
     | 
    
         
            +
                    end
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
       59 
71 
     | 
    
         
             
                end
         
     | 
| 
       60 
72 
     | 
    
         
             
              end
         
     | 
| 
       61 
73 
     | 
    
         
             
            end
         
     |