Context-aware systems are systems that adapt their behavior dynamically when sensing changes in the surrounding environment in which they run. These changes may come from changing user preferences, external sensors (weather, localisation), or internal sensors (battery, memory) of the device. The paradigm of context-oriented programming, provides dedicated programming language abstractions to adapt the behaviour of a software system dynamically upon changing contexts. In context-oriented programming (COP), contexts and behavioural adaptations are first-class language entities. The behavioural adaptations get (de)activated in the code whenever their corresponding contexts become (de)activated. Many different COP languages exist. We also proposed our own specific programming framework, RubyCOP, to implement context-oriented systems in which we explicitly separate the notions of contexts and features. This clear separation promotes a better maintainability and reusability in developping such systems. Our RubyCOP programming framework is part of a more complete approach to feature-based context-oriented software development, which also consists of an architecture, a supporting development methodology and two visualisation tools. This presentation will focus only on the programming framework.