Witam, potrzebuje stworzyć do aplikacji system odznaczeń (badges), pewnie widzieliście coś takiego w niejednej aplikacji webowej.
Z grubsza miało by to model Badges oraz relacje user_has_many_badges czyli tabela łącząca, jakis swój kontroller dla czesci uzytkownika oraz dla admina który tworzyłby nowe odznaczenia ze swoim kontrolerem.
Chciałbym użyć do tego Engines bo będzie potem potrzeba szybkiego podpięcia tego w innych aplikacjach, ale nigdy sie w to nie bawiłem.
stworzyłem nowy plugin, z opcją --mountable, udało mi sie go podpiąć do głównej apki -> mount Badges::Engine, at: ‘/’, as: ‘badges’.
dodałem w Badges::BadgesController linie: layout ‘application’
wywaliłem katalog /badges/view/layout, ponieważ ma to używać swoich widoków ale wyświetlonych wewnątrz głównego layoutu aplikacji.
Niestety problem jest taki że nie rozpoznaje mi ścieżek root_path w tym layoucie. Zmiana
Jeśli nie chcesz osobnego namespace’u dla aplikacji i engine’u (bo jest to głupie dla engine’u który ma być mocno zintegrowany z aplikacją), to po prostu nie dawaj engine’owi osobnego namespace’u. Wywal moduł Badges i powyciągaj z niego klasy do globalnej przestrzeni nazw.
Wtedy też zupełnie Ci odpada dyrektywa “mount” w routes.rb aplikacji, kod engine’u zostaje potraktowany jako “podstawa” kodu aplikacji a nie osobna mountable app.
Udało się uruchomić dzięki Waszym radom Utknąłem teraz na etapie testów, chciałbym używać rspeca i capybary, pokonfigurowałem engine tak jak tutaj opisane
niestety dostaje błąd: cannot load such file – /Users/artur/Work/glowna_apka/badges/spec/dummy/Rakefile
możesz napisać coś więcej o tworzeniu tego środowiska testowego dla engine ? chodzi mi o testowanie z pomocą rspec i factory a nie wiem jak to ugryźć, gdzie wrzucić testy, czy musze skopiowac factories do katalogu engine’a itp… ? Na razie utknąłem na czymś takim, po załadowaniu factories z głownej aplikacji.
[quote]Failure/Error: @administrator = create :administrator
NameError:
uninitialized constant User[/quote]
Factory administrator dziedziczy po modelu User.
Wszystko do enginu, od app/ przez db/ po test/ czy spec/.
Dummy app ma być szkieletową appką railsową, służącą wyłącznie podpięciu enginu (…odpaleniu migracji i potem testów).
a co do wspomnianego gema https://github.com/pat/combustion czy tutaj także zmiany wprowadzam tylko w katalogu engine ? bo dokumentacja czasem nie precyzuje
Miałbym dodatkowe pytanie, dotyczące bardziej projektowania aplikacji. Chciałbym żeby mój engine wykrywał zmiany w modelu/modelach lub wywołanie akcji danego kontrolera bez ingerencji w ich kod w aplikacji gdzie engine jest załączony. Przykładowo użytkownik ustawia sobie avatar, chciałbym za to przyznać odznaczenie a z drugiej strony bardziej skomplikowany przykład użytkownik stworzył 5ty projekt i za to ma inne odznaczenie. Wiem że można to sprawdzać w tle np rake taskiem i whenever ale problem w tym że chciałbym aby niektóre odznaczenia były przyznawane natychmiastowo po wykonanej akcji a inne sprawdzane w tle np raz dziennie.
Wzorzec mediator. Może być wisper, lub cokolwiek innego, zasada wszędzie taka sama.
Bez ręcznego publikowania zostaje tylko hakowanie i wpinanie się w metody AR, nie polecam.