// Path: dagger2-rxjava/src/main/java/com/tonilopezmr/dagger2rxjava/domain/PersonRepositoryImp.java
// public class PersonRepositoryImp implements PersonRepository{
// 
//     private final List<Person> persons;
// 
//     public PersonRepositoryImp() {
//         this.persons = new LinkedList<>();
//         fillRepo();
//     }
// 
//     private void fillRepo() {
//         persons.add(new Person("Conrado Mateu"));
//         persons.add(new Person("Marta"));
//         persons.add(new Person("Ana"));
//         persons.add(new Person("Angel"));
//         persons.add(new Person("Jose"));
//         persons.add(new Person("Pedro"));
//         persons.add(new Person("Maria"));
//         persons.add(new Person("Conrado Mateu"));
//         persons.add(new Person("Marta"));
//         persons.add(new Person("Ana"));
//         persons.add(new Person("Angel"));
//         persons.add(new Person("Jose"));
//         persons.add(new Person("Pedro"));
//         persons.add(new Person("Maria"));
//     }
// 
//     public Observable<List<Person>> getAll(){
//         return Observable.create(subscriber -> {
//             fakeWait();
//             if (new Random().nextInt(5) != 3){
//                 subscriber.onNext(persons);
//                 subscriber.onCompleted();
//             }else{
//                 subscriber.onError(new Exception());
//             }
//         });
//     }
// 
//     private void fakeWait() {
//         try {
//             Thread.sleep(1500);
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     public Observable<Person> get(Person person){
//         return Observable.create(subscriber -> {
//            fakeWait();
//             subscriber.onNext(persons.get(persons.indexOf(person)));
//             subscriber.onCompleted();
//         });
//     }
// }


import com.tonilopezmr.dagger2rxjava.domain.PersonRepositoryImp;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import rx.Scheduler;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
package com.tonilopezmr.dagger2rxjava.di;




/**
 * @author Antonio López.
 */
@Module public class MainModule {

    @Provides @Singleton public PersonRepositoryImp providePersonRepository(){
        return new PersonRepositoryImp();
    }

    @Provides @Named("executorThread") public Scheduler provideExecutorThread(){
// Path: dagger2-rxjava/src/main/java/com/tonilopezmr/dagger2rxjava/domain/PersonRepositoryImp.java
// public class PersonRepositoryImp implements PersonRepository{
// 
//     private final List<Person> persons;
// 
//     public PersonRepositoryImp() {
//         this.persons = new LinkedList<>();
//         fillRepo();
//     }
// 
//     private void fillRepo() {
//         persons.add(new Person("Conrado Mateu"));
//         persons.add(new Person("Marta"));
//         persons.add(new Person("Ana"));
//         persons.add(new Person("Angel"));
//         persons.add(new Person("Jose"));
//         persons.add(new Person("Pedro"));
//         persons.add(new Person("Maria"));
//         persons.add(new Person("Conrado Mateu"));
//         persons.add(new Person("Marta"));
//         persons.add(new Person("Ana"));
//         persons.add(new Person("Angel"));
//         persons.add(new Person("Jose"));
//         persons.add(new Person("Pedro"));
//         persons.add(new Person("Maria"));
//     }
// 
//     public Observable<List<Person>> getAll(){
//         return Observable.create(subscriber -> {
//             fakeWait();
//             if (new Random().nextInt(5) != 3){
//                 subscriber.onNext(persons);
//                 subscriber.onCompleted();
//             }else{
//                 subscriber.onError(new Exception());
//             }
//         });
//     }
// 
//     private void fakeWait() {
//         try {
//             Thread.sleep(1500);
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     public Observable<Person> get(Person person){
//         return Observable.create(subscriber -> {
//            fakeWait();
//             subscriber.onNext(persons.get(persons.indexOf(person)));
//             subscriber.onCompleted();
//         });
//     }
// }


// Path: dagger2-rxjava/src/main/java/com/tonilopezmr/dagger2rxjava/di/MainModule.java
import com.tonilopezmr.dagger2rxjava.domain.PersonRepositoryImp;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import rx.Scheduler;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

package com.tonilopezmr.dagger2rxjava.di;




/**
 * @author Antonio López.
 */
@Module public class MainModule {

    @Provides @Singleton public PersonRepositoryImp providePersonRepository(){
        return new PersonRepositoryImp();
    }

    @Provides @Named("executorThread") public Scheduler provideExecutorThread(){
        return Schedulers.newThread();