ludy 0.1.9 → 0.1.10

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.
data/CHANGES CHANGED
@@ -1,12 +1,22 @@
1
1
  = ludy changes history
2
2
 
3
+ == ludy 0.1.10, 2008.02.07
4
+
5
+ * fixed an offset bug in paginator. if the offset was equal to the count,
6
+ there should be no page existed.
7
+ * fixed and updated rdoc presentation
8
+ * fixed a warning of shadowing variables in ruby 1.9
9
+
10
+ * added the offset test in test_paginator
11
+ * make some Kernel method private
12
+
3
13
  == ludy 0.1.9, 2008.02.07
4
14
 
5
15
  * fixed a bug in RailsPaginator, which ignored opts for count.
6
16
  * fixed a possible bug in puzzle_generator... (not happened before?)
7
17
  * fixed a stupid timeout message bug...
8
18
 
9
- * added multiruby test (from ZenTest) with ruby 1.8.6-p111, 1.9.0-0, svn
19
+ * added multiruby test (from ZenTest) with ruby 1.8.6-p111, 1.9.0-0, svn trunk
10
20
  * added Array#head, Array#choice!, Array#count
11
21
  * added Array#product, which came from ruby 1.9 (implemented by combos in ruby 1.8)
12
22
  * added Kernel#deep_copy, by Marshal idiom
data/README CHANGED
@@ -1,9 +1,8 @@
1
- = ludy 0.1.9
2
- by Lin Jen-Shin (a.k.a. godfat 真常)
3
- strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org
4
- http://ludy.rubyforge.org
5
- http://rubyforge.org/projects/ludy
6
- http://godfat.org
1
+ = ludy 0.1.10
2
+ by Lin Jen-Shin (a.k.a. godfat-真常[http://godfat.org])
3
+ strip any number: 18god29fat7029 (at] godfat32 -dooot- 20org
4
+ * rdoc[http://ludy.rubyforge.org]
5
+ * rubyforge-project[http://rubyforge.org/projects/ludy]
7
6
 
8
7
  == DESCRIPTION:
9
8
 
data/lib/ludy.rb CHANGED
@@ -9,7 +9,7 @@ end
9
9
  module Ludy
10
10
 
11
11
  # :stopdoc:
12
- VERSION = '0.1.9'
12
+ VERSION = '0.1.10'
13
13
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
14
14
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
15
15
  $LOAD_PATH << LIBPATH
@@ -1,8 +1,8 @@
1
1
 
2
2
  class Array
3
3
  # strip the last element
4
- # [1,2,3].body
5
- # => [1,2]
4
+ # [1,2,3].body
5
+ # => [1,2]
6
6
  def body
7
7
  self[0..-2]
8
8
  end
@@ -2,15 +2,16 @@
2
2
  require 'ludy/symbol/to_proc' if RUBY_VERSION < '1.9.0'
3
3
 
4
4
  class Array
5
- # [1,2,3].combine [2,4,6]
6
- # => [3,6,9]
5
+ # example:
6
+ # [1,2,3].combine [2,4,6]
7
+ # => [3,6,9]
7
8
  #
8
- # [1,2].combine [1,2], [1,2]
9
- # => [3,6]
9
+ # [1,2].combine [1,2], [1,2]
10
+ # => [3,6]
10
11
  #
11
- # ['a','b'].combine ['b','a']
12
- # => ['ab','ba']
12
+ # ['a','b'].combine ['b','a']
13
+ # => ['ab','ba']
13
14
  def combine *target; zip(*target).map{|i|i.inject(&:+)}; end
14
- # in-place version of combine
15
+ # inplace version of combine
15
16
  def combine! *target; replace combine(*target); end
16
17
  end
@@ -4,8 +4,8 @@ class Array
4
4
  require 'ludy/array/foldr'
5
5
  require 'ludy/symbol/to_proc' if RUBY_VERSION < '1.9.0'
6
6
  # for each combos
7
- # [[0,1],[2,3]].combos
8
- # => [[0,2],[0,3],[1,2],[1,3]]
7
+ # [[0,1],[2,3]].combos
8
+ # => [[0,2],[0,3],[1,2],[1,3]]
9
9
  def combos
10
10
  result = []
11
11
  radixs = reverse.map(&:size)
@@ -22,9 +22,10 @@ class Array
22
22
  else
23
23
  require 'ludy/array/tail'
24
24
  # for each combos
25
- # [[0,1],[2,3]].combos
26
- # => [[0,2],[0,3],[1,2],[1,3]]
27
- # simply: array.first.product *array.tail
25
+ # [[0,1],[2,3]].combos
26
+ # => [[0,2],[0,3],[1,2],[1,3]]
27
+ # simply:
28
+ # array.first.product *array.tail
28
29
  def combos
29
30
  first.product(*tail)
30
31
  end
@@ -1,5 +1,6 @@
1
1
 
2
2
  class Array
3
+ # just like each_with_index
3
4
  def map_with_index
4
5
  i = -1
5
6
  map{ |e| i+=1; yield e, i; }
@@ -14,7 +14,7 @@ class Array
14
14
  return self if empty? or n == 0
15
15
  self[-n..-1] + self[0...-n]
16
16
  end
17
- # in-place version of rotate
17
+ # inplace version of rotate
18
18
  def rotate!
19
19
  replace rotate
20
20
  end
@@ -1,6 +1,7 @@
1
1
 
2
2
  class Array
3
- # simply array[1..-1]
3
+ # simply call
4
+ # array[1..-1]
4
5
  def tail
5
6
  self[1..-1]
6
7
  end
data/lib/ludy/dices.rb CHANGED
@@ -3,6 +3,7 @@ module Ludy
3
3
 
4
4
  # dices, e.g., 4d6, 2d20, etc.
5
5
  class Dices
6
+ # dices amounts of this dices; faces of this kind of dice
6
7
  attr_reader :amounts, :faces
7
8
  # the default dice is 1d20
8
9
  def initialize amounts = 1, faces = 20
@@ -21,6 +22,7 @@ module Ludy
21
22
 
22
23
  # a dice set could contain 4d6 + 2d20 and more dices.
23
24
  class DiceSet
25
+ # the min and max possible value of this dice set.
24
26
  attr_reader :min, :max
25
27
  def initialize *args
26
28
  @diceset = args
@@ -1,5 +1,7 @@
1
1
 
2
2
  module Kernel
3
+ # common idiom for:
4
+ # Marshal::load(Marshal::dump(self))
3
5
  def deep_copy
4
6
  Marshal::load(Marshal::dump(self))
5
7
  end
@@ -1,5 +1,8 @@
1
1
 
2
2
  module Kernel
3
+ private
4
+ # return true or false
5
+ # simply call rand(2) == 0
3
6
  def maybe
4
7
  rand(2) == 0
5
8
  end
@@ -10,6 +10,7 @@ module Ludy
10
10
  # call Page#fetch
11
11
  class Page
12
12
  undef_method :to_a if RUBY_VERSION < '1.9.0'
13
+ # pager to get the original pager; page to get the number of this page
13
14
  attr_reader :pager, :page
14
15
  # don't create a page instance yourself unless you have to
15
16
  def initialize pager, page; @pager, @page = pager, page; end
@@ -72,7 +73,7 @@ module Ludy
72
73
  # nil would be returned. note, page start at 1, not zero.
73
74
  def page page
74
75
  offset = (page-1)*@per_page
75
- return nil unless page > 0 and offset <= count
76
+ return nil unless page > 0 and offset < count
76
77
  Page.new self, page
77
78
  end
78
79
  # return the amount of pages
@@ -93,8 +94,8 @@ module Ludy
93
94
  # they would be used in find options. e.g.,
94
95
  # RailsPaginator.new Model, :order => 'created_at DESC'
95
96
  # would invoke Model.find :all, :offset => ?, :limit => ?, order => 'created_at DESC'
96
- # TODO: conditions/options invoker...
97
97
  class RailsPaginator < Paginator
98
+ # the model class that you passed in this paginator
98
99
  attr_reader :model_class
99
100
  def initialize model_class, opts = {}
100
101
  @model_class = model_class
@@ -112,6 +113,7 @@ module Ludy
112
113
  # and create pages simply for your_data[offset, per_page]
113
114
  # if your data is much more complex, use Paginator instead of this
114
115
  class ArrayPaginator < Paginator
116
+ # data that you passed in this paginator
115
117
  attr_reader :data
116
118
  def initialize data
117
119
  @data = data
@@ -12,7 +12,7 @@ class Proc
12
12
  def curry
13
13
  class << self
14
14
  alias_method :__call__, :call
15
- def call *args, &block
15
+ def call *args, &block # :nodoc:
16
16
  if self.arity == -1
17
17
  begin # let's try if arguments are ready
18
18
  # is there any better way to determine this?
@@ -53,8 +53,10 @@ namespace :preprocess do
53
53
 
54
54
  erubis_inputs.zip(erubis_outputs).each{ |input, output|
55
55
  file output => input do
56
- class ErboutEruby < Erubis::Eruby; include Erubis::ErboutEnhancer; end
57
- preprocess lambda{|input| ErboutEruby.new input, :trim => false}, input, output
56
+ class ErboutEruby < Erubis::Eruby #:nodoc:
57
+ include Erubis::ErboutEnhancer
58
+ end
59
+ preprocess lambda{|in_str| ErboutEruby.new in_str, :trim => false}, input, output
58
60
  end
59
61
  }
60
62
  rescue LoadError; end # no erubis
@@ -2,11 +2,27 @@
2
2
  require 'ludy/tasks/common'
3
3
 
4
4
  module Kernel
5
+ # it simply output:
6
+ # #ifndef NDEBUG
7
+ # #include <iostream>
8
+ # #endif
5
9
  def debug_include
6
10
  '#ifndef NDEBUG
7
11
  #include <iostream>
8
12
  #endif'
9
13
  end
14
+ # example usage:
15
+ # void <% debug_hook 'C::f' do %>(){
16
+ # <% end %>
17
+ # std::cout << "hello" << std::endl;
18
+ # }
19
+ # became:
20
+ # void C::f(){
21
+ # #ifndef NDEBUG
22
+ # std::cerr << "method C::f called, for " << this << " at c.cpp: 12\n"
23
+ # #endif
24
+ # std::cout << "hello" << std::endl;
25
+ # }
10
26
  def debug_hook name, &block
11
27
  Ludy::erbout name, block.binding
12
28
  block.call
data/lib/ludy/timer.rb CHANGED
@@ -4,6 +4,7 @@ module Ludy
4
4
  class Timeout < Exception; end
5
5
  # simple and stupid timer for puzzle_generator...
6
6
  class Timer
7
+ # create a timer for timeout seconds.
7
8
  def initialize timeout
8
9
  @timeout = timeout
9
10
  end
@@ -9,15 +9,31 @@ require 'ludy/hash/reverse_merge'
9
9
  # require 'facets/timer'
10
10
  require 'ludy/timer' # simple and stupid timer....
11
11
 
12
+ # puzzle generator for shooting-cubes[http://shooting-cubes.googlecodes.com],
13
+ # example usage:
14
+ # PuzzleGenerator.debug = true
15
+ # pg = PuzzleGenerator::Puzzle.new :level => 4, :timeout => 2, :invoke_max => 5
16
+ # begin
17
+ # pg.generate
18
+ # pg.display_map
19
+ # rescue Ludy::Timeout => e
20
+ # puts e
21
+ # ensure
22
+ # p pg.tried_times
23
+ # p pg.tried_duration
24
+ # end
12
25
  module PuzzleGenerator
13
26
 
14
- def self.generate_chained_map option = {}; generate_klass ChainedMap, option; end
15
- def self.generate_klass klass, option = {}
27
+ def self.generate_chained_map option = {} #:nodoc:
28
+ generate_klass ChainedMap, option
29
+ end
30
+ def self.generate_klass klass, option = {} #:nodoc:
16
31
  option.reverse_merge! :timeout => 5
17
32
  generate(option[:timeout]){ klass.new option }
18
33
  end
19
34
 
20
- LastTriedInfo = {}
35
+ LastTriedInfo = {} # :nodoc:
36
+ # generate someing with generator with timeout, used in Puzzle#generate
21
37
  def self.generate timeout = 5, &generator
22
38
  timer = Ludy::Timer.new(timeout).start
23
39
  tried_times = 1
@@ -6,10 +6,6 @@ require 'ludy/kernel/maybe'
6
6
  require 'ludy/array/count' if RUBY_VERSION < '1.9.0'
7
7
  require 'ludy/array/product' if RUBY_VERSION < '1.9.0'
8
8
 
9
- # a = [[1,2],[3,4],[5,6]]
10
- # [a, [1,2,3]].combos
11
- # => [[[1, 2], 1], [[1, 2], 2], [[1, 2], 3], [[3, 4], 1], [[3, 4], 2], [[3, 4], 3], [[5, 6], 1], [[5, 6], 2], [[5, 6], 3]]
12
-
13
9
  module PuzzleGenerator
14
10
 
15
11
  class Map # :nodoc:
@@ -3,13 +3,15 @@ require 'ludy/kernel/deep_copy'
3
3
  require 'ludy/array/pad'
4
4
 
5
5
  module PuzzleGenerator
6
- Up, Right, Left = (0..2).to_a
6
+ Up, Right, Left = (0..2).to_a # :nodoc:
7
7
  DefaultOption = {:width => 6, :height => 10, :level => 4, :colors => 4,
8
8
  :invoke => 3, :invoke_max => 5, :timeout => 5}
9
9
  # whenever the generation is falied, this exception would raise
10
10
  class GenerationFailed < RuntimeError; end
11
11
  class << self
12
+ # specify whether to show the answer in the puzzle
12
13
  attr_writer :debug
14
+ # specify whether to show the answer in the puzzle
13
15
  def debug; @debug || false; end
14
16
  end
15
17
 
@@ -10,10 +10,13 @@ module PuzzleGenerator
10
10
  class Puzzle
11
11
  include DisplayMap
12
12
  attr_reader :tried_times, :tried_duration
13
+ # create a puzzle with option. this won't start generating,
14
+ # call Puzzle::generate to start generating.
13
15
  def initialize option = {}
14
16
  @option = DefaultOption.merge option
15
17
  @tried_times, @tried_duration = [0, 0], [0, 0]
16
18
  end
19
+ # start generate a puzzle with options that created this puzzle instance.
17
20
  def generate
18
21
  raw_colors = (1..@option[:colors]).to_a
19
22
  step_colors = raw_colors.rotate
@@ -35,7 +38,7 @@ module PuzzleGenerator
35
38
  end
36
39
 
37
40
  private
38
- Chain, Color = 0, 1
41
+ Chain, Color = 0, 1 # :nodoc:
39
42
  def make_chain
40
43
  begin
41
44
  @result_chain =
@@ -47,6 +47,14 @@ class TestPaginator < Test::Unit::TestCase
47
47
  })
48
48
  for_pager pager
49
49
  end
50
+ def test_offset_bug
51
+ a = (0..9).to_a
52
+ pager = ArrayPaginator.new a
53
+ pager.per_page = 5
54
+ assert_equal 5, pager[1].size
55
+ assert_equal 5, pager[2].size
56
+ assert_nil pager[3]
57
+ end
50
58
  class Topic
51
59
  class << self
52
60
  def count opts = {}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ludy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Lin Jen-Shin (a.k.a. godfat \xE7\x9C\x9F\xE5\xB8\xB8)"