ember 0.1.0 → 0.1.1

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.
@@ -1,31 +0,0 @@
1
- ##
2
- # Location where project documentation will be uploaded by `inochi pub:doc`.
3
- # This value can utilize any remote/destination syntax supported by `rsync`.
4
- #
5
- :pub_doc_target: ~/www/lib/ember
6
-
7
- ##
8
- # Options for the `rsync` command used to upload this project's documentation.
9
- #
10
- :pub_doc_options: --verbose --compress --archive --update --delete
11
-
12
- ##
13
- # Arbitrary Ruby code that will configure this project's RubyGem before it
14
- # is built by `inochi gem`. This code has access to a local variable named
15
- # `gem` which holds a Gem::Specification object representing this project.
16
- #
17
- # @example
18
- #
19
- # :gem_spec_logic: |
20
- # # show the Inochi-provided specification for this project's RubyGem
21
- # puts gem
22
- #
23
- # # add files that are outside this project directory to the RubyGem
24
- # gem.files += FileList['/some/outside/**/*.files']
25
- #
26
- # # omit some files in this project's directory from the RubyGem
27
- # gem.files.exclude '{some*files,in_this,project/**/directory}'
28
- #
29
- # # and so on... anything is possible! use your imagination!
30
- #
31
- :gem_spec_logic: |
@@ -1,188 +0,0 @@
1
- # Simple combinatorics library for Ruby 1.8, 1.9, and (hopefully) beyond.
2
- #
3
- # (the ISC license)
4
- #
5
- # Copyright 2007 Suraj N. Kurapati <sunaku@gmail.com>
6
- #
7
- # Permission to use, copy, modify, and/or distribute this software for any
8
- # purpose with or without fee is hereby granted, provided that the above
9
- # copyright notice and this permission notice appear in all copies.
10
- #
11
- # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12
- # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13
- # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14
- # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15
- # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16
- # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17
- # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
- #
19
- class Array
20
- unless method_defined? :enumeration
21
- ##
22
- # Returns all possible enumerations made from
23
- # sample_size number of items from this list.
24
- #
25
- # @param [Integer] sample_size
26
- # The length of each enumeration.
27
- #
28
- # @param [Proc] sampler
29
- # If given, each enumeration is passed to this block.
30
- #
31
- def enumeration(sample_size = self.length, &sampler)
32
- return [] if sample_size < 1
33
-
34
- results = []
35
-
36
- visitor = lambda do |parents|
37
- each do |child|
38
- result = parents + [child]
39
-
40
- if result.length < sample_size
41
- visitor.call result
42
- else
43
- yield result if block_given?
44
- results << result
45
- end
46
- end
47
- end
48
-
49
- visitor.call []
50
- results
51
- end
52
- end
53
-
54
- unless method_defined? :enumerations
55
- ##
56
- # Returns all possible enumerations of all possible lengths.
57
- #
58
- # @param [Proc] sampler
59
- # If given, each enumeration is passed to this block.
60
- #
61
- def enumerations &sampler
62
- all_lengths_impl :enumeration, &sampler
63
- end
64
- end
65
-
66
- unless method_defined? :combination
67
- ##
68
- # Returns all possible combinations made from
69
- # sample_size number of items from this list.
70
- #
71
- # @param [Integer] sample_size
72
- # The length of each combination.
73
- #
74
- # @param [Proc] sampler
75
- # If given, each combination is passed to this block.
76
- #
77
- def combination(sample_size = self.length, &sampler)
78
- pnk_cnk_impl(sample_size, true, &sampler)
79
- end
80
- end
81
-
82
- unless method_defined? :combinations
83
- ##
84
- # Returns all possible combinations of all possible lengths.
85
- #
86
- # @param [Proc] sampler
87
- # If given, each combination is passed to this block.
88
- #
89
- def combinations &sampler
90
- all_lengths_impl :combination, &sampler
91
- end
92
- end
93
-
94
- unless method_defined? :permutation
95
- ##
96
- # Returns all possible permutations made from
97
- # sample_size number of items from this list.
98
- #
99
- # @param [Integer] sample_size
100
- # The length of each permutation.
101
- #
102
- # @param [Proc] sampler
103
- # If given, each permutation is passed to this block.
104
- #
105
- def permutation(sample_size = self.length, &sampler)
106
- pnk_cnk_impl(sample_size, false, &sampler)
107
- end
108
- end
109
-
110
- unless method_defined? :permutations
111
- ##
112
- # Returns all possible permutations of all possible lengths.
113
- #
114
- # @param [Proc] sampler
115
- # If given, each permutation is passed to this block.
116
- #
117
- def permutations &sampler
118
- all_lengths_impl :permutation, &sampler
119
- end
120
- end
121
-
122
- private
123
-
124
- ##
125
- # Returns results of the given method name for all possible sample sizes.
126
- #
127
- def all_lengths_impl method_name, &sampler
128
- results = []
129
-
130
- 0.upto(length) do |i|
131
- results << __send__(method_name, i, &sampler)
132
- end
133
-
134
- results
135
- end
136
-
137
- ##
138
- # Common implementation for permutation and combination functions.
139
- #
140
- # @param [Integer] sample_size
141
- # Maximum depth of traversal, at which point to stop
142
- # further traversal and to start collecting results.
143
- #
144
- # @param [boolean] exclude_parents
145
- # Prevent already visited vertices from being
146
- # visited again in subsequent iterations?
147
- #
148
- def pnk_cnk_impl sample_size, exclude_parents
149
- results = []
150
-
151
- if sample_size >= 0 && sample_size < self.length
152
- ##
153
- # @param [#each] parents
154
- # list of visited vertices, including the current vertex
155
- #
156
- # @param [#each] children
157
- # list of unvisited vertices adjacent to current vertex
158
- #
159
- # @param [Integer] depth
160
- # current depth of the traversal tree
161
- #
162
- visitor = lambda do |parents, children, depth|
163
- # traverse the graph until we reach the fringe
164
- # vertices (leaf nodes of the traversal tree)
165
- if depth < sample_size - 1
166
- children.each do |c|
167
- next_children = children - (exclude_parents ? parents : [c])
168
- next_parents = parents + [c]
169
- next_depth = depth + 1
170
-
171
- visitor.call next_parents, next_children, next_depth
172
- end
173
- else
174
- # now we have reached the fringe vertices
175
- children.each do |c|
176
- result = parents + [c]
177
- yield result if block_given?
178
- results << result
179
- end
180
- end
181
- end
182
-
183
- visitor.call [], self, 0
184
- end
185
-
186
- results
187
- end
188
- end
@@ -1,137 +0,0 @@
1
- require 'ember/template'
2
-
3
- describe do
4
- BLANK = [''] # the empty string
5
- NEWLINES = ["\n", "\r\n"]
6
- SPACES = [' ', "\t"]
7
- WHITESPACE = SPACES + NEWLINES
8
- OPERATIONS = [nil, '=', '#', *WHITESPACE]
9
-
10
- ##
11
- # Invokes the given block, passing in the result
12
- # of Array#join, for every possible combination.
13
- #
14
- def each_join array
15
- raise ArgumentError unless block_given?
16
-
17
- array.permutations do |combo|
18
- yield combo.join
19
- end
20
- end
21
-
22
- describe "A template" do
23
- it "renders single & multi-line comments as nothing" do
24
- each_join(WHITESPACE) do |s|
25
- render("<%##{s}an#{s}eRuby#{s}comment#{s}%>").must_equal("")
26
- end
27
- end
28
-
29
- it "renders directives with whitespace-only bodies as nothing" do
30
- each_join(WHITESPACE) do |s|
31
- OPERATIONS.each do |o|
32
- render("<%#{o}#{s}%>").must_equal("")
33
- end
34
- end
35
- end
36
-
37
- it "renders escaped directives in unescaped form" do
38
- render("<%%%>").must_equal("<%%>")
39
-
40
- render("<%% %>").must_equal("<% %>")
41
-
42
- E SyntaxError, "the trailing delimiter must not be unescaped" do
43
- render("<% %%>")
44
- end
45
-
46
- render("<%%%%>").must_equal("<%%%>",
47
- "the trailing delimiter must not be unescaped")
48
-
49
- each_join(WHITESPACE) do |s|
50
- body = "#{s}an#{s}eRuby#{s}directive#{s}"
51
-
52
- OPERATIONS.each do |o|
53
- render("<%%#{o}#{body}%>").must_equal("<%#{o}#{body}%>")
54
- end
55
- end
56
- end
57
-
58
- it "renders whitespace surrounding vocal directives correctly" do
59
- o = rand.to_s
60
- i = "<%= #{o} %>"
61
-
62
- each_join(WHITESPACE) do |s|
63
- (BLANK + NEWLINES).enumeration do |a, b|
64
- render("a#{a}#{s}#{i}#{b}#{s}b").must_equal("a#{a}#{s}#{o}#{b}#{s}b")
65
- end
66
- end
67
- end
68
-
69
- it "renders whitespace surrounding silent directives correctly" do
70
- i = '<%%>'
71
- o = ''
72
-
73
- each_join(SPACES) do |s|
74
- NEWLINES.each do |n|
75
- # without preceding newline
76
- render("a#{s}#{i}#{n}b").must_equal("a#{o}b")
77
-
78
- # with preceding newline
79
- render("a#{n}#{s}#{i}#{n}b").must_equal("a#{n}#{o}b")
80
- end
81
- end
82
- end
83
-
84
- def render input, options = {}
85
- Ember::Template.new(input, options).render
86
- end
87
- end
88
-
89
- describe "A program compiled from a template" do
90
- it "has the same number of lines as its input, regardless of template options" do
91
- (BLANK + NEWLINES).each do |s|
92
- test_num_lines s
93
- test_num_lines "hello#{s}world"
94
-
95
- OPERATIONS.each do |o|
96
- test_num_lines "<%#{o}hello#{s}world%>"
97
- end
98
- end
99
- end
100
-
101
- OPTIONS = [:shorthand, :infer_end, :unindent]
102
-
103
- ##
104
- # Checks that the given input template is compiled into the same
105
- # number of lines of Ruby code for all possible template options.
106
- #
107
- def test_num_lines input
108
- num_input_lines = count_lines(input)
109
-
110
- each_option_combo(OPTIONS) do |options|
111
- template = Ember::Template.new(input, options)
112
- program = template.program
113
-
114
- count_lines(program).must_equal num_input_lines, "template program compiled with #{options.inspect} has different number of lines for input #{input.inspect}"
115
- end
116
- end
117
-
118
- ##
119
- # Counts the number of lines in the given string.
120
- #
121
- def count_lines string
122
- string.to_s.scan(/$/).length
123
- end
124
-
125
- ##
126
- # Invokes the given block, passing in an options hash
127
- # for Ember::Template, for every possible combination.
128
- #
129
- def each_option_combo options
130
- raise ArgumentError unless block_given?
131
-
132
- options.combinations do |flags|
133
- yield Hash[ *flags.map {|f| [f, true] }.flatten ]
134
- end
135
- end
136
- end
137
- end
@@ -1,25 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # Adds the project library directory
4
- # and this test directory to Ruby's
5
- # load path and runs the given tests.
6
- #
7
- # Usage: ruby test/runner [TESTS_TO_RUN]
8
- #
9
- # Where: TESTS_TO_RUN is a list of files
10
- # or file globbing patterns that
11
- # describe a set of files to run.
12
- #
13
- # If this parameter is not given,
14
- # all *_test.rb files within or
15
- # beneath this directory are run.
16
-
17
- lib_dir = File.expand_path('../../lib', __FILE__)
18
- test_dir = File.expand_path('..', __FILE__)
19
- $LOAD_PATH.unshift lib_dir, test_dir
20
-
21
- require 'ember/inochi'
22
- require 'test_helper'
23
-
24
- ARGV << "#{test_dir}/**/*_test.rb" if ARGV.empty?
25
- ARGV.each {|glob| Dir[glob].each {|test| load test } }
@@ -1,5 +0,0 @@
1
- require 'combinatorics'
2
-
3
- Ember.require 'dfect'
4
- require 'dfect/mini'
5
- require 'dfect/auto'