social_stream-base 0.16.2 → 0.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -318,6 +318,7 @@
318
318
  text-align: center;
319
319
  font-size: 15px;
320
320
  font-weight: bold;
321
+ cursor: pointer;
321
322
  }
322
323
  #sector_form .add_subsector:hover {
323
324
  background: $auxiliar-bright-color;
@@ -73,6 +73,9 @@ $(function(){
73
73
  $("#sector_editor").data("hide")();
74
74
  }
75
75
  };
76
+ cheese.onSubsectorAdded = function(subsector){
77
+ $("#sector_editor").data("prepare")(subsector.getCheesecake(),subsector);
78
+ };
76
79
  $("#contacts_filter_input").keyup(function(){
77
80
  cheese.searchEngine.filter($("#contacts_filter_input").val());
78
81
  //TODO: Make users unfiltered visible again
@@ -119,18 +119,20 @@
119
119
  });
120
120
  });
121
121
  $("#sector_editor").data("hide", function(callback){
122
- $("#sector_editor").stop().animate({width: 0},500, function(){
123
- $(".add_subsector_clone").remove();
124
- });
122
+ $("#sector_editor").stop().animate({width: 0},500);
125
123
  $("#contacts_explorer").stop().animate({width: 300},500, function(){
126
124
  if(callback) callback();
127
125
  });
128
126
  });
129
- $("#sector_editor").data("prepare", function(cheese){
127
+ $("#sector_editor").data("prepare", function(cheese, newSubsector){
130
128
  var sector = cheese.getFocusedSector();
131
- var subsector_count = sector.subsectors.length;
132
- var original_add_sector_row = $("#original_add_subsector_row");
129
+ var newIndex = -1;
130
+ if(newSubsector){
131
+ newIndex = newSubsector.getIndex();
132
+ }
133
133
  if(sector){
134
+ var subsector_count = sector.subsectors.length;
135
+ var maxReached = (subsector_count==4);
134
136
  $("#form_sector_name").val(sector.label);
135
137
  $("#edited_sector_name").html(sector.label);
136
138
  $("#form_sector_name").off("keyup");
@@ -138,44 +140,89 @@
138
140
  $("#edited_sector_name").html($("#form_sector_name").val());
139
141
  sector.changeLabel($("#form_sector_name").val());
140
142
  });
141
- $(".add_subsector_clone").remove();
142
- for(var i = 0; i < 4; i++){
143
- var subsector = sector.subsectors[i];
144
- if(subsector){
145
- var add_subsector_clone = original_add_sector_row.clone().attr("id", "add_subsector_" + i).addClass("add_subsector_clone").show();
146
- $("#subsector_" + i).parent().before(add_subsector_clone);
147
- $("#form_subsector_name_" + i).val(subsector.label);
148
- $("#edited_subsector_name_" + i).html(subsector.label);
149
- $("#form_subsector_name_" + i).off("keyup");
150
- $("#form_subsector_name_" + i).on("keyup", [i,subsector],function(event){
151
- $("#edited_subsector_name_" + event.data[0]).html($("#form_subsector_name_" + event.data[0]).val());
152
- event.data[1].changeLabel($("#form_subsector_name_" + event.data[0]).val());
153
- });
154
- $("#subsector_" + i).find(".permissions_field .permission").each(function(){
155
- var permission_field = $(this);
156
- var update_state = function(){
157
- var label_class = permission_field.attr("id").replace("form_", "edited_");
158
- if(permission_field.is(":checked")){
159
- $("." + label_class).removeClass("negative").addClass("positive");
160
- $("." + label_class).find(".negative_message").hide();
161
- $("." + label_class).find(".positive_message").show();
162
- }else{
163
- $("." + label_class).removeClass("positive").addClass("negative");
164
- $("." + label_class).find(".positive_message").hide();
165
- $("." + label_class).find(".negative_message").show();
143
+ if(maxReached){
144
+ $(".add_subsector").each(function(){
145
+ if($(this).is(':visible')){
146
+ $(this).slideToggle();
147
+ }
148
+ })
149
+ }
150
+ for(var i = 3; i >= 0; i--){
151
+ (function(){
152
+ var subsector = sector.subsectors[i];
153
+ var index = i;
154
+ var recentlyCreated = (newIndex != -1)&&(newIndex == index);
155
+ if(subsector){
156
+ if(!$("#subsector_" + i).is(':visible')){
157
+ $("#subsector_" + i).slideToggle();
158
+ }
159
+ if(recentlyCreated || ((newIndex == -1)&&(i == 0))){
160
+ if(!$("#subsector_" + i).find(".content").is(':visible')){
161
+ $("#subsector_" + i).find(".content").slideToggle();
162
+ }
163
+ }else{
164
+ if($("#subsector_" + i).find(".content").is(':visible')){
165
+ $("#subsector_" + i).find(".content").slideToggle();
166
166
  }
167
167
  }
168
- update_state();
169
- permission_field.on("change",update_state);
170
- });
171
- $("#subsector_" + i).show();
172
- }else{
173
- if(sector.subsectors[i-1]){
174
- var add_subsector_clone = original_add_sector_row.clone().attr("id", "add_subsector_" + i).addClass("add_subsector_clone").show();
175
- $("#subsector_" + (i-1)).parent().after(add_subsector_clone);
168
+ if(!maxReached){
169
+ if(sector.subsectors[i+1]==undefined){
170
+ $("#add_subsector_" + (i+1)).off("click");
171
+ if(!$("#add_subsector_" + (i+1)).is(':visible')){
172
+ $("#add_subsector_" + (i+1)).slideToggle();
173
+ }
174
+ $("#add_subsector_" + (i+1)).on("click",function(){
175
+ cheese.addNewSubsector(index+1);
176
+ $(".subsector .content").each(function(){
177
+ if($(this).is(':visible')){
178
+ $(this).slideToggle();
179
+ }
180
+ });
181
+ });
182
+ }
183
+ $("#add_subsector_" + i).off("click");
184
+ if(!$("#add_subsector_" + i).is(':visible')){
185
+ $("#add_subsector_" + i).slideToggle();
186
+ }
187
+ $("#add_subsector_" + i).on("click",function(){
188
+ cheese.addNewSubsector(index);
189
+ $(".subsector .content").each(function(){
190
+ if($(this).is(':visible')){
191
+ $(this).slideToggle();
192
+ }
193
+ });
194
+ });
195
+ }
196
+ $("#form_subsector_name_" + i).val(subsector.label);
197
+ $("#edited_subsector_name_" + i).html(subsector.label);
198
+ $("#form_subsector_name_" + i).off("keyup");
199
+ $("#form_subsector_name_" + i).on("keyup", [i,subsector],function(event){
200
+ $("#edited_subsector_name_" + event.data[0]).html($("#form_subsector_name_" + event.data[0]).val());
201
+ event.data[1].changeLabel($("#form_subsector_name_" + event.data[0]).val());
202
+ });
203
+ $("#subsector_" + i).find(".permissions_field .permission").each(function(){
204
+ var permission_field = $(this);
205
+ var update_state = function(){
206
+ var label_class = permission_field.attr("id").replace("form_", "edited_");
207
+ if(permission_field.is(":checked")){
208
+ $("." + label_class).removeClass("negative").addClass("positive");
209
+ $("." + label_class).find(".negative_message").hide();
210
+ $("." + label_class).find(".positive_message").show();
211
+ }else{
212
+ $("." + label_class).removeClass("positive").addClass("negative");
213
+ $("." + label_class).find(".positive_message").hide();
214
+ $("." + label_class).find(".negative_message").show();
215
+ }
216
+ }
217
+ update_state();
218
+ permission_field.on("change",update_state);
219
+ });
220
+ }else{
221
+ $("#subsector_" + i).hide();
222
+ $("#add_subsector_" + i).off("click");
223
+ $("#add_subsector_" + i).hide();
176
224
  }
177
- $("#subsector_" + i).hide();
178
- }
225
+ })();
179
226
  }
180
227
  }
181
228
  });
@@ -20,13 +20,8 @@
20
20
  <div id="edited_sector_color_in"></div>
21
21
  </div>
22
22
  </div>
23
- </div>
24
- <div class="form_row less_padding" id="original_add_subsector_row" style="display:none;">
25
- <div class="add_subsector">
26
- +
27
- </div>
28
- </div>
29
- <% for i in 0..3 do %>
23
+ </div>
24
+ <% 3.downto(0) do |i|%>
30
25
  <div class="form_row less_padding">
31
26
  <div class="subsector" id="subsector_<%= i %>">
32
27
  <div class="title">
@@ -48,17 +43,17 @@
48
43
  </div>
49
44
  <div class="form_row less_padding">
50
45
  <div class="form_field permissions_field">
51
- <% default_permissions.each_with_index do |p, i| %>
46
+ <% default_permissions.each_with_index do |p, j| %>
52
47
  <div contain=<%= dom_id p %> class="checkboxPermissionOptionLeft">
53
- <input id="form_subsector_<%= i %>_<%= dom_id p %>" class="permission <%= dom_id p %>" type="checkbox"/>
54
- <label for="form_subsector_<%= i %>_<%= dom_id p %>"><%= p.description(:brief, :relation => "%RELATION_NAME%", :subject => current_subject) %></label>
48
+ <input id="form_subsector_<%= j %>_<%= dom_id p %>" class="permission <%= dom_id p %>" type="checkbox"/>
49
+ <label for="form_subsector_<%= j %>_<%= dom_id p %>"><%= p.description(:brief, :relation => "%RELATION_NAME%", :subject => current_subject) %></label>
55
50
  <div class="clearfloat"></div>
56
51
  </div>
57
52
  <% end %>
58
53
  </div>
59
54
  <div class="permissions_explanation" style="display:none;">
60
- <% default_permissions.each_with_index do |p, i| %>
61
- <div class="permission <%= dom_id p %> positive edited_subsector_<%= i %>_<%= dom_id p %>">
55
+ <% default_permissions.each_with_index do |p, j| %>
56
+ <div class="permission <%= dom_id p %> positive edited_subsector_<%= j %>_<%= dom_id p %>">
62
57
  <div class="positive_message">
63
58
  <%= p.description(:detailed, :relation => "%RELATION_NAME%", :subject => current_subject, :state => "positive") %>
64
59
  </div>
@@ -72,6 +67,11 @@
72
67
  </div>
73
68
  </div>
74
69
  </div>
70
+ <div class="form_row less_padding">
71
+ <div class="add_subsector" id="add_subsector_<%= i %>">
72
+ +
73
+ </div>
74
+ </div>
75
75
  <% end %>
76
76
  </div>
77
77
  </form>
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "0.16.2".freeze
3
+ VERSION = "0.16.3".freeze
4
4
  end
5
5
  end
@@ -33,9 +33,7 @@ module SocialStream
33
33
  end
34
34
 
35
35
  def model_assigned_to contact, relation_ids
36
- model_attributes[:author_id] = contact.sender.id
37
36
  model_attributes[:owner_id] = contact.receiver.id
38
- model_attributes[:user_author_id] = contact.sender.id
39
37
  model_attributes[:_relation_ids] = Array(relation_ids).map(&:id)
40
38
  end
41
39
 
@@ -67,6 +65,25 @@ module SocialStream
67
65
  end
68
66
  end
69
67
 
68
+ shared_examples_for "Allow Reading" do
69
+ it "should read" do
70
+ get :show, :id => @current_model.to_param
71
+
72
+ response.should be_success
73
+ end
74
+ end
75
+
76
+ shared_examples_for "Deny Reading" do
77
+ it "should not read" do
78
+ begin
79
+ get :show, :id => @current_model.to_param
80
+
81
+ assert false
82
+ rescue CanCan::AccessDenied
83
+ end
84
+ end
85
+ end
86
+
70
87
  shared_examples_for "Allow Updating" do
71
88
  it "should update" do
72
89
  put :update, updating_attributes
@@ -7,73 +7,45 @@ namespace :db do
7
7
  desc "Reload populate data"
8
8
  task :reload => [ 'db:reset', :create ]
9
9
 
10
+ desc "Reload populate data for Cheesecake testing"
11
+ task :cheesecake => [ 'db:reset', :read_environment, :create_users, :create_groups, :create_cheesecake_ties, :create_avatars ]
12
+
10
13
  desc "Create populate data"
11
- task :create => :environment do
14
+ task :create => [ :read_environment, :create_users, :create_groups, :create_ties, :create_posts, :create_messages, :create_avatars ]
15
+
16
+ desc "INTERNAL: read needed environment data and setup variables"
17
+ task :read_environment => :environment do
12
18
  require 'forgery'
13
19
 
14
- LOGOS_PATH = File.join(Rails.root, 'lib', 'logos')
15
- LOGOS_TOTAL = (ENV["LOGOS_TOTAL"] || 10).to_i
16
- USERS = (ENV["USERS"] || 9).to_i
17
- GROUPS = (ENV["GROUPS"] || 10).to_i
18
- CHEESECAKE = (ENV["CHEESECAKE"].present? || false)
19
- if CHEESECAKE
20
- puts "Cheesecake Testing mode: ON"
21
- end
20
+ @LOGOS_PATH = File.join(Rails.root, 'lib', 'logos')
21
+ @LOGOS_TOTAL = (ENV["LOGOS_TOTAL"] || 10).to_i
22
+ @USERS = (ENV["USERS"] || 9).to_i
23
+ @GROUPS = (ENV["GROUPS"] || 10).to_i
22
24
  if ENV["HARDCORE"].present?
23
- USERS = 999
24
- GROUPS = 1000
25
+ @USERS = 999
26
+ @GROUPS = 1000
25
27
  puts "Hardcore mode: ON (May the Force be with you brave Padawan)"
26
- if CHEESECAKE
27
- puts "WARNING: Hardcore and Cheesecake Modes activated. This situation is really slow. Please, avoid it."
28
- end
29
28
  end
30
- if USERS < 9
31
- USERS = 9
29
+ if @USERS < 9
30
+ @USERS = 9
32
31
  puts "WARNING: There should be at least 10 users (Demo user and 9 more). Changing USERS to 9."
33
32
  end
34
- if GROUPS < 10
35
- GROUPS = 10
33
+ if @GROUPS < 10
34
+ @GROUPS = 10
36
35
  puts "WARNING: There should be at least 10 groups. Changing GROUPS to 10."
37
36
  end
38
37
 
39
38
  Mailboxer.setup do |config|
40
39
  config.uses_emails = false
41
40
  end
41
+ end
42
42
 
43
- def set_logos(klass)
44
- klass.all.each do |i|
45
- if LOGOS_TOTAL
46
- logo = Dir[File.join(LOGOS_PATH, klass.to_s.tableize, "#{ rand(LOGOS_TOTAL) + 1 }.*")].first
47
- avatar = Dir[File.join(LOGOS_PATH, klass.to_s.tableize, "#{ rand(LOGOS_TOTAL) + 1 }.*")].first
48
- else
49
- logo = Dir[File.join(LOGOS_PATH, klass.to_s.tableize, "#{ i.id }.*")].first
50
- avatar = Dir[File.join(LOGOS_PATH, klass.to_s.tableize, "#{ i.id }.*")].first
51
- end
52
-
53
- if avatar.present? && File.exists?(avatar)
54
- Avatar.copy_to_temp_file(avatar)
55
- dimensions = Avatar.get_image_dimensions(avatar)
56
- l = Avatar.new(:actor => i.actor,:logo => File.open(avatar), :name => File.basename(avatar), :crop_x => 0, :crop_y => 0, :crop_w => dimensions[:width], :crop_h => dimensions[:height] )
57
- l.active = true
58
- l.save!
59
- end
60
- end
61
- end
62
-
63
- def set_tags(klass)
64
- klass.all.each do |el|
65
- el.tag_list = Forgery::LoremIpsum.words(1,:random => true)+", "+
66
- Forgery::LoremIpsum.words(1,:random => true)+", "+
67
- Forgery::LoremIpsum.words(1,:random => true)
68
- el.save!
69
- end
70
- end
71
-
72
- puts 'User population (Demo and ' + USERS.to_s + ' users more)'
43
+ # USERS
44
+ desc "Create users"
45
+ task :create_users => :read_environment do
46
+ puts 'User population (Demo and ' + @USERS.to_s + ' users more)'
73
47
  users_start = Time.now
74
48
 
75
- # = Users
76
-
77
49
  # Create demo user if not present
78
50
  if User.find_by_name('demo').blank?
79
51
  User.create! :name => 'Demo',
@@ -82,27 +54,39 @@ namespace :db do
82
54
  :password_confirmation => 'demonstration'
83
55
  end
84
56
 
85
- require 'forgery'
86
-
87
- USERS.times do
57
+ @USERS.times do
88
58
  User.create! :name => Forgery::Name.full_name,
89
59
  :email => Forgery::Internet.email_address,
90
60
  :password => 'demonstration',
91
61
  :password_confirmation => 'demonstration'
92
62
  end
93
63
 
64
+ # Reload actors to include new users
65
+ @available_actors = Actor.all
94
66
 
95
67
  users_end = Time.now
96
68
  puts ' -> ' + (users_end - users_start).round(4).to_s + 's'
69
+ end
70
+
97
71
 
98
- puts 'Groups population (' + GROUPS.to_s + ' groups)'
72
+ # GROUPS
73
+ desc "Create groups"
74
+ task :create_groups => :read_environment do
75
+ puts 'Groups population (' + @GROUPS.to_s + ' groups)'
99
76
  groups_start = Time.now
100
77
 
101
- # = Groups
102
- available_actors = Actor.all
78
+ def set_tags(klass)
79
+ klass.all.each do |el|
80
+ el.tag_list = Forgery::LoremIpsum.words(1,:random => true)+", "+
81
+ Forgery::LoremIpsum.words(1,:random => true)+", "+
82
+ Forgery::LoremIpsum.words(1,:random => true)
83
+ el.save!
84
+ end
85
+ end
86
+
103
87
 
104
- GROUPS.times do
105
- founder = available_actors[rand(available_actors.size)]
88
+ @GROUPS.times do
89
+ founder = @available_actors[rand(@available_actors.size)]
106
90
 
107
91
  Group.create! :name => Forgery::Name.company_name,
108
92
  :email => Forgery::Internet.email_address,
@@ -112,147 +96,188 @@ namespace :db do
112
96
 
113
97
  set_tags(Group)
114
98
 
99
+ # Reload actors to include groups
100
+ @available_actors = Actor.all
101
+
115
102
  groups_end = Time.now
116
103
  puts ' -> ' + (groups_end - groups_start).round(4).to_s + 's'
104
+ end
117
105
 
118
106
 
107
+ # TIES
108
+ desc "Create ties"
109
+ task :create_ties => :read_environment do
119
110
  puts 'Ties population'
120
111
  ties_start = Time.now
121
112
 
122
- # Reload actors to include groups
123
- available_actors = Actor.all
113
+ @available_actors.each do |a|
114
+ actors = @available_actors.dup - Array(a)
115
+ relations = a.relation_customs + Array.wrap(Relation::Reject.instance)
116
+ break if actors.size==0
117
+ Forgery::Basic.number(:at_most => actors.size).times do
118
+ actor = actors.delete_at((rand * actors.size).to_i)
119
+ contact = a.contact_to!(actor)
120
+ contact.user_author = a.user_author if a.subject_type != "User"
121
+ contact.relation_ids = Array(Forgery::Extensions::Array.new(relations).random.id) unless a==actor
122
+ end
123
+ end
124
+
125
+ ties_end = Time.now
126
+ puts ' -> ' + (ties_end - ties_start).round(4).to_s + 's'
127
+ end
124
128
 
125
- # = Ties
126
- available_actors.each do |a|
127
- actors = available_actors.dup - Array(a)
129
+
130
+ # TIES, special version for cheesecake testing
131
+ desc "Create cheesecake ties"
132
+ task :create_cheesecake_ties => :read_environment do
133
+ puts 'Ties population (Cheesecake version)'
134
+ ties_start = Time.now
135
+
136
+ @available_actors.each do |a|
137
+ actors = @available_actors.dup - Array(a)
128
138
  relations = a.relation_customs + Array.wrap(Relation::Reject.instance)
129
- break if actors.size==0
130
- if CHEESECAKE
131
- actor = Actor.first
132
- unless a==actor
133
- puts a.name + " connecting with " + actor.name
134
- # DRY! :-S
135
- contact = a.contact_to!(actor)
136
- contact.user_author = a.user_author if a.subject_type != "User"
137
- contact.relation_ids = Array(Forgery::Extensions::Array.new(a.relation_customs).random.id)
138
-
139
- contact = actor.contact_to!(a)
140
- contact.user_author = actor.user_author if actor.subject_type != "User"
141
- contact.relation_ids = Array(Forgery::Extensions::Array.new(actor.relation_customs).random.id)
142
- end
143
- else
144
- Forgery::Basic.number(:at_most => actors.size).times do
145
- actor = actors.delete_at((rand * actors.size).to_i)
146
- contact = a.contact_to!(actor)
147
- contact.user_author = a.user_author if a.subject_type != "User"
148
- contact.relation_ids = Array(Forgery::Extensions::Array.new(relations).random.id) unless a==actor
149
- end
139
+ break if actors.size==0
140
+ actor = Actor.first
141
+ unless a==actor
142
+ puts a.name + " connecting with " + actor.name
143
+ # DRY! :-S
144
+ contact = a.contact_to!(actor)
145
+ contact.user_author = a.user_author if a.subject_type != "User"
146
+ contact.relation_ids = Array(Forgery::Extensions::Array.new(a.relation_customs).random.id)
147
+
148
+ contact = actor.contact_to!(a)
149
+ contact.user_author = actor.user_author if actor.subject_type != "User"
150
+ contact.relation_ids = Array(Forgery::Extensions::Array.new(actor.relation_customs).random.id)
150
151
  end
151
152
  end
152
153
 
153
154
  ties_end = Time.now
154
155
  puts ' -> ' + (ties_end - ties_start).round(4).to_s + 's'
156
+ end
155
157
 
156
- # = Posts
158
+
159
+ # POSTS
160
+ desc "Create posts"
161
+ task :create_posts => :read_environment do
157
162
  puts 'Post population'
158
- unless CHEESECAKE
159
- posts_start = Time.now
160
-
161
- SocialStream::Populate.power_law(Tie.all) do |t|
162
- updated = Time.at(rand(Time.now.to_i))
163
-
164
- author = t.sender
165
- owner = t.receiver
166
- user_author = ( t.sender.subject_type == "User" ? t.sender : t.sender.user_author )
167
-
168
- p = Post.create :text =>
169
- "This post sActorhould be for #{ t.relation.name } of #{ t.sender.name }.\n#{ Forgery::LoremIpsum.paragraph(:random => true) }",
170
- :created_at => Time.at(rand(updated.to_i)),
171
- :updated_at => updated,
172
- :author_id => author.id,
173
- :owner_id => owner.id,
174
- :user_author_id => user_author.id,
175
- :_relation_ids => Array(t.relation_id)
176
-
177
- p.post_activity.update_attributes(:created_at => p.created_at,
178
- :updated_at => p.updated_at)
179
- end
180
-
181
- posts_end = Time.now
182
- puts ' -> ' + (posts_end - posts_start).round(4).to_s + 's'
183
- else
184
- puts ' -> Cheesecake Testing Mode. Avoiding Post Population.'
163
+ posts_start = Time.now
164
+
165
+ SocialStream::Populate.power_law(Tie.all) do |t|
166
+ updated = Time.at(rand(Time.now.to_i))
167
+
168
+ author = t.sender
169
+ owner = t.receiver
170
+ user_author = ( t.sender.subject_type == "User" ? t.sender : t.sender.user_author )
171
+
172
+ p = Post.create :text =>
173
+ "This post sActorhould be for #{ t.relation.name } of #{ t.sender.name }.\n#{ Forgery::LoremIpsum.paragraph(:random => true) }",
174
+ :created_at => Time.at(rand(updated.to_i)),
175
+ :updated_at => updated,
176
+ :author_id => author.id,
177
+ :owner_id => owner.id,
178
+ :user_author_id => user_author.id,
179
+ :_relation_ids => Array(t.relation_id)
180
+
181
+ p.post_activity.update_attributes(:created_at => p.created_at,
182
+ :updated_at => p.updated_at)
185
183
  end
186
184
 
187
- # = Mailboxer
185
+ posts_end = Time.now
186
+ puts ' -> ' + (posts_end - posts_start).round(4).to_s + 's'
187
+ end
188
+
189
+
190
+ # MESSAGES
191
+ desc "Create messages using mailboxer"
192
+ task :create_messages => :read_environment do
188
193
  puts 'Mailboxer population'
189
- unless CHEESECAKE
190
- mailboxer_start = Time.now
191
- available_actors = Actor.all
192
-
193
- available_actors.each do |a|
194
- actors = available_actors.dup - Array(a)
195
-
196
- mult_recp = actors.uniq
197
- if (demo = User.find_by_name('demo')) and !mult_recp.include? Actor.normalize(demo)
198
- mult_recp << Actor.normalize(demo)
199
- end
200
- actor = mult_recp[(rand * mult_recp.size).to_i]
201
- mult_recp.delete(actor)
202
- mail = actor.send_message(mult_recp, "Hello all, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}", Forgery::LoremIpsum.words(10,:random => true))
203
- actor = mult_recp[(rand * mult_recp.size).to_i]
204
- mail = actor.reply_to_all(mail, "Well, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
205
- actor = mult_recp[(rand * mult_recp.size).to_i]
206
- mail = actor.reply_to_all(mail, "Ok, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
207
- actor = mult_recp[(rand * mult_recp.size).to_i]
208
- mail = actor.reply_to_all(mail, "Pretty well, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
209
- actor = mult_recp[(rand * mult_recp.size).to_i]
210
- actor.reply_to_all(mail, "Finally, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
211
-
212
-
213
- if (demo = User.find_by_name('demo'))
214
- next if Actor.normalize(demo)==Actor.normalize(a)
215
- mail = a.send_message(demo, "Hello, #{demo.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}", Forgery::LoremIpsum.words(10,:random => true))
194
+ mailboxer_start = Time.now
195
+ @available_actors = Actor.all
196
+
197
+ @available_actors.each do |a|
198
+ actors = @available_actors.dup - Array(a)
199
+
200
+ mult_recp = actors.uniq
201
+ if (demo = User.find_by_name('demo')) and !mult_recp.include? Actor.normalize(demo)
202
+ mult_recp << Actor.normalize(demo)
203
+ end
204
+ actor = mult_recp[(rand * mult_recp.size).to_i]
205
+ mult_recp.delete(actor)
206
+ mail = actor.send_message(mult_recp, "Hello all, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}", Forgery::LoremIpsum.words(10,:random => true))
207
+ actor = mult_recp[(rand * mult_recp.size).to_i]
208
+ mail = actor.reply_to_all(mail, "Well, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
209
+ actor = mult_recp[(rand * mult_recp.size).to_i]
210
+ mail = actor.reply_to_all(mail, "Ok, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
211
+ actor = mult_recp[(rand * mult_recp.size).to_i]
212
+ mail = actor.reply_to_all(mail, "Pretty well, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
213
+ actor = mult_recp[(rand * mult_recp.size).to_i]
214
+ actor.reply_to_all(mail, "Finally, I am #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
215
+
216
+
217
+ if (demo = User.find_by_name('demo'))
218
+ next if Actor.normalize(demo)==Actor.normalize(a)
219
+ mail = a.send_message(demo, "Hello, #{demo.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}", Forgery::LoremIpsum.words(10,:random => true))
220
+ if rand > 0.5
221
+ mail = demo.reply_to_sender(mail, "Pretty well #{a.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
216
222
  if rand > 0.5
217
- mail = demo.reply_to_sender(mail, "Pretty well #{a.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
218
- if rand > 0.5
219
- a.reply_to_sender(mail, "Ok #{demo.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
220
- end
221
- end
222
- if rand > 0.75
223
- mail.conversation.move_to_trash(demo)
223
+ a.reply_to_sender(mail, "Ok #{demo.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
224
224
  end
225
225
  end
226
-
227
- Forgery::Basic.number(:at_most => actors.size).times do
228
- actor = actors.delete_at((rand * actors.size).to_i)
229
- next if Actor.normalize(actor)==Actor.normalize(a)
230
- mail = a.send_message(actor, "Hello, #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}", Forgery::LoremIpsum.words(10,:random => true))
226
+ if rand > 0.75
227
+ mail.conversation.move_to_trash(demo)
228
+ end
229
+ end
230
+
231
+ Forgery::Basic.number(:at_most => actors.size).times do
232
+ actor = actors.delete_at((rand * actors.size).to_i)
233
+ next if Actor.normalize(actor)==Actor.normalize(a)
234
+ mail = a.send_message(actor, "Hello, #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}", Forgery::LoremIpsum.words(10,:random => true))
235
+ if rand > 0.5
236
+ mail = actor.reply_to_sender(mail, "Pretty well #{a.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
231
237
  if rand > 0.5
232
- mail = actor.reply_to_sender(mail, "Pretty well #{a.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
233
- if rand > 0.5
234
- a.reply_to_sender(mail, "Ok #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
235
- end
236
- end
237
- if rand > 0.75
238
- mail.conversation.move_to_trash(actor)
238
+ a.reply_to_sender(mail, "Ok #{actor.name}. #{Forgery::LoremIpsum.sentences(2,:random => true)}")
239
239
  end
240
240
  end
241
+ if rand > 0.75
242
+ mail.conversation.move_to_trash(actor)
243
+ end
241
244
  end
242
-
243
- mailboxer_end = Time.now
244
- puts ' -> ' + (mailboxer_end - mailboxer_start).round(4).to_s + 's'
245
- else
246
- puts ' -> Cheesecake Testing Mode. Avoiding Mailboxer Population.'
247
245
  end
248
246
 
247
+ mailboxer_end = Time.now
248
+ puts ' -> ' + (mailboxer_end - mailboxer_start).round(4).to_s + 's'
249
+
250
+ end
251
+
252
+
253
+ # AVATARS
254
+ desc "Create avatars"
255
+ task :create_avatars => :read_environment do
256
+ def set_logos(klass)
257
+ klass.all.each do |i|
258
+ if @LOGOS_TOTAL
259
+ logo = Dir[File.join(@LOGOS_PATH, klass.to_s.tableize, "#{ rand(@LOGOS_TOTAL) + 1 }.*")].first
260
+ avatar = Dir[File.join(@LOGOS_PATH, klass.to_s.tableize, "#{ rand(@LOGOS_TOTAL) + 1 }.*")].first
261
+ else
262
+ logo = Dir[File.join(@LOGOS_PATH, klass.to_s.tableize, "#{ i.id }.*")].first
263
+ avatar = Dir[File.join(@LOGOS_PATH, klass.to_s.tableize, "#{ i.id }.*")].first
264
+ end
265
+
266
+ if avatar.present? && File.exists?(avatar)
267
+ Avatar.copy_to_temp_file(avatar)
268
+ dimensions = Avatar.get_image_dimensions(avatar)
269
+ l = Avatar.new(:actor => i.actor,:logo => File.open(avatar), :name => File.basename(avatar), :crop_x => 0, :crop_y => 0, :crop_w => dimensions[:width], :crop_h => dimensions[:height] )
270
+ l.active = true
271
+ l.save!
272
+ end
273
+ end
274
+ end
249
275
 
250
276
  puts 'Avatar population'
251
277
  avatar_start = Time.now
252
278
  SocialStream.subjects.each {|a| set_logos(Kernel.const_get(a.to_s.classify)) }
253
279
  avatar_end = Time.now
254
280
  puts ' -> ' + (avatar_end - avatar_start).round(4).to_s + 's'
255
-
256
281
  end
257
282
  end
258
283
  end
@@ -58,7 +58,7 @@ Gem::Specification.new do |s|
58
58
  # Autolink text blocks
59
59
  s.add_runtime_dependency('rails_autolink', '~> 1.0.4')
60
60
  # SocialCheesecake
61
- s.add_runtime_dependency('social_cheesecake','~> 0.3.0')
61
+ s.add_runtime_dependency('social_cheesecake','~> 0.4.0')
62
62
  # I18n-js
63
63
  s.add_runtime_dependency('i18n-js','~>2.1.2')
64
64
 
@@ -25,6 +25,7 @@ describe PostsController do
25
25
  end
26
26
 
27
27
  it_should_behave_like "Allow Creating"
28
+ it_should_behave_like "Allow Reading"
28
29
  it_should_behave_like "Allow Destroying"
29
30
 
30
31
  it "should destroy with js" do
@@ -49,6 +50,7 @@ describe PostsController do
49
50
  end
50
51
 
51
52
  it_should_behave_like "Allow Creating"
53
+ it_should_behave_like "Allow Reading"
52
54
  it_should_behave_like "Allow Destroying"
53
55
  end
54
56
 
@@ -63,6 +65,7 @@ describe PostsController do
63
65
  end
64
66
 
65
67
  it_should_behave_like "Allow Creating"
68
+ it_should_behave_like "Allow Reading"
66
69
  it_should_behave_like "Allow Destroying"
67
70
  end
68
71
  end
@@ -72,9 +75,13 @@ describe PostsController do
72
75
  friend = Factory(:friend, :contact => Factory(:contact, :receiver => @user.actor)).sender
73
76
 
74
77
  model_assigned_to @user.contact_to!(friend), friend.relation_custom('friend')
78
+ @current_model = Factory(:post, :author_id => @user.actor_id,
79
+ :owner_id => friend.id,
80
+ :user_author_id => @user.actor_id)
75
81
  end
76
82
 
77
83
  it_should_behave_like "Allow Creating"
84
+ it_should_behave_like "Allow Reading"
78
85
  end
79
86
 
80
87
  describe "post to acquaintance" do
@@ -87,6 +94,14 @@ describe PostsController do
87
94
  it_should_behave_like "Deny Creating"
88
95
  end
89
96
 
97
+ describe "post from other user" do
98
+ before do
99
+ @current_model = Factory(:post)
100
+ end
101
+
102
+ it_should_behave_like "Deny Reading"
103
+ end
104
+
90
105
  describe "posts represented group" do
91
106
  before do
92
107
  @group = Factory(:member, :contact => Factory(:group_contact, :receiver => @user.actor)).sender_subject
@@ -105,6 +120,7 @@ describe PostsController do
105
120
  end
106
121
 
107
122
  it_should_behave_like "Allow Creating"
123
+ it_should_behave_like "Allow Reading"
108
124
  it_should_behave_like "Allow Destroying"
109
125
  end
110
126
 
@@ -125,6 +141,7 @@ describe PostsController do
125
141
  end
126
142
 
127
143
  it_should_behave_like "Allow Creating"
144
+ it_should_behave_like "Allow Reading"
128
145
  it_should_behave_like "Allow Destroying"
129
146
  end
130
147
 
@@ -140,6 +157,7 @@ describe PostsController do
140
157
  end
141
158
 
142
159
  it_should_behave_like "Allow Creating"
160
+ it_should_behave_like "Allow Reading"
143
161
  it_should_behave_like "Allow Destroying"
144
162
  end
145
163
 
@@ -155,11 +173,11 @@ describe PostsController do
155
173
  end
156
174
 
157
175
  it_should_behave_like "Allow Creating"
176
+ it_should_behave_like "Allow Reading"
158
177
  it_should_behave_like "Allow Destroying"
159
178
  end
160
179
  end
161
180
  end
162
-
163
181
  end
164
182
 
165
183
  context "creating post in group's wall" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: social_stream-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.2
4
+ version: 0.16.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-21 00:00:00.000000000Z
13
+ date: 2012-02-28 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &81495330 !ruby/object:Gem::Requirement
17
+ requirement: &86562090 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 3.1.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *81495330
25
+ version_requirements: *86562090
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: ancestry
28
- requirement: &81494920 !ruby/object:Gem::Requirement
28
+ requirement: &86561710 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.2.3
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *81494920
36
+ version_requirements: *86561710
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: foreigner
39
- requirement: &81494510 !ruby/object:Gem::Requirement
39
+ requirement: &86514950 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.1.1
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *81494510
47
+ version_requirements: *86514950
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: devise
50
- requirement: &81494270 !ruby/object:Gem::Requirement
50
+ requirement: &86514700 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.5.3
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *81494270
58
+ version_requirements: *86514700
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: inherited_resources
61
- requirement: &81494010 !ruby/object:Gem::Requirement
61
+ requirement: &86514440 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 1.3.0
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *81494010
69
+ version_requirements: *86514440
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: stringex
72
- requirement: &81493640 !ruby/object:Gem::Requirement
72
+ requirement: &86514200 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 1.3.0
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *81493640
80
+ version_requirements: *86514200
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: avatars_for_rails
83
- requirement: &81486780 !ruby/object:Gem::Requirement
83
+ requirement: &86513870 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 0.2.2
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *81486780
91
+ version_requirements: *86513870
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: jquery-rails
94
- requirement: &81486530 !ruby/object:Gem::Requirement
94
+ requirement: &86513640 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 1.0.9
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *81486530
102
+ version_requirements: *86513640
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: cancan
105
- requirement: &81486210 !ruby/object:Gem::Requirement
105
+ requirement: &86513400 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 1.6.4
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *81486210
113
+ version_requirements: *86513400
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: kaminari
116
- requirement: &81485880 !ruby/object:Gem::Requirement
116
+ requirement: &86513150 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 0.13.0
122
122
  type: :runtime
123
123
  prerelease: false
124
- version_requirements: *81485880
124
+ version_requirements: *86513150
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: omniauth
127
- requirement: &81485550 !ruby/object:Gem::Requirement
127
+ requirement: &86512910 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: 1.0.2
133
133
  type: :runtime
134
134
  prerelease: false
135
- version_requirements: *81485550
135
+ version_requirements: *86512910
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: omniauth-facebook
138
- requirement: &81485240 !ruby/object:Gem::Requirement
138
+ requirement: &86512660 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ~>
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: 1.2.0
144
144
  type: :runtime
145
145
  prerelease: false
146
- version_requirements: *81485240
146
+ version_requirements: *86512660
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: omniauth-linkedin
149
- requirement: &81485000 !ruby/object:Gem::Requirement
149
+ requirement: &86512430 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ~>
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: 0.0.6
155
155
  type: :runtime
156
156
  prerelease: false
157
- version_requirements: *81485000
157
+ version_requirements: *86512430
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: mailboxer
160
- requirement: &81484680 !ruby/object:Gem::Requirement
160
+ requirement: &86512200 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ~>
@@ -165,10 +165,10 @@ dependencies:
165
165
  version: 0.6.0
166
166
  type: :runtime
167
167
  prerelease: false
168
- version_requirements: *81484680
168
+ version_requirements: *86512200
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: acts-as-taggable-on
171
- requirement: &81484350 !ruby/object:Gem::Requirement
171
+ requirement: &86511970 !ruby/object:Gem::Requirement
172
172
  none: false
173
173
  requirements:
174
174
  - - ~>
@@ -176,10 +176,10 @@ dependencies:
176
176
  version: 2.2.2
177
177
  type: :runtime
178
178
  prerelease: false
179
- version_requirements: *81484350
179
+ version_requirements: *86511970
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: formtastic
182
- requirement: &81483950 !ruby/object:Gem::Requirement
182
+ requirement: &86511730 !ruby/object:Gem::Requirement
183
183
  none: false
184
184
  requirements:
185
185
  - - ~>
@@ -187,10 +187,10 @@ dependencies:
187
187
  version: 1.2.3
188
188
  type: :runtime
189
189
  prerelease: false
190
- version_requirements: *81483950
190
+ version_requirements: *86511730
191
191
  - !ruby/object:Gem::Dependency
192
192
  name: simple-navigation
193
- requirement: &81483600 !ruby/object:Gem::Requirement
193
+ requirement: &86511500 !ruby/object:Gem::Requirement
194
194
  none: false
195
195
  requirements:
196
196
  - - ~>
@@ -198,10 +198,10 @@ dependencies:
198
198
  version: 3.5.1
199
199
  type: :runtime
200
200
  prerelease: false
201
- version_requirements: *81483600
201
+ version_requirements: *86511500
202
202
  - !ruby/object:Gem::Dependency
203
203
  name: resque
204
- requirement: &81483120 !ruby/object:Gem::Requirement
204
+ requirement: &86511260 !ruby/object:Gem::Requirement
205
205
  none: false
206
206
  requirements:
207
207
  - - ~>
@@ -209,10 +209,10 @@ dependencies:
209
209
  version: 1.19.0
210
210
  type: :runtime
211
211
  prerelease: false
212
- version_requirements: *81483120
212
+ version_requirements: *86511260
213
213
  - !ruby/object:Gem::Dependency
214
214
  name: modernizr-rails
215
- requirement: &81482650 !ruby/object:Gem::Requirement
215
+ requirement: &86511010 !ruby/object:Gem::Requirement
216
216
  none: false
217
217
  requirements:
218
218
  - - ~>
@@ -220,10 +220,10 @@ dependencies:
220
220
  version: 2.0.6
221
221
  type: :runtime
222
222
  prerelease: false
223
- version_requirements: *81482650
223
+ version_requirements: *86511010
224
224
  - !ruby/object:Gem::Dependency
225
225
  name: thinking-sphinx
226
- requirement: &81482050 !ruby/object:Gem::Requirement
226
+ requirement: &86510720 !ruby/object:Gem::Requirement
227
227
  none: false
228
228
  requirements:
229
229
  - - ~>
@@ -231,10 +231,10 @@ dependencies:
231
231
  version: 2.0.8
232
232
  type: :runtime
233
233
  prerelease: false
234
- version_requirements: *81482050
234
+ version_requirements: *86510720
235
235
  - !ruby/object:Gem::Dependency
236
236
  name: sass-rails
237
- requirement: &81481710 !ruby/object:Gem::Requirement
237
+ requirement: &86510430 !ruby/object:Gem::Requirement
238
238
  none: false
239
239
  requirements:
240
240
  - - ! '>='
@@ -242,10 +242,10 @@ dependencies:
242
242
  version: 3.1.0
243
243
  type: :runtime
244
244
  prerelease: false
245
- version_requirements: *81481710
245
+ version_requirements: *86510430
246
246
  - !ruby/object:Gem::Dependency
247
247
  name: rails_autolink
248
- requirement: &81481330 !ruby/object:Gem::Requirement
248
+ requirement: &86510070 !ruby/object:Gem::Requirement
249
249
  none: false
250
250
  requirements:
251
251
  - - ~>
@@ -253,21 +253,21 @@ dependencies:
253
253
  version: 1.0.4
254
254
  type: :runtime
255
255
  prerelease: false
256
- version_requirements: *81481330
256
+ version_requirements: *86510070
257
257
  - !ruby/object:Gem::Dependency
258
258
  name: social_cheesecake
259
- requirement: &81480840 !ruby/object:Gem::Requirement
259
+ requirement: &86509750 !ruby/object:Gem::Requirement
260
260
  none: false
261
261
  requirements:
262
262
  - - ~>
263
263
  - !ruby/object:Gem::Version
264
- version: 0.3.0
264
+ version: 0.4.0
265
265
  type: :runtime
266
266
  prerelease: false
267
- version_requirements: *81480840
267
+ version_requirements: *86509750
268
268
  - !ruby/object:Gem::Dependency
269
269
  name: i18n-js
270
- requirement: &81480340 !ruby/object:Gem::Requirement
270
+ requirement: &86509470 !ruby/object:Gem::Requirement
271
271
  none: false
272
272
  requirements:
273
273
  - - ~>
@@ -275,10 +275,10 @@ dependencies:
275
275
  version: 2.1.2
276
276
  type: :runtime
277
277
  prerelease: false
278
- version_requirements: *81480340
278
+ version_requirements: *86509470
279
279
  - !ruby/object:Gem::Dependency
280
280
  name: capybara
281
- requirement: &81480000 !ruby/object:Gem::Requirement
281
+ requirement: &86509110 !ruby/object:Gem::Requirement
282
282
  none: false
283
283
  requirements:
284
284
  - - ~>
@@ -286,10 +286,10 @@ dependencies:
286
286
  version: 0.3.9
287
287
  type: :development
288
288
  prerelease: false
289
- version_requirements: *81480000
289
+ version_requirements: *86509110
290
290
  - !ruby/object:Gem::Dependency
291
291
  name: sqlite3-ruby
292
- requirement: &81479690 !ruby/object:Gem::Requirement
292
+ requirement: &86508580 !ruby/object:Gem::Requirement
293
293
  none: false
294
294
  requirements:
295
295
  - - ! '>='
@@ -297,10 +297,10 @@ dependencies:
297
297
  version: '0'
298
298
  type: :development
299
299
  prerelease: false
300
- version_requirements: *81479690
300
+ version_requirements: *86508580
301
301
  - !ruby/object:Gem::Dependency
302
302
  name: ruby-debug19
303
- requirement: &81479310 !ruby/object:Gem::Requirement
303
+ requirement: &86508210 !ruby/object:Gem::Requirement
304
304
  none: false
305
305
  requirements:
306
306
  - - ! '>='
@@ -308,10 +308,10 @@ dependencies:
308
308
  version: '0'
309
309
  type: :development
310
310
  prerelease: false
311
- version_requirements: *81479310
311
+ version_requirements: *86508210
312
312
  - !ruby/object:Gem::Dependency
313
313
  name: rspec-rails
314
- requirement: &81478900 !ruby/object:Gem::Requirement
314
+ requirement: &86507670 !ruby/object:Gem::Requirement
315
315
  none: false
316
316
  requirements:
317
317
  - - ~>
@@ -319,10 +319,10 @@ dependencies:
319
319
  version: 2.6.1
320
320
  type: :development
321
321
  prerelease: false
322
- version_requirements: *81478900
322
+ version_requirements: *86507670
323
323
  - !ruby/object:Gem::Dependency
324
324
  name: factory_girl
325
- requirement: &81478590 !ruby/object:Gem::Requirement
325
+ requirement: &86507130 !ruby/object:Gem::Requirement
326
326
  none: false
327
327
  requirements:
328
328
  - - ~>
@@ -330,10 +330,10 @@ dependencies:
330
330
  version: 1.3.2
331
331
  type: :development
332
332
  prerelease: false
333
- version_requirements: *81478590
333
+ version_requirements: *86507130
334
334
  - !ruby/object:Gem::Dependency
335
335
  name: forgery
336
- requirement: &81478360 !ruby/object:Gem::Requirement
336
+ requirement: &86314900 !ruby/object:Gem::Requirement
337
337
  none: false
338
338
  requirements:
339
339
  - - ~>
@@ -341,10 +341,10 @@ dependencies:
341
341
  version: 0.4.2
342
342
  type: :development
343
343
  prerelease: false
344
- version_requirements: *81478360
344
+ version_requirements: *86314900
345
345
  - !ruby/object:Gem::Dependency
346
346
  name: ci_reporter
347
- requirement: &81478110 !ruby/object:Gem::Requirement
347
+ requirement: &86314570 !ruby/object:Gem::Requirement
348
348
  none: false
349
349
  requirements:
350
350
  - - ~>
@@ -352,10 +352,10 @@ dependencies:
352
352
  version: 1.6.4
353
353
  type: :development
354
354
  prerelease: false
355
- version_requirements: *81478110
355
+ version_requirements: *86314570
356
356
  - !ruby/object:Gem::Dependency
357
357
  name: nifty-generators
358
- requirement: &81477870 !ruby/object:Gem::Requirement
358
+ requirement: &86314210 !ruby/object:Gem::Requirement
359
359
  none: false
360
360
  requirements:
361
361
  - - ~>
@@ -363,7 +363,7 @@ dependencies:
363
363
  version: 0.4.5
364
364
  type: :development
365
365
  prerelease: false
366
- version_requirements: *81477870
366
+ version_requirements: *86314210
367
367
  description: ! 'Social Stream is a Ruby on Rails engine providing your application
368
368
  with social networking features and activity streams.
369
369