diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3e32d4c27..2ab2838c2 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -35,7 +35,6 @@ class ApplicationController < ActionController::Base end def set_locale - I18n.default_locale = DEFAULT_LANGUAGE if current_user I18n.locale = current_user.language else diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index a5c018af2..92bda1a36 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -13,9 +13,7 @@ class StatusMessagesController < ApplicationController public_flag.to_s.match(/(true)/) ? public_flag = true : public_flag = false params[:status_message][:public] = public_flag - data = clean_hash params[:status_message] - message = params[:status_message][:message] - status_message = current_user.post(:status_message, data) + status_message = current_user.post(:status_message, params[:status_message]) render :nothing => true end @@ -29,13 +27,4 @@ class StatusMessagesController < ApplicationController @status_message = current_user.find_visible_post_by_id params[:id] respond_with @status_message end - - private - def clean_hash(params) - return { - :message => params[:message], - :to => params[:to], - :public => params[:public] - } - end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 9cb502908..d89b0b1ee 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -34,7 +34,7 @@ module ApplicationHelper end def how_long_ago(obj) - "#{time_ago_in_words(obj.created_at)} ago" + "#{time_ago_in_words(obj.created_at)} #{t('.ago')}" end def person_url(person) diff --git a/app/models/photo.rb b/app/models/photo.rb index d60bd3645..bce9d469d 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -29,9 +29,9 @@ class Photo < Post validates_with PhotoAlbumValidator - before_destroy :ensure_user_picture + attr_accessible :caption - attr_protected :person + before_destroy :ensure_user_picture def self.instantiate(params = {}) image_file = params.delete(:user_file) diff --git a/app/models/post.rb b/app/models/post.rb index 5b49dacd5..298d25b5f 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -32,11 +32,12 @@ class Post before_destroy :propogate_retraction after_destroy :destroy_comments + attr_accessible :user_refs def self.instantiate params new_post = self.new params.to_hash new_post.person = params[:person] new_post.public = params[:public] - new_post.save + new_post.diaspora_handle = new_post.person.diaspora_handle new_post end diff --git a/app/models/profile.rb b/app/models/profile.rb index 8848cd823..145732d7c 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -24,6 +24,8 @@ class Profile key :bio, String after_validation :strip_names + validates_length_of :first_name, :maximum => 32 + validates_length_of :last_name, :maximum => 32 before_save :strip_names diff --git a/app/models/request.rb b/app/models/request.rb index 2226a7b45..cba28cdef 100644 --- a/app/models/request.rb +++ b/app/models/request.rb @@ -9,18 +9,18 @@ class Request include Diaspora::Webhooks include ROXML - xml_accessor :_id - xml_accessor :person, :as => Person - xml_accessor :destination_url - xml_accessor :callback_url - xml_accessor :exported_key, :cdata => true + xml_reader :_id + xml_reader :diaspora_handle + xml_reader :destination_url + xml_reader :callback_url - key :person_id, ObjectId - key :aspect_id, ObjectId + key :aspect_id, ObjectId key :destination_url, String key :callback_url, String key :exported_key, String + key :diaspora_handle, String + belongs_to :person validates_presence_of :destination_url, :callback_url @@ -30,15 +30,13 @@ class Request person = options[:from] self.new(:destination_url => options[:to], :callback_url => person.receive_url, - :person => person, - :exported_key => person.exported_key, - :aspect_id => options[:into]) + :diaspora_handle => person.diaspora_handle, + :aspect_id => options[:into]) end def reverse_for accepting_user - self.person = accepting_user.person - self.exported_key = accepting_user.exported_key - self.destination_url = self.callback_url + self.diaspora_handle = accepting_user.diaspora_handle + self.destination_url = self.callback_url self.save end diff --git a/app/models/status_message.rb b/app/models/status_message.rb index a0f8ca002..d67bba6fb 100644 --- a/app/models/status_message.rb +++ b/app/models/status_message.rb @@ -11,6 +11,8 @@ class StatusMessage < Post key :message, String validates_presence_of :message + attr_accessible :message + def to_activity <<-XML diff --git a/app/models/user.rb b/app/models/user.rb index f15f0e2ae..bb465e78a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,8 +40,11 @@ class User validates_presence_of :username validates_uniqueness_of :username, :case_sensitive => false validates_format_of :username, :with => /\A[A-Za-z0-9_.]+\z/ - validates_presence_of :person, :unless => proc {|user| user.invitation_token.present?} + validates_length_of :username, :maximum => 32 + validates_inclusion_of :language, :in => AVAILABLE_LANGUAGE_CODES + + validates_presence_of :person, :unless => proc {|user| user.invitation_token.present?} validates_associated :person one :person, :class_name => 'Person', :foreign_key => :owner_id @@ -142,6 +145,7 @@ class User aspect_ids = validate_aspect_permissions(aspect_ids) post = build_post(class_name, options) + post.socket_to_uid(id, :aspect_ids => aspect_ids) if post.respond_to?(:socket_to_uid) push_to_aspects(post, aspect_ids) @@ -198,9 +202,11 @@ class User model_class = class_name.to_s.camelize.constantize post = model_class.instantiate(options) - post.save - self.raw_visible_posts << post - self.save + if post.save + raise 'MongoMapper failed to catch a failed save' unless post.id + self.raw_visible_posts << post + self.save + end post end diff --git a/app/views/comments/_new_comment.html.haml b/app/views/comments/_new_comment.html.haml index bb8719ee7..b7c1fbbf4 100644 --- a/app/views/comments/_new_comment.html.haml +++ b/app/views/comments/_new_comment.html.haml @@ -4,7 +4,7 @@ = form_for Comment.new, :remote => true do |comment| %p - = label_tag "comment_text_on_#{post.id}", "Comment" + = label_tag "comment_text_on_#{post.id}", t('.comment') = comment.text_area :text, :rows => 1, :id => "comment_text_on_#{post.id}", :class => "comment_box" = comment.hidden_field :post_id, :value => post.id diff --git a/app/views/invitations/_new.haml b/app/views/invitations/_new.haml index 77b07faa2..b05792dd1 100644 --- a/app/views/invitations/_new.haml +++ b/app/views/invitations/_new.haml @@ -1,20 +1,23 @@ .span-12.last .modal_title_bar - %h4 Invite someone to join Diaspora! + %h4 + = t('.invite_someone_to_join') - %i if they accept, they will be added to the aspect you invited them + %i + = t('.if_they_accept_info') = form_for User.new, :url => invitation_path(User) do |invite| %p - = invite.label :email + = invite.label :email , t('.email') = invite.text_field :email - To + = t('.to') - unless @aspect.is_a? Aspect = invite.select(:aspects, @aspects_dropdown_array) - else = invite.select(:aspects, @aspects_dropdown_array, :selected => @aspect.id) - Message: + = t('.message') + = invite.text_area :invite_messages, :value => "" - %p= invite.submit "Send an invitation" + %p= invite.submit t('.send_an_invitation') diff --git a/app/views/invitations/new.html.haml b/app/views/invitations/new.html.haml index 598b16a3d..1b226aa80 100644 --- a/app/views/invitations/new.html.haml +++ b/app/views/invitations/new.html.haml @@ -1,8 +1,9 @@ -%h2 Send invitation +%h2 + = t('.send_invitation') = form_for User.new, :url => invitation_path(User) do |f| = devise_error_messages! %p - = f.label :email + = f.label :email , t('.email') = f.text_field :email - %p= f.submit "Send an invitation" + %p= f.submit t('.send_an_invitation') /= link_to "Home", after_sign_in_path_for(resource_name) diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index c8c0448cc..70f610ebc 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -44,7 +44,7 @@ %header .container{:style => "position:relative;"} #diaspora_text{:href => root_path} - = link_to "DIASPORA*", (current_user ? root_path : new_user_session_path) + = link_to "DIASPORA", (current_user ? root_path : new_user_session_path) %span.sub_text PREVIEW diff --git a/app/views/people/edit.html.haml b/app/views/people/edit.html.haml index f9aaab68c..082a31c2a 100644 --- a/app/views/people/edit.html.haml +++ b/app/views/people/edit.html.haml @@ -16,7 +16,7 @@ %h3 = t('.your_profile') .description - This info will be available to whomever you connect with on Diaspora. + =t('.info_available_to') = person.error_messages diff --git a/app/views/people/show.html.haml b/app/views/people/show.html.haml index 022955032..0dd95e752 100644 --- a/app/views/people/show.html.haml +++ b/app/views/people/show.html.haml @@ -32,7 +32,7 @@ - if @person == current_user.person %b - = link_to "Edit my profile", edit_person_path(@person) + = link_to t('.edit_my_profile'), edit_person_path(@person) %br %br diff --git a/app/views/shared/_invitations.haml b/app/views/shared/_invitations.haml index 40476eae7..8ef2ba877 100644 --- a/app/views/shared/_invitations.haml +++ b/app/views/shared/_invitations.haml @@ -1,6 +1,7 @@ -%h4 Invites -= link_to "Invite a friend", "#invite_user_pane", :class => "invite_user_button", :title => "Invite a friend" -= "(#{invites} left)" +%h4 + = t('.invites') += link_to t('.invite_a_friend'), "#invite_user_pane", :class => "invite_user_button", :title => "Invite a friend" += t('.invitations_left', :count => invites) %br .yo{ :style => "display:none;"} #invite_user_pane diff --git a/app/views/shared/_publisher.haml b/app/views/shared/_publisher.haml index 6499b01f3..5f36f3c84 100644 --- a/app/views/shared/_publisher.haml +++ b/app/views/shared/_publisher.haml @@ -26,7 +26,7 @@ = form_for StatusMessage.new, :remote => true do |status| = status.error_messages %p - = status.label :message, "Post a message to #{aspect}" + = status.label :message, t('.post_a_message_to', :aspect => aspect) = status.text_area :message, :rows => 2, :value => params[:prefill] = status.hidden_field :to, :value => (aspect == :all ? aspect : aspect.id) @@ -35,7 +35,7 @@ - if aspect == :all .public_toggle = status.check_box( :public, {}, true, false ) - make public + = t('.make_public') = link_to '(?)', "#question_mark_pane", :class => 'question_mark' .fancybox_content @@ -48,7 +48,7 @@ = status.submit t('.share'), :title => "Share with #{aspect}" #publisher_photo_upload - or + = t('.or') = render 'photos/new_photo', :aspect_id => (aspect == :all ? aspect : aspect.id), :album_id => nil diff --git a/app/views/shared/_reshare.haml b/app/views/shared/_reshare.haml index 44c8f00dd..a479dddef 100644 --- a/app/views/shared/_reshare.haml +++ b/app/views/shared/_reshare.haml @@ -5,7 +5,7 @@ - unless current_user.aspects.size == current_user.aspects_with_post(post.id).size .reshare_pane %span.reshare_button - = link_to "Reshare", "#" + = link_to t('.reshare'), "#" %ul.reshare_box - for aspect in current_user.aspects @@ -14,4 +14,4 @@ - else .reshare_pane %span.reshare_button - = link_to "Reshare", "#", :class => "inactive" + = link_to t('.reshare'), "#", :class => "inactive" diff --git a/app/views/users/edit.html.haml b/app/views/users/edit.html.haml index 23fae0742..7aa2bbcda 100644 --- a/app/views/users/edit.html.haml +++ b/app/views/users/edit.html.haml @@ -44,7 +44,7 @@ .submit_block = link_to t('.cancel'), edit_user_path(current_user) - or + = t('.or') = f.submit t('.change_password') %h3 diff --git a/config/deploy_config.yml b/config/deploy_config.yml index 06a6747e1..f99ef75d1 100644 --- a/config/deploy_config.yml +++ b/config/deploy_config.yml @@ -6,7 +6,7 @@ cross_server: deploy_to: '/usr/local/app/diaspora' user: 'root' repo: 'git://github.com/diaspora/diaspora.git' - branch: 'master' + branch: 'diaspora-handle-request' default_env: 'development' servers: tom: diff --git a/config/initializers/locale.rb b/config/initializers/locale.rb index 08d3923b0..5d4a53a61 100644 --- a/config/initializers/locale.rb +++ b/config/initializers/locale.rb @@ -4,4 +4,8 @@ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. I18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')] -I18n.default_locale = :en +I18n.default_locale = DEFAULT_LANGUAGE +I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) +AVAILABLE_LANGUAGE_CODES.each do |c| + I18n.fallbacks[c.to_sym] = [c.to_sym, DEFAULT_LANGUAGE.to_sym, :en] +end \ No newline at end of file diff --git a/config/locales/diaspora/ar.yml b/config/locales/diaspora/ar.yml index 87522287a..6e9d7700e 100644 --- a/config/locales/diaspora/ar.yml +++ b/config/locales/diaspora/ar.yml @@ -5,18 +5,18 @@ # Sample localization file for Arabic. ar: - hello: "مرحبا العالم" + hello: "مرحبا" application: helper: - unknown_person: "غير معروف شخص" + unknown_person: "شخص غير معروف" new_requests: "طلبات جديدة" dashboards: helper: - home: "منزل" + home: "الرئيسية" error_messages: helper: - invalid_fields: "الحقول غير صالحة" - correct_the_following_errors_and_try_again: ".تصحيح الأخطاء التالية وحاول مرة أخرى" + invalid_fields: "مدخلات غير صحيحة" + correct_the_following_errors_and_try_again: ".صحح الأخطاء التالية وحاول مرة أخرى" people: helper: results_for: "%{params} نتائج " @@ -34,39 +34,39 @@ ar: all_aspects: "جميع الجوانب" manage_aspects: "إدارة الجوانب" publisher: - share: "تقاسم" + share: "مشاركة" aspect_friends: add_friends: "أضف أصدقاء" albums: album: you: "أنت" new_album: - create: "خلق" - add_a_new_album: "إضافة ألبوم جديد" + create: "جديد" + add_a_new_album: "أضف ألبوم جديد" show: edit_album: "تعديل الألبوم" albums: "البومات" updated: "تحديث" by: "بواسطة" edit: - editing: "التحرير" - updated: "تحديث" + editing: "تحرير" + updated: "محدث" are_you_sure: "هل أنت متأكد؟" delete_album: "حذف ألبوم" cancel: "إلغاء" index: - home: "منزل" + home: "الرئيسية" new_album: "ألبوم جديد" create: - success: ".ألبوما %{name} لقد قمت دعا" + success: " .%{name} لقد قمت بإنشاء ألبوم بإسم" update: - success: ".تحرير بنجاح %{name} الألبوم" + success: ".بنجاح %{name} تم تحرير ألبوم" failure: ".%{name} فشلت في تحرير ألبوم" destroy: - success: ".حذفها %{name} الألبوم" + success: ".%{name} تم حذف ألبوم" helper: - friends_albums: "أصدقاء البومات" - your_albums: "البومات الخاص" + friends_albums: "ألبومات الأصدقاء" + your_albums: "البوماتك" aspects: index: photos: "صور" @@ -81,23 +81,23 @@ ar: ignore_remove: "تجاهل/إزالة" new_aspect: add_a_new_aspect: "أضف جانبا جديدا" - create: "خلق" + create: "جديد" create: - success: ".الذي يمكن أن نرى الجانب الجديد الخاص بك Diaspora انقر على علامة الجمع على الجانب الأيسر لنقو" + success: ".من الذي يمكنه مشاهدة مظهرك الجديد Diaspora انقر على علامة الزائد على الجانب الأيسر لتقول ل" failure: ".فشل إنشاء الجانب" destroy: - success: ".%{name} وقد نجحت في إزالة" + success: ".بنجاح %{name} تم إزالة" update: - success: ".تحرير بنجاح ,%{name} ,وقد الجانب الخاص بك" + success: ".بنجاح %{name} تم تعديل" move_friends: failure: ".%{real_name} فشل تحرير آسبكت لصدي" success: ".جوانب الموضوع بنجاح" move_friend: failure: "%{inspect} لم تنجح" - success: ".أنت الآن عرض صديقك جانبا مختلفا من جوانب نفسك" + success: ".تم إضافة صديقك بنجاح" helper: - remove: "نزع" - aspect_not_empty: "الجانب يست فارغ" + remove: "حذف" + aspect_not_empty: "الجانب ليس فارغ" users: edit: editing_profile: "تحرير الملف الشخصي" @@ -110,82 +110,82 @@ ar: picture: "صورة" editing_profile: "تحرير الملف الشخصي" albums: "البومات" - you_dont_have_any_photos: "ليس لديك أي صوا! نتقل إلى" - page_to_upload_some: ".الصفحة لتحميل بعض" + you_dont_have_any_photos: "ليس لديك أي صور! انتقل إلى" + page_to_upload_some: ".صفحة تحميل بعض" comments: comment: ago: "منذ" new_comment: - comment: "كيف" + comment: "تعليق" photos: show: prev: "السابق" - full_size: "الحجم الكام" + full_size: "الحجم اﻷصلي" next: "القادم" - edit_photo: "تحرير الصو" - delete_photo: "حذف الصو" + edit_photo: "تحرير الصورة" + delete_photo: "حذف الصورة" are_you_sure: "هل أنت متأكد؟" comments: "تعليقات" edit: - editing: "تصحيح" - are_you_sure: "هل أنت متأك؟" - delete_photo: "حذف الصو" + editing: "تحرير" + are_you_sure: "هل أنت متأكد؟" + delete_photo: "حذف الصورة" photo: - show_comments: "sعرض التعليقا" - posted_a_new_photo_to: "أرسلت صورة جديدة ل" + show_comments: "عرض التعليقات" + posted_a_new_photo_to: "أضفت صورة جديدة ل" new: - new_photo: "جديد الصو" - back_to_list: "عودة إلى قائم" - post_it: "!بعد ذلك" + new_photo: "صورة جديدة" + back_to_list: "عودة إلى القائمة" + post_it: "!ألصقها" create: - runtime_error: "?فشل تحميل الصور. هل أنت متأكد من أن يتم ربط حزام الأمان" - integrity_error: "?فشل تحميل الصور. هل أنت متأكد من أن صورة" - type_error: "?فشل تحميل الصور. هل أنت متأكد من وأضيف صورة" + runtime_error: "فشل تحميل الصور. هل ربطت حزام الأمان؟" + integrity_error: "فشل تحميل الصور. هل ملفك صورة؟" + type_error: "فشل تحميل الصور. هل أنت متأكد أنك أضفت صورة؟" update: - notice: ".الصورة تحديثها بنجاح" - error: ".فشل لتحرير الصو" + notice: "تم تحديث الصورة بنجاح" + error: "فشل تحرير الصورة." destroy: - notice: ".الصور المحذوفة" + notice: "تم حذف الصورة" registrations: new: - sign_up: "قم بالتسجي" + sign_up: "التسجيل" create: - success: "!Diaspora لقد انضممت" + success: "!Diaspora سجل في" status_messages: new_status_message: - tell_me_something_good: "قل لي شيئا جيد" - oh_yeah: "!نعم" + tell_me_something_good: "قل لي شيئا جيداً" + oh_yeah: "!يا سلااام" status_message: - show_comments: "عرض التعليقا" + show_comments: "عرض التعليقات" delete: "حذف" are_you_sure: "هل أنت متأكد؟" show: - status_message: "رسالة الحالة" + status_message: "الحالة" comments: "تعليقات" are_you_sure: "هل أنت متأكد؟" - destroy: "هدم" - view_all: "عرض الك" + destroy: "إزالة" + view_all: "عرض الكل" message: "رسالة" owner: "مالك" helper: - no_message_to_display: ".أي رسالة لعرضه" + no_message_to_display: "لا يوجد رسالة لعرضها" people: person: - add_friend: "أضف صدي" - pending_request: "في انتظار طلب" + add_friend: "أضف صديق" + pending_request: "طلبات معلقة" index: - add_friend: "أضف صدي" - real_name: "اسمه الحقيقي" + add_friend: "أضف صديق" + real_name: "الاسم الحقيقي" diaspora_handle: "اسمك المستعار diaspora" - thats_you: "!هذا لك" - friend_request_pending: "طلب صديق معلقة" - you_have_a_friend_request_from_this_person: "لديك صديق طلب من هذا الشخص" + thats_you: "!هذا أنت" + friend_request_pending: "طلبات صداقة معلقة" + you_have_a_friend_request_from_this_person: "لديك طلب صداقة من هذا الشخص" new: new_person: "شخص جديد" - back_to_list: "عودة إلى قائمة" + back_to_list: "عودة إلى القائمة" show: - last_seen: "%{how_long_ago} :المشاهدة الأخيرة" - friends_since: "%{how_long_ago} :أصدقاء منذ" + last_seen: "%{how_long_ago} :آخر مشاهدة" + friends_since: "%{how_long_ago} :صديق منذ" save: "حفظ" are_you_sure: "هل أنت متأكد؟" remove_friend: "إزالة صديق" @@ -194,13 +194,13 @@ ar: add_a_new_friend_to: "إضافة صديق جديد إلى" enter_a_diaspora_username: ":Diaspora أدخل اسم مستخدم" your_diaspora_username_is: "%{diaspora_handle} :هو Diaspora اسم المستخدم الخاص" - friends_username: "صديق اسم المستخدم" + friends_username: "اسم مستخدم الصديق" destroy: - success: ".أنت الآن أصدقاء" - error: "!الرجاء اختيار جانبا" - ignore: ".صديق تجاهل الطلب" + success: ".أنتم الآن أصدقاء" + error: "!الرجاء اختيار جانب" + ignore: ". تجاهل طلب الصداقة" create: - error: "!مع هذا البريد الإلكتروني diaspora لم يتم العثور على بذور" - already_friends: "!%{destination_url} كنت بالفعل مع أصدقاء" - success: ".%{destination_url} وأرسل طلب صداقة إلى" - horribly_wrong: ".ذهب شيء خاطئ" + error: "!في هذا البريد الإلكتروني diaspora لم يتم العثور على بذور" + already_friends: "!من قبل %{destination_url} أنت صديق مع" + success: ".%{destination_url} تم إرسال طلب صداقة ل" + horribly_wrong: ".فيه بلوى كبيرة حصلت" diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index ca1d8f471..250315b6a 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -54,9 +54,18 @@ en: manage_aspects: "Manage Aspects" publisher: share: "Share" + or: "or" + post_a_message_to: "Post a message to %{aspect}" + make_public: "make public" aspect_friends: add_friends: "add friends" photos: "photos" + invitations: + invites: 'Invites' + invite_a_friend: 'Invite a friend' + invitations_left: '(%{count} left)' + reshare: + reshare: 'Reshare' albums: album: you: "you" @@ -141,6 +150,7 @@ en: account: "Account" services: "Services" cancel: "Cancel" + or: "or" destroy: "Account successfully closed." getting_started: signup_steps: "Complete your sign-up by doing these things:" @@ -205,7 +215,14 @@ en: already_friends: 'You are already friends with this person' invitation_token_invalid: 'The invitation token provided is not valid!' updated: 'Your password was set successfully. You are now signed in.' - + new: + email: 'Email' + invite_someone_to_join: 'Invite someone to join Diaspora!' + if_they_accept_info: 'if they accept, they will be added to the aspect you invited them' + to: 'To' + message: 'Message:' + send_an_invitation: 'Send an invitation' + send_invitation: 'Send invitation' status_messages: new_status_message: tell_me_something_good: "tell me something good" @@ -214,6 +231,7 @@ en: show_comments: "show comments" delete: "Delete" are_you_sure: "Are you sure?" + ago: "ago" show: status_message: "Status Message" comments: "comments" @@ -246,8 +264,10 @@ en: remove_friend: "remove friend" no_posts: "no posts to display!" add_friend: "add friend" + edit_my_profile: "Edit my profile" edit: settings: "Settings" + info_available_to: "This info will be available to whomever you connect with on Diaspora." your_profile: "Your profile" your_name: "Your name" first_name: "First name" diff --git a/config/locales/diaspora/sv.yml b/config/locales/diaspora/sv.yml index d5b18e6fa..587bc4350 100644 --- a/config/locales/diaspora/sv.yml +++ b/config/locales/diaspora/sv.yml @@ -58,7 +58,7 @@ sv: view_profile: "visa profil" edit_profile: "ändra profil" account_settings: "kontoinstallningar" - search: "Search" + search: "Sök ..." logout: "logga ut" shared: aspect_nav: diff --git a/db/seeds/tom.rb b/db/seeds/tom.rb index 28f043728..6290da594 100644 --- a/db/seeds/tom.rb +++ b/db/seeds/tom.rb @@ -42,8 +42,8 @@ user2.save! user2.seed_aspects user2.person.save! # friending users -aspect = user.aspect(:name => "other dudes") -aspect2 = user2.aspect(:name => "presidents") +aspect = user.aspects.create(:name => "other dudes") +aspect2 = user2.aspects.create(:name => "presidents") friend_users(user, aspect, user2, aspect2) -user.aspect(:name => "Presidents") +user.aspects.create(:name => "Presidents") diff --git a/lib/diaspora/user/friending.rb b/lib/diaspora/user/friending.rb index db3a30c4d..472926346 100644 --- a/lib/diaspora/user/friending.rb +++ b/lib/diaspora/user/friending.rb @@ -140,7 +140,7 @@ module Diaspora end def requests_for_me - pending_requests.select{|req| req.person != self.person } + pending_requests.select{|req| req.destination_url == self.person.receive_url} end end end diff --git a/lib/diaspora/user/receiving.rb b/lib/diaspora/user/receiving.rb index a651b4793..586fcc904 100644 --- a/lib/diaspora/user/receiving.rb +++ b/lib/diaspora/user/receiving.rb @@ -21,17 +21,22 @@ module Diaspora Rails.logger.debug("From: #{object.person.inspect}") if object.person - if object.is_a?(Comment) || object.is_a?(Post) + if object.is_a?(Comment) || object.is_a?(Post)|| object.is_a?(Request) e = EMWebfinger.new(object.diaspora_handle) e.on_person { |person| if person.class == Person + object.person = person sender_in_xml = sender(object, xml, person) if (salmon_author != sender_in_xml) raise "Malicious Post, #{salmon_author.real_name} with id #{salmon_author.id} is sending a #{object.class} as #{sender_in_xml.real_name} with id #{sender_in_xml.id} " end + if object.is_a? Request + return receive_request object, sender_in_xml + end + raise "Not friends with that person" unless self.contact_for(salmon_author) if object.is_a?(Comment) @@ -50,17 +55,12 @@ module Diaspora raise "Malicious Post, #{salmon_author.real_name} with id #{salmon_author.id} is sending a #{object.class} as #{sender_in_xml.real_name} with id #{sender_in_xml.id} " end - if object.is_a? Request - return receive_request object, sender_in_xml - end raise "Not friends with that person" unless self.contact_for(salmon_author) if object.is_a? Retraction receive_retraction object, xml elsif object.is_a? Profile receive_profile object, xml - else - receive_post object, xml end end end @@ -68,13 +68,10 @@ module Diaspora def sender(object, xml, webfingered_person = nil) if object.is_a? Retraction sender = object.person - elsif object.is_a? Request - sender = object.person elsif object.is_a? Profile sender = Diaspora::Parser.owner_id_from_xml xml else - object.person = webfingered_person if object.is_a?(Comment) sender = (owns?(object.post))? object.person : object.post.person else @@ -98,10 +95,9 @@ module Diaspora end def receive_request request, person - person.serialized_public_key ||= request.exported_key request.person = person - request.person.save - old_request = Request.first(:id => request.id) + request.person.save! + old_request = Request.find(request.id) Rails.logger.info("I got a reqest_id #{request.id} with old request #{old_request.inspect}") request.aspect_id = old_request.aspect_id if old_request request.save diff --git a/pkg/.gitignore b/pkg/.gitignore new file mode 100644 index 000000000..470b7660b --- /dev/null +++ b/pkg/.gitignore @@ -0,0 +1,2 @@ +dist +*.log diff --git a/pkg/README.md b/pkg/README.md new file mode 100644 index 000000000..aa99e0ad7 --- /dev/null +++ b/pkg/README.md @@ -0,0 +1,15 @@ +## Diaspora install and packaging tools + +This directory contains stuff to install and run diaspora. + +- ubuntu-setup.bash: script which installs all of Diasporas + dependencies and starts the server. + +- bootstrap-fedora-diaspora.sh. does the same for Fedora. + +- source: stuff to package Diaspora into traditional tarballs + which can be installed. + +- ubuntu: Scripts and tools to install generic tarballs on Ubuntu + +- fedora: Scripts and tools to create fedora RPMS:s from tarballs diff --git a/pkg/bootstrap-fedora-diaspora.sh b/pkg/bootstrap-fedora-diaspora.sh index 84352f12d..7c0d267d0 100755 --- a/pkg/bootstrap-fedora-diaspora.sh +++ b/pkg/bootstrap-fedora-diaspora.sh @@ -1,48 +1,127 @@ #!/bin/bash +# +# Install diaspora, its dependencies and start. +# +# Usage: pkg/bootstrap-fedora-diaspora.sh [external hostname] +# +# Synopsis, install: +# $ git clone git@github.com:diaspora/diaspora.git +# $ cd diaspora +# $ sudo pkg/bootstrap-fedora-diaspora.sh +# +# New start: +# $ sudo su - diaspora +# $ cd diaspora +# $ script/server +# +# Unless already existing, the diaspora user is created. +# The directory the scripts is invoked from is copied to +# diasporas's home dir, populated and configured and finally +# acts as a base for running diaspora servers. +# +# Script is designed not to make any changes in invoking +# caller's environment. +# +# Must run as root -export DIASPORADIR=`pwd` +GIT_REPO='git@github.com:leamas/diaspora.git' +DIASPORA_HOSTNAME=${1:-'mumin.dnsalias.net'} -echo "####" -echo "Installing build deps ..." -echo "####" -sleep 3 -su -c "yum install git bison svn autoconf sqlite-devel gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel ImageMagick git rubygems libxslt libxslt-devel libxml2 libxml2-devel openssl-devel" +test $UID = "0" || { + echo "You need to be root to do this, giving up" + exit 2 +} -echo "####" -echo "Installing RVM ..." -echo "####" -sleep 3 +[[ -d config && -d script ]] || { + echo Error: "this is not a diaspora base directory" + exit 3 +} +yum install -y git bison sqlite-devel gcc-c++ patch \ + readline-devel zlib-devel libyaml-devel libffi-devel \ + ImageMagick libxslt-devel libxml2-devel \ + openssl-devel mongodb-server wget \ + make autoconf automake -mkdir -p ~/.rvm/src/ && cd ~/.rvm/src && rm -rf ./rvm/ && git clone --depth 1 git://github.com/wayneeseguin/rvm.git && cd rvm && ./install +getent group diaspora >/dev/null || groupadd diaspora +getent passwd diaspora >/dev/null || { + useradd -g diaspora -s /bin/bash -m diaspora + echo "Created user diaspora" +} -echo "####" -echo "Installing RVM into bashrc and sourcing bash ..." -echo "####" -sleep 3 +home=$( getent passwd diaspora | cut -d: -f6) +[ -e $home/diaspora ] && { + echo "Moving existing $home/diaspora out of the way" + mv $home/diaspora $home/diaspora.$$ +} +mkdir $home/diaspora +cp -ar * $home/diaspora +chown -R diaspora $home/diaspora -if [[ `grep -l "rvm/scripts/rvm" $HOME/.bashrc | wc -l` -eq 0 ]]; then - echo 'if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then source "$HOME/.rvm/scripts/rvm" ; fi' >> $HOME/.bashrc +service mongod start + +su - diaspora << EOF +#set -x + +cd diaspora + +[ -e "\$HOME/.rvm/scripts/rvm" ] || { + echo '#### Installing rvm ####' + wget http://rvm.beginrescueend.com/releases/rvm-install-head + bash < rvm-install-head && rm rvm-install-head + if [[ -s "\$HOME/.rvm/scripts/rvm" ]]; then + . "\$HOME/.rvm/scripts/rvm" + else + echo "Error: rvm installation failed"; + exit 1; + fi + touch \$HOME/.bashrc + grep -q "rvm/scripts/rvm" \$HOME/.bashrc || { + echo '[[ -s "\$HOME/.rvm/scripts/rvm" ]] && \ + source "\$HOME/.rvm/scripts/rvm"' \ + >> \$HOME/.bashrc + } +} + +source \$HOME/.bashrc + +ruby=\$(which ruby) || ruby="" + +if [[ -z "\$ruby" || ("\${ruby:0:4}" == "/usr") ]]; then + echo '#### Installing ruby (will take forever) ... ####' + rvm install ruby-1.8.7-p302 + rvm --default ruby-1.8.7 + + echo "#### Installing bundler ... ####" + gem install bundler fi -source $HOME/.bashrc -echo "####" -echo "Installing ruby (will take forever) ..." -echo "####" -sleep 3 +bundle install -rvm install ruby-1.8.7-p302 -rvm --default ruby-1.8.7 +#Configure diaspora +cp config/app_config.yml.example config/app_config.yml +source pkg/source/funcs.sh +init_appconfig config/app_config.yml "$DIASPORA_HOSTNAME" -echo "####" -echo "Installing bundler ..." -echo "####" -sleep 3 -gem install bundler +echo "Setting up DB..." +if bundle exec rake db:seed:dev ; then + cat <<- EOM + DB ready. Login -> tom and password -> evankorth. + More details ./diaspora/db/seeds/tom.rb. and ./diaspora/db/seeds/dev.rb. + EOM +else + cat <<- EOM + Database config failed. You might want to remove all db files with + 'rm -rf /var/lib/mongodb/*' and/or reset the config file by + 'cp config/app_config.yml.example config/app_config.yml' before + making a new try. Also, make sure the mongodb server is running + e. g., by running 'service mongodb status'. + EOM +fi + +echo "Starting server" +script/server + +EOF -echo "####" -echo "Installing deps with bundle ..." -echo "####" -sleep 3 -pushd $DIASPORADIR && bundle install && popd diff --git a/pkg/fedora/README.md b/pkg/fedora/README.md index 38801dc42..e926f5a4d 100644 --- a/pkg/fedora/README.md +++ b/pkg/fedora/README.md @@ -1,13 +1,12 @@ ## Diaspora RPM tools -Creates diaspora source tarballs and RPM packages +Create RPM packages An alternative to the capistrano system, providing classic, binary RPM -packages for deployment on Fedora 13 and OS-independent source tarballs -aimed for packaging purposes. +packages for deployment on Fedora. -#### Fedora RPM synopsis +#### Synopsis Prerequisites: @@ -18,16 +17,20 @@ Prerequisites: - A personal environment to build RPM:s, also described in [RPM installation Fedora](http://github.com/diaspora/diaspora/wiki/Rpm-installation-on-fedora) -Install g++ (unnecessary?): +Install g++ and gcc: % yum install gcc-c++ -Create source tarballs like dist/diaspora-0.0-1010041233_fade4231.tar.gz -and dist/diaspora-bundle-0.0-1010041233_fade4231.tar.gz: - % ./make-dist.sh source - % ./make-dist.sh bundle +Bootstrap the distribution from git: + % sudo apt-get install git-core + % git clone git://github.com/diaspora/diaspora.git + % cd diaspora/pkg/ubuntu -Setup links to tarballs from RPM source directory and create spec files: - % ./make-dist.sh prepare +Create and install the diaspora bundle and application in +diaspora/pkg/source according to +[source README](http://github.com/diaspora/diaspora/tree/master/pkg/source/) + +Setup links from tarballs to RPM source directory and create spec files: + % ./prepare-rpm.sh Build rpms: rpmbuild -ba dist/diaspora.spec @@ -51,75 +54,21 @@ apache/passenger setup. After configuration, start with: /sbin/service diaspora-wsd start /sbin/service httpd restart -#### Generic source synopsis - -Generate source tarball: - % ./make-dist.sh source - Using repo: http://github.com/diaspora/diaspora.git - Commit id: 1010092232_b313272 - Source: dist/diaspora-0.0-1010092232_b313272.tar.gz - Required bundle: 1010081636_d1a4ee0 - % - -The source tarball could be used as-is, by unpacking add making a -*bundle install*. An alternative is to generate a canned bundle like: - % ./make-dist.sh bundle - [ lot's of output...] - Bundle: dist/diaspora-bundle-0.0-1010081636_d1a4ee0.tar.gz - % - -This file can be installed anywhere. To use it, add a symlink from vendor/bundle -to the bundle's bundle directory. Reasonable defaults are to install -diaspora in /usr/share/diaspora and bundle in /usr/lib/diaspora-bundle. With these, -the link is - % rm -rf /usr/share/diaspora/master/vendor/bundle - % ln -sf /usr/lib/diaspora-bundle/vendor/bundle \ - > /usr/share/diaspora/master/vendor - % - -The directories tmp, log, and public/uploads needs to be writable. If using -apache passenger, read the docs on uid used and file ownership. - -Note that the bundle version required is printed each time a new source -is generated. +prepare-rpm.sh prepare creates links also for all files listed in SOURCES. +Typically, this is secondary sources. *make-dist.sh source* #### Notes -The source tarball is as retrieved from diaspora with following differences: +prepare-rpm.sh prepare creates links also for all files listed in SOURCES. +Typically, this is secondary sources. - - The .git directories are removed (freeing more than 50% of the size). - - A new file /master/config/gitversion is created. - - The file public/source.tar.gz is generated. - - The file .bundle/config is patched. Remove before doing - *bundle install* - -The bundle is basically the output from 'bundle package'. The git-based -gems are also added into vendor/git. - -./make-dist.sh bundle|source occasionally fails on bad Gemfile.lock. The -root cause is a bad Gemfile in the git repo. Possible fixes includes -using a older version known to work: - % ./make-dist.sh -c c818885b6 bundle - % ./make-dist.sh -c c818885b6 source - -or forcing a complete update of Gemfile.lock using 'bundle update' (a -potentially problematic operation): - % ./make-dist.sh -f bundle - -*make-dist prepare* creates links also for all files listed in SOURCES. -Typically, this is secondary sources. *make-dist.sh sources* -applies all patches named *.patch in this directory after checking out -source from git. - -The spec-files in dist/ are patched by *./make-dist.sh prepare* to reference -correct versions of diaspora and diaspora-bundle. The diaspora-bundle -is only updated if Gemfile is updated, upgrading diaspora doesn't -always require a new diaspora-bundle. Editing spec files should be done -in this directory, changes in dist/ are lost when doing *./make-dist prepare*. +The spec-files in dist/ are patched by *./prepare-rpm.sh to reference +correct versions of diaspora and diaspora-bundle. Editing spec files should be +done in this directory, changes in dist/ are lost when doing *./prepare-rpm.sh *. The topmost comment's version is patched to reflect the complete version -of current specfile by *make-dist source*. Write the comment in this -directory, copy-paste previous version nr. It will be updated. +of current specfile . Write the comment in this directory, copy-paste +previous version nr. It will be updated. This has been confirmed to start up and provide basic functionality both using the thin webserver and apache passenger, on 32/64 bit systems and in the @@ -128,17 +77,6 @@ at [ftp://mumin.dnsalias.net/pub/leamas/diaspora/builds](ftp://mumin.dnsalias.ne #### Implementation -'make-dist.sh source' script checks out latest version of diaspora into the - dist/diaspora directory. This content is, after some patches, the diaspora package. - -'make-dir.sh bundle' makes a *bundle package* in the diaspora dir. -The resulting bundle is stored in vendor/bundle. This is, after some more -patches, the content of diaspora-bundle tarball. Target systems makes a -*bundle install --local* to use it. - -Here is also support for running the diaspora websocket service as a system -service through /sbin/service and some install scripts. - Diaspora files are stored in /usr/share/diaspora, and owned by root. The bundle, containing some C extensions, is architecture-dependent and lives in /usr/lib[64]/diaspora. Log files are in /var/log/diaspora. Symlinks in @@ -154,6 +92,9 @@ diaspora app. This is more or less as mandated by LSB and Fedora packaging rule #### Discussion +The 1.8.7 rebuild is a pain. However, in Fedora 14 1.8.7 is the default +ruby version. + For better or worse, this installation differs from the procedure outlined in the original README.md: diff --git a/pkg/fedora/prepare-rpm.sh b/pkg/fedora/prepare-rpm.sh new file mode 100755 index 000000000..908c1844a --- /dev/null +++ b/pkg/fedora/prepare-rpm.sh @@ -0,0 +1,169 @@ +#!/bin/bash + +# Create RPM spec files matching diaspora tarballs +# +# Usage: See function usage() at bottom. +# +GIT_REPO='http://github.com/diaspora/diaspora.git' +VERSION='0.0' +RELEASE='1' + +. ../source/funcs.sh + + +function fix_alphatag() +# Patch version on top comment first id line: +# Usage: fix_alphatag +# Patches:\ +# * Fri Sep 24 2010 name surname 1.20100925_faf23207 +{ + local dist=$(rpm --eval %dist) + awk -v dist="$dist" -v version="$2" -v commit="$3" -v release="$4" \ + ' BEGIN { done = 0 } + /^[*]/ { if (done) + print + else + { + s = sprintf( "-%s.%s%s\n", release, commit, dist) + gsub( "-[0-9][.][^ ]*$", s) + done = 1 + # add new gsub for version... + print + } + next + } + { print }' < $1 > $1.tmp && mv -f $1.tmp $1 +} + + +function fix_bundle_deps +# usage: fix_bundle_deps +# Patches: Requires: diaspora-bundle = 0.0-20101021-aefsf323148 +{ + awk -v vers="$2-$3" \ + ' /Requires:/ { if ($2 == "diaspora-bundle") + printf( "%s %s = %s\n", $1,$2,vers) + else + print + next + } + { print}' \ + < $1 > $1.tmp && mv -f $1.tmp $1 +} + + +function patch() +# Patch spec-files with current version-release +# Usage: patch +{ + sed -e "/^%define/s|HEAD|$2|" \ + -e '/^Version:/s|.*|Version: '$1'|' \ + dist/diaspora.spec + fix_alphatag dist/diaspora.spec $1 $2 $3 + local bundle_id=$(git_id dist/diaspora/Gemfile) + local dist_tag=$(rpm --eval %dist) + fix_bundle_deps dist/diaspora.spec $1 "$RELEASE.${bundle_id}$dist_tag" + sed -e "/^%define/s|HEAD|$bundle_id|" \ + -e '/^Version:/s|.*|Version: '$1'|' \ + < diaspora-bundle.spec > dist/diaspora-bundle.spec + + cp dist/diaspora.spec dist/diaspora/diaspora.spec +} + + +function prepare_rpm() +# Usage: prepare_rpm < commit> +{ + local dest=$(rpm --eval %_sourcedir) + test -z "$dest" && { + echo "Can't find RPM source directory, giving up." + exit 2 + } + + local commit=$( checkout $1) + echo "Release: $RELEASE.$commit" + echo "Rpm source dir: $dest" + + patch $VERSION $commit $RELEASE + + local src="dist/diaspora-$VERSION-$commit.tar.gz" + test -e $src || + cat <<- EOF + Warning: $src does not exist + (last version not built?) + EOF + ln -sf $PWD/$src $dest + + local bundle_commit=$( git_id dist/diaspora/Gemfile) + local bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz" + test -e $bundle || + cat <<- EOF + Warning: $bundle does not exist + (last version not built?) + EOF + ln -sf $PWD/$bundle $dest + + local file + for file in $( grep -v '^#' SOURCES); do + if [ -e "$file" ]; then + ln -sf $PWD/$file $dest/$file + else + echo "Warning: $file (listed in SOURCES) does not exist" + fi + done + + ( cd $dest; find . -type l -not -readable -exec rm {} \;) + echo "Source specfile: dist/diaspora.spec" + echo "Bundle specfile: dist/diaspora-bundle.spec" +} + + +function usage() +{ + cat <<- EOF + + Usage: prepare-rpm [options] + + Options: + + -h Print this message. + -r release For prepare, mark with release nr, defaults to 1. + -u uri Git repository URI, defaults to + $GIT_REPO. + + Symlink bundle and source tarballs to rpm source dir, create + patched rpm spec files. + + All results are stored in dist/ + + EOF +} + + +commit='HEAD' +BUNDLE_FIX='no' +while getopts ":r:u:h" opt +do + case $opt in + r) RELEASE="$OPTARG:" + ;; + h) usage + exit 0 + ;; + u) GIT_REPO="$OPTARG" + ;; + *) usage + exit 2 + ;; + esac +done +shift $(($OPTIND - 1)) + +typeset -r GIT_REPO RELEASE BUNDLE_FIX +export LANG=C + +test $# -gt 0 && { + usage; + exit 2; +} +prepare_rpm diff --git a/pkg/source/README.md b/pkg/source/README.md new file mode 100644 index 000000000..789da6ec8 --- /dev/null +++ b/pkg/source/README.md @@ -0,0 +1,74 @@ +## Diaspora source tarball generation + +Creates diaspora source tarballs. + +#### Generic source synopsis + +Generate source tarball: + % ./make-dist.sh source + Using repo: http://github.com/diaspora/diaspora.git + Commit id: 1010092232_b313272 + Source: dist/diaspora-0.0-1010092232_b313272.tar.gz + Required bundle: 1010081636_d1a4ee0 + % + +The source tarball could be used as-is, by unpacking add making a +*bundle install*. An alternative is to generate a canned bundle like: + % ./make-dist.sh bundle + [ lot's of output...] + Bundle: dist/diaspora-bundle-0.0-1010081636_d1a4ee0.tar.gz + % + +This file can be installed anywhere. To use it, add a symlinks from app +to the bundle'. Reasonable defaults are to install diaspora in +/usr/share/diaspora and bundle in /usr/lib/diaspora-bundle. With these, +the link setups is + % cd /usr/share/diaspora/master + % rm -rf vendor + % ln -sf /usr/lib/diaspora-bundle/vendor vendor + % ln -sf /usr/lib/diaspora-bundle/Gemfile . + % ln -sf /usr/lib/diaspora-bundle/Gemfile.lock . + + +The directories tmp, log, and public/uploads needs to be writable. If using +apache passenger, read the docs on uid used and file ownership. + +Note that the bundle version required is printed each time a new source +is generated. + +#### Notes + +The source tarball is as retrieved from diaspora with following differences: + + - The .git directories are removed (freeing more than 50% of the size). + - A new file /master/config/gitversion is created. + - The file public/source.tar.gz is generated. + - The file .bundle/config is patched. Remove before doing + *bundle install* + +The bundle is basically the output from 'bundle package'. The git-based +gems are also added into git-gems. Bundle also houses the two files +Gemfile and Gemfile.lock + +*make-dist.sh source* applies all patches named *.patch in this directory +after checking out source from git. + +./make-dist.sh bundle|source occasionally fails on bad Gemfile.lock. The +root cause is a bad Gemfile in the git repo. Possible fixes includes +using a older version known to work: + % ./make-dist.sh -c c818885b6 bundle + % ./make-dist.sh -c c818885b6 source + +or forcing a complete update of Gemfile.lock using 'bundle update' (a +potentially problematic operation): + % ./make-dist.sh -f bundle + +#### Implementation + +'make-dist.sh source' script checks out latest version of diaspora into the + dist/diaspora directory. This content is, after some patches, the diaspora package. + +'make-dir.sh bundle' makes a *bundle package* in the diaspora dir. +The resulting bundle is stored in vendor/bundle. This is, after some more +patches, the content of diaspora-bundle tarball. Target systems makes a +*bundle install --local* to use it. diff --git a/pkg/fedora/add-bundle.diff b/pkg/source/add-bundle.diff similarity index 100% rename from pkg/fedora/add-bundle.diff rename to pkg/source/add-bundle.diff diff --git a/pkg/fedora/dist/.gitkeep b/pkg/source/dist/.gitkeep similarity index 100% rename from pkg/fedora/dist/.gitkeep rename to pkg/source/dist/.gitkeep diff --git a/pkg/source/funcs.sh b/pkg/source/funcs.sh new file mode 100644 index 000000000..e47af236d --- /dev/null +++ b/pkg/source/funcs.sh @@ -0,0 +1,108 @@ +# +# Common stuff for pkg scripts +# + +function git_id +# +# Echo package-friendly source id. +# +# Usage: git_id [-n] [file or directory] +# +{ + local nl="\n" + local file_or_dir="$PWD" + test "$1" = '-n' && { nl=""; shift; } + test -n "$1" && file_or_dir="$1" + if [ -d $file_or_dir ]; then + local file="" + local dir=$file_or_dir + else + local file=$(basename $file_or_dir) + local dir=$(dirname $file_or_dir) + fi + + ( + cd $dir + git log -1 --abbrev-commit --date=iso $file | + awk -v nl="$nl" \ + ' BEGIN { commit = ""; d[1] = "" } + /^commit/ { if ( commit == "") commit = $2 } + /^Date:/ { if (d[1] == "") { + split( $2, d, "-") + split( $3, t, ":") + } + } + END { printf( "%s%s%s%s%s_%s%s", + substr( d[1],3), d[2], d[3], + t[1], t[2], + commit, nl) + }' + ) +} + +function checkout() +# Checkout last version of diaspora unless it's already there. +# Uses global GIT_REPO to determine repo url +# Usage: checkout [commit id, defaults to HEAD] +# Returns: commit for current branch's HEAD. +{ + mkdir dist &>/dev/null || : + ( + local last_repo='' + cd dist + + test -e '.last-repo' && + last_repo=$( cat '.last-repo') + test "$last_repo" != $GIT_REPO && + rm -rf diaspora + test -d diaspora || { + git clone --quiet $GIT_REPO; + ( + cd diaspora; + git checkout Gemfile Gemfile.lock + git remote add upstream \ + git://github.com/diaspora/diaspora.git + for p in ../../*.patch; do + git apply --whitespace=fix $p > /dev/null + done &> /dev/null || : + ) + } + echo -n "$GIT_REPO" > '.last-repo' + + cd diaspora; + git fetch --quiet upstream + git merge --quiet upstream/master + [ -n "$1" ] && git reset --hard --quiet $1 + git_id -n + ) +} + +function init_appconfig +# Edit pod_url in hostname +# Silently uses argumetn if present, else run dialog. +# Usage: init_appconfig [hostname] +{ + config=$1 + arg_hostname="$2" + hostname=$( awk '/pod_url:/ { print $2; exit }' <$config ) + + if [ -n "$arg_hostname" ]; then + sed -i "/pod_url:/s|$hostname|$arg_hostname|g" $config && \ + echo "config/app_config.yml updated." + return 0 + else + while : ; do + echo "Current hostname is \"$hostname\"" + echo -n "Enter new hostname [$hostname] :" + read new_hostname garbage + echo -n "Use \"$new_hostname\" as pod_url (Yes/No) [Yes]? :" + read yesno garbage + [ "${yesno:0:1}" = 'y' -o "${yesno:0:1}" = 'Y' -o -z "$yesno" ] && { + sed -i "/pod_url:/s|$hostname|$new_hostname|g" $config && + echo "config/app_config.yml updated." + break + } + done + fi +} + diff --git a/pkg/fedora/make-dist.sh b/pkg/source/make-dist.sh similarity index 50% rename from pkg/fedora/make-dist.sh rename to pkg/source/make-dist.sh index 5d6d1cdba..e96e62ef6 100755 --- a/pkg/fedora/make-dist.sh +++ b/pkg/source/make-dist.sh @@ -1,180 +1,13 @@ #!/bin/bash -# Create a diaspora distribution +# Create diaspora distribution tarballs. # # Usage: See function usage() at bottom. # GIT_REPO='http://github.com/diaspora/diaspora.git' VERSION='0.0' -RELEASE='1' - -function git_id -# -# Echo package-friendly source id. -# -# Usage: git_id [-n] [file or directory] -# -{ - local nl="\n" - local file_or_dir="$PWD" - test "$1" = '-n' && { nl=""; shift; } - test -n "$1" && file_or_dir="$1" - if [ -d $file_or_dir ]; then - local file="" - local dir=$file_or_dir - else - local file=$(basename $file_or_dir) - local dir=$(dirname $file_or_dir) - fi - - ( - cd $dir - git log -1 --abbrev-commit --date=iso $file | - awk -v nl="$nl" \ - ' BEGIN { commit = ""; d[1] = "" } - /^commit/ { if ( commit == "") commit = $2 } - /^Date:/ { if (d[1] == "") { - split( $2, d, "-") - split( $3, t, ":") - } - } - END { printf( "%s%s%s%s%s_%s%s", - substr( d[1],3), d[2], d[3], - t[1], t[2], - commit, nl) - }' - ) -} - - -function fix_alphatag() -# Patch version on top comment first id line: -# Usage: fix_alphatag -# Patches:\ -# * Fri Sep 24 2010 name surname 1.20100925_faf23207 -{ - local dist=$(rpm --eval %dist) - awk -v dist="$dist" -v version="$2" -v commit="$3" -v release="$4" \ - ' BEGIN { done = 0 } - /^[*]/ { if (done) - print - else - { - s = sprintf( "-%s.%s%s\n", release, commit, dist) - gsub( "-[0-9][.][^ ]*$", s) - done = 1 - # add new gsub for version... - print - } - next - } - { print }' < $1 > $1.tmp && mv -f $1.tmp $1 -} - - -function fix_bundle_deps -# usage: fix_bundle_deps -# Patches: Requires: diaspora-bundle = 0.0-20101021-aefsf323148 -{ - awk -v vers="$2-$3" \ - ' /Requires:/ { if ($2 == "diaspora-bundle") - printf( "%s %s = %s\n", $1,$2,vers) - else - print - next - } - { print}' \ - < $1 > $1.tmp && mv -f $1.tmp $1 -} - - -function patch() -# Patch spec-files with current version-release -# Usage: patch -{ - sed -e "/^%define/s|HEAD|$2|" \ - -e '/^Version:/s|.*|Version: '$1'|' \ - dist/diaspora.spec - fix_alphatag dist/diaspora.spec $1 $2 $3 - local bundle_id=$(git_id dist/diaspora/Gemfile) - local dist_tag=$(rpm --eval %dist) - fix_bundle_deps dist/diaspora.spec $1 "$RELEASE.${bundle_id}$dist_tag" - sed -e "/^%define/s|HEAD|$bundle_id|" \ - -e '/^Version:/s|.*|Version: '$1'|' \ - < diaspora-bundle.spec > dist/diaspora-bundle.spec - - cp dist/diaspora.spec dist/diaspora/diaspora.spec -} - - -function checkout() -# Checkout last version of diaspora unless it's already there. -# Usage: checkout [commit id, defaults to HEAD] -# Returns: commit for current branch's HEAD. -{ - mkdir dist &>/dev/null || : - ( - local last_repo='' - cd dist - - test -e '.last-repo' && - last_repo=$( cat '.last-repo') - test "$last_repo" != $GIT_REPO && - rm -rf diaspora - test -d diaspora || { - git clone --quiet $GIT_REPO; - ( - cd diaspora; - git remote add upstream \ - git://github.com/diaspora/diaspora.git - for p in ../../*.patch; do - git apply --whitespace=fix $p > /dev/null - done &> /dev/null || : - ) - } - echo -n "$GIT_REPO" > '.last-repo' - - cd diaspora; - git fetch --quiet upstream - git merge --quiet upstream/master - [ -n "$1" ] && git reset --hard --quiet $1 - git_id -n - ) -} - - -function make_src -# Create a distribution tarball -# Usage: make src -{ - echo "Using repo: $GIT_REPO" - - commit=$(checkout ${1:-'HEAD'}) - echo "Commit id: $commit" - - RELEASE_DIR="diaspora-$VERSION-$commit" - rm -rf dist/${RELEASE_DIR} - mkdir dist/${RELEASE_DIR} - cd dist - mkdir ${RELEASE_DIR}/master - cp -ar diaspora/* diaspora/.git* ${RELEASE_DIR}/master - ( - cd ${RELEASE_DIR}/master - rm -rf vendor/bundle/* vendor/git/* vendor/cache/* gem-tmp - git show --name-only > config/gitversion - tar czf public/source.tar.gz \ - --exclude='source.tar.gz' -X .gitignore * - find $PWD -name .git\* | xargs rm -rf - rm -rf .bundle - /usr/bin/patch -p1 -s <../../../add-bundle.diff - ) - tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && \ - rm -rf ${RELEASE_DIR} - cd .. - echo "Source: dist/${RELEASE_DIR}.tar.gz" - echo "Required bundle: $(git_id dist/diaspora/Gemfile)" -} +. ./funcs.sh function build_git_gems() # Usage: build_git_gems @@ -213,6 +46,38 @@ function build_git_gems() # rm -rf gem-tmp } +function make_src +# Create a distribution tarball +# Usage: make src +{ + echo "Using repo: $GIT_REPO" + + commit=$(checkout ${1:-'HEAD'}) + echo "Commit id: $commit" + + RELEASE_DIR="diaspora-$VERSION-$commit" + rm -rf dist/${RELEASE_DIR} + mkdir dist/${RELEASE_DIR} + cd dist + mkdir ${RELEASE_DIR}/master + cp -ar diaspora/* diaspora/.git* ${RELEASE_DIR}/master + ( + cd ${RELEASE_DIR}/master + rm -rf vendor/bundle/* vendor/git/* vendor/cache/* gem-tmp + git show --name-only > config/gitversion + tar czf public/source.tar.gz \ + --exclude='source.tar.gz' -X .gitignore * + find $PWD -name .git\* | xargs rm -rf + rm -rf .bundle + /usr/bin/patch -p1 -s <../../../add-bundle.diff + ) + tar czf ${RELEASE_DIR}.tar.gz ${RELEASE_DIR} && \ + rm -rf ${RELEASE_DIR} + cd .. + echo "Source: dist/${RELEASE_DIR}.tar.gz" + echo "Required bundle: $(git_id dist/diaspora/Gemfile)" +} + function make_docs() { local gems=$1 @@ -238,6 +103,7 @@ function make_docs() } + function make_bundle() # Create the bundle tarball # Usage: make_bundle [ commit, defaults to HEAD] @@ -280,6 +146,7 @@ function make_bundle() mv vendor/cache ../$bundle_name/vendor mv vendor/gems ../$bundle_name/vendor mv git-repos ../$bundle_name + git checkout Gemfile cd .. tar czf $bundle_name.tar.gz $bundle_name mv $bundle_name/vendor/cache diaspora/vendor/cache @@ -289,65 +156,16 @@ function make_bundle() echo "Bundle: dist/$bundle_name.tar.gz" } - -function prepare_rpm() -# Usage: prepare_rpm < commit> -{ - local dest=$(rpm --eval %_sourcedir) - test -z "$dest" && { - echo "Can't find RPM source directory, giving up." - exit 2 - } - - local commit=$( checkout $1) - echo "Release: $RELEASE.$commit" - echo "Rpm source dir: $dest" - - patch $VERSION $commit $RELEASE - - local src="dist/diaspora-$VERSION-$commit.tar.gz" - test -e $src || - cat <<- EOF - Warning: $src does not exist - (last version not built?) - EOF - ln -sf $PWD/$src $dest - - local bundle_commit=$( git_id dist/diaspora/Gemfile) - local bundle="dist/diaspora-bundle-$VERSION-$bundle_commit.tar.gz" - test -e $bundle || - cat <<- EOF - Warning: $bundle does not exist - (last version not built?) - EOF - ln -sf $PWD/$bundle $dest - - local file - for file in $( grep -v '^#' SOURCES); do - if [ -e "$file" ]; then - ln -sf $PWD/$file $dest/$file - else - echo "Warning: $file (listed in SOURCES) does not exist" - fi - done - - ( cd $dest; find . -type l -not -readable -exec rm {} \;) - echo "Source specfile: dist/diaspora.spec" - echo "Bundle specfile: dist/diaspora-bundle.spec" -} - - function usage() { cat <<- EOF - Usage: make-dist [options] + Usage: make-dist [options] Options: -h Print this message. -c commit Use a given commit, defaults to last checked in. - -r release For prepare, mark with release nr, defaults to 1. -u uri Git repository URI, defaults to $GIT_REPO. -f For bundle, fix dependencies by running 'bundle update' @@ -355,8 +173,6 @@ function usage() source Build a diaspora application tarball. bundle Build a bundler(1) bundle for diaspora. - prepare Symlink bundle and source tarballs to rpm source dir, - create patched rpm spec files. All results are stored in dist/ @@ -366,15 +182,13 @@ function usage() commit='HEAD' BUNDLE_FIX='no' -while getopts ":r:c:u:fh" opt +while getopts ":c:u:fh" opt do case $opt in u) GIT_REPO="$OPTARG" ;; c) commit="${OPTARG:0:7}" ;; - r) RELEASE="$OPTARG:" - ;; f) BUNDLE_FIX='yes' ;; h) usage @@ -387,7 +201,7 @@ do done shift $(($OPTIND - 1)) -typeset -r GIT_REPO RELEASE BUNDLE_FIX +typeset -r GIT_REPO BUNDLE_FIX export LANG=C test $# -gt 1 -o $# -eq 0 && { @@ -401,8 +215,6 @@ case $1 in ;; 'source') make_src $commit ;; - 'prepare') prepare_rpm $commit $release - ;; *) usage exit 1 ;; diff --git a/pkg/ubuntu/README.md b/pkg/ubuntu/README.md index 44e83c79b..99735621a 100644 --- a/pkg/ubuntu/README.md +++ b/pkg/ubuntu/README.md @@ -5,23 +5,20 @@ work as a first step towards packaging, but should be usable as is. ### Synopsis - Bootstrap the distribution from git: % sudo apt-get install git-core % git clone git://github.com/diaspora/diaspora.git % cd diaspora/pkg/ubuntu +Create and install the diaspora bundle and application in +diaspora/pkg/source according to +[source README](http://github.com/diaspora/diaspora/tree/master/pkg/source/) + Install the dependencies (a good time for a coffe break): % sudo ./diaspora-install-deps -Create and install the diaspora bundle and application: - % ./make-dist.sh bundle - % sudo ./diaspora-bundle-install dist/diaspora-bundle-*.tar.gz - - % ./make-dist.sh source - % sudo ./diaspora-install dist/diaspora-0.0*.tar.gz - -Initiate and start the server; +Install, initiate and start the server; + % sudo ./diaspora-install % sudo ./diaspora-setup % sudo su - diaspora % cd /usr/share/diaspora/master diff --git a/pkg/ubuntu/add-bundle.diff b/pkg/ubuntu/add-bundle.diff deleted file mode 100644 index 24c0f6035..000000000 --- a/pkg/ubuntu/add-bundle.diff +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/.bundle/config b/.bundle/config -new file mode 100644 -index 0000000..1c3e2ce ---- /dev/null -+++ b/.bundle/config -@@ -0,0 +1,5 @@ -+--- -+BUNDLE_FROZEN: "1" -+BUNDLE_DISABLE_SHARED_GEMS: "1" -+BUNDLE_WITHOUT: test:rdoc -+BUNDLE_PATH: vendor/bundle diff --git a/pkg/ubuntu/diaspora-install b/pkg/ubuntu/diaspora-install index 4679c9f2b..7090e775b 100755 --- a/pkg/ubuntu/diaspora-install +++ b/pkg/ubuntu/diaspora-install @@ -43,12 +43,20 @@ mkdir -p /var/lib/diaspora/tmp mkdir -p /var/run/diaspora mkdir -p /etc/diaspora +bundle='/usr/lib/diaspora-bundle' +[ "$(arch | tr -d '\n')" = 'x86_64' ] && \ + bundle='/usr/lib64/diaspora-bundle' + ln -sf /var/log/diaspora ./master/log cp master/config/app_config.yml.example /etc/diaspora/app_config.yml ln -sf /etc/diaspora/app_config.yml master/config/app_config.yml ln -sf /var/lib/diaspora/uploads master/public/ ln -sf /var/lib/diaspora/tmp master -ln -sf /usr/lib/diaspora-bundle/vendor/bundle master/vendor +rm -rf master/vendor +ln -sf $bundle/vendor master/vendor + +ln -sf $bundle/Gemfile master/Gemfile +ln -sf $bundle/Gemfile.lock master/Gemfile.lock rm -rf /usr/share/doc/diaspora mkdir -p /usr/share/doc/diaspora diff --git a/pkg/ubuntu/dist b/pkg/ubuntu/dist new file mode 120000 index 000000000..2fb4d8549 --- /dev/null +++ b/pkg/ubuntu/dist @@ -0,0 +1 @@ +../source/dist/ \ No newline at end of file diff --git a/pkg/ubuntu/dist/.gitkeep b/pkg/ubuntu/dist/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/pkg/ubuntu/make-dist.sh b/pkg/ubuntu/make-dist.sh deleted file mode 120000 index f6ba9c6a2..000000000 --- a/pkg/ubuntu/make-dist.sh +++ /dev/null @@ -1 +0,0 @@ -../fedora/make-dist.sh \ No newline at end of file diff --git a/spec/controllers/status_message_controller_spec.rb b/spec/controllers/status_message_controller_spec.rb index c1fff84ca..059fe5fb4 100644 --- a/spec/controllers/status_message_controller_spec.rb +++ b/spec/controllers/status_message_controller_spec.rb @@ -16,7 +16,12 @@ describe StatusMessagesController do end describe '#create' do - let(:status_message_hash) {{"status_message"=>{"public"=>"true", "message"=>"facebook, is that you?", "to" =>"#{aspect.id}"}}} + let(:status_message_hash) { + {:status_message =>{ + :public =>"true", + :message =>"facebook, is that you?", + :to =>"#{aspect.id}"}} + } context "posting out to facebook" do let!(:service2) { s = Factory(:service, :provider => 'facebook'); user.services << s; s } @@ -27,10 +32,22 @@ describe StatusMessagesController do end it 'should not post to facebook when public is not set' do - status_message_hash['status_message']['public'] = 'false' + status_message_hash[:status_message][:public] = 'false' user.should_not_receive(:post_to_facebook) post :create, status_message_hash end + it "doesn't overwrite person_id" do + new_user = make_user + status_message_hash[:status_message][:person_id] = new_user.person.id + post :create, status_message_hash + StatusMessage.find_by_message(status_message_hash[:status_message][:message]).person_id.should == user.person.id + end + it "doesn't overwrite id" do + old_status_message = user.post(:status_message, :message => "hello", :to => aspect.id) + status_message_hash[:status_message][:id] = old_status_message.id + lambda {post :create, status_message_hash}.should raise_error /failed save/ + old_status_message.reload.message.should == 'hello' + end end context "posting to twitter" do @@ -42,7 +59,7 @@ describe StatusMessagesController do end it 'should not post to twitter when public in not set' do - status_message_hash['status_message']['public'] = 'false' + status_message_hash[:status_message][:public] = 'false' user.should_not_receive(:post_to_twitter) post :create, status_message_hash end diff --git a/spec/helper_methods.rb b/spec/helper_methods.rb index e60b39535..4dc1ca8f2 100644 --- a/spec/helper_methods.rb +++ b/spec/helper_methods.rb @@ -28,9 +28,12 @@ module HelperMethods def friend_users(user1, aspect1, user2, aspect2) request = user1.send_friend_request_to(user2.person, aspect1) - user2.receive_friend_request(request) + + user2.receive request.to_diaspora_xml, user1.person + reversed_request = user2.accept_friend_request( request.id, aspect2.id) user1.reload + user1.receive reversed_request.to_diaspora_xml, user2.person user1.reload aspect1.reload diff --git a/spec/lib/diaspora/parser_spec.rb b/spec/lib/diaspora/parser_spec.rb index 6e7d74109..a6a306f03 100644 --- a/spec/lib/diaspora/parser_spec.rb +++ b/spec/lib/diaspora/parser_spec.rb @@ -35,6 +35,8 @@ describe Diaspora::Parser do end context "friending" do + + let(:good_request) { FakeHttpRequest.new(:success)} before do deliverable = Object.new deliverable.stub!(:deliver) @@ -42,30 +44,17 @@ describe Diaspora::Parser do end it "should create a new person upon getting a person request" do - request = Request.instantiate(:to =>"http://www.google.com/", :from => person) + new_person = Factory.build(:person) - xml = request.to_diaspora_xml - - user3.destroy - person.destroy - user - lambda { user.receive xml, person }.should change(Person, :count).by(1) - end - - it "should not create a new person if the person is already here" do - request = Request.instantiate(:to =>"http://www.google.com/", :from => user2.person) - original_person_id = user2.person.id + Person.should_receive(:by_account_identifier).and_return(new_person) + request = Request.instantiate(:to =>"http://www.google.com/", :from => new_person) xml = request.to_diaspora_xml user - lambda { user.receive xml, user2.person }.should_not change(Person, :count) - user2.reload - user2.person.reload - user2.serialized_private_key.include?("PRIVATE").should be true - - url = "http://" + request.callback_url.split("/")[2] + "/" - Person.where(:url => url).first.id.should == original_person_id + lambda { user.receive xml, new_person }.should change(Person, :count).by(1) end + + end it "should activate the Person if I initiated a request to that url" do @@ -73,13 +62,12 @@ describe Diaspora::Parser do user.reload request.reverse_for user3 - xml = request.to_diaspora_xml + xml = user3.salmon(request).xml_for(user.person) - user3.person.destroy - user3.destroy + user3.delete - user.receive xml, user3.person - new_person = Person.first(:url => user3.person.url) + user.receive_salmon(xml) + new_person = Person.find_by_url(user3.person.url) new_person.nil?.should be false user.reload diff --git a/spec/lib/encryptor_spec.rb b/spec/lib/encryptor_spec.rb index e0c9f5ca9..eba23e6e5 100644 --- a/spec/lib/encryptor_spec.rb +++ b/spec/lib/encryptor_spec.rb @@ -10,38 +10,6 @@ describe 'user encryption' do @aspect = @user.aspects.create(:name => 'dudes') end - describe 'key exchange on friending' do - - it 'should receive and marshal a public key from a request' do - remote_user = Factory.build(:user) - remote_user.encryption_key.nil?.should== false - - deliverable = Object.new - deliverable.stub!(:deliver) - Notifier.stub!(:new_request).and_return(deliverable) - Person.should_receive(:by_account_identifier).and_return(remote_user.person) - remote_user.should_receive(:push_to_people).and_return(true) - #should move this to friend request, but i found it here - id = remote_user.person.id - original_key = remote_user.exported_key - - request = remote_user.send_friend_request_to( - @user.person, remote_user.aspects.create(:name => "temp")) - - xml = remote_user.salmon(request).xml_for(@user) - - remote_user.person.delete - remote_user.delete - - person_count = Person.all.count - @user.receive_salmon xml - - Person.all.count.should == person_count + 1 - new_person = Person.first(:id => id) - new_person.exported_key.should == original_key - end - end - describe 'encryption' do it 'should encrypt a string' do string = "Secretsauce" diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb index e518a23a3..d4d9a20cd 100644 --- a/spec/misc_spec.rb +++ b/spec/misc_spec.rb @@ -37,6 +37,10 @@ describe 'making sure the spec runner works' do it 'does not save a built user' do Factory.build(:user).persisted?.should be_false end + + it 'does not save a built person' do + Factory.build(:person).persisted?.should be_false + end end end diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb index fed124726..728fc4c3d 100644 --- a/spec/models/profile_spec.rb +++ b/spec/models/profile_spec.rb @@ -12,6 +12,16 @@ describe Profile do profile.should be_valid profile.first_name.should == "Shelly" end + + it "can be 32 characters long" do + profile = Factory.build(:profile, :first_name => "Hexagoooooooooooooooooooooooooon") + profile.should be_valid + end + + it "cannot be 33 characters" do + profile = Factory.build(:profile, :first_name => "Hexagooooooooooooooooooooooooooon") + profile.should_not be_valid + end end describe "of last_name" do it "strips leading and trailing whitespace" do @@ -19,6 +29,16 @@ describe Profile do profile.should be_valid profile.last_name.should == "Ohba" end + + it "can be 32 characters long" do + profile = Factory.build(:profile, :last_name => "Hexagoooooooooooooooooooooooooon") + profile.should be_valid + end + + it "cannot be 33 characters" do + profile = Factory.build(:profile, :last_name => "Hexagooooooooooooooooooooooooooon") + profile.should_not be_valid + end end end end diff --git a/spec/models/request_spec.rb b/spec/models/request_spec.rb index e08347d69..daab156b7 100644 --- a/spec/models/request_spec.rb +++ b/spec/models/request_spec.rb @@ -19,17 +19,6 @@ describe Request do person_request.valid?.should be true end - it 'should generate xml for the User as a Person' do - - request = user.send_friend_request_to person, aspect - xml = request.to_xml.to_s - - xml.should include user.person.diaspora_handle - xml.should include user.person.url - xml.should include user.profile.first_name - xml.should include user.profile.last_name - xml.should include user.exported_key - end it 'should strip the destination url' do person_request = Request.new @@ -68,4 +57,28 @@ describe Request do end end + describe 'serialization' do + it 'should not generate xml for the User as a Person' do + request = user.send_friend_request_to person, aspect + xml = request.to_xml.to_s + + xml.should_not include user.person.profile.first_name + end + + it 'should serialize the handle and not the sender' do + request = user.send_friend_request_to person, aspect + xml = request.to_xml.to_s + + xml.should include user.person.diaspora_handle + end + + it 'should not serialize the exported key' do + request = user.send_friend_request_to person, aspect + xml = request.to_xml.to_s + + xml.should_not include user.person.exported_key + end + + end + end diff --git a/spec/models/user/user_friending_spec.rb b/spec/models/user/user_friending_spec.rb index 945f3dcbf..a1232b80b 100644 --- a/spec/models/user/user_friending_spec.rb +++ b/spec/models/user/user_friending_spec.rb @@ -233,23 +233,22 @@ describe Diaspora::UserModules::Friending do end it "keeps the right counts of friends" do - user.receive_friend_request @request + user.receive @request.to_diaspora_xml, person_one - person_two.destroy - user.reload.pending_requests.size.should be 1 + user.reload.pending_requests.size.should == 1 user.friends.size.should be 0 - user.receive_friend_request @request_two - user.reload.pending_requests.size.should be 2 + user.receive @request_two.to_diaspora_xml, person_two + user.reload.pending_requests.size.should == 2 user.friends.size.should be 0 user.accept_friend_request @request.id, aspect.id - user.reload.pending_requests.size.should be 1 + user.reload.pending_requests.size.should == 1 user.friends.size.should be 1 user.contact_for(person_one).should_not be_nil user.ignore_friend_request @request_two.id - user.reload.pending_requests.size.should be 0 + user.reload.pending_requests.size.should == 0 user.friends.size.should be 1 user.contact_for(person_two).should be_nil end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 9449c4cdb..077224674 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -106,6 +106,16 @@ describe User do user = Factory.build(:user, :username => "kittens;") user.should_not be_valid end + + it "can be 32 characters long" do + user = Factory.build(:user, :username => "hexagoooooooooooooooooooooooooon") + user.should be_valid + end + + it "cannot be 33 characters" do + user = Factory.build(:user, :username => "hexagooooooooooooooooooooooooooon") + user.should_not be_valid + end end describe "of email" do diff --git a/vendor/plugins/.gitkeep b/vendor/plugins/.gitkeep deleted file mode 100644 index e69de29bb..000000000