Use a module for this?

40 views
Skip to first unread message

Dave Castellano

unread,
Mar 24, 2014, 2:56:37 PM3/24/14
to rubyonra...@googlegroups.com
Hi,

I have some code that has to be used by more than one method in the same
class. Would I create a module for this or is there a better way?

eg.
module QuestionSequencer
class Sequence

def sequence_questions
initial_now_playing_length = play_list[0].length
now_playing = play_list[0]
clone_number = 3
order = "random" # $$$Variable
if order == "random"
now_playing_temp = Array.new
for i in 1..clone_number
now_playing = now_playing.dup.shuffle
now_playing_temp = now_playing_temp + now_playing
end
now_playing = now_playing_temp
for d in 1..clone_number # Check for sequential duplicates:
if now_playing[(initial_now_playing_length * d) -1 ] ==
now_playing[initial_now_playing_length * d]
value = now_playing.delete_at(initial_now_playing_length *
d)
now_playing.insert(now_playing.length, value) # Reinsert
the item in a new position
end
end
else # Sequential
now_playing = now_playing.dup * clone_number
end
now_playing

end
end
end

in method:
now_playing = play_list.sequence_questions
in model:
include QuestionSequencer

This is not working but would like to know if I'm at least going in the
correct direction.

Thanks,
Dave

--
Posted via http://www.ruby-forum.com/.

Colin Law

unread,
Mar 24, 2014, 4:38:27 PM3/24/14
to rubyonra...@googlegroups.com
On 24 March 2014 18:56, Dave Castellano <li...@ruby-forum.com> wrote:
> Hi,
>
> I have some code that has to be used by more than one method in the same
> class. Would I create a module for this or is there a better way?
> ...
> in method:
> now_playing = play_list.sequence_questions
> in model:
> include QuestionSequencer

Is play_list an instance of a model? If so then why is
sequence_questions not just a method of the model?

Colin

Dave Castellano

unread,
Mar 24, 2014, 5:50:50 PM3/24/14
to rubyonra...@googlegroups.com
Is play_list an instance of a model? If so then why is
sequence_questions not just a method of the model?

Colin

Yes it is. I'll try that now.

Thank you.

Dave Castellano

Dave Castellano

unread,
Mar 24, 2014, 6:12:22 PM3/24/14
to rubyonra...@googlegroups.com
Dave Castellano wrote in post #1140813:
> Is play_list an instance of a model? If so then why is
> sequence_questions not just a method of the model?
>
> Colin
>
> Yes it is. I'll try that now.
>
> Thank you.
>
> Dave Castellano

Well, maybe...

Here is the code, te question is is it an instance if its not yet
created?

# POST /drills
# POST /drills.json
def create
if params[:level] == "subject"
session[:scope_id] = session[:student_subject_id]
session[:scope] = "subject"
elsif params[:level] == "book"
session[:scope_id] = session[:student_book_id]
session[:scope] = "book"
elsif params[:level] == "chapter"
session[:scope_id] = session[:student_chapter_id]
session[:scope] = "chapter"
end

if !Drill.exists? user_id: current_user.id, scope: params[:level],
scope_id: session[:scope_id]
if params[:level] == "subject"
klass = ScopeSelector::Subject
scope_id = session[:student_subject_id]
elsif params[:level] == "book"
klass = ScopeSelector::Book
scope_id = session[:student_book_id]
elsif params[:level] == "chapter"
klass = ScopeSelector::Chapter
scope_id = session[:student_chapter_id]
end
scope_selector = klass.new(scope_id)
play_list = scope_selector.play_list
# play_list[0] contains question ids corresponding to minisection
id in play_list[1]
# play_list[1] contains the minisection_id of the question ids in
play_list[0]
# play_list[2..infinity] contain upcoming minisection ids waiting
to be converted to their corresponding question ids


=begin
initial_now_playing_length = play_list[0].length
now_playing = play_list[0] # Create the now_playing from the long
list by shifting starting_now_playing_length question id's fron question
pool.
clone_number = 3 # $$$Variable # Number of repeats of
now_playing used to create initial playlist
order = "random" # $$$Variable
if order == "random"
now_playing_temp = Array.new
for i in 1..clone_number
now_playing = now_playing.dup.shuffle
now_playing_temp = now_playing_temp + now_playing
end
now_playing = now_playing_temp
for d in 1..clone_number # Check for sequential duplicates:
if now_playing[(initial_now_playing_length * d) -1 ] ==
now_playing[initial_now_playing_length * d] # Finds a duplicate...
value = now_playing.delete_at(initial_now_playing_length *
d) # Get the item and delete it from array
now_playing.insert(now_playing.length, value) # Reinsert
the item in a new position
end
end
else # Sequential
now_playing = now_playing.dup * clone_number
end
=end

now_playing = play_list[0].sequence_questions
binding.pry

play_list[0] = now_playing
@question = Question.find(play_list[0][0])
session[:play_list] = play_list
@drill = Drill.new(play_list: play_list, scope: params[:level],
scope_id: scope_id, user_id: current_user.id)
if @drill.save
redirect_to(:controller => "questions", :action => "show", :id
=> @question)
else
redirect_to :back
end
else # Drill already exists
@existing_drill = Drill.where("user_id = ? AND scope = ? AND
scope_id =?", current_user.id, params[:level],
session[:scope_id]).first.play_list
session[:play_list] = @existing_drill
@question = @existing_drill[0][0]
redirect_to(:controller => "questions", :action => "show", :id =>
@question)
end
end

The code between begin and end is the code I need to use in more than
one method...

Dave

Colin Law

unread,
Mar 24, 2014, 6:20:49 PM3/24/14
to rubyonra...@googlegroups.com
On 24 March 2014 22:12, Dave Castellano <li...@ruby-forum.com> wrote:
> Dave Castellano wrote in post #1140813:
>> Is play_list an instance of a model? If so then why is
>> sequence_questions not just a method of the model?
>>
>> Colin
>>
>> Yes it is. I'll try that now.
>>
>> Thank you.
>>
>> Dave Castellano
>
> Well, maybe...
>
> Here is the code, te question is is it an instance if its not yet
> created?
>
> [snipped lots of code]

Do not make us wade through lots of code trying to understand what is
going on. Explain the problem and show us just a few lines of code if
necessary. For instance of what type is play_list? You said it was
an instance of a model, but it seems to be an array or collection of
some sort.

Colin

Dave Castellano

unread,
Mar 24, 2014, 6:48:02 PM3/24/14
to rubyonra...@googlegroups.com
>
> Do not make us wade through lots of code trying to understand what is
> going on. Explain the problem and show us just a few lines of code if
> necessary. For instance of what type is play_list? You said it was
> an instance of a model, but it seems to be an array or collection of
> some sort.
>
> Colin

Sorry about that :-)

Play_list is an array of arrays returned at the beginning of the create
method. Each array contains a topic id. Array[0] needs to be converted
to a list of the question id's contained in that topic. That is all
taken care of.

The sequence of the question id's in array[0] needs to be manipulated,
in more than one method.

So... I need to either duplicate the code in several methods (in the
same controller) or create a method that is called by the controllers
multiple methods. The model method seems right but play_list does not
seem to be an instance as it is not yet created and is not yet an
attribute of the model

Colin Law

unread,
Mar 25, 2014, 4:47:04 AM3/25/14
to rubyonra...@googlegroups.com
On 24 March 2014 22:48, Dave Castellano <li...@ruby-forum.com> wrote:
>>
>> Do not make us wade through lots of code trying to understand what is
>> going on. Explain the problem and show us just a few lines of code if
>> necessary. For instance of what type is play_list? You said it was
>> an instance of a model, but it seems to be an array or collection of
>> some sort.
>>
>> Colin
>
> Sorry about that :-)
>
> Play_list is an array of arrays returned at the beginning of the create
> method. Each array contains a topic id. Array[0] needs to be converted
> to a list of the question id's contained in that topic. That is all
> taken care of.

That sounds to me like a horrible way to organize data, it is
generally much better to deal in records and associations rather than
extracting id values and manipulating them. However, if you feel you
must do it that way...

>
> The sequence of the question id's in array[0] needs to be manipulated,
> in more than one method.
>
> So... I need to either duplicate the code in several methods (in the
> same controller) or create a method that is called by the controllers
> multiple methods. The model method seems right but play_list does not
> seem to be an instance as it is not yet created and is not yet an
> attribute of the model

You could either have a private method of the controller, or a class
method of the model (rather than an instance method). Probably the
latter.

Colin
Reply all
Reply to author
Forward
0 new messages