├── README.md
├── code-smells
├── bloaters
│ ├── data-clumps
│ │ └── .gitkeep
│ ├── large-class
│ │ └── .gitkeep
│ ├── long-method
│ │ └── java-student_grades-01_base_example
│ ├── long-parameter-list
│ │ └── .gitkeep
│ └── primitive-obsession
│ │ └── .gitkeep
├── change-preventers
│ ├── divergent-change
│ │ └── .gitkeep
│ ├── parallel-inheritance-hierarchies
│ │ └── .gitkeep
│ └── shotgun-surgery
│ │ └── .gitkeep
├── couplers
│ ├── feature-envy
│ │ └── .gitkeep
│ ├── inappropriate-intimacy
│ │ └── .gitkeep
│ ├── incomplete-library-class
│ │ └── .gitkeep
│ ├── message-chains
│ │ └── .gitkeep
│ └── middle-man
│ │ └── .gitkeep
├── dispensables
│ ├── comments
│ │ └── .gitkeep
│ ├── data-class
│ │ └── .gitkeep
│ ├── dead-code
│ │ └── .gitkeep
│ ├── duplicate-code
│ │ └── .gitkeep
│ ├── lazy-class
│ │ └── .gitkeep
│ └── speculative-generality
│ │ └── .gitkeep
└── object-orientation-abusers
│ ├── alternative-classes-with-different-interfaces
│ └── .gitkeep
│ ├── refused-bequest
│ └── .gitkeep
│ ├── switch-statements
│ └── .gitkeep
│ └── temporary-field
│ └── .gitkeep
├── design-patterns
└── creational
│ ├── abstract-factory
│ └── kotlin-payment_gateways-01_base
│ ├── factory-method
│ └── ts-stock_counter-03_add_factory_method
│ ├── lazy-initialization
│ └── kotlin-lazy_browser-01_base
│ ├── object-pool
│ └── kotlin-browsers_pool-01_base
│ ├── parameterized-factory-method
│ └── ts-stock_counter_dynamic-02_extract_parameterized_factory_method
│ ├── prototype
│ ├── php-repeat_purchase-01_base
│ └── ts-monsters_game-01_base
│ └── singleton
│ └── php-feature_flags-01_base
├── examples
├── csharp
│ ├── .gitignore
│ ├── Makefile
│ ├── csharp-booking-01_base
│ │ ├── csharp-booking-01_base.sln
│ │ ├── src
│ │ │ └── Booking
│ │ │ │ ├── Booking.cs
│ │ │ │ ├── Booking.csproj
│ │ │ │ ├── BookingId.cs
│ │ │ │ ├── BookingStatus.cs
│ │ │ │ ├── BookingType.cs
│ │ │ │ ├── CustomerId.cs
│ │ │ │ ├── CustomerName.cs
│ │ │ │ ├── DiscountType.cs
│ │ │ │ ├── DiscountValue.cs
│ │ │ │ ├── EmailAddress.cs
│ │ │ │ ├── TaxType.cs
│ │ │ │ └── TaxValue.cs
│ │ └── test
│ │ │ └── Booking.Tests
│ │ │ ├── Booking.Tests.csproj
│ │ │ └── BookingShould.cs
│ ├── csharp-booking-02_introduce_parameter_object
│ │ ├── csharp-booking-02_introduce_parameter_object.sln
│ │ ├── src
│ │ │ └── Booking
│ │ │ │ ├── Booking.cs
│ │ │ │ ├── Booking.csproj
│ │ │ │ ├── BookingId.cs
│ │ │ │ ├── BookingStatus.cs
│ │ │ │ ├── BookingType.cs
│ │ │ │ ├── Customer.cs
│ │ │ │ ├── CustomerId.cs
│ │ │ │ ├── CustomerName.cs
│ │ │ │ ├── DateRange.cs
│ │ │ │ ├── Discount.cs
│ │ │ │ ├── DiscountType.cs
│ │ │ │ ├── DiscountValue.cs
│ │ │ │ ├── EmailAddress.cs
│ │ │ │ ├── Tax.cs
│ │ │ │ ├── TaxType.cs
│ │ │ │ └── TaxValue.cs
│ │ └── test
│ │ │ └── Booking.Tests
│ │ │ ├── Booking.Tests.csproj
│ │ │ └── BookingShould.cs
│ ├── csharp-booking-03_preserve_whole_object
│ │ ├── csharp-booking-03_preserve_whole_object.sln
│ │ ├── src
│ │ │ └── Booking
│ │ │ │ ├── Booking.cs
│ │ │ │ ├── Booking.csproj
│ │ │ │ ├── BookingId.cs
│ │ │ │ ├── BookingStatus.cs
│ │ │ │ ├── BookingType.cs
│ │ │ │ ├── Customer.cs
│ │ │ │ ├── CustomerId.cs
│ │ │ │ ├── CustomerName.cs
│ │ │ │ ├── DateRange.cs
│ │ │ │ ├── Discount.cs
│ │ │ │ ├── DiscountType.cs
│ │ │ │ ├── DiscountValue.cs
│ │ │ │ ├── EmailAddress.cs
│ │ │ │ ├── Tax.cs
│ │ │ │ ├── TaxType.cs
│ │ │ │ └── TaxValue.cs
│ │ └── test
│ │ │ └── Booking.Tests
│ │ │ ├── Booking.Tests.csproj
│ │ │ └── BookingShould.cs
│ └── csharp-booking-04_tell_dont_ask
│ │ ├── csharp-booking-04_tell_dont_ask.sln
│ │ ├── src
│ │ └── Booking
│ │ │ ├── Booking.cs
│ │ │ ├── Booking.csproj
│ │ │ ├── BookingId.cs
│ │ │ ├── BookingStatus.cs
│ │ │ ├── BookingType.cs
│ │ │ ├── Customer.cs
│ │ │ ├── CustomerId.cs
│ │ │ ├── CustomerName.cs
│ │ │ ├── DateRange.cs
│ │ │ ├── Discount.cs
│ │ │ ├── DiscountType.cs
│ │ │ ├── DiscountValue.cs
│ │ │ ├── EmailAddress.cs
│ │ │ ├── Tax.cs
│ │ │ ├── TaxType.cs
│ │ │ └── TaxValue.cs
│ │ └── test
│ │ └── Booking.Tests
│ │ ├── Booking.Tests.csproj
│ │ └── BookingShould.cs
├── java
│ ├── java-booking-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── booking
│ │ │ │ │ │ ├── Booking.java
│ │ │ │ │ │ ├── BookingId.java
│ │ │ │ │ │ ├── BookingStatus.java
│ │ │ │ │ │ ├── BookingType.java
│ │ │ │ │ │ ├── CustomerId.java
│ │ │ │ │ │ ├── CustomerName.java
│ │ │ │ │ │ ├── DiscountType.java
│ │ │ │ │ │ ├── DiscountValue.java
│ │ │ │ │ │ ├── EmailAddress.java
│ │ │ │ │ │ ├── TaxType.java
│ │ │ │ │ │ └── TaxValue.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── booking
│ │ │ │ │ └── BookingShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-booking-02_introduce_parameter_object
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── booking
│ │ │ │ │ │ ├── Booking.java
│ │ │ │ │ │ ├── BookingId.java
│ │ │ │ │ │ ├── BookingStatus.java
│ │ │ │ │ │ ├── BookingType.java
│ │ │ │ │ │ ├── Customer.java
│ │ │ │ │ │ ├── CustomerId.java
│ │ │ │ │ │ ├── CustomerName.java
│ │ │ │ │ │ ├── DateRange.java
│ │ │ │ │ │ ├── Discount.java
│ │ │ │ │ │ ├── DiscountType.java
│ │ │ │ │ │ ├── DiscountValue.java
│ │ │ │ │ │ ├── EmailAddress.java
│ │ │ │ │ │ ├── Tax.java
│ │ │ │ │ │ ├── TaxType.java
│ │ │ │ │ │ └── TaxValue.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── booking
│ │ │ │ │ └── BookingShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-booking-03_preserve_whole_object
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── booking
│ │ │ │ │ │ ├── Booking.java
│ │ │ │ │ │ ├── BookingId.java
│ │ │ │ │ │ ├── BookingStatus.java
│ │ │ │ │ │ ├── BookingType.java
│ │ │ │ │ │ ├── Customer.java
│ │ │ │ │ │ ├── CustomerId.java
│ │ │ │ │ │ ├── CustomerName.java
│ │ │ │ │ │ ├── DateRange.java
│ │ │ │ │ │ ├── Discount.java
│ │ │ │ │ │ ├── DiscountType.java
│ │ │ │ │ │ ├── DiscountValue.java
│ │ │ │ │ │ ├── EmailAddress.java
│ │ │ │ │ │ ├── Tax.java
│ │ │ │ │ │ ├── TaxType.java
│ │ │ │ │ │ └── TaxValue.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── booking
│ │ │ │ │ └── BookingShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-booking-04_tell_dont_ask
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── booking
│ │ │ │ │ │ ├── Booking.java
│ │ │ │ │ │ ├── BookingId.java
│ │ │ │ │ │ ├── BookingStatus.java
│ │ │ │ │ │ ├── BookingType.java
│ │ │ │ │ │ ├── Customer.java
│ │ │ │ │ │ ├── CustomerId.java
│ │ │ │ │ │ ├── CustomerName.java
│ │ │ │ │ │ ├── DateRange.java
│ │ │ │ │ │ ├── Discount.java
│ │ │ │ │ │ ├── DiscountType.java
│ │ │ │ │ │ ├── DiscountValue.java
│ │ │ │ │ │ ├── EmailAddress.java
│ │ │ │ │ │ ├── Tax.java
│ │ │ │ │ │ ├── TaxType.java
│ │ │ │ │ │ └── TaxValue.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── booking
│ │ │ │ │ └── BookingShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-chat_rollout-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── chat_rollout
│ │ │ │ │ │ └── ChatController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── chat_rollout
│ │ │ │ │ └── ChatControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-chat_rollout-02_parameter
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── chat_rollout
│ │ │ │ │ │ └── ChatController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── chat_rollout
│ │ │ │ │ └── ChatControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-chat_rollout-03_method_call
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── chat_rollout
│ │ │ │ │ │ ├── ChatController.java
│ │ │ │ │ │ ├── ChatRolloutPercentageRepository.java
│ │ │ │ │ │ └── InMemoryChatRolloutPercentageRepository.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── chat_rollout
│ │ │ │ │ ├── AlwaysNewChatChatRolloutPercentageRepository.java
│ │ │ │ │ ├── AlwaysOldChatChatRolloutPercentageRepository.java
│ │ │ │ │ └── ChatControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-student_grades-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── student_grades
│ │ │ │ │ │ ├── Pair.java
│ │ │ │ │ │ └── StudentGradeCalculator.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── student_grades
│ │ │ │ │ └── StudentGradeCalculatorShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-student_grades-02_extract_method
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── student_grades
│ │ │ │ │ │ ├── Pair.java
│ │ │ │ │ │ └── StudentGradeCalculator.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── student_grades
│ │ │ │ │ └── StudentGradeCalculatorShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-student_grades-03_if_guard_clause
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── student_grades
│ │ │ │ │ │ ├── GradesWeightBelowMinException.java
│ │ │ │ │ │ ├── GradesWeightOverMaxException.java
│ │ │ │ │ │ ├── Pair.java
│ │ │ │ │ │ └── StudentGradeCalculator.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── student_grades
│ │ │ │ │ └── StudentGradeCalculatorShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ ├── java-student_grades-04_replace_control_flag
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── student_grades
│ │ │ │ │ │ ├── GradesWeightBelowMinException.java
│ │ │ │ │ │ ├── GradesWeightOverMaxException.java
│ │ │ │ │ │ ├── Pair.java
│ │ │ │ │ │ └── StudentGradeCalculator.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── student_grades
│ │ │ │ │ └── StudentGradeCalculatorShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ └── java-student_grades-05_simplify_conditionals
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── build.gradle
│ │ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ ├── main
│ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── student_grades
│ │ │ │ │ ├── GradesWeightBelowMinException.java
│ │ │ │ │ ├── GradesWeightOverMaxException.java
│ │ │ │ │ ├── Pair.java
│ │ │ │ │ └── StudentGradeCalculator.java
│ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── test
│ │ │ ├── java
│ │ │ └── tv
│ │ │ │ └── codely
│ │ │ │ └── student_grades
│ │ │ │ └── StudentGradeCalculatorShould.java
│ │ │ └── resources
│ │ │ └── log4j2.properties
│ │ └── var
│ │ └── log
│ │ └── .gitkeep
├── js
│ ├── js-bonus-01_base
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ └── DailyBonusPointsCalculator.js
│ │ └── tests
│ │ │ └── DailyBonusPointsCalculator.test.js
│ ├── js-bonus-02_explicit_method
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ └── DailyBonusPointsCalculator.js
│ │ └── tests
│ │ │ └── DailyBonusPointsCalculator.test.js
│ ├── js-bonus-03_extract_class
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── NormalUserDailyBonusPointsCalculator.js
│ │ │ └── PremiumUserDailyBonusPointsCalculator.js
│ │ └── tests
│ │ │ ├── NormalUserDailyBonusPointsCalculator.test.js
│ │ │ └── PremiumUserDailyBonusPointsCalculator.test.js
│ ├── js-data_repository-01_base
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ └── UserSearcher.js
│ │ └── tests
│ │ │ └── UserSearcher.test.js
│ ├── js-data_repository-02_repository
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── MySqlUserRepository.js
│ │ │ └── UsersSearcher.js
│ │ └── tests
│ │ │ ├── FakeUserRepository.js
│ │ │ └── UsersSearcher.test.js
│ ├── js-data_repository-03_container
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Container.js
│ │ │ ├── MySqlUserRepository.js
│ │ │ └── UsersSearcher.js
│ │ └── tests
│ │ │ ├── FakeUserRepository.js
│ │ │ └── UsersSearcher.test.js
│ ├── js-data_repository-04_explicit_arguments
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Container.js
│ │ │ ├── MySqlUserRepository.js
│ │ │ └── UsersSearcher.js
│ │ └── tests
│ │ │ ├── FakeUserRepository.js
│ │ │ └── UsersSearcher.test.js
│ ├── js-data_repository-05_parameter_object
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Container.js
│ │ │ ├── MySqlConfig.js
│ │ │ ├── MySqlUserRepository.js
│ │ │ └── UsersSearcher.js
│ │ └── tests
│ │ │ ├── FakeUserRepository.js
│ │ │ └── UsersSearcher.test.js
│ ├── js-data_repository-06_db_connection_class
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Container.js
│ │ │ ├── MySqlConfig.js
│ │ │ ├── MySqlUserRepository.js
│ │ │ └── UsersSearcher.js
│ │ └── tests
│ │ │ ├── FakeUserRepository.js
│ │ │ └── UsersSearcher.test.js
│ ├── js-http_api-01_base
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Course.js
│ │ │ ├── CourseCreator.js
│ │ │ └── CoursesController.js
│ │ └── tests
│ │ │ ├── CoursesController.test.js
│ │ │ └── MockCourseRepository.js
│ ├── js-http_api-02_arguments
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Course.js
│ │ │ ├── CourseCreator.js
│ │ │ └── CoursesController.js
│ │ └── tests
│ │ │ ├── CoursesController.test.js
│ │ │ └── MockCourseRepository.js
│ ├── js-http_api-03_introduce_parameter_object
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Course.js
│ │ │ ├── CourseCreator.js
│ │ │ ├── CoursesController.js
│ │ │ └── CreateCourseRequest.js
│ │ └── tests
│ │ │ ├── CoursesController.test.js
│ │ │ └── MockCourseRepository.js
│ ├── js-student_grades-01_base
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ └── StudentGradeCalculator.js
│ │ └── tests
│ │ │ └── StudentGradeCalculator.test.js
│ ├── js-student_grades-02_extract_subclass
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── StudentGrade2019Calculator.js
│ │ │ ├── StudentGrade2020Calculator.js
│ │ │ └── StudentGradeCalculator.js
│ │ └── tests
│ │ │ └── StudentGradeCalculator.test.js
│ └── js-student_grades-03_extract_class
│ │ ├── .gitignore
│ │ ├── babel.config.json
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ ├── StudentGradeCalculator.js
│ │ └── Teachers.js
│ │ └── tests
│ │ └── StudentGradeCalculator.test.js
├── kotlin
│ ├── kotlin-browsers_pool-01_base
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── main.yml
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── build.gradle.kts
│ │ ├── geckodriver
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── settings.gradle.kts
│ │ └── src
│ │ │ ├── main
│ │ │ └── kotlin
│ │ │ │ └── com
│ │ │ │ └── codely
│ │ │ │ └── browser_pool
│ │ │ │ ├── 01-WithoutPool.kt
│ │ │ │ ├── 02-WithoutPool.kt
│ │ │ │ ├── 03-WithoutPool.kt
│ │ │ │ ├── 04-WithPool.kt
│ │ │ │ ├── 05-WithPool.kt
│ │ │ │ ├── Browser.kt
│ │ │ │ └── BrowserPool.kt
│ │ │ └── test
│ │ │ └── kotlin
│ │ │ └── com
│ │ │ └── codely
│ │ │ └── browser_pool
│ │ │ ├── BrowserTest.kt
│ │ │ ├── HttpCat200Test.kt
│ │ │ ├── HttpCat201Test.kt
│ │ │ ├── HttpCat202Test.kt
│ │ │ ├── HttpCat203Test.kt
│ │ │ ├── HttpCat204Test.kt
│ │ │ ├── HttpCat301Test.kt
│ │ │ ├── HttpCat302Test.kt
│ │ │ └── HttpCat303Test.kt
│ ├── kotlin-lazy_browser-01_base
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── main.yml
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── build.gradle.kts
│ │ ├── geckodriver
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── settings.gradle.kts
│ │ └── src
│ │ │ ├── main
│ │ │ └── kotlin
│ │ │ │ └── com
│ │ │ │ └── codely
│ │ │ │ └── lazy_initialization
│ │ │ │ ├── 01-WithoutLazyInitialization.kt
│ │ │ │ ├── 02-WithLazyInitialization.kt
│ │ │ │ ├── 03-WithProxyLazyInitialization.kt
│ │ │ │ ├── Browser.kt
│ │ │ │ ├── BrowserPool.kt
│ │ │ │ ├── FirefoxBrowser.kt
│ │ │ │ ├── LazyFirefoxBrowser.kt
│ │ │ │ └── LazyFirefoxBrowserProxy.kt
│ │ │ └── test
│ │ │ └── kotlin
│ │ │ └── com
│ │ │ └── codely
│ │ │ └── lazy_initialization
│ │ │ ├── BrowserTest.kt
│ │ │ ├── HttpCat200Test.kt
│ │ │ ├── HttpCat201Test.kt
│ │ │ ├── HttpCat202Test.kt
│ │ │ ├── HttpCat203Test.kt
│ │ │ ├── HttpCat204Test.kt
│ │ │ ├── HttpCat301Test.kt
│ │ │ ├── HttpCat302Test.kt
│ │ │ └── HttpCat303Test.kt
│ ├── kotlin-payment_gateways-01_base
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── main.yml
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── settings.gradle.kts
│ │ └── src
│ │ │ ├── main
│ │ │ └── kotlin
│ │ │ │ └── com
│ │ │ │ └── codely
│ │ │ │ └── payment
│ │ │ │ ├── Card.kt
│ │ │ │ ├── CardData.kt
│ │ │ │ ├── Customer.kt
│ │ │ │ ├── CustomerData.kt
│ │ │ │ ├── MakePayment.kt
│ │ │ │ ├── Payment.kt
│ │ │ │ ├── PaymentGateway.kt
│ │ │ │ ├── PaymentRequest.kt
│ │ │ │ ├── adyen
│ │ │ │ ├── AdyenClient.kt
│ │ │ │ ├── CardAdyen.kt
│ │ │ │ ├── CustomerAdyen.kt
│ │ │ │ ├── PaymentAdyen.kt
│ │ │ │ └── PaymentGatewayAdyen.kt
│ │ │ │ └── ogone
│ │ │ │ ├── CardOgone.kt
│ │ │ │ ├── CustomerOgone.kt
│ │ │ │ ├── OgoneClient.kt
│ │ │ │ ├── PaymentGatewayOgone.kt
│ │ │ │ └── PaymentOgone.kt
│ │ │ └── test
│ │ │ └── kotlin
│ │ │ └── com
│ │ │ └── codely
│ │ │ └── payment
│ │ │ └── MakePaymentTest.kt
│ └── kotlin-payment_gateways-02_new-payment-gateway
│ │ ├── .github
│ │ └── workflows
│ │ │ └── main.yml
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── settings.gradle.kts
│ │ └── src
│ │ ├── main
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── codely
│ │ │ └── payment
│ │ │ ├── Card.kt
│ │ │ ├── CardData.kt
│ │ │ ├── Customer.kt
│ │ │ ├── CustomerData.kt
│ │ │ ├── MakePayment.kt
│ │ │ ├── Order.kt
│ │ │ ├── Payment.kt
│ │ │ ├── PaymentGateway.kt
│ │ │ ├── PaymentRequest.kt
│ │ │ ├── adyen
│ │ │ ├── AdyenClient.kt
│ │ │ ├── CardAdyen.kt
│ │ │ ├── CustomerAdyen.kt
│ │ │ ├── PaymentAdyen.kt
│ │ │ └── PaymentGatewayAdyen.kt
│ │ │ ├── ogone
│ │ │ ├── CardOgone.kt
│ │ │ ├── CustomerOgone.kt
│ │ │ ├── OgoneClient.kt
│ │ │ ├── PaymentGatewayOgone.kt
│ │ │ └── PaymentOgone.kt
│ │ │ └── stripe
│ │ │ ├── CardStripe.kt
│ │ │ ├── CustomerStripe.kt
│ │ │ ├── OrderStripe.kt
│ │ │ ├── PaymentGatewayStripe.kt
│ │ │ ├── PaymentStripe.kt
│ │ │ └── StripeClient.kt
│ │ └── test
│ │ └── kotlin
│ │ └── com
│ │ └── codely
│ │ └── payment
│ │ └── MakePaymentTest.kt
├── php
│ ├── php-divergent_change-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Controller
│ │ │ │ └── CourseStepsGetController.php
│ │ │ └── Platform.php
│ │ └── tests
│ │ │ └── Controller
│ │ │ └── CourseStepsGetTest.php
│ ├── php-feature_flags-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Application
│ │ │ │ └── Subscribe.php
│ │ │ ├── Debug.php
│ │ │ ├── Email
│ │ │ │ ├── EmailNotifier.php
│ │ │ │ └── subscription-email.php
│ │ │ ├── FeatureFlags.php
│ │ │ ├── Flags.php
│ │ │ ├── Persistence
│ │ │ │ └── MySqlConnection.php
│ │ │ ├── SubscribeController.php
│ │ │ └── index.php
│ │ └── tests
│ │ │ └── SubscribeTest.php
│ ├── php-repeat_purchase-01_base
│ │ ├── .editorconfig
│ │ ├── .github
│ │ │ ├── FUNDING.yml
│ │ │ └── workflows
│ │ │ │ └── ci.yml
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── CartTemplate
│ │ │ │ ├── Cart.php
│ │ │ │ ├── CartId.php
│ │ │ │ ├── CartLine.php
│ │ │ │ ├── CartLines.php
│ │ │ │ ├── CartRepository.php
│ │ │ │ ├── CartTemplate.php
│ │ │ │ ├── CreateCartFromTemplate.php
│ │ │ │ ├── Currency.php
│ │ │ │ ├── DummyCartRepository.php
│ │ │ │ ├── Price.php
│ │ │ │ ├── Product.php
│ │ │ │ ├── ProductId.php
│ │ │ │ ├── ProductNotInCart.php
│ │ │ │ ├── Units.php
│ │ │ │ └── index.php
│ │ │ └── RepeatPurchase
│ │ │ │ ├── Cart.php
│ │ │ │ ├── CartId.php
│ │ │ │ ├── CartLine.php
│ │ │ │ ├── CartLines.php
│ │ │ │ ├── CartRepository.php
│ │ │ │ ├── Currency.php
│ │ │ │ ├── DummyCartRepository.php
│ │ │ │ ├── Price.php
│ │ │ │ ├── Product.php
│ │ │ │ ├── ProductId.php
│ │ │ │ ├── ProductNotInCart.php
│ │ │ │ ├── RepeatPurchase.php
│ │ │ │ ├── RepeatPurchase2.php
│ │ │ │ ├── Repeatable.php
│ │ │ │ ├── Units.php
│ │ │ │ └── index.php
│ │ └── tests
│ │ │ └── DummyTest.php
│ ├── php-step_strategy-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ └── Step.php
│ │ └── tests
│ │ │ └── StepTest.php
│ ├── php-step_strategy-02_replace_type_code_with_strategy
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── ExerciseStepType.php
│ │ │ ├── QuizStepType.php
│ │ │ ├── Step.php
│ │ │ ├── StepType.php
│ │ │ └── VideoStepType.php
│ │ └── tests
│ │ │ └── StepTest.php
│ ├── php-user_email-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Controller
│ │ │ │ ├── NewsletterController.php
│ │ │ │ └── UserController.php
│ │ │ └── Model
│ │ │ │ ├── Newsletter.php
│ │ │ │ └── User.php
│ │ └── tests
│ │ │ └── Controller
│ │ │ ├── NewsletterControllerTest.php
│ │ │ └── UserControllerTest.php
│ ├── php-user_email-02_extract_method
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Controller
│ │ │ │ ├── NewsletterController.php
│ │ │ │ └── UserController.php
│ │ │ └── Model
│ │ │ │ ├── Newsletter.php
│ │ │ │ └── User.php
│ │ └── tests
│ │ │ └── Controller
│ │ │ ├── NewsletterControllerTest.php
│ │ │ └── UserControllerTest.php
│ ├── php-user_email-03_move_method
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Controller
│ │ │ │ ├── NewsletterController.php
│ │ │ │ └── UserController.php
│ │ │ └── Model
│ │ │ │ ├── Newsletter.php
│ │ │ │ └── User.php
│ │ └── tests
│ │ │ └── Controller
│ │ │ ├── NewsletterControllerTest.php
│ │ │ └── UserControllerTest.php
│ ├── php-user_email-04_email_address_vo
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Controller
│ │ │ │ ├── NewsletterController.php
│ │ │ │ └── UserController.php
│ │ │ └── Model
│ │ │ │ ├── EmailAddress.php
│ │ │ │ ├── Newsletter.php
│ │ │ │ └── User.php
│ │ └── tests
│ │ │ └── Controller
│ │ │ ├── NewsletterControllerTest.php
│ │ │ └── UserControllerTest.php
│ ├── php-user_email-05_user_email_vo
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ ├── Controller
│ │ │ │ ├── NewsletterController.php
│ │ │ │ └── UserController.php
│ │ │ └── Model
│ │ │ │ ├── EmailAddress.php
│ │ │ │ ├── Newsletter.php
│ │ │ │ ├── User.php
│ │ │ │ └── UserEmailAddress.php
│ │ └── tests
│ │ │ └── Controller
│ │ │ ├── NewsletterControllerTest.php
│ │ │ └── UserControllerTest.php
│ ├── php-user_modelling-01_base
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ │ └── User.php
│ │ └── tests
│ │ │ └── UserTest.php
│ └── php-user_modelling-02_value_objects
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .semver
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── phpunit.xml
│ │ ├── src
│ │ ├── Age.php
│ │ ├── Locale.php
│ │ └── User.php
│ │ └── tests
│ │ └── UserTest.php
├── ts
│ ├── ts-monsters_game-01_base
│ │ ├── .eslintrc.js
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ ├── lint.yml
│ │ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── babel.config.json
│ │ ├── cypress.json
│ │ ├── cypress
│ │ │ ├── fixtures
│ │ │ │ └── example.json
│ │ │ ├── integration
│ │ │ │ └── home.spec.ts
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ ├── support
│ │ │ │ ├── commands.js
│ │ │ │ └── index.js
│ │ │ └── tsconfig.json
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Ghost.ts
│ │ │ ├── Wolf.ts
│ │ │ ├── assets
│ │ │ │ ├── css
│ │ │ │ │ ├── game.css
│ │ │ │ │ └── normalize.css
│ │ │ │ └── images
│ │ │ │ │ └── logo-codelytv-light.png
│ │ │ ├── enemiesByLevel.ts
│ │ │ ├── framework
│ │ │ │ ├── EnemiesByLevel.ts
│ │ │ │ ├── Enemy.ts
│ │ │ │ ├── EnemySpawner.ts
│ │ │ │ ├── GameLevel.ts
│ │ │ │ ├── MonstersGame.ts
│ │ │ │ ├── cloneEnemy.ts
│ │ │ │ └── renderEnemy.ts
│ │ │ └── index.ts
│ │ ├── tests
│ │ │ └── .eslintrc
│ │ ├── tsconfig.json
│ │ ├── webpack.common.js
│ │ ├── webpack.dev.js
│ │ ├── webpack.prod.js
│ │ └── yarn.lock
│ ├── ts-stock_counter-01_base
│ │ ├── .gitignore
│ │ ├── dist
│ │ │ └── data
│ │ │ │ ├── warehouse-stock.csv
│ │ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Feed.ts
│ │ │ ├── FeedStockCounterCsv.ts
│ │ │ ├── FeedStockCounterJson.ts
│ │ │ ├── Flower.ts
│ │ │ ├── getWarehoseProductFeed.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ ├── ts-stock_counter-02_extract_base_class
│ │ ├── .gitignore
│ │ ├── dist
│ │ │ └── data
│ │ │ │ ├── warehouse-stock.csv
│ │ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Feed.ts
│ │ │ ├── FeedStockCounter.ts
│ │ │ ├── FeedStockCounterCsv.ts
│ │ │ ├── FeedStockCounterJson.ts
│ │ │ ├── Flower.ts
│ │ │ ├── getWarehoseProductFeed.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ ├── ts-stock_counter-03_add_factory_method
│ │ ├── .gitignore
│ │ ├── dist
│ │ │ └── data
│ │ │ │ ├── warehouse-stock.csv
│ │ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Feed.ts
│ │ │ ├── FeedParser.ts
│ │ │ ├── FeedParserCsv.ts
│ │ │ ├── FeedParserJson.ts
│ │ │ ├── FeedStockCounter.ts
│ │ │ ├── FeedStockCounterCsv.ts
│ │ │ ├── FeedStockCounterJson.ts
│ │ │ ├── Flower.ts
│ │ │ ├── getWarehoseProductFeed.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ ├── ts-stock_counter-04_replace_inheritance_with_composition
│ │ ├── .gitignore
│ │ ├── dist
│ │ │ └── data
│ │ │ │ ├── warehouse-stock.csv
│ │ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Feed.ts
│ │ │ ├── FeedParser.ts
│ │ │ ├── FeedParserCsv.ts
│ │ │ ├── FeedParserJson.ts
│ │ │ ├── FeedStockCounter.ts
│ │ │ ├── FeedStockCounterCsv.ts
│ │ │ ├── FeedStockCounterJson.ts
│ │ │ ├── Flower.ts
│ │ │ ├── getWarehoseProductFeed.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ ├── ts-stock_counter_dynamic-01_base
│ │ ├── .gitignore
│ │ ├── dist
│ │ │ └── data
│ │ │ │ ├── warehouse-stock.csv
│ │ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Feed.ts
│ │ │ ├── FeedParser.ts
│ │ │ ├── FeedParserCsv.ts
│ │ │ ├── FeedParserJson.ts
│ │ │ ├── FeedStockCounter.ts
│ │ │ ├── Flower.ts
│ │ │ ├── getWarehoseProductFeed.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ ├── ts-stock_counter_dynamic-02_extract_parameterized_factory_method
│ │ ├── .gitignore
│ │ ├── dist
│ │ │ └── data
│ │ │ │ ├── warehouse-stock.csv
│ │ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Feed.ts
│ │ │ ├── FeedParser.ts
│ │ │ ├── FeedParserCsv.ts
│ │ │ ├── FeedParserFromContentType.ts
│ │ │ ├── FeedParserJson.ts
│ │ │ ├── FeedStockCounter.ts
│ │ │ ├── Flower.ts
│ │ │ ├── getWarehoseProductFeed.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ └── ts-stock_counter_dynamic-03_exhaustive_type_check
│ │ ├── .gitignore
│ │ ├── dist
│ │ └── data
│ │ │ ├── warehouse-stock.csv
│ │ │ └── warehouse-stock.json
│ │ ├── package.json
│ │ ├── src
│ │ ├── ContentType.ts
│ │ ├── Feed.ts
│ │ ├── FeedParser.ts
│ │ ├── FeedParserCsv.ts
│ │ ├── FeedParserFromContentType.ts
│ │ ├── FeedParserJson.ts
│ │ ├── FeedStockCounter.ts
│ │ ├── Flower.ts
│ │ ├── getWarehoseProductFeed.ts
│ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── yarn.lock
└── typescript
│ └── ts-stock_management-01_base
│ ├── .gitignore
│ ├── README.md
│ ├── babel.config.js
│ ├── package.json
│ ├── src
│ ├── AggregateRoot.ts
│ ├── FlowerStock.ts
│ ├── LowStock.ts
│ ├── NotEnoughStock.ts
│ └── OutOfStock.ts
│ ├── tests
│ └── FlowerStock.test.ts
│ └── yarn.lock
├── exercises
├── graduated_tiered_prices
│ ├── README.md
│ ├── base
│ │ └── typescript
│ │ │ ├── .eslintrc.js
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── babel.config.json
│ │ │ ├── cypress.json
│ │ │ ├── cypress
│ │ │ ├── fixtures
│ │ │ │ └── example.json
│ │ │ ├── integration
│ │ │ │ └── home.spec.ts
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ ├── support
│ │ │ │ ├── commands.js
│ │ │ │ └── index.js
│ │ │ └── tsconfig.json
│ │ │ ├── index.html
│ │ │ ├── jest.config.js
│ │ │ ├── package-lock.json
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ └── index.ts
│ │ │ ├── tests
│ │ │ ├── .eslintrc
│ │ │ └── GraduatedTieredPricing.test.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── webpack.common.js
│ │ │ ├── webpack.dev.js
│ │ │ └── webpack.prod.js
│ └── solutions
│ │ ├── adrianliz
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── babel.config.json
│ │ ├── cypress.json
│ │ ├── cypress
│ │ │ ├── fixtures
│ │ │ │ └── example.json
│ │ │ ├── integration
│ │ │ │ └── home.spec.ts
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ ├── support
│ │ │ │ ├── commands.js
│ │ │ │ └── index.js
│ │ │ └── tsconfig.json
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── GraduatedTier.ts
│ │ │ ├── GraduatedTieredPricing.ts
│ │ │ ├── InvalidTier.ts
│ │ │ ├── NumberOfSubscriptionsNotAllowed.ts
│ │ │ ├── Subscriptions.ts
│ │ │ └── index.ts
│ │ ├── tests
│ │ │ ├── .eslintrc
│ │ │ ├── GraduatedTiered.test.ts
│ │ │ └── GraduatedTieredPricing.test.ts
│ │ ├── tsconfig.json
│ │ ├── webpack.common.js
│ │ ├── webpack.dev.js
│ │ └── webpack.prod.js
│ │ └── codely_triangulation-with-tpp
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── babel.config.json
│ │ ├── cypress.json
│ │ ├── cypress
│ │ ├── fixtures
│ │ │ └── example.json
│ │ ├── integration
│ │ │ └── home.spec.ts
│ │ ├── plugins
│ │ │ └── index.js
│ │ ├── support
│ │ │ ├── commands.js
│ │ │ └── index.js
│ │ └── tsconfig.json
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ ├── GraduatedTieredPricing.ts
│ │ ├── SubscriptionsBeingPurchased.ts
│ │ ├── Tier.ts
│ │ └── index.ts
│ │ ├── tests
│ │ ├── .eslintrc
│ │ └── GraduatedTieredPricing.test.ts
│ │ ├── tsconfig.json
│ │ ├── webpack.common.js
│ │ ├── webpack.dev.js
│ │ └── webpack.prod.js
├── legacy_create_video
│ ├── README.md
│ ├── base
│ │ └── php-symfony
│ │ │ ├── .gitignore
│ │ │ ├── .travis.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── app
│ │ │ ├── .htaccess
│ │ │ ├── AppCache.php
│ │ │ ├── AppKernel.php
│ │ │ ├── Resources
│ │ │ │ └── views
│ │ │ │ │ └── base.html.twig
│ │ │ ├── SymfonyRequirements.php
│ │ │ ├── autoload.php
│ │ │ ├── bootstrap.php.cache
│ │ │ ├── check.php
│ │ │ ├── config
│ │ │ │ ├── config.yml
│ │ │ │ ├── config_dev.yml
│ │ │ │ ├── config_prod.yml
│ │ │ │ ├── config_test.yml
│ │ │ │ ├── parameters.yml.dist
│ │ │ │ ├── routing.yml
│ │ │ │ ├── routing_dev.yml
│ │ │ │ └── security.yml
│ │ │ ├── console
│ │ │ └── phpunit.xml.dist
│ │ │ ├── composer.json
│ │ │ ├── composer.lock
│ │ │ ├── src
│ │ │ ├── .htaccess
│ │ │ └── AppBundle
│ │ │ │ ├── AppBundle.php
│ │ │ │ ├── Controller
│ │ │ │ ├── BaseController.php
│ │ │ │ ├── CourseController.php
│ │ │ │ ├── NoteController.php
│ │ │ │ └── VideoController.php
│ │ │ │ ├── DependencyInjection
│ │ │ │ └── AppExtension.php
│ │ │ │ ├── EventListener
│ │ │ │ └── ControllerListener.php
│ │ │ │ ├── Form
│ │ │ │ └── NoteType.php
│ │ │ │ ├── Model
│ │ │ │ ├── Course.php
│ │ │ │ ├── Event.php
│ │ │ │ ├── Note.php
│ │ │ │ └── NoteCollection.php
│ │ │ │ ├── NoteManager.php
│ │ │ │ ├── Resources
│ │ │ │ ├── config
│ │ │ │ │ ├── serializer
│ │ │ │ │ │ ├── Model.Event.yml
│ │ │ │ │ │ ├── Model.Note.yml
│ │ │ │ │ │ └── Model.NoteCollection.yml
│ │ │ │ │ ├── services.xml
│ │ │ │ │ └── validation.yml
│ │ │ │ ├── public
│ │ │ │ │ ├── css
│ │ │ │ │ │ └── demo.css
│ │ │ │ │ └── images
│ │ │ │ │ │ ├── blue-arrow.png
│ │ │ │ │ │ ├── field-background.gif
│ │ │ │ │ │ ├── logo.gif
│ │ │ │ │ │ ├── search.png
│ │ │ │ │ │ ├── welcome-configure.gif
│ │ │ │ │ │ ├── welcome-demo.gif
│ │ │ │ │ │ └── welcome-quick-tour.gif
│ │ │ │ ├── translations
│ │ │ │ │ ├── AppBundle.de.yml
│ │ │ │ │ ├── AppBundle.en.yml
│ │ │ │ │ └── AppBundle.es.yml
│ │ │ │ └── views
│ │ │ │ │ ├── Note
│ │ │ │ │ ├── editNote.html.twig
│ │ │ │ │ ├── editNotes.html.twig
│ │ │ │ │ ├── getNote.html.twig
│ │ │ │ │ ├── getNotes.html.twig
│ │ │ │ │ └── newNote.html.twig
│ │ │ │ │ └── layout.html.twig
│ │ │ │ ├── Tests
│ │ │ │ ├── Controller
│ │ │ │ │ ├── CourseControllerTest.php
│ │ │ │ │ └── NoteControllerTest.php
│ │ │ │ └── Model
│ │ │ │ │ ├── CourseTest.php
│ │ │ │ │ └── EventTest.php
│ │ │ │ ├── Twig
│ │ │ │ └── Extension
│ │ │ │ │ └── DemoExtension.php
│ │ │ │ └── Util
│ │ │ │ └── Cache.php
│ │ │ └── web
│ │ │ ├── .htaccess
│ │ │ ├── app.php
│ │ │ ├── app_dev.php
│ │ │ ├── apple-touch-icon.png
│ │ │ ├── config.php
│ │ │ ├── favicon.ico
│ │ │ └── robots.txt
│ └── solutions
│ │ └── codely_php-symfony_golden-master
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── Dockerfile
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── app
│ │ ├── .htaccess
│ │ ├── AppCache.php
│ │ ├── AppKernel.php
│ │ ├── Resources
│ │ │ └── views
│ │ │ │ └── base.html.twig
│ │ ├── SymfonyRequirements.php
│ │ ├── autoload.php
│ │ ├── bootstrap.php.cache
│ │ ├── check.php
│ │ ├── config
│ │ │ ├── config.yml
│ │ │ ├── config_dev.yml
│ │ │ ├── config_prod.yml
│ │ │ ├── config_test.yml
│ │ │ ├── parameters.yml.dist
│ │ │ ├── routing.yml
│ │ │ ├── routing_dev.yml
│ │ │ └── security.yml
│ │ ├── console
│ │ └── phpunit.xml.dist
│ │ ├── composer.json
│ │ ├── composer.lock
│ │ ├── docker-compose.yml
│ │ ├── src
│ │ ├── .htaccess
│ │ └── AppBundle
│ │ │ ├── AppBundle.php
│ │ │ ├── Application
│ │ │ └── VideoCreator.php
│ │ │ ├── Controller
│ │ │ ├── BaseController.php
│ │ │ ├── CourseController.php
│ │ │ ├── NoteController.php
│ │ │ └── VideoController.php
│ │ │ ├── DependencyInjection
│ │ │ └── AppExtension.php
│ │ │ ├── EventListener
│ │ │ └── ControllerListener.php
│ │ │ ├── Form
│ │ │ └── NoteType.php
│ │ │ ├── Model
│ │ │ ├── Course.php
│ │ │ ├── Event.php
│ │ │ ├── Note.php
│ │ │ └── NoteCollection.php
│ │ │ ├── NoteManager.php
│ │ │ ├── Repository
│ │ │ └── MySqlVideoRepository.php
│ │ │ ├── Resources
│ │ │ ├── config
│ │ │ │ ├── serializer
│ │ │ │ │ ├── Model.Event.yml
│ │ │ │ │ ├── Model.Note.yml
│ │ │ │ │ └── Model.NoteCollection.yml
│ │ │ │ ├── services.xml
│ │ │ │ └── validation.yml
│ │ │ ├── public
│ │ │ │ ├── css
│ │ │ │ │ └── demo.css
│ │ │ │ └── images
│ │ │ │ │ ├── blue-arrow.png
│ │ │ │ │ ├── field-background.gif
│ │ │ │ │ ├── logo.gif
│ │ │ │ │ ├── search.png
│ │ │ │ │ ├── welcome-configure.gif
│ │ │ │ │ ├── welcome-demo.gif
│ │ │ │ │ └── welcome-quick-tour.gif
│ │ │ ├── translations
│ │ │ │ ├── AppBundle.de.yml
│ │ │ │ ├── AppBundle.en.yml
│ │ │ │ └── AppBundle.es.yml
│ │ │ └── views
│ │ │ │ ├── Note
│ │ │ │ ├── editNote.html.twig
│ │ │ │ ├── editNotes.html.twig
│ │ │ │ ├── getNote.html.twig
│ │ │ │ ├── getNotes.html.twig
│ │ │ │ └── newNote.html.twig
│ │ │ │ └── layout.html.twig
│ │ │ ├── Tests
│ │ │ ├── Application
│ │ │ │ └── VideoCreatorTest.php
│ │ │ ├── Controller
│ │ │ │ ├── CourseControllerTest.php
│ │ │ │ ├── NoteControllerTest.php
│ │ │ │ └── VideoControllerTest.php
│ │ │ └── Model
│ │ │ │ ├── CourseTest.php
│ │ │ │ └── EventTest.php
│ │ │ ├── Twig
│ │ │ └── Extension
│ │ │ │ └── DemoExtension.php
│ │ │ └── Util
│ │ │ └── Cache.php
│ │ └── web
│ │ ├── .htaccess
│ │ ├── app.php
│ │ ├── app_dev.php
│ │ ├── apple-touch-icon.png
│ │ ├── config.php
│ │ ├── favicon.ico
│ │ └── robots.txt
├── product_pricing
│ ├── README.md
│ ├── base
│ │ └── typescript
│ │ │ ├── .eslintrc.js
│ │ │ ├── .gitignore
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── babel.config.json
│ │ │ ├── cypress.json
│ │ │ ├── cypress
│ │ │ ├── fixtures
│ │ │ │ └── example.json
│ │ │ ├── integration
│ │ │ │ └── home.spec.ts
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ ├── support
│ │ │ │ ├── commands.js
│ │ │ │ └── index.js
│ │ │ └── tsconfig.json
│ │ │ ├── index.html
│ │ │ ├── jest.config.js
│ │ │ ├── package-lock.json
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ ├── Product.ts
│ │ │ └── index.ts
│ │ │ ├── tests
│ │ │ ├── .eslintrc
│ │ │ └── Product.test.ts
│ │ │ ├── tsconfig.json
│ │ │ ├── webpack.common.js
│ │ │ ├── webpack.dev.js
│ │ │ └── webpack.prod.js
│ └── solutions
│ │ └── .gitkeep
├── tiered_pricing
│ ├── README.md
│ ├── base
│ │ ├── java
│ │ │ ├── .editorconfig
│ │ │ ├── .github
│ │ │ │ └── workflows
│ │ │ │ │ └── workflow.yml
│ │ │ ├── .gitignore
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── build.gradle
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── src
│ │ │ │ ├── main
│ │ │ │ │ ├── java
│ │ │ │ │ │ └── tv
│ │ │ │ │ │ │ └── codely
│ │ │ │ │ │ │ └── checkout
│ │ │ │ │ │ │ ├── TieredPricing.java
│ │ │ │ │ │ │ └── api
│ │ │ │ │ │ │ ├── CheckoutApplication.java
│ │ │ │ │ │ │ └── Controller
│ │ │ │ │ │ │ └── ExampleGetController.java
│ │ │ │ │ └── resources
│ │ │ │ │ │ └── log4j2.properties
│ │ │ │ └── test
│ │ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── checkout
│ │ │ │ │ │ ├── TieredPricingShould.java
│ │ │ │ │ │ └── api
│ │ │ │ │ │ ├── ApiTestCase.java
│ │ │ │ │ │ └── Controller
│ │ │ │ │ │ └── ExampleGetControllerShould.java
│ │ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── var
│ │ │ │ └── log
│ │ │ │ └── .gitkeep
│ │ └── rust
│ │ │ ├── .env.example
│ │ │ ├── .gitignore
│ │ │ ├── Cargo.lock
│ │ │ ├── Cargo.toml
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── docker-compose.yml
│ │ │ ├── docker
│ │ │ └── rust
│ │ │ │ └── Dockerfile
│ │ │ └── src
│ │ │ ├── health_check.rs
│ │ │ ├── main.rs
│ │ │ └── routes.rs
│ └── solutions
│ │ ├── adrianliz
│ │ └── java
│ │ │ ├── .editorconfig
│ │ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── workflow.yml
│ │ │ ├── .gitignore
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── build.gradle
│ │ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ │ ├── gradlew
│ │ │ ├── gradlew.bat
│ │ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── checkout
│ │ │ │ │ │ ├── InvalidSubscriptionTierPrice.java
│ │ │ │ │ │ ├── InvalidSubscriptionTierRange.java
│ │ │ │ │ │ ├── InvalidSubscriptionTiers.java
│ │ │ │ │ │ ├── SubscriptionTier.java
│ │ │ │ │ │ ├── SubscriptionTierNotFound.java
│ │ │ │ │ │ ├── SubscriptionTierPrice.java
│ │ │ │ │ │ ├── SubscriptionTierRange.java
│ │ │ │ │ │ ├── SubscriptionTiers.java
│ │ │ │ │ │ ├── TieredPricing.java
│ │ │ │ │ │ └── api
│ │ │ │ │ │ ├── CheckoutApplication.java
│ │ │ │ │ │ └── Controller
│ │ │ │ │ │ └── ExampleGetController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── checkout
│ │ │ │ │ ├── SubscriptionTierPriceShould.java
│ │ │ │ │ ├── SubscriptionTierRangeShould.java
│ │ │ │ │ ├── TieredPricingShould.java
│ │ │ │ │ ├── api
│ │ │ │ │ ├── ApiTestCase.java
│ │ │ │ │ └── Controller
│ │ │ │ │ │ └── ExampleGetControllerShould.java
│ │ │ │ │ └── mother
│ │ │ │ │ ├── DoubleMother.java
│ │ │ │ │ ├── IntegerMother.java
│ │ │ │ │ ├── MotherCreator.java
│ │ │ │ │ ├── SubscriptionTierMother.java
│ │ │ │ │ ├── SubscriptionTierPriceMother.java
│ │ │ │ │ └── SubscriptionTierRangeMother.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ │ ├── aortiz_typescript
│ │ ├── .eslintrc.js
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── ci.yml
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Codelyber.ts
│ │ │ ├── InvalidUnitException.ts
│ │ │ └── Subscription.ts
│ │ ├── tests
│ │ │ ├── .eslintrc
│ │ │ ├── Codelyber.test.ts
│ │ │ └── Subscription.test.ts
│ │ └── tsconfig.json
│ │ ├── codely_outside-in
│ │ ├── .editorconfig
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── workflow.yml
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── checkout
│ │ │ │ │ │ ├── CalculateSubscriptionsPrice.java
│ │ │ │ │ │ ├── TieredPricing.java
│ │ │ │ │ │ └── api
│ │ │ │ │ │ ├── CheckoutApplication.java
│ │ │ │ │ │ └── Controller
│ │ │ │ │ │ └── SubscriptionTotalGetController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── checkout
│ │ │ │ │ ├── TieredPricingShould.java
│ │ │ │ │ └── api
│ │ │ │ │ ├── ApiTestCase.java
│ │ │ │ │ └── Controller
│ │ │ │ │ └── SubscriptionTotalGetControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ │ ├── elwazy-python
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── elwazy_python
│ │ │ ├── __init__.py
│ │ │ └── license.py
│ │ ├── poetry.lock
│ │ ├── pyproject.toml
│ │ └── tests
│ │ │ ├── __init__.py
│ │ │ └── test_license_price_calculation.py
│ │ ├── isaac1024_baby-steps
│ │ ├── .env.example
│ │ ├── .gitignore
│ │ ├── Cargo.lock
│ │ ├── Cargo.toml
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── docker
│ │ │ └── rust
│ │ │ │ └── Dockerfile
│ │ └── src
│ │ │ ├── health_check.rs
│ │ │ ├── main.rs
│ │ │ ├── routes.rs
│ │ │ └── tiered_pricing.rs
│ │ ├── lurumad-java
│ │ ├── .editorconfig
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── workflow.yml
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── checkout
│ │ │ │ │ │ ├── Price.java
│ │ │ │ │ │ ├── Subscriptions.java
│ │ │ │ │ │ ├── TieredPricing.java
│ │ │ │ │ │ ├── VolumePricingList.java
│ │ │ │ │ │ └── api
│ │ │ │ │ │ ├── CheckoutApplication.java
│ │ │ │ │ │ └── Controller
│ │ │ │ │ │ └── ExampleGetController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── checkout
│ │ │ │ │ ├── PriceShould.java
│ │ │ │ │ ├── SubscriptionsShould.java
│ │ │ │ │ ├── TieredPricingShould.java
│ │ │ │ │ ├── TieredSubscriptionsExamples.java
│ │ │ │ │ └── api
│ │ │ │ │ ├── ApiTestCase.java
│ │ │ │ │ └── Controller
│ │ │ │ │ └── ExampleGetControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ │ ├── malakaton-php
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── docker-compose.yml
│ │ ├── docker
│ │ │ ├── nginx
│ │ │ │ ├── Dockerfile
│ │ │ │ └── conf
│ │ │ │ │ └── project.conf
│ │ │ ├── php-fpm
│ │ │ │ ├── Dockerfile
│ │ │ │ └── conf
│ │ │ │ │ ├── php-fpm.conf
│ │ │ │ │ └── php.ini
│ │ │ ├── test
│ │ │ └── up
│ │ └── src
│ │ │ ├── .env
│ │ │ ├── .env.test
│ │ │ ├── .gitignore
│ │ │ ├── behat.yml.dist
│ │ │ ├── bin
│ │ │ ├── bootstrap.php
│ │ │ ├── console
│ │ │ └── phpunit
│ │ │ ├── composer.json
│ │ │ ├── composer.lock
│ │ │ ├── config
│ │ │ ├── behat
│ │ │ │ └── bootstrap.php
│ │ │ ├── bundles.php
│ │ │ ├── packages
│ │ │ │ ├── cache.yaml
│ │ │ │ ├── framework.yaml
│ │ │ │ ├── messenger.yaml
│ │ │ │ ├── routing.yaml
│ │ │ │ ├── sensio_framework_extra.yaml
│ │ │ │ ├── translation.yaml
│ │ │ │ └── validator.yaml
│ │ │ ├── preload.php
│ │ │ ├── routes
│ │ │ │ ├── annotations.yaml
│ │ │ │ └── dev
│ │ │ │ │ └── framework.yaml
│ │ │ └── services
│ │ │ │ ├── services.yaml
│ │ │ │ └── services_test.yaml
│ │ │ ├── phpunit.xml.dist
│ │ │ ├── public
│ │ │ └── index.php
│ │ │ ├── src
│ │ │ ├── Checkout
│ │ │ │ ├── Application
│ │ │ │ │ └── Query
│ │ │ │ │ │ ├── CalculateTotalPriceHandler.php
│ │ │ │ │ │ └── CalculateTotalPriceQuery.php
│ │ │ │ ├── Domain
│ │ │ │ │ └── TieredPricing.php
│ │ │ │ └── Infrastructure
│ │ │ │ │ └── Http
│ │ │ │ │ └── Controller
│ │ │ │ │ └── GetTieredPricingController.php
│ │ │ ├── Kernel.php
│ │ │ └── Shared
│ │ │ │ ├── Application
│ │ │ │ └── Query
│ │ │ │ │ ├── QueryBusInterface.php
│ │ │ │ │ ├── QueryHandlerInterface.php
│ │ │ │ │ └── QueryInterface.php
│ │ │ │ ├── Domain
│ │ │ │ └── DomainException.php
│ │ │ │ └── Infrastructure
│ │ │ │ ├── Bus
│ │ │ │ ├── MessageBusExceptionTrait.php
│ │ │ │ └── Query
│ │ │ │ │ └── MessengerQueryBus.php
│ │ │ │ ├── Http
│ │ │ │ ├── Cli
│ │ │ │ │ └── Command
│ │ │ │ │ │ └── QueryCommand.php
│ │ │ │ ├── Controller
│ │ │ │ │ └── QueryController.php
│ │ │ │ └── Response
│ │ │ │ │ └── OpenApi.php
│ │ │ │ └── Symfony
│ │ │ │ ├── ApiResponseResource.php
│ │ │ │ └── Exception
│ │ │ │ ├── ApiExceptionListener.php
│ │ │ │ └── SymfonyException.php
│ │ │ ├── symfony.lock
│ │ │ └── tests
│ │ │ ├── Integration
│ │ │ └── Shared
│ │ │ │ └── Application
│ │ │ │ └── ApplicationTestCase.php
│ │ │ ├── Unit
│ │ │ ├── Checkout
│ │ │ │ └── Domain
│ │ │ │ │ └── TieredPricingTest.php
│ │ │ └── Shared
│ │ │ │ └── Infrastructure
│ │ │ │ └── PhpUnit
│ │ │ │ └── UnitTestCase.php
│ │ │ └── e2e
│ │ │ ├── Checkout
│ │ │ └── Infrastructure
│ │ │ │ └── Http
│ │ │ │ └── Controller
│ │ │ │ └── GetTieredPricingControllerTest.php
│ │ │ └── Shared
│ │ │ └── Infrastructure
│ │ │ └── Http
│ │ │ └── Controller
│ │ │ └── EntryPointTestCase.php
│ │ ├── mmoreno-typescript
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── babel.config.json
│ │ ├── cypress.json
│ │ ├── cypress
│ │ │ ├── fixtures
│ │ │ │ └── example.json
│ │ │ ├── integration
│ │ │ │ └── home.spec.ts
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ ├── support
│ │ │ │ ├── commands.js
│ │ │ │ └── index.js
│ │ │ └── tsconfig.json
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── InvalidLicenciasQuantity.ts
│ │ │ ├── LicenciaPrice.ts
│ │ │ ├── LicenciaQuantity.ts
│ │ │ ├── Licencias.ts
│ │ │ └── index.ts
│ │ ├── tests
│ │ │ ├── .eslintrc
│ │ │ ├── Licencias.test.ts
│ │ │ └── NumberRandomBetween.ts
│ │ ├── tsconfig.json
│ │ ├── webpack.common.js
│ │ ├── webpack.dev.js
│ │ └── webpack.prod.js
│ │ ├── mperezi
│ │ ├── .editorconfig
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── workflow.yml
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── checkout
│ │ │ │ │ │ ├── TieredPricing.java
│ │ │ │ │ │ └── api
│ │ │ │ │ │ ├── CheckoutApplication.java
│ │ │ │ │ │ └── Controller
│ │ │ │ │ │ └── ExampleGetController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── checkout
│ │ │ │ │ ├── TieredPricingShould.java
│ │ │ │ │ └── api
│ │ │ │ │ ├── ApiTestCase.java
│ │ │ │ │ └── Controller
│ │ │ │ │ └── ExampleGetControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ │ ├── oflorez
│ │ ├── .editorconfig
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── workflow.yml
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ ├── gradle-wrapper.jar
│ │ │ │ └── gradle-wrapper.properties
│ │ ├── gradlew
│ │ ├── gradlew.bat
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── java
│ │ │ │ │ └── tv
│ │ │ │ │ │ └── codely
│ │ │ │ │ │ └── checkout
│ │ │ │ │ │ ├── Tier.java
│ │ │ │ │ │ ├── TieredPricing.java
│ │ │ │ │ │ └── api
│ │ │ │ │ │ ├── CheckoutApplication.java
│ │ │ │ │ │ └── Controller
│ │ │ │ │ │ └── ExampleGetController.java
│ │ │ │ └── resources
│ │ │ │ │ └── log4j2.properties
│ │ │ └── test
│ │ │ │ ├── java
│ │ │ │ └── tv
│ │ │ │ │ └── codely
│ │ │ │ │ └── checkout
│ │ │ │ │ ├── TieredPricingShould.java
│ │ │ │ │ └── api
│ │ │ │ │ ├── ApiTestCase.java
│ │ │ │ │ └── Controller
│ │ │ │ │ └── ExampleGetControllerShould.java
│ │ │ │ └── resources
│ │ │ │ └── log4j2.properties
│ │ └── var
│ │ │ └── log
│ │ │ └── .gitkeep
│ │ └── xetxeberria-ts
│ │ ├── .eslintrc.js
│ │ ├── .github
│ │ └── workflows
│ │ │ ├── lint.yml
│ │ │ └── test.yml
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── babel.config.json
│ │ ├── cypress.json
│ │ ├── cypress
│ │ ├── fixtures
│ │ │ └── example.json
│ │ ├── integration
│ │ │ └── home.spec.ts
│ │ ├── plugins
│ │ │ └── index.js
│ │ ├── support
│ │ │ ├── commands.js
│ │ │ └── index.js
│ │ └── tsconfig.json
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── src
│ │ ├── index.ts
│ │ └── tieredPricing.ts
│ │ ├── tests
│ │ ├── .eslintrc
│ │ └── tieredPricing.test.ts
│ │ ├── tsconfig.json
│ │ ├── webpack.common.js
│ │ ├── webpack.dev.js
│ │ └── webpack.prod.js
└── user_signup
│ ├── README.md
│ ├── base
│ └── next-typescript
│ │ ├── .eslintrc.js
│ │ ├── .gitignore
│ │ ├── babel.config.js
│ │ ├── cypress.json
│ │ ├── jest.config.js
│ │ ├── next-env.d.ts
│ │ ├── package.json
│ │ ├── setupTests.ts
│ │ ├── src
│ │ ├── assets
│ │ │ └── index.css
│ │ ├── components
│ │ │ ├── Input.module.css
│ │ │ ├── Input.tsx
│ │ │ ├── Label.module.css
│ │ │ └── Label.tsx
│ │ └── pages
│ │ │ ├── _app.tsx
│ │ │ └── index.tsx
│ │ ├── tests
│ │ ├── pages
│ │ │ ├── index.spec.ts
│ │ │ ├── plugins
│ │ │ │ └── index.js
│ │ │ ├── support
│ │ │ │ ├── commands.js
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ └── unit
│ │ │ └── test.spec.tsx
│ │ ├── tsconfig.json
│ │ └── yarn.lock
│ └── solutions
│ └── codely_next-typescript-middle-out
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── babel.config.js
│ ├── cypress.json
│ ├── jest.config.js
│ ├── next-env.d.ts
│ ├── package.json
│ ├── setupTests.ts
│ ├── src
│ ├── assets
│ │ └── index.css
│ ├── components
│ │ ├── Input.module.css
│ │ ├── Input.tsx
│ │ ├── Label.module.css
│ │ ├── Label.tsx
│ │ ├── SignUpForm.tsx
│ │ └── useSignUpUser.ts
│ ├── pages
│ │ ├── _app.tsx
│ │ ├── api
│ │ │ └── signup.ts
│ │ └── index.tsx
│ └── services
│ │ └── signUpUser.ts
│ ├── tests
│ ├── pages
│ │ ├── index.spec.ts
│ │ ├── plugins
│ │ │ └── index.js
│ │ ├── support
│ │ │ ├── commands.js
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ └── unit
│ │ ├── SignUpForm.spec.tsx
│ │ └── test.spec.tsx
│ ├── tsconfig.json
│ └── yarn.lock
└── refactorings
├── composing-methods
├── extract-method
│ └── .gitkeep
├── extract-variable
│ └── .gitkeep
├── inline-method
│ └── .gitkeep
├── inline-temp
│ └── .gitkeep
├── remove-assignments-to-parameters
│ └── .gitkeep
├── replace-method-with-method-object
│ └── .gitkeep
├── replace-temp-with-query
│ └── .gitkeep
├── split-temporary-variable
│ └── .gitkeep
└── substitute-algorithm
│ └── .gitkeep
├── dealing-with-generalization
├── collapse-hierarchy
│ └── .gitkeep
├── extract-interface
│ └── .gitkeep
├── extract-subclass
│ └── .gitkeep
├── extract-superclass
│ └── .gitkeep
├── form-template-method
│ └── .gitkeep
├── pull-up-constructor-body
│ └── .gitkeep
├── pull-up-field
│ └── .gitkeep
├── pull-up-method
│ └── .gitkeep
├── push-down-field
│ └── .gitkeep
├── push-down-method
│ └── .gitkeep
├── replace-delegation-with-inheritance
│ └── .gitkeep
└── replace-inheritance-with-delegation
│ └── .gitkeep
├── moving-features-between-objects
├── extract-class
│ └── .gitkeep
├── hide-delegate
│ └── .gitkeep
├── inline-class
│ └── .gitkeep
├── introduce-foreign-method
│ └── .gitkeep
├── introduce-local-extension
│ └── .gitkeep
├── move-field
│ └── .gitkeep
├── move-method
│ └── .gitkeep
└── remove-middle-man
│ └── .gitkeep
├── organizing-data
├── change-bidirectional-association-to-unidirectional
│ └── .gitkeep
├── change-reference-to-value
│ └── .gitkeep
├── change-unidirectional-association-to-bidirectional
│ └── .gitkeep
├── change-value-to-reference
│ └── .gitkeep
├── duplicate-observed-data
│ └── .gitkeep
├── encapsulate-collection
│ └── .gitkeep
├── encapsulate-field
│ └── .gitkeep
├── replace-array-with-object
│ └── .gitkeep
├── replace-data-value-with-object
│ └── .gitkeep
├── replace-magic-number-with-symbolic-constant
│ └── .gitkeep
├── replace-subclass-with-fields
│ └── .gitkeep
├── replace-type-code-with-class
│ └── .gitkeep
├── replace-type-code-with-state-or-strategy
│ └── .gitkeep
├── replace-type-code-with-subclasses
│ └── .gitkeep
└── self-encapsulate-field
│ └── .gitkeep
├── simplifying-conditional-expressions
├── consolidate-conditional-expression
│ ├── .gitkeep
│ └── java-student_grades
│ │ ├── after
│ │ └── before
├── consolidate-duplicate-conditional-fragments
│ └── .gitkeep
├── decompose-conditional
│ └── .gitkeep
├── introduce-assertion
│ └── .gitkeep
├── introduce-null-object
│ └── .gitkeep
├── remove-control-flag
│ └── .gitkeep
├── replace-conditional-with-polymorphism
│ └── .gitkeep
└── replace-nested-conditional-with-guard-clauses
│ └── .gitkeep
└── simplifying-method-calls
├── add-parameter
└── .gitkeep
├── hide-method
└── .gitkeep
├── introduce-parameter-object
└── .gitkeep
├── parameterize-method
└── .gitkeep
├── preserve-whole-object
└── .gitkeep
├── remove-parameter
└── .gitkeep
├── remove-setting-method
└── .gitkeep
├── rename-method
└── .gitkeep
├── replace-constructor-with-factory-method
└── .gitkeep
├── replace-error-code-with-exception
└── .gitkeep
├── replace-exception-with-test
└── .gitkeep
├── replace-parameter-with-explicit-methods
└── .gitkeep
├── replace-parameter-with-method-call
└── .gitkeep
└── separate-query-from-modifier
└── .gitkeep
/code-smells/bloaters/data-clumps/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/bloaters/data-clumps/.gitkeep
--------------------------------------------------------------------------------
/code-smells/bloaters/large-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/bloaters/large-class/.gitkeep
--------------------------------------------------------------------------------
/code-smells/bloaters/long-method/java-student_grades-01_base_example:
--------------------------------------------------------------------------------
1 | ../../../examples/java/java-student_grades-01_base_example
--------------------------------------------------------------------------------
/code-smells/bloaters/long-parameter-list/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/bloaters/long-parameter-list/.gitkeep
--------------------------------------------------------------------------------
/code-smells/bloaters/primitive-obsession/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/bloaters/primitive-obsession/.gitkeep
--------------------------------------------------------------------------------
/code-smells/change-preventers/divergent-change/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/change-preventers/divergent-change/.gitkeep
--------------------------------------------------------------------------------
/code-smells/change-preventers/parallel-inheritance-hierarchies/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/change-preventers/parallel-inheritance-hierarchies/.gitkeep
--------------------------------------------------------------------------------
/code-smells/change-preventers/shotgun-surgery/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/change-preventers/shotgun-surgery/.gitkeep
--------------------------------------------------------------------------------
/code-smells/couplers/feature-envy/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/couplers/feature-envy/.gitkeep
--------------------------------------------------------------------------------
/code-smells/couplers/inappropriate-intimacy/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/couplers/inappropriate-intimacy/.gitkeep
--------------------------------------------------------------------------------
/code-smells/couplers/incomplete-library-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/couplers/incomplete-library-class/.gitkeep
--------------------------------------------------------------------------------
/code-smells/couplers/message-chains/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/couplers/message-chains/.gitkeep
--------------------------------------------------------------------------------
/code-smells/couplers/middle-man/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/couplers/middle-man/.gitkeep
--------------------------------------------------------------------------------
/code-smells/dispensables/comments/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/dispensables/comments/.gitkeep
--------------------------------------------------------------------------------
/code-smells/dispensables/data-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/dispensables/data-class/.gitkeep
--------------------------------------------------------------------------------
/code-smells/dispensables/dead-code/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/dispensables/dead-code/.gitkeep
--------------------------------------------------------------------------------
/code-smells/dispensables/duplicate-code/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/dispensables/duplicate-code/.gitkeep
--------------------------------------------------------------------------------
/code-smells/dispensables/lazy-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/dispensables/lazy-class/.gitkeep
--------------------------------------------------------------------------------
/code-smells/dispensables/speculative-generality/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/dispensables/speculative-generality/.gitkeep
--------------------------------------------------------------------------------
/code-smells/object-orientation-abusers/alternative-classes-with-different-interfaces/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/object-orientation-abusers/alternative-classes-with-different-interfaces/.gitkeep
--------------------------------------------------------------------------------
/code-smells/object-orientation-abusers/refused-bequest/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/object-orientation-abusers/refused-bequest/.gitkeep
--------------------------------------------------------------------------------
/code-smells/object-orientation-abusers/switch-statements/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/object-orientation-abusers/switch-statements/.gitkeep
--------------------------------------------------------------------------------
/code-smells/object-orientation-abusers/temporary-field/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/code-smells/object-orientation-abusers/temporary-field/.gitkeep
--------------------------------------------------------------------------------
/design-patterns/creational/abstract-factory/kotlin-payment_gateways-01_base:
--------------------------------------------------------------------------------
1 | ../../../examples/kotlin/kotlin-payment_gateways-01_base/
--------------------------------------------------------------------------------
/design-patterns/creational/factory-method/ts-stock_counter-03_add_factory_method:
--------------------------------------------------------------------------------
1 | ../../../examples/ts/ts-stock_counter-03_add_factory_method
--------------------------------------------------------------------------------
/design-patterns/creational/lazy-initialization/kotlin-lazy_browser-01_base:
--------------------------------------------------------------------------------
1 | ../../../examples/kotlin/kotlin-lazy_browser-01_base
--------------------------------------------------------------------------------
/design-patterns/creational/object-pool/kotlin-browsers_pool-01_base:
--------------------------------------------------------------------------------
1 | ../../../examples/kotlin/kotlin-browsers_pool-01_base
--------------------------------------------------------------------------------
/design-patterns/creational/parameterized-factory-method/ts-stock_counter_dynamic-02_extract_parameterized_factory_method:
--------------------------------------------------------------------------------
1 | ../../../examples/ts/ts-stock_counter_dynamic-02_extract_parameterized_factory_method
--------------------------------------------------------------------------------
/design-patterns/creational/prototype/php-repeat_purchase-01_base:
--------------------------------------------------------------------------------
1 | ../../../examples/php/php-repeat_purchase-01_base
--------------------------------------------------------------------------------
/design-patterns/creational/prototype/ts-monsters_game-01_base:
--------------------------------------------------------------------------------
1 | ../../../examples/ts/ts-monsters_game-01_base
--------------------------------------------------------------------------------
/design-patterns/creational/singleton/php-feature_flags-01_base:
--------------------------------------------------------------------------------
1 | ../../../examples/php/php-feature_flags-01_base
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/Booking.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net5.0
5 | CodelyTv.Booking
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/BookingId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class BookingId
4 | {
5 | private readonly string value;
6 |
7 | public BookingId(string value) => this.value = value;
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/BookingStatus.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingStatus { NOT_STARTED, ACTIVE, FINISHED }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/BookingType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingType { VACATION, WORK }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/CustomerId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class CustomerId
4 | {
5 | private readonly string value;
6 |
7 | public CustomerId(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/CustomerName.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class CustomerName
4 | {
5 | private readonly string value;
6 |
7 | public CustomerName(string value) => this.value = value;
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/DiscountType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum DiscountType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/DiscountValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class DiscountValue
4 | {
5 | private readonly int value;
6 |
7 | public DiscountValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/EmailAddress.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class EmailAddress
4 | {
5 | private readonly string value;
6 |
7 | public EmailAddress(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/TaxType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum TaxType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-01_base/src/Booking/TaxValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class TaxValue
4 | {
5 | private readonly int value;
6 |
7 | public TaxValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/Booking.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net5.0
5 | CodelyTv.Booking
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/BookingId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class BookingId
4 | {
5 | private readonly string value;
6 |
7 | public BookingId(string value) => this.value = value;
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/BookingStatus.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingStatus { NOT_STARTED, ACTIVE, FINISHED }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/BookingType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingType { VACATION, WORK }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/CustomerId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class CustomerId
4 | {
5 | private readonly string value;
6 |
7 | public CustomerId(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/DiscountType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum DiscountType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/DiscountValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class DiscountValue
4 | {
5 | private readonly int value;
6 |
7 | public DiscountValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/TaxType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum TaxType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-02_introduce_parameter_object/src/Booking/TaxValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class TaxValue
4 | {
5 | private readonly int value;
6 |
7 | public TaxValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/Booking.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net5.0
5 | CodelyTv.Booking
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/BookingId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class BookingId
4 | {
5 | private readonly string value;
6 |
7 | public BookingId(string value) => this.value = value;
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/BookingStatus.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingStatus { NOT_STARTED, ACTIVE, FINISHED }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/BookingType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingType { VACATION, WORK }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/CustomerId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class CustomerId
4 | {
5 | private readonly string value;
6 |
7 | public CustomerId(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/DiscountType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum DiscountType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/DiscountValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class DiscountValue
4 | {
5 | private readonly int value;
6 |
7 | public DiscountValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/EmailAddress.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class EmailAddress
4 | {
5 | private readonly string value;
6 |
7 | public EmailAddress(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/TaxType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum TaxType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-03_preserve_whole_object/src/Booking/TaxValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class TaxValue
4 | {
5 | private readonly int value;
6 |
7 | public TaxValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/Booking.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net5.0
5 | CodelyTv.Booking
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/BookingId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class BookingId
4 | {
5 | private readonly string value;
6 |
7 | public BookingId(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/BookingStatus.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingStatus { NOT_STARTED, ACTIVE, FINISHED }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/BookingType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum BookingType { VACATION, WORK }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/CustomerId.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class CustomerId
4 | {
5 | private readonly string value;
6 |
7 | public CustomerId(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/CustomerName.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class CustomerName
4 | {
5 | private readonly string value;
6 |
7 | public CustomerName(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/DiscountType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum DiscountType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/DiscountValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class DiscountValue
4 | {
5 | private readonly int value;
6 |
7 | public DiscountValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/EmailAddress.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class EmailAddress
4 | {
5 | private readonly string value;
6 |
7 | public EmailAddress(string value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/TaxType.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public enum TaxType { NONE }
4 | }
5 |
--------------------------------------------------------------------------------
/examples/csharp/csharp-booking-04_tell_dont_ask/src/Booking/TaxValue.cs:
--------------------------------------------------------------------------------
1 | namespace CodelyTv.Booking
2 | {
3 | public sealed class TaxValue
4 | {
5 | private readonly int value;
6 |
7 | public TaxValue(int value) => this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-01_base/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/BookingId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class BookingId {
4 | private String value;
5 |
6 | public BookingId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/BookingStatus.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingStatus {
4 | NOT_STARTED,
5 | ACTIVE,
6 | FINISHED
7 | }
8 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/BookingType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingType {
4 | VACATION,
5 | WORK
6 | }
7 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/CustomerId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerId {
4 | private String value;
5 |
6 | public CustomerId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/CustomerName.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerName {
4 | private String value;
5 |
6 | public CustomerName(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/DiscountType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum DiscountType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/DiscountValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class DiscountValue {
4 | private int value;
5 |
6 | public DiscountValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/EmailAddress.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class EmailAddress {
4 | private String value;
5 |
6 | public EmailAddress(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/TaxType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum TaxType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/src/main/java/tv/codely/booking/TaxValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class TaxValue {
4 | private int value;
5 |
6 | public TaxValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-01_base/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-01_base/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-02_introduce_parameter_object/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/BookingId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class BookingId {
4 | private String value;
5 |
6 | public BookingId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/BookingStatus.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingStatus {
4 | NOT_STARTED,
5 | ACTIVE,
6 | FINISHED
7 | }
8 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/BookingType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingType {
4 | VACATION,
5 | WORK
6 | }
7 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/CustomerId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerId {
4 | private String value;
5 |
6 | public CustomerId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/CustomerName.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerName {
4 | private String value;
5 |
6 | public CustomerName(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/DiscountType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum DiscountType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/DiscountValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class DiscountValue {
4 | private int value;
5 |
6 | public DiscountValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/EmailAddress.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class EmailAddress {
4 | private String value;
5 |
6 | public EmailAddress(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/TaxType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum TaxType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/src/main/java/tv/codely/booking/TaxValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class TaxValue {
4 | private int value;
5 |
6 | public TaxValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-02_introduce_parameter_object/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-02_introduce_parameter_object/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-03_preserve_whole_object/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/BookingId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class BookingId {
4 | private String value;
5 |
6 | public BookingId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/BookingStatus.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingStatus {
4 | NOT_STARTED,
5 | ACTIVE,
6 | FINISHED
7 | }
8 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/BookingType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingType {
4 | VACATION,
5 | WORK
6 | }
7 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/CustomerId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerId {
4 | private String value;
5 |
6 | public CustomerId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/CustomerName.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerName {
4 | private String value;
5 |
6 | public CustomerName(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/DiscountType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum DiscountType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/DiscountValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class DiscountValue {
4 | private int value;
5 |
6 | public DiscountValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/EmailAddress.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class EmailAddress {
4 | private String value;
5 |
6 | public EmailAddress(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/TaxType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum TaxType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/src/main/java/tv/codely/booking/TaxValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class TaxValue {
4 | private int value;
5 |
6 | public TaxValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-03_preserve_whole_object/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-03_preserve_whole_object/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-04_tell_dont_ask/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/BookingId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class BookingId {
4 | private String value;
5 |
6 | public BookingId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/BookingStatus.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingStatus {
4 | NOT_STARTED,
5 | ACTIVE,
6 | FINISHED
7 | }
8 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/BookingType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum BookingType {
4 | VACATION,
5 | WORK
6 | }
7 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/CustomerId.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerId {
4 | private String value;
5 |
6 | public CustomerId(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/CustomerName.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class CustomerName {
4 | private String value;
5 |
6 | public CustomerName(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/DiscountType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum DiscountType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/DiscountValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class DiscountValue {
4 | private int value;
5 |
6 | public DiscountValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/EmailAddress.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class EmailAddress {
4 | private String value;
5 |
6 | public EmailAddress(String value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/TaxType.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public enum TaxType {
4 | NONE
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/src/main/java/tv/codely/booking/TaxValue.java:
--------------------------------------------------------------------------------
1 | package tv.codely.booking;
2 |
3 | public final class TaxValue {
4 | private int value;
5 |
6 | public TaxValue(int value) {
7 | this.value = value;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/java/java-booking-04_tell_dont_ask/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-booking-04_tell_dont_ask/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-01_base/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-01_base/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-01_base/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-chat_rollout-01_base/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-01_base/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-01_base/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-chat_rollout-01_base/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-02_parameter/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-02_parameter/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-02_parameter/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-02_parameter/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-chat_rollout-02_parameter/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-02_parameter/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-02_parameter/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-chat_rollout-02_parameter/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-chat_rollout-03_method_call/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/src/main/java/tv/codely/chat_rollout/ChatRolloutPercentageRepository.java:
--------------------------------------------------------------------------------
1 | package tv.codely.chat_rollout;
2 |
3 | public interface ChatRolloutPercentageRepository {
4 | int percentage();
5 | }
6 |
--------------------------------------------------------------------------------
/examples/java/java-chat_rollout-03_method_call/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-chat_rollout-03_method_call/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-student_grades-01_base/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-01_base/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-01_base/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-01_base/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-student_grades-01_base/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-01_base/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-01_base/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-student_grades-02_extract_method/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-02_extract_method/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-02_extract_method/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-02_extract_method/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-02_extract_method/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-student_grades-02_extract_method/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-02_extract_method/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-02_extract_method/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-03_if_guard_clause/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/src/main/java/tv/codely/student_grades/GradesWeightBelowMinException.java:
--------------------------------------------------------------------------------
1 | package tv.codely.student_grades;
2 |
3 | public final class GradesWeightBelowMinException extends IllegalArgumentException{
4 | }
5 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/src/main/java/tv/codely/student_grades/GradesWeightOverMaxException.java:
--------------------------------------------------------------------------------
1 | package tv.codely.student_grades;
2 |
3 | public final class GradesWeightOverMaxException extends IllegalArgumentException{
4 | }
5 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-03_if_guard_clause/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-03_if_guard_clause/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-04_replace_control_flag/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/src/main/java/tv/codely/student_grades/GradesWeightBelowMinException.java:
--------------------------------------------------------------------------------
1 | package tv.codely.student_grades;
2 |
3 | public final class GradesWeightBelowMinException extends IllegalArgumentException{
4 | }
5 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/src/main/java/tv/codely/student_grades/GradesWeightOverMaxException.java:
--------------------------------------------------------------------------------
1 | package tv.codely.student_grades;
2 |
3 | public final class GradesWeightOverMaxException extends IllegalArgumentException{
4 | }
5 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-04_replace_control_flag/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-04_replace_control_flag/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/Makefile:
--------------------------------------------------------------------------------
1 | .PONY: all build test
2 |
3 | all: build
4 |
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | test:
9 | @./gradlew check --warning-mode all
10 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-05_simplify_conditionals/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/src/main/java/tv/codely/student_grades/GradesWeightBelowMinException.java:
--------------------------------------------------------------------------------
1 | package tv.codely.student_grades;
2 |
3 | public final class GradesWeightBelowMinException extends IllegalArgumentException{
4 | }
5 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/src/main/java/tv/codely/student_grades/GradesWeightOverMaxException.java:
--------------------------------------------------------------------------------
1 | package tv.codely.student_grades;
2 |
3 | public final class GradesWeightOverMaxException extends IllegalArgumentException{
4 | }
5 |
--------------------------------------------------------------------------------
/examples/java/java-student_grades-05_simplify_conditionals/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/java/java-student_grades-05_simplify_conditionals/var/log/.gitkeep
--------------------------------------------------------------------------------
/examples/js/js-bonus-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-bonus-01_base/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-bonus-02_explicit_method/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-bonus-02_explicit_method/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-bonus-03_extract_class/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-bonus-03_extract_class/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-bonus-03_extract_class/src/NormalUserDailyBonusPointsCalculator.js:
--------------------------------------------------------------------------------
1 | export class NormalUserDailyBonusPointsCalculator {
2 | POINTS_PER_DAY = 10;
3 |
4 | calculate(consecutiveDays) {
5 | return consecutiveDays * this.POINTS_PER_DAY;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-01_base/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-01_base/tests/UserSearcher.test.js:
--------------------------------------------------------------------------------
1 | describe('We can only do acceptance tests here, not unit…', () => {
2 | });
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-02_repository/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-02_repository/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-02_repository/src/UsersSearcher.js:
--------------------------------------------------------------------------------
1 | export class UsersSearcher {
2 | constructor(repository) {
3 | this.repository = repository;
4 | }
5 |
6 | searchAll() {
7 | return this.repository.searchAll();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-02_repository/tests/FakeUserRepository.js:
--------------------------------------------------------------------------------
1 | export class FakeUserRepository {
2 | constructor(users) {
3 | this.users = users;
4 | }
5 |
6 | searchAll() {
7 | return this.users;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-03_container/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-03_container/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-03_container/src/UsersSearcher.js:
--------------------------------------------------------------------------------
1 | export class UsersSearcher {
2 | constructor(repository) {
3 | this.repository = repository;
4 | }
5 |
6 | searchAll() {
7 | return this.repository.searchAll();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-03_container/tests/FakeUserRepository.js:
--------------------------------------------------------------------------------
1 | export class FakeUserRepository {
2 | constructor(users) {
3 | this.users = users;
4 | }
5 |
6 | searchAll() {
7 | return this.users;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-04_explicit_arguments/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-04_explicit_arguments/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-04_explicit_arguments/src/UsersSearcher.js:
--------------------------------------------------------------------------------
1 | export class UsersSearcher {
2 | constructor(repository) {
3 | this.repository = repository;
4 | }
5 |
6 | searchAll() {
7 | return this.repository.searchAll();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-04_explicit_arguments/tests/FakeUserRepository.js:
--------------------------------------------------------------------------------
1 | export class FakeUserRepository {
2 | constructor(users) {
3 | this.users = users;
4 | }
5 |
6 | searchAll() {
7 | return this.users;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-05_parameter_object/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-05_parameter_object/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-05_parameter_object/src/MySqlConfig.js:
--------------------------------------------------------------------------------
1 | export class MySqlConfig {
2 | host = "localhost";
3 | user = "root";
4 | password = "";
5 | database = "super_project";
6 | port = 3306;
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-05_parameter_object/src/UsersSearcher.js:
--------------------------------------------------------------------------------
1 | export class UsersSearcher {
2 | constructor(repository) {
3 | this.repository = repository;
4 | }
5 |
6 | searchAll() {
7 | return this.repository.searchAll();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-05_parameter_object/tests/FakeUserRepository.js:
--------------------------------------------------------------------------------
1 | export class FakeUserRepository {
2 | constructor(users) {
3 | this.users = users;
4 | }
5 |
6 | searchAll() {
7 | return this.users;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-06_db_connection_class/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-06_db_connection_class/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-06_db_connection_class/src/MySqlConfig.js:
--------------------------------------------------------------------------------
1 | export class MySqlConfig {
2 | host = "localhost";
3 | user = "root";
4 | password = "";
5 | database = "super_project";
6 | port = 3306;
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-06_db_connection_class/src/MySqlUserRepository.js:
--------------------------------------------------------------------------------
1 | export class MySqlUserRepository {
2 | constructor(connection) {
3 | this.connection = connection;
4 | }
5 |
6 | searchAll() {
7 | return this.connection.query('SELECT * FROM users');
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-06_db_connection_class/src/UsersSearcher.js:
--------------------------------------------------------------------------------
1 | export class UsersSearcher {
2 | constructor(repository) {
3 | this.repository = repository;
4 | }
5 |
6 | searchAll() {
7 | return this.repository.searchAll();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-data_repository-06_db_connection_class/tests/FakeUserRepository.js:
--------------------------------------------------------------------------------
1 | export class FakeUserRepository {
2 | constructor(users) {
3 | this.users = users;
4 | }
5 |
6 | searchAll() {
7 | return this.users;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-01_base/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-01_base/src/Course.js:
--------------------------------------------------------------------------------
1 | export class Course {
2 | constructor(id, name, duration) {
3 | this.id = id;
4 | this.name = name;
5 | this.duration = duration;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-02_arguments/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-02_arguments/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-02_arguments/src/Course.js:
--------------------------------------------------------------------------------
1 | export class Course {
2 | constructor(id, name, duration) {
3 | this.id = id;
4 | this.name = name;
5 | this.duration = duration;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-03_introduce_parameter_object/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-03_introduce_parameter_object/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-03_introduce_parameter_object/src/Course.js:
--------------------------------------------------------------------------------
1 | export class Course {
2 | constructor(id, name, duration) {
3 | this.id = id;
4 | this.name = name;
5 | this.duration = duration;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-http_api-03_introduce_parameter_object/src/CreateCourseRequest.js:
--------------------------------------------------------------------------------
1 | export class CreateCourseRequest {
2 | constructor(id, name, duration) {
3 | this.id = id;
4 | this.name = name;
5 | this.duration = duration;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/js/js-student_grades-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-student_grades-01_base/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-student_grades-02_extract_subclass/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-student_grades-02_extract_subclass/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/js/js-student_grades-03_extract_class/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .tmp/
3 |
--------------------------------------------------------------------------------
/examples/js/js-student_grades-03_extract_class/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"],
3 | "plugins": ["@babel/plugin-proposal-class-properties"]
4 | }
5 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-browsers_pool-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | build/
3 | !gradle/wrapper/gradle-wrapper.jar
4 | !**/src/main/**/build/
5 | !**/src/test/**/build/
6 |
7 |
8 | ### IntelliJ IDEA ###
9 | .idea
10 | *.iws
11 | *.iml
12 | *.ipr
13 | out/
14 | !**/src/main/**/out/
15 | !**/src/test/**/out/
16 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-browsers_pool-01_base/geckodriver:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/kotlin/kotlin-browsers_pool-01_base/geckodriver
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-browsers_pool-01_base/gradle.properties:
--------------------------------------------------------------------------------
1 | kotlin.code.style=official
2 | org.gradle.parallel=true
3 | org.gradle.caching=true
4 | org.gradle.daemon=true
5 | org.gradle.jvmargs=-Xmx1536M
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-browsers_pool-01_base/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/kotlin/kotlin-browsers_pool-01_base/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-browsers_pool-01_base/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-browsers_pool-01_base/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "kotlin-basic-skeleton"
2 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | build/
3 | !gradle/wrapper/gradle-wrapper.jar
4 | !**/src/main/**/build/
5 | !**/src/test/**/build/
6 |
7 |
8 | ### IntelliJ IDEA ###
9 | .idea
10 | *.iws
11 | *.iml
12 | *.ipr
13 | out/
14 | !**/src/main/**/out/
15 | !**/src/test/**/out/
16 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/geckodriver:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/kotlin/kotlin-lazy_browser-01_base/geckodriver
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/gradle.properties:
--------------------------------------------------------------------------------
1 | kotlin.code.style=official
2 | org.gradle.parallel=true
3 | org.gradle.caching=true
4 | org.gradle.daemon=true
5 | org.gradle.jvmargs=-Xmx1536M
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/kotlin/kotlin-lazy_browser-01_base/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "kotlin-basic-skeleton"
2 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/src/main/kotlin/com/codely/lazy_initialization/01-WithoutLazyInitialization.kt:
--------------------------------------------------------------------------------
1 | package com.codely.lazy_initialization
2 |
3 | fun main(args: Array) {
4 | val browser = FirefoxBrowser()
5 | browser.close()
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/src/main/kotlin/com/codely/lazy_initialization/02-WithLazyInitialization.kt:
--------------------------------------------------------------------------------
1 | package com.codely.lazy_initialization
2 |
3 | fun main(args: Array) {
4 | val browser = LazyFirefoxBrowser()
5 | browser.get("https://http.cat/200")
6 | browser.close()
7 | }
8 |
9 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-lazy_browser-01_base/src/main/kotlin/com/codely/lazy_initialization/Browser.kt:
--------------------------------------------------------------------------------
1 | package com.codely.lazy_initialization
2 |
3 | interface Browser {
4 | fun get(url: String)
5 | fun close()
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | build/
3 | !gradle/wrapper/gradle-wrapper.jar
4 | !**/src/main/**/build/
5 | !**/src/test/**/build/
6 |
7 |
8 | ### IntelliJ IDEA ###
9 | .idea
10 | *.iws
11 | *.iml
12 | *.ipr
13 | out/
14 | !**/src/main/**/out/
15 | !**/src/test/**/out/
16 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/gradle.properties:
--------------------------------------------------------------------------------
1 | kotlin.code.style=official
2 | org.gradle.parallel=true
3 | org.gradle.caching=true
4 | org.gradle.daemon=true
5 | org.gradle.jvmargs=-Xmx1536M
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/kotlin/kotlin-payment_gateways-01_base/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "kotlin-basic-skeleton"
2 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/Card.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Card {
4 | val id: String
5 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/CardData.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | data class CardData(
4 | val name: String,
5 | val number: String,
6 | )
7 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/Customer.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Customer {
4 | val id: String
5 | fun assignCard(card: Card)
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/CustomerData.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | data class CustomerData(val customerId: String, val customerName: String)
4 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/Payment.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Payment {
4 | val id: String
5 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/PaymentRequest.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | data class PaymentRequest(
4 | val amount: Number,
5 | val customer: CustomerData,
6 | val card: CardData
7 | )
8 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/adyen/CardAdyen.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.adyen
2 |
3 | import com.codely.payment.Card
4 |
5 | data class CardAdyen(override val id: String) : Card
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/adyen/PaymentAdyen.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.adyen
2 |
3 | import com.codely.payment.Payment
4 |
5 | class PaymentAdyen(override val id: String) : Payment {
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/ogone/CardOgone.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.ogone
2 |
3 | import com.codely.payment.Card
4 |
5 | data class CardOgone(override val id: String) : Card
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-01_base/src/main/kotlin/com/codely/payment/ogone/PaymentOgone.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.ogone
2 |
3 | import com.codely.payment.Payment
4 |
5 | class PaymentOgone(override val id: String) : Payment {
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/gradle.properties:
--------------------------------------------------------------------------------
1 | kotlin.code.style=official
2 | org.gradle.parallel=true
3 | org.gradle.caching=true
4 | org.gradle.daemon=true
5 | org.gradle.jvmargs=-Xmx1536M
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "kotlin-basic-skeleton"
2 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/Card.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Card {
4 | val id: String
5 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/CardData.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | data class CardData(
4 | val name: String,
5 | val number: String,
6 | )
7 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/Customer.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Customer {
4 | val id: String
5 | fun assignCard(card: Card)
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/CustomerData.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | data class CustomerData(val customerId: String, val customerName: String)
4 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/Order.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Order {
4 | val id: String
5 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/Payment.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | interface Payment {
4 | val id: String
5 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/PaymentRequest.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment
2 |
3 | data class PaymentRequest(
4 | val amount: Number,
5 | val customer: CustomerData,
6 | val card: CardData
7 | )
8 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/adyen/CardAdyen.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.adyen
2 |
3 | import com.codely.payment.Card
4 |
5 | data class CardAdyen(override val id: String) : Card
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/adyen/PaymentAdyen.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.adyen
2 |
3 | import com.codely.payment.Payment
4 |
5 | class PaymentAdyen(override val id: String) : Payment {
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/ogone/CardOgone.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.ogone
2 |
3 | import com.codely.payment.Card
4 |
5 | data class CardOgone(override val id: String) : Card
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/ogone/PaymentOgone.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.ogone
2 |
3 | import com.codely.payment.Payment
4 |
5 | class PaymentOgone(override val id: String) : Payment {
6 | }
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/stripe/CardStripe.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.stripe
2 |
3 | import com.codely.payment.Card
4 |
5 | data class CardStripe(override val id: String) : Card
6 |
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/stripe/OrderStripe.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.stripe
2 |
3 | import com.codely.payment.Order
4 |
5 | data class OrderStripe(override val id: String) : Order
--------------------------------------------------------------------------------
/examples/kotlin/kotlin-payment_gateways-02_new-payment-gateway/src/main/kotlin/com/codely/payment/stripe/PaymentStripe.kt:
--------------------------------------------------------------------------------
1 | package com.codely.payment.stripe
2 |
3 | import com.codely.payment.Payment
4 |
5 | class PaymentStripe(override val id: String) : Payment {
6 | }
--------------------------------------------------------------------------------
/examples/php/php-divergent_change-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | vendor/
2 |
--------------------------------------------------------------------------------
/examples/php/php-divergent_change-01_base/.scrutinizer.yml:
--------------------------------------------------------------------------------
1 | build:
2 | environment:
3 | php:
4 | version: '7.2'
5 |
--------------------------------------------------------------------------------
/examples/php/php-divergent_change-01_base/.semver:
--------------------------------------------------------------------------------
1 | ---
2 | :major: 1
3 | :minor: 2
4 | :patch: 1
5 | :special: ''
6 |
--------------------------------------------------------------------------------
/examples/php/php-divergent_change-01_base/src/Platform.php:
--------------------------------------------------------------------------------
1 | Message for all subscribers
2 |
3 | get(\CodelyTv\Flags::NEW_SUBSCRIPTION_PAGE_NAME)): ?>
4 | Additional message for subscribers with active flag
5 |
6 |
--------------------------------------------------------------------------------
/examples/php/php-feature_flags-01_base/tests/SubscribeTest.php:
--------------------------------------------------------------------------------
1 | {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /hello world/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/tests/*.(spec|test).ts"],
3 | transform: {
4 | "\\.[jt]sx?$": "ts-jest",
5 | },
6 | moduleNameMapper: {
7 | "\\.(css|less)$": "identity-obj-proxy",
8 | },
9 | testEnvironment: "jsdom",
10 | };
11 |
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/src/assets/css/game.css:
--------------------------------------------------------------------------------
1 | .enemy {
2 | cursor: pointer;
3 | user-select: none;
4 | }
5 |
6 | .level-1 {
7 | font-size: 14px;
8 | }
9 |
10 |
11 | .level-2 {
12 | font-size: 18px;
13 | }
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/src/assets/images/logo-codelytv-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/examples/ts/ts-monsters_game-01_base/src/assets/images/logo-codelytv-light.png
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/src/framework/Enemy.ts:
--------------------------------------------------------------------------------
1 | export interface Enemy {
2 | readonly level: number;
3 | receiveDamage: () => void;
4 | died: () => boolean;
5 | text: () => string;
6 | }
7 |
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/src/framework/cloneEnemy.ts:
--------------------------------------------------------------------------------
1 | import { Enemy } from "./Enemy";
2 |
3 | export function cloneEnemy(object: T): T {
4 | const clone = { ...object } as T;
5 | Object.setPrototypeOf(clone, Object.getPrototypeOf(object));
6 | return clone;
7 | }
8 |
--------------------------------------------------------------------------------
/examples/ts/ts-monsters_game-01_base/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-01_base/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-01_base/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-01_base/src/Feed.ts:
--------------------------------------------------------------------------------
1 | export class Feed {
2 | constructor(
3 | readonly content: string
4 | ) {
5 | }
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-01_base/src/Flower.ts:
--------------------------------------------------------------------------------
1 | export class Flower {
2 | constructor(
3 | private id: number,
4 | private name: string,
5 | private stock: number
6 | ) {
7 | }
8 |
9 | totalStock(): number {
10 | return this.stock;
11 | }
12 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-02_extract_base_class/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-02_extract_base_class/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-02_extract_base_class/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-02_extract_base_class/src/Feed.ts:
--------------------------------------------------------------------------------
1 | export class Feed {
2 | constructor(
3 | readonly content: string
4 | ) {
5 | }
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-02_extract_base_class/src/Flower.ts:
--------------------------------------------------------------------------------
1 | export class Flower {
2 | constructor(
3 | private id: number,
4 | private name: string,
5 | private stock: number
6 | ) {
7 | }
8 |
9 | totalStock(): number {
10 | return this.stock;
11 | }
12 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-03_add_factory_method/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-03_add_factory_method/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-03_add_factory_method/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-03_add_factory_method/src/Feed.ts:
--------------------------------------------------------------------------------
1 | export class Feed {
2 | constructor(
3 | readonly content: string
4 | ) {
5 | }
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-03_add_factory_method/src/FeedParser.ts:
--------------------------------------------------------------------------------
1 | import {Feed} from "./Feed";
2 | import {Flower} from "./Flower";
3 |
4 | export class FeedParser {
5 | parse: (feed :Feed) => Array
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-03_add_factory_method/src/Flower.ts:
--------------------------------------------------------------------------------
1 | export class Flower {
2 | constructor(
3 | private id: number,
4 | private name: string,
5 | private stock: number
6 | ) {
7 | }
8 |
9 | totalStock(): number {
10 | return this.stock;
11 | }
12 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-04_replace_inheritance_with_composition/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-04_replace_inheritance_with_composition/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-04_replace_inheritance_with_composition/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-04_replace_inheritance_with_composition/src/Feed.ts:
--------------------------------------------------------------------------------
1 | export class Feed {
2 | constructor(
3 | readonly content: string
4 | ) {
5 | }
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter-04_replace_inheritance_with_composition/src/FeedParser.ts:
--------------------------------------------------------------------------------
1 | import {Feed} from "./Feed";
2 | import {Flower} from "./Flower";
3 |
4 | export class FeedParser {
5 | parse: (feed :Feed) => Array
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-01_base/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-01_base/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-01_base/src/Feed.ts:
--------------------------------------------------------------------------------
1 | export class Feed {
2 | constructor(
3 | readonly content: string,
4 | readonly contentType: string
5 | ) {
6 | }
7 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-01_base/src/FeedParser.ts:
--------------------------------------------------------------------------------
1 | import {Feed} from "./Feed";
2 | import {Flower} from "./Flower";
3 |
4 | export class FeedParser {
5 | parse: (feed :Feed) => Array
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-01_base/src/Flower.ts:
--------------------------------------------------------------------------------
1 | export class Flower {
2 | constructor(
3 | private id: number,
4 | private name: string,
5 | private stock: number
6 | ) {
7 | }
8 |
9 | totalStock(): number {
10 | return this.stock;
11 | }
12 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-02_extract_parameterized_factory_method/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-02_extract_parameterized_factory_method/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-02_extract_parameterized_factory_method/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-02_extract_parameterized_factory_method/src/Feed.ts:
--------------------------------------------------------------------------------
1 | export class Feed {
2 | constructor(
3 | readonly content: string,
4 | readonly contentType: string
5 | ) {
6 | }
7 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-02_extract_parameterized_factory_method/src/FeedParser.ts:
--------------------------------------------------------------------------------
1 | import {Feed} from "./Feed";
2 | import {Flower} from "./Flower";
3 |
4 | export class FeedParser {
5 | parse: (feed :Feed) => Array
6 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-03_exhaustive_type_check/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | /dist/*
4 | !/dist/data/
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-03_exhaustive_type_check/dist/data/warehouse-stock.csv:
--------------------------------------------------------------------------------
1 | id,name,stock
2 | 1,Tulipan,5
3 | 2,Rosa,2
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-03_exhaustive_type_check/dist/data/warehouse-stock.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "name": "Rosa",
5 | "stock": 5
6 | },
7 | {
8 | "id": 8,
9 | "name": "gerbera",
10 | "stock": 3
11 | }
12 | ]
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-03_exhaustive_type_check/src/ContentType.ts:
--------------------------------------------------------------------------------
1 | export enum ContentType {
2 | Csv = 'text/csv',
3 | Json = 'application/json',
4 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-03_exhaustive_type_check/src/Feed.ts:
--------------------------------------------------------------------------------
1 | import {ContentType} from "./ContentType";
2 |
3 | export class Feed {
4 | constructor(
5 | readonly content: string,
6 | readonly contentType: ContentType
7 | ) {
8 | }
9 | }
--------------------------------------------------------------------------------
/examples/ts/ts-stock_counter_dynamic-03_exhaustive_type_check/src/FeedParser.ts:
--------------------------------------------------------------------------------
1 | import {Feed} from "./Feed";
2 | import {Flower} from "./Flower";
3 |
4 | export class FeedParser {
5 | parse: (feed :Feed) => Array
6 | }
--------------------------------------------------------------------------------
/examples/typescript/ts-stock_management-01_base/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | coverage
--------------------------------------------------------------------------------
/examples/typescript/ts-stock_management-01_base/README.md:
--------------------------------------------------------------------------------
1 | # Stock management
2 |
3 | Code smells:
4 | - Data class
5 | - Shotgun surgery
6 |
7 | ## Setup
8 | - Install dependencies with `yarn install`
9 | - Execute test with `yarn test`
--------------------------------------------------------------------------------
/examples/typescript/ts-stock_management-01_base/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | ['@babel/preset-env', {targets: {node: 'current'}}],
4 | '@babel/preset-typescript',
5 | ],
6 | }
--------------------------------------------------------------------------------
/examples/typescript/ts-stock_management-01_base/src/LowStock.ts:
--------------------------------------------------------------------------------
1 | export class LowStock {
2 | constructor(public readonly reason: string) {}
3 | }
--------------------------------------------------------------------------------
/examples/typescript/ts-stock_management-01_base/src/NotEnoughStock.ts:
--------------------------------------------------------------------------------
1 | export class NotEnoughStock extends Error {
2 | constructor() {
3 | super('Not enough stock')
4 | }
5 | }
--------------------------------------------------------------------------------
/examples/typescript/ts-stock_management-01_base/src/OutOfStock.ts:
--------------------------------------------------------------------------------
1 | export class OutOfStock extends Error {
2 | constructor() {
3 | super('Out of stock')
4 | }
5 | }
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "useBuiltIns": "usage",
7 | "corejs": "3.9.1"
8 | }
9 | ]
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "http://localhost:8080",
3 | "video": false
4 | }
5 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/cypress/integration/home.spec.ts:
--------------------------------------------------------------------------------
1 | describe("The Home Page", () => {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /product pricing/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/graduated_tiered_prices/base/typescript/src/index.ts
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/base/typescript/tests/GraduatedTieredPricing.test.ts:
--------------------------------------------------------------------------------
1 | describe("Graduated tiered pricing should", () => {
2 | // TODO: Graduated tiered pricing spec
3 | });
4 |
5 | test("test framework working", async () => {
6 | expect(true).toBe(true);
7 | });
8 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "useBuiltIns": "usage",
7 | "corejs": "3.9.1"
8 | }
9 | ]
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "http://localhost:8080",
3 | "video": false
4 | }
5 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/cypress/integration/home.spec.ts:
--------------------------------------------------------------------------------
1 | describe("The Home Page", () => {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /product pricing/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/src/InvalidTier.ts:
--------------------------------------------------------------------------------
1 | export default class InvalidTier extends Error {
2 | constructor() {
3 | super("Invalid tier");
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/src/NumberOfSubscriptionsNotAllowed.ts:
--------------------------------------------------------------------------------
1 | export default class NumberOfSubscriptionsNotAllowed extends Error {
2 | constructor() {
3 | super("Number of subscriptions not allowed");
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/graduated_tiered_prices/solutions/adrianliz/src/index.ts
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/adrianliz/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "useBuiltIns": "usage",
7 | "corejs": "3.9.1"
8 | }
9 | ]
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "http://localhost:8080",
3 | "video": false
4 | }
5 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/cypress/integration/home.spec.ts:
--------------------------------------------------------------------------------
1 | describe("The Home Page", () => {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /product pricing/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/src/index.ts
--------------------------------------------------------------------------------
/exercises/graduated_tiered_prices/solutions/codely_triangulation-with-tpp/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/legacy_create_video/base/php-symfony/.gitignore:
--------------------------------------------------------------------------------
1 | /web/bundles/
2 | /app/cache/*
3 | /app/logs/*
4 | /build/
5 | /vendor/
6 | /bin/
7 | /composer.phar
8 | app/config/parameters.yml
9 |
--------------------------------------------------------------------------------
/exercises/legacy_create_video/base/php-symfony/app/.htaccess:
--------------------------------------------------------------------------------
1 | deny from all
--------------------------------------------------------------------------------
/exercises/legacy_create_video/base/php-symfony/app/AppCache.php:
--------------------------------------------------------------------------------
1 | {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /product pricing/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/exercises/product_pricing/base/typescript/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/product_pricing/base/typescript/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/tests/*.(spec|test).ts"],
3 | transform: {
4 | "\\.[jt]sx?$": "ts-jest",
5 | },
6 | moduleNameMapper: {
7 | "\\.(css|less)$": "identity-obj-proxy",
8 | },
9 | testEnvironment: "jsdom",
10 | };
11 |
--------------------------------------------------------------------------------
/exercises/product_pricing/base/typescript/src/Product.ts:
--------------------------------------------------------------------------------
1 | export class Product {}
--------------------------------------------------------------------------------
/exercises/product_pricing/base/typescript/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/product_pricing/base/typescript/src/index.ts
--------------------------------------------------------------------------------
/exercises/product_pricing/base/typescript/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/product_pricing/base/typescript/tests/Product.test.ts:
--------------------------------------------------------------------------------
1 | describe("Product should", () => {
2 | // TODO: Product spec
3 | });
4 |
5 | test("test framework working", async () => {
6 | expect(true).toBe(true);
7 | });
8 |
--------------------------------------------------------------------------------
/exercises/product_pricing/solutions/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/product_pricing/solutions/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: build
3 |
4 | .PHONY: build
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | .PHONY: test
9 | test:
10 | @./gradlew check --warning-mode all
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: Java
2 |
3 | Java codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `make test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/base/java/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/src/main/java/tv/codely/checkout/TieredPricing.java:
--------------------------------------------------------------------------------
1 | package tv.codely.checkout;
2 |
3 | public class TieredPricing {
4 | }
5 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/java/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/base/java/var/log/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/rust/.env.example:
--------------------------------------------------------------------------------
1 | API_IP=0.0.0.0
2 | API_PORT=8000
3 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/rust/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | .env
3 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/rust/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rust-base-skeleton"
3 | version = "0.1.0"
4 | edition = "2021"
5 |
6 | [dependencies]
7 | actix-web = "4"
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/rust/README.md:
--------------------------------------------------------------------------------
1 | # Rust base skeleton for TDD katas
2 |
3 | ## Run app
4 |
5 | `make up` default url: http://localhost:8000/health-check
6 |
7 | ## Run tests
8 |
9 | - `make run-test` for run test on new container.
10 | - `make test` for execute test on running container.
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/rust/docker/rust/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM rust:1-alpine
2 |
3 | WORKDIR /app
4 |
5 | RUN apk update && apk add --no-cache musl-dev openssl-dev
6 | RUN cargo install cargo-watch
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/base/rust/src/routes.rs:
--------------------------------------------------------------------------------
1 | use actix_web::web;
2 | use crate::health_check::health_check;
3 |
4 | pub fn routes(cfg: &mut web::ServiceConfig) {
5 | cfg.route("/health-check", web::get().to(health_check));
6 | }
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: build
3 |
4 | .PHONY: build
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | .PHONY: test
9 | test:
10 | @./gradlew check --warning-mode all
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: Java
2 |
3 | Java codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `make test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/adrianliz/java/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/adrianliz/java/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/adrianliz/java/var/log/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/aortiz_typescript/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/aortiz_typescript/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/tests/**/*.test.ts"],
3 | transform: {
4 | "\\.ts$": "@swc/jest",
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/aortiz_typescript/src/Codelyber.ts:
--------------------------------------------------------------------------------
1 | export class Codelyber {
2 | private GREETING = "Hi";
3 |
4 | constructor(private readonly name: string) {}
5 |
6 | greet(): string {
7 | return `${this.GREETING} ${this.name} from Codely TypeScript Basic Skeleton!`;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/aortiz_typescript/src/InvalidUnitException.ts:
--------------------------------------------------------------------------------
1 | export class InvalidUnitException extends Error {
2 | constructor(message: string) {
3 | super(message);
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/aortiz_typescript/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: build
3 |
4 | .PHONY: build
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | .PHONY: test
9 | test:
10 | @./gradlew check --warning-mode all
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: Java
2 |
3 | Java codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `make test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/codely_outside-in/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/src/main/java/tv/codely/checkout/CalculateSubscriptionsPrice.java:
--------------------------------------------------------------------------------
1 | package tv.codely.checkout;
2 |
3 | public class CalculateSubscriptionsPrice {
4 | public int execute(String subscriptions) {
5 | return 199;
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/src/main/java/tv/codely/checkout/TieredPricing.java:
--------------------------------------------------------------------------------
1 | package tv.codely.checkout;
2 |
3 | public class TieredPricing {
4 | }
5 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/codely_outside-in/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/codely_outside-in/var/log/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/elwazy-python/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/elwazy-python/README.md
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/elwazy-python/elwazy_python/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/elwazy-python/elwazy_python/__init__.py
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/elwazy-python/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/elwazy-python/tests/__init__.py
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/isaac1024_baby-steps/.env.example:
--------------------------------------------------------------------------------
1 | API_IP=0.0.0.0
2 | API_PORT=8000
3 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/isaac1024_baby-steps/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | .env
3 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/isaac1024_baby-steps/docker/rust/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM rust:1-alpine
2 |
3 | WORKDIR /app
4 |
5 | RUN apk update && apk add --no-cache musl-dev openssl-dev
6 | RUN cargo install cargo-watch
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: build
3 |
4 | .PHONY: build
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | .PHONY: test
9 | test:
10 | @./gradlew check --warning-mode all
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: Java
2 |
3 | Java codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `make test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/lurumad-java/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/lurumad-java/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/lurumad-java/var/log/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/.gitignore:
--------------------------------------------------------------------------------
1 | /.env.local
2 | /.env.local.php
3 | /.env.*.local
4 | .idea
5 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/docker/nginx/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx:1.16
2 |
3 | COPY conf/project.conf /etc/nginx/conf.d/00-project.conf
4 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/docker/up:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | docker-compose up --build -d
4 |
5 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/src/.env.test:
--------------------------------------------------------------------------------
1 | # define your env variables for the test env here
2 | KERNEL_CLASS='App\Kernel'
3 | APP_SECRET='$ecretf0rt3st'
4 | SYMFONY_DEPRECATIONS_HELPER=999999
5 | PANTHER_APP_ENV=panther
6 | #DATABASE_TEST_URL=
7 | REDIS_HOST=redis
8 | REDIS_PORT=6379
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/src/config/behat/bootstrap.php:
--------------------------------------------------------------------------------
1 | bootEnv(dirname(__DIR__, 2).'/.env.test');
4 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/src/config/packages/sensio_framework_extra.yaml:
--------------------------------------------------------------------------------
1 | sensio_framework_extra:
2 | router:
3 | annotations: false
4 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/src/config/packages/translation.yaml:
--------------------------------------------------------------------------------
1 | framework:
2 | default_locale: en
3 | translator:
4 | default_path: '%kernel.project_dir%/translations'
5 | fallbacks:
6 | - en
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/malakaton-php/src/config/preload.php:
--------------------------------------------------------------------------------
1 | {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /product pricing/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mmoreno-typescript/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mmoreno-typescript/src/InvalidLicenciasQuantity.ts:
--------------------------------------------------------------------------------
1 | export default class InvalidLicenciasQuantity extends Error {}
2 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mmoreno-typescript/src/LicenciaQuantity.ts:
--------------------------------------------------------------------------------
1 | export default class LicenciaQuantity {
2 | constructor(public value: number) {}
3 | }
4 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mmoreno-typescript/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/mmoreno-typescript/src/index.ts
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mmoreno-typescript/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mmoreno-typescript/tests/NumberRandomBetween.ts:
--------------------------------------------------------------------------------
1 | export default function numberRandomBetween(min: number, max: number): number {
2 | return Math.floor(Math.random() * (max - min + 1)) + min;
3 | }
4 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: build
3 |
4 | .PHONY: build
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | .PHONY: test
9 | test:
10 | @./gradlew check --warning-mode all
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: Java
2 |
3 | Java codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `make test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/mperezi/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/mperezi/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/mperezi/var/log/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [*.java]
10 | indent_size = 4
11 | indent_style = space
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/.gitignore:
--------------------------------------------------------------------------------
1 | # Gradle
2 | .gradle
3 | build/
4 |
5 | # Ignore Gradle GUI config
6 | gradle-app.setting
7 |
8 | var/log/*
9 | !var/log/.gitkeep
10 | /.idea/
11 |
12 | **/.DS_Store
13 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all
2 | all: build
3 |
4 | .PHONY: build
5 | build:
6 | @./gradlew assemble --warning-mode all
7 |
8 | .PHONY: test
9 | test:
10 | @./gradlew check --warning-mode all
11 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: Java
2 |
3 | Java codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `make test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/oflorez/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/oflorez/var/log/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/oflorez/var/log/.gitkeep
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/README.md:
--------------------------------------------------------------------------------
1 | # Tiered pricing: TypeScript
2 |
3 | TypeScript codebase for [Tiered pricing](../../README.md) exercise.
4 |
5 | # Testing
6 |
7 | Run all tests with `npm run test`
8 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "useBuiltIns": "usage",
7 | "corejs": "3.9.1"
8 | }
9 | ]
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "http://localhost:8080",
3 | "video": false
4 | }
5 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/cypress/fixtures/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Using fixtures to represent data",
3 | "email": "hello@cypress.io",
4 | "body": "Fixtures are a great way to mock data for responses to routes"
5 | }
6 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/cypress/integration/home.spec.ts:
--------------------------------------------------------------------------------
1 | describe("The Home Page", () => {
2 | it("successfully loads", () => {
3 | cy.visit("/");
4 | cy.findByRole("heading", { name: /hello world/i }).should("exist");
5 | });
6 | });
7 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/cypress/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "noEmit": true,
5 | "types": ["cypress", "@testing-library/cypress"]
6 | },
7 | "include": ["../node_modules/cypress", "./**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/src/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/tiered_pricing/solutions/xetxeberria-ts/src/index.ts
--------------------------------------------------------------------------------
/exercises/tiered_pricing/solutions/xetxeberria-ts/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/exercises/user_signup/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/exercises/user_signup/README.md
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/.gitignore:
--------------------------------------------------------------------------------
1 | .next
2 | node_modules
3 | tests/pages/screenshots
4 | test-results.xml
5 |
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["next/babel"],
3 | plugins: ["babel-plugin-transform-typescript-metadata", ["@babel/plugin-proposal-decorators", { legacy: true }]],
4 | };
5 |
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/setupTests.ts:
--------------------------------------------------------------------------------
1 | import "@testing-library/jest-dom";
2 |
3 | jest.mock("next/image", () => ({
4 | __esModule: true,
5 | default: () => {
6 | return "Next image stub";
7 | },
8 | }));
9 |
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/src/components/Label.module.css:
--------------------------------------------------------------------------------
1 | .label {
2 | display: block;
3 | margin: 1rem 0 .5rem;
4 | font: 1rem/1.5 sans-serif;
5 | }
6 |
7 | .label--hidden {
8 | position: absolute;
9 | visibility: hidden;
10 | }
11 |
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/src/pages/index.tsx:
--------------------------------------------------------------------------------
1 | export default function Home(): JSX.Element {
2 |
3 | return (
4 | <>
5 | User Signup
6 | >
7 | );
8 | }
9 |
--------------------------------------------------------------------------------
/exercises/user_signup/base/next-typescript/tests/pages/index.spec.ts:
--------------------------------------------------------------------------------
1 | describe("The Home Page", () => {
2 | it("works", () => {
3 |
4 | cy.visit("/")
5 | .contains("User Signup")
6 | .should("exist");
7 | });
8 | });
9 |
--------------------------------------------------------------------------------
/exercises/user_signup/solutions/codely_next-typescript-middle-out/.gitignore:
--------------------------------------------------------------------------------
1 | .next
2 | node_modules
3 | tests/pages/screenshots
4 | test-results.xml
5 |
--------------------------------------------------------------------------------
/exercises/user_signup/solutions/codely_next-typescript-middle-out/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["next/babel"],
3 | plugins: ["babel-plugin-transform-typescript-metadata", ["@babel/plugin-proposal-decorators", { legacy: true }]],
4 | };
5 |
--------------------------------------------------------------------------------
/exercises/user_signup/solutions/codely_next-typescript-middle-out/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/exercises/user_signup/solutions/codely_next-typescript-middle-out/setupTests.ts:
--------------------------------------------------------------------------------
1 | import "@testing-library/jest-dom";
2 |
3 | jest.mock("next/image", () => ({
4 | __esModule: true,
5 | default: () => {
6 | return "Next image stub";
7 | },
8 | }));
9 |
--------------------------------------------------------------------------------
/exercises/user_signup/solutions/codely_next-typescript-middle-out/src/components/Label.module.css:
--------------------------------------------------------------------------------
1 | .label {
2 | display: block;
3 | margin: 1rem 0 .5rem;
4 | font: 1rem/1.5 sans-serif;
5 | }
6 |
7 | .label--hidden {
8 | position: absolute;
9 | visibility: hidden;
10 | }
11 |
--------------------------------------------------------------------------------
/refactorings/composing-methods/extract-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/extract-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/extract-variable/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/extract-variable/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/inline-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/inline-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/inline-temp/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/inline-temp/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/remove-assignments-to-parameters/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/remove-assignments-to-parameters/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/replace-method-with-method-object/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/replace-method-with-method-object/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/replace-temp-with-query/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/replace-temp-with-query/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/split-temporary-variable/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/split-temporary-variable/.gitkeep
--------------------------------------------------------------------------------
/refactorings/composing-methods/substitute-algorithm/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/composing-methods/substitute-algorithm/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/collapse-hierarchy/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/collapse-hierarchy/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/extract-interface/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/extract-interface/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/extract-subclass/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/extract-subclass/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/extract-superclass/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/extract-superclass/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/form-template-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/form-template-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/pull-up-constructor-body/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/pull-up-constructor-body/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/pull-up-field/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/pull-up-field/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/pull-up-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/pull-up-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/push-down-field/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/push-down-field/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/push-down-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/push-down-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/replace-delegation-with-inheritance/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/replace-delegation-with-inheritance/.gitkeep
--------------------------------------------------------------------------------
/refactorings/dealing-with-generalization/replace-inheritance-with-delegation/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/dealing-with-generalization/replace-inheritance-with-delegation/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/extract-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/extract-class/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/hide-delegate/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/hide-delegate/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/inline-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/inline-class/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/introduce-foreign-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/introduce-foreign-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/introduce-local-extension/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/introduce-local-extension/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/move-field/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/move-field/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/move-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/move-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/moving-features-between-objects/remove-middle-man/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/moving-features-between-objects/remove-middle-man/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/change-bidirectional-association-to-unidirectional/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/change-bidirectional-association-to-unidirectional/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/change-reference-to-value/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/change-reference-to-value/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/change-unidirectional-association-to-bidirectional/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/change-unidirectional-association-to-bidirectional/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/change-value-to-reference/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/change-value-to-reference/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/duplicate-observed-data/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/duplicate-observed-data/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/encapsulate-collection/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/encapsulate-collection/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/encapsulate-field/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/encapsulate-field/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-array-with-object/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-array-with-object/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-data-value-with-object/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-data-value-with-object/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-magic-number-with-symbolic-constant/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-magic-number-with-symbolic-constant/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-subclass-with-fields/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-subclass-with-fields/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-type-code-with-class/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-type-code-with-class/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-type-code-with-state-or-strategy/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-type-code-with-state-or-strategy/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/replace-type-code-with-subclasses/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/replace-type-code-with-subclasses/.gitkeep
--------------------------------------------------------------------------------
/refactorings/organizing-data/self-encapsulate-field/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/organizing-data/self-encapsulate-field/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/consolidate-conditional-expression/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/consolidate-conditional-expression/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/consolidate-duplicate-conditional-fragments/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/consolidate-duplicate-conditional-fragments/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/decompose-conditional/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/decompose-conditional/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/introduce-assertion/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/introduce-assertion/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/introduce-null-object/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/introduce-null-object/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/remove-control-flag/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/remove-control-flag/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-conditional-expressions/replace-conditional-with-polymorphism/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-conditional-expressions/replace-conditional-with-polymorphism/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/add-parameter/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/add-parameter/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/hide-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/hide-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/introduce-parameter-object/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/introduce-parameter-object/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/parameterize-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/parameterize-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/preserve-whole-object/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/preserve-whole-object/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/remove-parameter/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/remove-parameter/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/remove-setting-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/remove-setting-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/rename-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/rename-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/replace-constructor-with-factory-method/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/replace-constructor-with-factory-method/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/replace-error-code-with-exception/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/replace-error-code-with-exception/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/replace-exception-with-test/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/replace-exception-with-test/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/replace-parameter-with-explicit-methods/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/replace-parameter-with-explicit-methods/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/replace-parameter-with-method-call/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/replace-parameter-with-method-call/.gitkeep
--------------------------------------------------------------------------------
/refactorings/simplifying-method-calls/separate-query-from-modifier/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/refactoring-code_smells-design_patterns/de397ea9e331215aa8e5c9ea4e5ff16270a9ba0f/refactorings/simplifying-method-calls/separate-query-from-modifier/.gitkeep
--------------------------------------------------------------------------------