public IConcern create_concern_from(Type type_with_concern, IObservationSpecification obseration_specification, IObservationReport observations)
 {
     return new Concern(type_with_concern.concern().concerned_with,
                         type_with_concern.concern().story_key,
                        type_with_concern.Name.as_bdd_style_name(),
                        type_with_concern.all_members_that_meet(obseration_specification).as_observations(type_with_concern.Name,observations)                               
                        );
 }
        public IEnumerable<IStoryReport> all_concern_groups_found_using(IReportOptions options, IObservationReport observations)
        {
            var concerns = options.assembly_to_scan
                .all_types_with_a_concern_attribute()
                .Select(x => concern_factory.create_concern_from(x, options.observation_specification,observations))
                .Cast<IConcern>();
            
            var stories = concerns
                .GroupBy(x => x.story_key)
                .Select(x=> StoryFactory.create_from_concerns(x))                
                .Cast<IStoryReport>();

            return stories;
        }
 public IConcernReport create_using(IReportOptions options, IObservationReport observations)
 {
     return new ConcernReport(StoryRepository.all_concern_groups_found_using(options,observations));
 }
 static public IEnumerable<IConcernObservation> as_observations(this IEnumerable<MemberInfo> methods, string concern, IObservationReport observations)
 {
     return methods.Select(x => x.as_observation(concern, observations));
 }
 static public IConcernObservation as_observation(this MemberInfo method, string concern, IObservationReport observations)
 {
     return new ConcernObservation(method.Name.as_bdd_style_name(), observations.from_full_name(concern + "." + method.Name).success);
 }