diff --git a/lib/noosfero/sample_data_helper.rb b/lib/noosfero/sample_data_helper.rb new file mode 100644 index 0000000..a191a27 --- /dev/null +++ b/lib/noosfero/sample_data_helper.rb @@ -0,0 +1,30 @@ +module Noosfero::SampleDataHelper + # tourn on autoflush + STDOUT.sync = true + + environment_id = ARGV.first + $environment = unless environment_id.blank? + Environment.find(environment_id) + else + Environment.default || Environment.create!(:name => 'Noosfero', :is_default => true) + end + + def save(obj, &block) + begin + if obj.save + print '.' + instance_eval &block if block + return obj + else + print 'F' + end + rescue + print 'E' + end + return nil + end + + def done + puts ' done!' + end +end diff --git a/script/sample-articles b/script/sample-articles index 9d08939..c36d828 100755 --- a/script/sample-articles +++ b/script/sample-articles @@ -1,37 +1,59 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' +include Noosfero::SampleDataHelper -# tourn on autoflush -STDOUT.sync = true - -profiles = Profile.all +profiles = $environment.profiles +categories = $environment.categories SUBJECTS = ['got a new car', 'release a new version of project X', "doesn't like wales no more", "doesn't use free-software no more"] TAGS = ['free-software', 'noosfero', 'development', 'rails', 'ruby'] +EVENT_SUBJECTS = ['International Conference on %s', '%s day', '%s World Congress', '%s World Forum', '%s Summit', '%s Week'] +THEMES = ['Sustainability', 'Free Software', 'Climate Change', 'Environment', 'Agile Development', 'Solidarity Economy', 'Debian', 'Perl'] print "Creating some TinyMce articles: " for subject in SUBJECTS rand(20).times do |i| profile = profiles.rand - profile.articles << TinyMceArticle.new( + article = TinyMceArticle.new( :name => "%s #{subject}" % profile.name, :body => "%s #{subject}" % profile.name, - :tag_list => [TAGS.rand, TAGS.rand] + :tag_list => [TAGS.rand, TAGS.rand], + :profile => profile ) - print '.' + save article do + categories.rand.articles << article + end end end -puts ' done!' +done print "Creating some galleries: " for subject in SUBJECTS rand(20).times do |i| profile = profiles.rand - profile.articles << Gallery.new( + save Gallery.new( :name => "Gallery %s #{subject}" % profile.name, :body => "Gallery %s #{subject}" % profile.name, + :tag_list => [TAGS.rand, TAGS.rand], + :profile => profile + ) + end +end +done + +print "Creating some events: " +for subject in EVENT_SUBJECTS + for theme in THEMES + event = Event.new( + :name => subject % theme, + :profile => profiles.rand, + :start_date => Date.today + (-30 + rand(60)).days, :tag_list => [TAGS.rand, TAGS.rand] ) - print '.' + save event do + categories.rand.events << event + categories.rand.events << event + categories.rand.events << event + end end end -puts ' done!' +done diff --git a/script/sample-categories b/script/sample-categories index eb490dc..c7704f9 100755 --- a/script/sample-categories +++ b/script/sample-categories @@ -1,33 +1,21 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' - -# turn on autoflush -STDOUT.sync = true - -$environment_default = Environment.default +include Noosfero::SampleDataHelper def new_category(parent, name, color = nil) - print '.' - $environment_default.categories.create(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true) + save $environment.categories.build(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true) end def new_region(parent, name, color = nil) - print '.' - $environment_default.regions.create(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true) + save $environment.regions.build(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true) end def new_state(parent, name) - print '.' - State.create(:name => name, :parent => parent, :environment => $environment_default) + save State.new(:name => name, :parent => parent, :environment => $environment) end def new_productcategory(parent, name) - print '.' - ProductCategory.create(:name => name, :environment => $environment_default, :parent => parent) -end - -def done - puts ' done!' + save ProductCategory.new(:name => name, :environment => $environment, :parent => parent) end print "Creating categories: " diff --git a/script/sample-data b/script/sample-data index edd4f8b..25a51c5 100755 --- a/script/sample-data +++ b/script/sample-data @@ -1,19 +1,10 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' +include Noosfero::SampleDataHelper -# turn on autoflush -STDOUT.sync = true - -environment_id = ARGV.first -environment = nil -if environment_id - environment = Environment.find(environment_id) -else - environment = Environment.default || Environment.create!(:name => 'Noosfero', :is_default => true) -end - -system('./script/sample-profiles') -system('./script/sample-categories') -system('./script/sample-enterprises') -system('./script/sample-products') -system('./script/sample-articles') +id = ARGV.first || '' +system('./script/sample-categories', id) +system('./script/sample-profiles', id) +system('./script/sample-enterprises', id) +system('./script/sample-products', id) +system('./script/sample-articles', id) diff --git a/script/sample-enterprises b/script/sample-enterprises index 0d384c8..4015ab3 100755 --- a/script/sample-enterprises +++ b/script/sample-enterprises @@ -1,8 +1,8 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' +include Noosfero::SampleDataHelper -# turn on autoflush -STDOUT.sync = true +categories = $environment.categories def rand_position(type) range = { @@ -23,8 +23,8 @@ print "Creating enterprises: " groups.each do |group| what.each do |production| places.each do |place| - name = [group, production, place].join(' ') - Enterprise.create!( + name = [group, production, place].join(' ') + " - #{$environment.name}" + enterprise = Enterprise.new( :name => name, :identifier => name.to_slug, :enabled => false, @@ -32,11 +32,14 @@ groups.each do |group| :lat => rand_position(:lat), :lng => rand_position(:lng) ) - print "." + save enterprise do + categories.rand.enterprises << enterprise + categories.rand.enterprises << enterprise + end end end end -puts " done!" +done EnterpriseActivation.find(:all, :conditions => ['created_at > ?', start_time]).each do |activation| enterprise = activation.enterprise @@ -45,6 +48,6 @@ end ze = Person['ze'] # give admin rights for 'ze' in some enterprises -Enterprise.all.rand.add_admin(ze) -Enterprise.all.rand.add_admin(ze) -Enterprise.all.rand.add_admin(ze) +$environment.enterprises.rand.add_admin(ze) +$environment.enterprises.rand.add_admin(ze) +$environment.enterprises.rand.add_admin(ze) diff --git a/script/sample-products b/script/sample-products index 3b5abdd..c4fecbc 100755 --- a/script/sample-products +++ b/script/sample-products @@ -1,11 +1,9 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' +include Noosfero::SampleDataHelper -# tourn on autoflush -STDOUT.sync = true - -enterprises = Enterprise.all -categories = ProductCategory.all +enterprises = $environment.enterprises +categories = $environment.product_categories print "Creating products: " THINGS = %w[ Car House Bicycle Book Pen Computer Webcam ] @@ -14,35 +12,29 @@ for thing in THINGS for color in COLORS name = [color, thing].join(' ') rand(10).times do |i| - Product.create( + save Product.new( :name => name, :enterprise_id => enterprises.rand.id, :price => (i * 13.7), :product_category_id => categories.rand.id ) - print '.' end end end -puts ' done!' - -environment = Environment.default +done print "Creating qualifiers and certifier: " QUALIFIERS = ['Organic', 'Free as in Freedom', 'Regional'] CERTIFIERS = ['FBES', 'Colivre', 'Institute Paulo Freire', 'Fora do Eixo'] for qualifier in QUALIFIERS - environment.qualifiers << Qualifier.new(:name => qualifier) - print '.' + save Qualifier.new(:name => qualifier, :environment => $environment) end for certifier in CERTIFIERS - environment.certifiers << Certifier.new(:name => certifier) - print '.' + save Certifier.new(:name => certifier, :environment => $environment) end -puts ' done!' +done print "Creating units: " [['Litre', 'Litres'], ['Kilo', 'Kilos'], ['Meter', 'Meters']].each do |unit| - Unit.create!(:singular => unit[0], :plural => unit[1], :environment => environment) - print '.' + save Unit.new(:singular => unit[0], :plural => unit[1], :environment => $environment) end -puts ' done!' +done diff --git a/script/sample-profiles b/script/sample-profiles index 6f85dec..a3d7850 100755 --- a/script/sample-profiles +++ b/script/sample-profiles @@ -1,10 +1,8 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' +include Noosfero::SampleDataHelper -# turn on autoflush -STDOUT.sync = true - -environment = Environment.default +categories = $environment.categories places = [ { :country=>'BR', :city=>'Salvador', @@ -42,37 +40,63 @@ print "Creating users: " for name in NAMES for surname in SURNAMES full_name = [name, surname].join(' ') - user = User.create!({ + user = User.new({ :login => full_name.to_slug, :email => full_name.to_slug + '@localhost.localdomain', :password => 'test', :password_confirmation => 'test', - :environment => environment, + :environment => $environment, }) - user.person.name = full_name - place = places[rand(places.length)] - user.person.data[:country] = place[:country] - user.person.city = place[:city] - user.person.lat = place[:lat] + (rand/100)-0.005 - user.person.lng = place[:lng] + (rand/100)-0.005 - user.person.save! - people << user.person - - print '.' + save user do + user.person.name = full_name + place = places[rand(places.length)] + user.person.data[:country] = place[:country] + user.person.city = place[:city] + user.person.lat = place[:lat] + (rand/100)-0.005 + user.person.lng = place[:lng] + (rand/100)-0.005 + user.person.save! + categories.rand.people << user.person + categories.rand.people << user.person + end end end -puts ' done!' +ze = User.new({ + :login => "ze", + :email => 'root@localhost.localdomain', + :password => 'test', + :password_confirmation => 'test', + :environment => $environment, +}) +save ze do + $environment.add_admin(ze.person) +end + +admin = User.new({ + :login => "adminuser", + :email => 'adminuser@localhost.localdomain', + :password => 'admin', + :password_confirmation => 'admin', + :environment => $environment, +}) +save admin do + $environment.add_admin(admin.person) +end +done +people = $environment.people print "Creating some friendships: " rand(people.size * 3).times do from = people.rand to = people.rand if from != to && !from.friends.include?(to) - AddFriend.create!(:requestor => to, :target => from).finish + task = AddFriend.new(:requestor => to, :target => from) + save task do + task.finish + end end print '.' end -puts ' done!' +done communities = [] @@ -82,41 +106,15 @@ print "Creating communities: " for verb in VERBS for stuff in STUFF name = [verb, stuff].join(' ') - community = Community.create!(:name => name, :environment => environment) - communities << community - rand(10).times do - community.add_member(people.rand) + community = Community.new(:name => name, :environment => $environment) + save community do + communities << community + rand(10).times do + community.add_member(people.rand) + end + categories.rand.communities << community + categories.rand.communities << community end - print '.' - end -end -puts ' done!' - -EVENTS = ['International Conference on %s', '%s day', '%s World Congress', '%s World Forum', '%s Summit', '%s Week'] -THEMES = ['Sustainability', 'Free Software', 'Climate Change', 'Environment', 'Agile Development', 'Solidarity Economy'] -print "Creating some events: " -for event in EVENTS - for theme in THEMES - Event.create!(:name => event % theme, :profile => communities.rand, :start_date => Date.today + (-30 + rand(60)).days) - print '.' end end -puts ' done!' - -ze = User.create!({ - :login => "ze", - :email => 'root@localhost.localdomain', - :password => 'test', - :password_confirmation => 'test', - :environment => environment, -}).person -environment.add_admin(ze) - -admin = User.create!({ - :login => "adminuser", - :email => 'adminuser@localhost.localdomain', - :password => 'admin', - :password_confirmation => 'admin', - :environment => environment, -}).person -environment.add_admin(admin) +done diff --git a/script/sample-qualifiers b/script/sample-qualifiers index 4b58aab..6847a2c 100755 --- a/script/sample-qualifiers +++ b/script/sample-qualifiers @@ -1,29 +1,22 @@ #!/usr/bin/env ruby require File.dirname(__FILE__) + '/../config/environment' - -# turn on autoflush -STDOUT.sync = true +include Noosfero::SampleDataHelper QUALIFIERS = ['Organic', 'Ecological', 'Biodynamic farming', 'Sustainable', 'Agroecological', 'Craft', 'Free as in freedom'] CERTIFIERS = ['FBES', 'Colivre', 'Circuito Fora do Eixo', 'Instituto Paulo Freire', 'Free Software Foundation', 'Linux Foundation', 'GNU', 'Perl Foundation'] -environment = Environment.default - printf "Creating qualifiers and certifiers: " CERTIFIERS.each do |certifier_name| - Certifier.create!(:name => certifier_name, :environment => environment) - print '.' + save Certifier.new(:name => certifier_name, :environment => $environment) end QUALIFIERS.each do |qualifier_name| - Qualifier.create!(:name => qualifier_name, :environment => environment) - print '.' + save Qualifier.new(:name => qualifier_name, :environment => $environment) end -Qualifier.all.each do |qualifier| - Certifier.all.sort_by{rand}.slice(0, CERTIFIERS.size / 2).each do |certifier| - QualifierCertifier.create!(:qualifier => qualifier, :certifier => certifier) - print '.' +$environment.qualifiers.each do |qualifier| + $environment.certifiers.sort_by{rand}.slice(0, CERTIFIERS.size / 2).each do |certifier| + save QualifierCertifier.new(:qualifier => qualifier, :certifier => certifier) end end -puts " done!" +done -- libgit2 0.21.2