[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: what is going wrong here? The case of the noob not understanding initialize

From: "Jan E." <lists@...>
Date: 2012-05-18 03:20:50 UTC
List: ruby-talk #395680
This looks good. :-)

Since you already said that the character tests follow the same pattern, 
you might wanna think about writing only one generalized method. For 
example, you could put the character sets and the corresponding "scores" 
in an array and then let a method iterate over it. You don't even have 
to write the actual characters down but use regular expressions instead:

/\p{Lower}/

This regular expression matches any string with a lower case letter (of 
any language) in it. If you only want the latin letters from a to z, you 
can instead use the pattern

/[a-z]/

This narrows the test down to one line: password =~ pattern

As a complete example:


#------------------------------------------
class Entropy

  # the scores are just made up
  CHARACTER_SCORES = {
    # special characters
    # = printable ASCII characters which are not alphanumeric
    /[\p{ASCII}&&\p{Graph}&&\p{^Alnum}]/ => 11,
    # uppercase letters
    /[A-Z]/ => 22,
    # lowercase letter
    /[a-z]/ => 33,
    # digits
    /[0-9]/ => 44
  }

  def test_characters password
    CHARACTER_SCORES.inject 0 do |sum, (pattern, score)|
      password =~ pattern ? sum + score : sum
    end
  end

end
#------------------------------------------


By the way, most of the time you don't need lowlevel structures like the 
while statement. Ruby has a lot of iterators which do the same thing in 
a lot less lines.

For example, you could rewrite the dictionary method to this:


#------------------------------------------
def contains_dictionary_word?(password)
  entropy_bits = 0
  passed_dictionary_test =
    File.foreach("#{RELATIVEPATH}/data/dictionary").any? do |line|
      password.include? line.chop
    end
  entropy_bits = 6 if passed_dictionary_test and password.length > 4
  return entropy_bits
end
#------------------------------------------


The "while gets" is replaced with "File.foreach". And the "break false" 
is replaced with the "any?" iterator.

On last thing: You should be careful with method names. A method called 
"contains_dictionary_word?" looks all like it returns either true or 
false. It it returns a score instead, this may lead to confusion. So I'd 
rather call it "test_dictionary" or so.

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

In This Thread