├── 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 --------------------------------------------------------------------------------