Commit 27ab82a73f970d2ca21bc2ed4a56d3be5e626c23

Authored by Joenio Costa
1 parent 3f54dc4f

Refactoring sample-data scripts

- creating helpers in Noosfero::SampleDataHelper to save some 'typing'
- adding articles and profiles to categories in sample-data scripts
- moving Events creation to sample-articles script
- echoing 'F' or 'E' in output in case of fail or error on creating
lib/noosfero/sample_data_helper.rb 0 → 100644
... ... @@ -0,0 +1,30 @@
  1 +module Noosfero::SampleDataHelper
  2 + # tourn on autoflush
  3 + STDOUT.sync = true
  4 +
  5 + environment_id = ARGV.first
  6 + $environment = unless environment_id.blank?
  7 + Environment.find(environment_id)
  8 + else
  9 + Environment.default || Environment.create!(:name => 'Noosfero', :is_default => true)
  10 + end
  11 +
  12 + def save(obj, &block)
  13 + begin
  14 + if obj.save
  15 + print '.'
  16 + instance_eval &block if block
  17 + return obj
  18 + else
  19 + print 'F'
  20 + end
  21 + rescue
  22 + print 'E'
  23 + end
  24 + return nil
  25 + end
  26 +
  27 + def done
  28 + puts ' done!'
  29 + end
  30 +end
... ...
script/sample-articles
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
  3 +include Noosfero::SampleDataHelper
3 4  
4   -# tourn on autoflush
5   -STDOUT.sync = true
6   -
7   -profiles = Profile.all
  5 +profiles = $environment.profiles
  6 +categories = $environment.categories
8 7 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"]
9 8 TAGS = ['free-software', 'noosfero', 'development', 'rails', 'ruby']
  9 +EVENT_SUBJECTS = ['International Conference on %s', '%s day', '%s World Congress', '%s World Forum', '%s Summit', '%s Week']
  10 +THEMES = ['Sustainability', 'Free Software', 'Climate Change', 'Environment', 'Agile Development', 'Solidarity Economy', 'Debian', 'Perl']
10 11  
11 12 print "Creating some TinyMce articles: "
12 13 for subject in SUBJECTS
13 14 rand(20).times do |i|
14 15 profile = profiles.rand
15   - profile.articles << TinyMceArticle.new(
  16 + article = TinyMceArticle.new(
16 17 :name => "%s #{subject}" % profile.name,
17 18 :body => "%s #{subject}" % profile.name,
18   - :tag_list => [TAGS.rand, TAGS.rand]
  19 + :tag_list => [TAGS.rand, TAGS.rand],
  20 + :profile => profile
19 21 )
20   - print '.'
  22 + save article do
  23 + categories.rand.articles << article
  24 + end
21 25 end
22 26 end
23   -puts ' done!'
  27 +done
24 28  
25 29 print "Creating some galleries: "
26 30 for subject in SUBJECTS
27 31 rand(20).times do |i|
28 32 profile = profiles.rand
29   - profile.articles << Gallery.new(
  33 + save Gallery.new(
30 34 :name => "Gallery %s #{subject}" % profile.name,
31 35 :body => "Gallery %s #{subject}" % profile.name,
  36 + :tag_list => [TAGS.rand, TAGS.rand],
  37 + :profile => profile
  38 + )
  39 + end
  40 +end
  41 +done
  42 +
  43 +print "Creating some events: "
  44 +for subject in EVENT_SUBJECTS
  45 + for theme in THEMES
  46 + event = Event.new(
  47 + :name => subject % theme,
  48 + :profile => profiles.rand,
  49 + :start_date => Date.today + (-30 + rand(60)).days,
32 50 :tag_list => [TAGS.rand, TAGS.rand]
33 51 )
34   - print '.'
  52 + save event do
  53 + categories.rand.events << event
  54 + categories.rand.events << event
  55 + categories.rand.events << event
  56 + end
35 57 end
36 58 end
37   -puts ' done!'
  59 +done
... ...
script/sample-categories
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
3   -
4   -# turn on autoflush
5   -STDOUT.sync = true
6   -
7   -$environment_default = Environment.default
  3 +include Noosfero::SampleDataHelper
8 4  
9 5 def new_category(parent, name, color = nil)
10   - print '.'
11   - $environment_default.categories.create(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true)
  6 + save $environment.categories.build(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true)
12 7 end
13 8  
14 9 def new_region(parent, name, color = nil)
15   - print '.'
16   - $environment_default.regions.create(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true)
  10 + save $environment.regions.build(:name => name, :display_color => color, :parent_id => (parent ? parent.id: nil), :display_in_menu => true)
17 11 end
18 12  
19 13 def new_state(parent, name)
20   - print '.'
21   - State.create(:name => name, :parent => parent, :environment => $environment_default)
  14 + save State.new(:name => name, :parent => parent, :environment => $environment)
22 15 end
23 16  
24 17 def new_productcategory(parent, name)
25   - print '.'
26   - ProductCategory.create(:name => name, :environment => $environment_default, :parent => parent)
27   -end
28   -
29   -def done
30   - puts ' done!'
  18 + save ProductCategory.new(:name => name, :environment => $environment, :parent => parent)
31 19 end
32 20  
33 21 print "Creating categories: "
... ...
script/sample-data
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
  3 +include Noosfero::SampleDataHelper
3 4  
4   -# turn on autoflush
5   -STDOUT.sync = true
6   -
7   -environment_id = ARGV.first
8   -environment = nil
9   -if environment_id
10   - environment = Environment.find(environment_id)
11   -else
12   - environment = Environment.default || Environment.create!(:name => 'Noosfero', :is_default => true)
13   -end
14   -
15   -system('./script/sample-profiles')
16   -system('./script/sample-categories')
17   -system('./script/sample-enterprises')
18   -system('./script/sample-products')
19   -system('./script/sample-articles')
  5 +id = ARGV.first || ''
  6 +system('./script/sample-categories', id)
  7 +system('./script/sample-profiles', id)
  8 +system('./script/sample-enterprises', id)
  9 +system('./script/sample-products', id)
  10 +system('./script/sample-articles', id)
... ...
script/sample-enterprises
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
  3 +include Noosfero::SampleDataHelper
3 4  
4   -# turn on autoflush
5   -STDOUT.sync = true
  5 +categories = $environment.categories
6 6  
7 7 def rand_position(type)
8 8 range = {
... ... @@ -23,8 +23,8 @@ print &quot;Creating enterprises: &quot;
23 23 groups.each do |group|
24 24 what.each do |production|
25 25 places.each do |place|
26   - name = [group, production, place].join(' ')
27   - Enterprise.create!(
  26 + name = [group, production, place].join(' ') + " - #{$environment.name}"
  27 + enterprise = Enterprise.new(
28 28 :name => name,
29 29 :identifier => name.to_slug,
30 30 :enabled => false,
... ... @@ -32,11 +32,14 @@ groups.each do |group|
32 32 :lat => rand_position(:lat),
33 33 :lng => rand_position(:lng)
34 34 )
35   - print "."
  35 + save enterprise do
  36 + categories.rand.enterprises << enterprise
  37 + categories.rand.enterprises << enterprise
  38 + end
36 39 end
37 40 end
38 41 end
39   -puts " done!"
  42 +done
40 43  
41 44 EnterpriseActivation.find(:all, :conditions => ['created_at > ?', start_time]).each do |activation|
42 45 enterprise = activation.enterprise
... ... @@ -45,6 +48,6 @@ end
45 48  
46 49 ze = Person['ze']
47 50 # give admin rights for 'ze' in some enterprises
48   -Enterprise.all.rand.add_admin(ze)
49   -Enterprise.all.rand.add_admin(ze)
50   -Enterprise.all.rand.add_admin(ze)
  51 +$environment.enterprises.rand.add_admin(ze)
  52 +$environment.enterprises.rand.add_admin(ze)
  53 +$environment.enterprises.rand.add_admin(ze)
... ...
script/sample-products
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
  3 +include Noosfero::SampleDataHelper
3 4  
4   -# tourn on autoflush
5   -STDOUT.sync = true
6   -
7   -enterprises = Enterprise.all
8   -categories = ProductCategory.all
  5 +enterprises = $environment.enterprises
  6 +categories = $environment.product_categories
9 7  
10 8 print "Creating products: "
11 9 THINGS = %w[ Car House Bicycle Book Pen Computer Webcam ]
... ... @@ -14,35 +12,29 @@ for thing in THINGS
14 12 for color in COLORS
15 13 name = [color, thing].join(' ')
16 14 rand(10).times do |i|
17   - Product.create(
  15 + save Product.new(
18 16 :name => name,
19 17 :enterprise_id => enterprises.rand.id, :price => (i * 13.7),
20 18 :product_category_id => categories.rand.id
21 19 )
22   - print '.'
23 20 end
24 21 end
25 22 end
26   -puts ' done!'
27   -
28   -environment = Environment.default
  23 +done
29 24  
30 25 print "Creating qualifiers and certifier: "
31 26 QUALIFIERS = ['Organic', 'Free as in Freedom', 'Regional']
32 27 CERTIFIERS = ['FBES', 'Colivre', 'Institute Paulo Freire', 'Fora do Eixo']
33 28 for qualifier in QUALIFIERS
34   - environment.qualifiers << Qualifier.new(:name => qualifier)
35   - print '.'
  29 + save Qualifier.new(:name => qualifier, :environment => $environment)
36 30 end
37 31 for certifier in CERTIFIERS
38   - environment.certifiers << Certifier.new(:name => certifier)
39   - print '.'
  32 + save Certifier.new(:name => certifier, :environment => $environment)
40 33 end
41   -puts ' done!'
  34 +done
42 35  
43 36 print "Creating units: "
44 37 [['Litre', 'Litres'], ['Kilo', 'Kilos'], ['Meter', 'Meters']].each do |unit|
45   - Unit.create!(:singular => unit[0], :plural => unit[1], :environment => environment)
46   - print '.'
  38 + save Unit.new(:singular => unit[0], :plural => unit[1], :environment => $environment)
47 39 end
48   -puts ' done!'
  40 +done
... ...
script/sample-profiles
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
  3 +include Noosfero::SampleDataHelper
3 4  
4   -# turn on autoflush
5   -STDOUT.sync = true
6   -
7   -environment = Environment.default
  5 +categories = $environment.categories
8 6  
9 7 places = [
10 8 { :country=>'BR', :city=>'Salvador',
... ... @@ -42,37 +40,63 @@ print &quot;Creating users: &quot;
42 40 for name in NAMES
43 41 for surname in SURNAMES
44 42 full_name = [name, surname].join(' ')
45   - user = User.create!({
  43 + user = User.new({
46 44 :login => full_name.to_slug,
47 45 :email => full_name.to_slug + '@localhost.localdomain',
48 46 :password => 'test',
49 47 :password_confirmation => 'test',
50   - :environment => environment,
  48 + :environment => $environment,
51 49 })
52   - user.person.name = full_name
53   - place = places[rand(places.length)]
54   - user.person.data[:country] = place[:country]
55   - user.person.city = place[:city]
56   - user.person.lat = place[:lat] + (rand/100)-0.005
57   - user.person.lng = place[:lng] + (rand/100)-0.005
58   - user.person.save!
59   - people << user.person
60   -
61   - print '.'
  50 + save user do
  51 + user.person.name = full_name
  52 + place = places[rand(places.length)]
  53 + user.person.data[:country] = place[:country]
  54 + user.person.city = place[:city]
  55 + user.person.lat = place[:lat] + (rand/100)-0.005
  56 + user.person.lng = place[:lng] + (rand/100)-0.005
  57 + user.person.save!
  58 + categories.rand.people << user.person
  59 + categories.rand.people << user.person
  60 + end
62 61 end
63 62 end
64   -puts ' done!'
  63 +ze = User.new({
  64 + :login => "ze",
  65 + :email => 'root@localhost.localdomain',
  66 + :password => 'test',
  67 + :password_confirmation => 'test',
  68 + :environment => $environment,
  69 +})
  70 +save ze do
  71 + $environment.add_admin(ze.person)
  72 +end
  73 +
  74 +admin = User.new({
  75 + :login => "adminuser",
  76 + :email => 'adminuser@localhost.localdomain',
  77 + :password => 'admin',
  78 + :password_confirmation => 'admin',
  79 + :environment => $environment,
  80 +})
  81 +save admin do
  82 + $environment.add_admin(admin.person)
  83 +end
  84 +done
65 85  
  86 +people = $environment.people
66 87 print "Creating some friendships: "
67 88 rand(people.size * 3).times do
68 89 from = people.rand
69 90 to = people.rand
70 91 if from != to && !from.friends.include?(to)
71   - AddFriend.create!(:requestor => to, :target => from).finish
  92 + task = AddFriend.new(:requestor => to, :target => from)
  93 + save task do
  94 + task.finish
  95 + end
72 96 end
73 97 print '.'
74 98 end
75   -puts ' done!'
  99 +done
76 100  
77 101  
78 102 communities = []
... ... @@ -82,41 +106,15 @@ print &quot;Creating communities: &quot;
82 106 for verb in VERBS
83 107 for stuff in STUFF
84 108 name = [verb, stuff].join(' ')
85   - community = Community.create!(:name => name, :environment => environment)
86   - communities << community
87   - rand(10).times do
88   - community.add_member(people.rand)
  109 + community = Community.new(:name => name, :environment => $environment)
  110 + save community do
  111 + communities << community
  112 + rand(10).times do
  113 + community.add_member(people.rand)
  114 + end
  115 + categories.rand.communities << community
  116 + categories.rand.communities << community
89 117 end
90   - print '.'
91   - end
92   -end
93   -puts ' done!'
94   -
95   -EVENTS = ['International Conference on %s', '%s day', '%s World Congress', '%s World Forum', '%s Summit', '%s Week']
96   -THEMES = ['Sustainability', 'Free Software', 'Climate Change', 'Environment', 'Agile Development', 'Solidarity Economy']
97   -print "Creating some events: "
98   -for event in EVENTS
99   - for theme in THEMES
100   - Event.create!(:name => event % theme, :profile => communities.rand, :start_date => Date.today + (-30 + rand(60)).days)
101   - print '.'
102 118 end
103 119 end
104   -puts ' done!'
105   -
106   -ze = User.create!({
107   - :login => "ze",
108   - :email => 'root@localhost.localdomain',
109   - :password => 'test',
110   - :password_confirmation => 'test',
111   - :environment => environment,
112   -}).person
113   -environment.add_admin(ze)
114   -
115   -admin = User.create!({
116   - :login => "adminuser",
117   - :email => 'adminuser@localhost.localdomain',
118   - :password => 'admin',
119   - :password_confirmation => 'admin',
120   - :environment => environment,
121   -}).person
122   -environment.add_admin(admin)
  120 +done
... ...
script/sample-qualifiers
1 1 #!/usr/bin/env ruby
2 2 require File.dirname(__FILE__) + '/../config/environment'
3   -
4   -# turn on autoflush
5   -STDOUT.sync = true
  3 +include Noosfero::SampleDataHelper
6 4  
7 5 QUALIFIERS = ['Organic', 'Ecological', 'Biodynamic farming', 'Sustainable', 'Agroecological', 'Craft', 'Free as in freedom']
8 6 CERTIFIERS = ['FBES', 'Colivre', 'Circuito Fora do Eixo', 'Instituto Paulo Freire', 'Free Software Foundation', 'Linux Foundation', 'GNU', 'Perl Foundation']
9 7  
10   -environment = Environment.default
11   -
12 8 printf "Creating qualifiers and certifiers: "
13 9 CERTIFIERS.each do |certifier_name|
14   - Certifier.create!(:name => certifier_name, :environment => environment)
15   - print '.'
  10 + save Certifier.new(:name => certifier_name, :environment => $environment)
16 11 end
17 12  
18 13 QUALIFIERS.each do |qualifier_name|
19   - Qualifier.create!(:name => qualifier_name, :environment => environment)
20   - print '.'
  14 + save Qualifier.new(:name => qualifier_name, :environment => $environment)
21 15 end
22 16  
23   -Qualifier.all.each do |qualifier|
24   - Certifier.all.sort_by{rand}.slice(0, CERTIFIERS.size / 2).each do |certifier|
25   - QualifierCertifier.create!(:qualifier => qualifier, :certifier => certifier)
26   - print '.'
  17 +$environment.qualifiers.each do |qualifier|
  18 + $environment.certifiers.sort_by{rand}.slice(0, CERTIFIERS.size / 2).each do |certifier|
  19 + save QualifierCertifier.new(:qualifier => qualifier, :certifier => certifier)
27 20 end
28 21 end
29   -puts " done!"
  22 +done
... ...