Claude Code Plugins

Community-maintained marketplace

Feedback

Rithum B2B patterns and distribution API

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name rithum
description Rithum B2B patterns and distribution API

Rithum Best Practices

Leverage Data Model Guarantees

Trust guaranteed non-null fields:

// DO: Trust the data model guarantees
order.setTotalPrice(PriceUtils.centsToDollars(transactableBag.getTotal()));

// DON'T: Add unnecessary null checks
if (Objects.nonNull(transactableBag.getTotal())) {
  order.setTotalPrice(PriceUtils.centsToDollars(transactableBag.getTotal()));
}

Clean Separation of Concerns

  • Keep main composer methods focused on orchestration
  • Extract complex logic into focused helper methods
  • Use static utility classes for reusable functionality

Common Compilation Issues

OfferData.Shipping.Price Structure

// CORRECT
OfferData.Shipping.Price price = new OfferData.Shipping.Price();

// WRONG
OfferData.Shipping.Method.Price price = new OfferData.Shipping.Method.Price();

MerchantConfiguration Method Names

// CORRECT
config.setRithumConfig(rithumConfig);

// WRONG
config.setRithum(rithumConfig);

Type Consistency

// CORRECT - merchantId is Integer
assertEquals(Integer.valueOf(12345), result.getMerchantId());

// WRONG
assertEquals(Long.valueOf(12345L), result.getMerchantId());

Testing Patterns

Static Method Mocking

@Test
public void testOrderSyncWithFallbackShipping() {
  try (MockedStatic<RithumMerchantConfig> mockedRithumConfig = Mockito.mockStatic(RithumMerchantConfig.class)) {
    mockedRithumConfig.when(() -> RithumMerchantConfig.shouldUseFallbackShippingMethods(config)).thenReturn(true);

    List<OfferData.Shipping> result = rithumOrderSyncService.getShippingEstimates(request);

    assertNotNull(result);
    assertTrue(CollectionUtils.isNotEmpty(result));
  }
}

Test Data Creation

private DecryptedMerchantCredentials createDecryptedMerchantCredentials() {
  DecryptedMerchantCredentials dmc = new DecryptedMerchantCredentials();
  dmc.setMerchantId(12345);  // Use Integer, not Long
  dmc.setPlatform(Merchant.Platform.RITHUM);
  return dmc;
}

Comprehensive Testing Strategy

  • Test successful composition with complete data
  • Test edge cases: null addresses, empty collections
  • Test status mapping for all enum values
  • Test fallback shipping configuration
  • Verify property mapping accuracy
  • Use realistic test data