linguify 0.3.0 → 0.4.0
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/Gemfile.lock +8 -8
- data/README.md +135 -121
- data/VERSION +1 -1
- data/lib/linguify/linguified.rb +3 -3
- data/lib/linguify/proc.rb +6 -1
- data/lib/linguify/reduction.rb +25 -11
- data/lib/linguify/sexp.rb +10 -6
- data/lib/linguify/string.rb +14 -0
- data/lib/linguify/translators/javascript.rb +4 -0
- data/lib/linguify.rb +50 -13
- data/linguify.gemspec +68 -0
- data/spec/linguify/linguify_spec.rb +3 -3
- metadata +4 -4
- data/.document +0 -5
data/Gemfile.lock
CHANGED
@@ -9,16 +9,16 @@ GEM
|
|
9
9
|
bundler (~> 1.0)
|
10
10
|
git (>= 1.2.5)
|
11
11
|
rake
|
12
|
-
rake (0.9.2)
|
12
|
+
rake (0.9.2.2)
|
13
13
|
rcov (0.9.11)
|
14
|
-
rspec (2.
|
15
|
-
rspec-core (~> 2.
|
16
|
-
rspec-expectations (~> 2.
|
17
|
-
rspec-mocks (~> 2.
|
18
|
-
rspec-core (2.
|
19
|
-
rspec-expectations (2.
|
14
|
+
rspec (2.7.0)
|
15
|
+
rspec-core (~> 2.7.0)
|
16
|
+
rspec-expectations (~> 2.7.0)
|
17
|
+
rspec-mocks (~> 2.7.0)
|
18
|
+
rspec-core (2.7.1)
|
19
|
+
rspec-expectations (2.7.0)
|
20
20
|
diff-lcs (~> 1.1.2)
|
21
|
-
rspec-mocks (2.
|
21
|
+
rspec-mocks (2.7.0)
|
22
22
|
ruby2ruby (1.3.1)
|
23
23
|
ruby_parser (~> 2.0)
|
24
24
|
sexp_processor (~> 3.0)
|
data/README.md
CHANGED
@@ -7,152 +7,166 @@ Since the code ends up compiled like all code should be you can execute your cod
|
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
10
|
-
|
10
|
+
``` ruby
|
11
|
+
gem install linguify
|
12
|
+
```
|
11
13
|
|
12
14
|
## Basic usage
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
16
|
+
``` ruby
|
17
|
+
require 'linguify'
|
18
|
+
|
19
|
+
reduce /all directories/ => 'directories' do
|
20
|
+
Dir.entries('.').select{ |f| f[0] != '.' && File.directory?(f) }
|
21
|
+
end
|
22
|
+
|
23
|
+
reduce /({directories:[^}]*}) recursively/ => 'directories' do |dirs|
|
24
|
+
all_dirs = dirs
|
25
|
+
Find.find(dirs) do |path|
|
26
|
+
if FileTest.directory?(path)
|
27
|
+
if File.basename(path)[0] == '.'
|
28
|
+
Find.prune # Don't look any further into this directory.
|
29
|
+
else
|
30
|
+
all_dirs << path
|
31
|
+
next
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
all_dirs
|
36
|
+
end
|
37
|
+
|
38
|
+
reduce /all files inside ({directories:[^}]*})/ => 'files' do |dirs|
|
39
|
+
dirs.map{ |f| File.new(f, "r") }
|
40
|
+
end
|
41
|
+
|
42
|
+
reduce /view ({files:[^}]*})/ do |files|
|
43
|
+
files.each do |file|
|
44
|
+
pp file
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
"view all files inside all directories recursively".linguify.to_ruby
|
49
|
+
# => "code = lambda do
|
50
|
+
# directories_0 = Dir.entries(\".\").select { |f| ((not (f[0] == \".\")) and File.directory?(f)) }
|
51
|
+
# directories_1 = (all_dirs = directories_0
|
52
|
+
# Find.find(directories_0) do |path|
|
53
|
+
# if FileTest.directory?(path) then
|
54
|
+
# if (File.basename(path)[0] == \".\") then
|
55
|
+
# Find.prune
|
56
|
+
# else
|
57
|
+
# (all_dirs << path)
|
58
|
+
# next
|
59
|
+
# end
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
# all_dirs)
|
63
|
+
# files_2 = directories_1.map { |f| File.new(f, \"r\") }
|
64
|
+
# files_2.each { |file| pp(file) }
|
65
|
+
# end
|
66
|
+
# "
|
67
|
+
```
|
64
68
|
|
65
69
|
And if you simply want to execute your magnificent piece of art:
|
66
70
|
|
67
|
-
|
71
|
+
``` ruby
|
72
|
+
"view all files inside all directories recursively".linguify.run
|
73
|
+
```
|
68
74
|
|
69
75
|
Or even:
|
70
76
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
77
|
+
``` ruby
|
78
|
+
# compile once, run plenty
|
79
|
+
code = "view all files inside all directories recursively".linguify
|
80
|
+
loop do
|
81
|
+
code.run
|
82
|
+
end
|
83
|
+
```
|
76
84
|
|
77
85
|
## More advanced usage
|
78
86
|
|
79
87
|
Linguify supports mixing javascript and ruby.
|
80
88
|
A typical case would be to express NOSQL queries in plain English for everyones convenience.
|
81
89
|
|
82
|
-
|
90
|
+
``` ruby
|
91
|
+
require 'linguify'
|
83
92
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
93
|
+
reduce /a possible javascript NOSQL query/ => {:to => 'query', :lang => :js} do
|
94
|
+
@db.forEach(lambda{ |record|
|
95
|
+
emit(record);
|
96
|
+
}
|
97
|
+
)
|
98
|
+
end
|
90
99
|
|
91
|
-
|
92
|
-
|
93
|
-
|
100
|
+
reduce /execute ({query:[^}]*})/ do |query|
|
101
|
+
db.map query
|
102
|
+
end
|
94
103
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
104
|
+
"execute a possible javascript NOSQL query".linguify.to_ruby
|
105
|
+
# => "code = lambda do
|
106
|
+
# query = \"function(){\\n this.db.forEach(function(record){\\n emit(record)\\n });\\n}\"
|
107
|
+
# db.map(query)
|
108
|
+
# end
|
109
|
+
# "
|
110
|
+
```
|
101
111
|
|
102
112
|
The nature of Linguify's expression reduction face pragmatic programmers with a urge to inline the code the arguments represents.
|
103
113
|
Luckily Linguify has evolved to embrace such minds. Linguify is not for the general masses. It is for the mighty few pragmatics.
|
104
114
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
115
|
+
``` ruby
|
116
|
+
require 'linguify'
|
117
|
+
|
118
|
+
reduce /inlined code/ => {:to => 'code', :lang => :ruby, :inline => true} do
|
119
|
+
something.each do |foobar| # life is not worth living without psedo foobars
|
120
|
+
pp foobar
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
reduce /execute ({code:[^}]*})/ do |code|
|
125
|
+
pp "hey mum"
|
126
|
+
code
|
127
|
+
pp "you will never know what I just did"
|
128
|
+
end
|
129
|
+
|
130
|
+
"execute inlined code".linguify.to_ruby
|
131
|
+
# => "code = lambda do
|
132
|
+
# (pp(\"hey mum\")
|
133
|
+
# (something.each { |foobar| pp(foobar) })
|
134
|
+
# pp(\"you will never know what I just did\"))
|
135
|
+
# end
|
136
|
+
# "
|
137
|
+
```
|
126
138
|
|
127
139
|
And you can even inline sub-expressions:
|
128
140
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
141
|
+
``` ruby
|
142
|
+
require 'linguify'
|
143
|
+
|
144
|
+
reduce /sub expression/ => {:to => 'sub_expression', :lang => :ruby, :inline => true} do
|
145
|
+
pp "this is the sub expression code"
|
146
|
+
end
|
147
|
+
|
148
|
+
reduce /({sub_expression:[^}]*}) of inlined code/ => {:to => 'code', :lang => :ruby, :inline => true} do |sub|
|
149
|
+
something.each do |foobar| # life is not worth living without psedo foobars
|
150
|
+
pp foobar
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
reduce /execute ({code:[^}]*})/ do |code|
|
155
|
+
pp "hey mum"
|
156
|
+
code
|
157
|
+
code[:sub]
|
158
|
+
pp "you will never know what I just did"
|
159
|
+
end
|
160
|
+
|
161
|
+
"execute sub expression of inlined code".linguify.to_ruby
|
162
|
+
# => "code = lambda do
|
163
|
+
# (pp(\"hey mum\")
|
164
|
+
# (something.each { |foobar| pp(foobar) })
|
165
|
+
# pp(\"this is the sub expression code\")
|
166
|
+
# pp(\"you will never know what I just did\"))
|
167
|
+
# end
|
168
|
+
# "
|
169
|
+
```
|
156
170
|
|
157
171
|
## License
|
158
172
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/linguify/linguified.rb
CHANGED
@@ -11,8 +11,8 @@ module Linguify
|
|
11
11
|
|
12
12
|
# Lingquify a sentence
|
13
13
|
#
|
14
|
-
#
|
15
|
-
#
|
14
|
+
# @param [ String ] string A plain English string, or a plain English string with reductions in it.
|
15
|
+
# @param [ Binding ] binding See +Kernel#eval+
|
16
16
|
#
|
17
17
|
def initialize str,bind
|
18
18
|
|
@@ -66,7 +66,7 @@ module Linguify
|
|
66
66
|
|
67
67
|
# Find a reduction rule for the string
|
68
68
|
#
|
69
|
-
#
|
69
|
+
# @param [ String ] string A plain English string, or a plain English string with reductions in it.
|
70
70
|
#
|
71
71
|
def find_rule str
|
72
72
|
found = Linguify.rules.select do |rule|
|
data/lib/linguify/proc.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
class Proc
|
4
|
+
|
5
|
+
# Translate the Proc to a +Reduction+.
|
6
|
+
#
|
7
|
+
# @returns [ Reduction ] A +Reduction+ containing the code of the Proc.
|
8
|
+
#
|
4
9
|
def to_reduction args={}
|
5
10
|
Linguify::Reduction.new(
|
6
11
|
:returns => args[:returns] || '',
|
@@ -19,7 +24,7 @@ class Proc
|
|
19
24
|
|
20
25
|
sexy = reduction.compile
|
21
26
|
code = Marshal.load(Marshal.dump(sexy.first)) # sexy is not cleanly duplicated
|
22
|
-
code.replace_variable_references!
|
27
|
+
code.replace_variable_references! :replacement => Linguify::Replacement.new(:sexp => collection.name), :needle => :collection
|
23
28
|
code
|
24
29
|
end
|
25
30
|
end
|
data/lib/linguify/reduction.rb
CHANGED
@@ -36,6 +36,10 @@ module Linguify
|
|
36
36
|
@@reductions << self
|
37
37
|
end
|
38
38
|
|
39
|
+
# Extract the arguments from the code block of this Reduction.
|
40
|
+
#
|
41
|
+
# @returns [ Hash ] Key valye pairs of symbolized variable names and the reduction reference.
|
42
|
+
#
|
39
43
|
def determine_arguments
|
40
44
|
s = Marshal.load(Marshal.dump(self)) # sexp handling is not clean cut
|
41
45
|
raise "what is this?" unless s.sexp.sexp_type == :iter && s.sexp[1].sexp_type == :call && s.sexp[1][1] == nil && s.sexp[1][2] == :proc && s.sexp[1][3].sexp_type == :arglist
|
@@ -57,11 +61,14 @@ module Linguify
|
|
57
61
|
raise "unsupported argument type #{args}"
|
58
62
|
end
|
59
63
|
end
|
60
|
-
# args[] now has the symbolized argument names of the code block
|
61
64
|
@named_args = Hash[*args.zip(@args).flatten] if args
|
62
65
|
@named_args ||= {}
|
63
66
|
end
|
64
67
|
|
68
|
+
# Parse the string and return its reduction rule.
|
69
|
+
#
|
70
|
+
# @returns [ Reduction ] The reduction rule of the string.
|
71
|
+
#
|
65
72
|
def self.parse str
|
66
73
|
if /^{(?<return>[^:]*):(?<rid>[0-9]+)}$/ =~ str
|
67
74
|
@@reductions[rid.to_i]
|
@@ -78,10 +85,13 @@ module Linguify
|
|
78
85
|
|
79
86
|
# Compile self
|
80
87
|
#
|
81
|
-
#
|
82
|
-
#
|
88
|
+
# @param [ Symbol,nil ] return_variable The variable in the code wanting the result.
|
89
|
+
# @param [ Array<Symbol,Sexp>] replacement A list of variables in need of a new unique name or replacement with inlined code
|
90
|
+
# @returns [ Array<Sexp> ] the compiled code
|
83
91
|
#
|
84
|
-
def compile_with_return_to_var
|
92
|
+
def compile_with_return_to_var params={}
|
93
|
+
replace = params[:replace] || {}
|
94
|
+
|
85
95
|
s = Marshal.load(Marshal.dump(self)) # sexp handling is not clean cut
|
86
96
|
args = @named_args.keys
|
87
97
|
# args[] now has the symbolized argument names of the code block
|
@@ -94,7 +104,7 @@ module Linguify
|
|
94
104
|
red = Reduction::parse(arg)
|
95
105
|
if red.lang != lang && red.lang == :js && lang == :ruby
|
96
106
|
# paste javascript code into a ruby variable
|
97
|
-
code = red.compile_with_return_to_var
|
107
|
+
code = red.compile_with_return_to_var :replace => replace
|
98
108
|
clone = Marshal.load(Marshal.dump(code)) # code is not cleanly duplicated
|
99
109
|
code = Sexp.new(:iter,Sexp.new(:call, nil, :lambda, Sexp.new(:arglist)), nil,
|
100
110
|
Sexp.new(:block,
|
@@ -107,10 +117,10 @@ module Linguify
|
|
107
117
|
else
|
108
118
|
raise "trying to reference #{red.lang} code in #{lang} code" if red.lang != lang
|
109
119
|
if red.inline
|
110
|
-
code = red.compile_with_return_to_var
|
120
|
+
code = red.compile_with_return_to_var :replace => replace
|
111
121
|
replace[args[i]] = Replacement.new(:sexp => Sexp.new(:block,*code), :inline => true)
|
112
122
|
else
|
113
|
-
code = red.compile_with_return_to_var
|
123
|
+
code = red.compile_with_return_to_var :return_variable => "#{ret}_#{n}".to_sym, :replace => replace
|
114
124
|
args_code += code
|
115
125
|
replace[args[i]] = Replacement.new(:sexp => "#{ret}_#{n}".to_sym)
|
116
126
|
end
|
@@ -123,27 +133,31 @@ module Linguify
|
|
123
133
|
end
|
124
134
|
end
|
125
135
|
|
126
|
-
if return_variable
|
136
|
+
if params[:return_variable]
|
127
137
|
if s.sexp[3][0] == :block
|
128
|
-
code = Sexp.new(:lasgn, return_variable,
|
138
|
+
code = Sexp.new(:lasgn, params[:return_variable],
|
129
139
|
Sexp.new(:block,
|
130
140
|
*(s.sexp[3][1..-1].map{ |s| s.dup })
|
131
141
|
)
|
132
142
|
)
|
133
143
|
else
|
134
|
-
code = Sexp.new(:lasgn, return_variable, s.sexp[3].dup)
|
144
|
+
code = Sexp.new(:lasgn, params[:return_variable], s.sexp[3].dup)
|
135
145
|
end
|
136
146
|
else
|
137
147
|
code = s.sexp[3].dup
|
138
148
|
end
|
139
149
|
|
140
150
|
replace.each do |k,v|
|
141
|
-
code.replace_variable_references!
|
151
|
+
code.replace_variable_references! :replacement => v, :needle => k, :named_args => @named_args
|
142
152
|
end
|
143
153
|
|
144
154
|
return *args_code + [code]
|
145
155
|
end
|
146
156
|
|
157
|
+
# Get the reduction reference for this Reduction.
|
158
|
+
#
|
159
|
+
# @returns [ String ] A unique string reference refering to this Reduction.
|
160
|
+
#
|
147
161
|
def to_rexp
|
148
162
|
raise "hell" if returns.kind_of?(Array)
|
149
163
|
"{#{returns}:#{reduction_id}}"
|
data/lib/linguify/sexp.rb
CHANGED
@@ -4,12 +4,16 @@ class Sexp < Array
|
|
4
4
|
|
5
5
|
# Recurcively replace all references in a code section
|
6
6
|
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
7
|
+
# @param [ Sexp, Symbol ] replacement The replacement code. Either a Sexp (containing code to inline) or a symbol
|
8
|
+
# @param [ Sexp ] needle The search needle
|
9
|
+
# @param [ Hash ] named_args The arguments of the code block
|
10
10
|
#
|
11
|
-
def replace_variable_references!
|
11
|
+
def replace_variable_references! params
|
12
12
|
|
13
|
+
replacement = params[:replacement]
|
14
|
+
needle = params[:needle]
|
15
|
+
named_args = params[:named_args] || ''
|
16
|
+
|
13
17
|
case sexp_type
|
14
18
|
when :lasgn
|
15
19
|
self[1]=replacement.sexp if self[1] == needle
|
@@ -46,12 +50,12 @@ class Sexp < Array
|
|
46
50
|
sexy = Marshal.load(Marshal.dump(Linguify::Reduction.parse(Linguify::Reduction.parse(named_args[needle]).named_args[arg]).sexp)) # sexp handling is not clean cut
|
47
51
|
self[i+1] = sexy[3]
|
48
52
|
else
|
49
|
-
h.replace_variable_references!(replacement,needle,named_args) if h && h.kind_of?(Sexp)
|
53
|
+
h.replace_variable_references!(:replacement => replacement, :needle => needle, :named_args => named_args) if h && h.kind_of?(Sexp)
|
50
54
|
end
|
51
55
|
end
|
52
56
|
else
|
53
57
|
self[1..-1].each do |h|
|
54
|
-
h.replace_variable_references!(replacement,needle,named_args) if h && h.kind_of?(Sexp)
|
58
|
+
h.replace_variable_references!(:replacement => replacement, :needle => needle, :named_args => named_args) if h && h.kind_of?(Sexp)
|
55
59
|
end
|
56
60
|
end
|
57
61
|
end
|
data/lib/linguify/string.rb
CHANGED
@@ -1,9 +1,23 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
class String
|
4
|
+
|
5
|
+
# Linguify the string.
|
6
|
+
#
|
7
|
+
# @param [ Binding ] binding See the +Kernel#eval+.
|
8
|
+
# @returns [ Linguified ] code The compiled code
|
9
|
+
#
|
10
|
+
# @example Linguify a string and translate it back to Ruby
|
11
|
+
# "this is the famous hello world".linguify.to_ruby
|
12
|
+
# # => "code = lambda do
|
13
|
+
# # (pp(\"hello world\")
|
14
|
+
# # end
|
15
|
+
# # "
|
16
|
+
#
|
4
17
|
def linguify bind=binding
|
5
18
|
return Linguify::Linguified::cache[self] if Linguify::Linguified::cache[self]
|
6
19
|
Linguify::Linguified::cache[self] = Linguify::Linguified.new(self,bind)
|
7
20
|
end
|
21
|
+
|
8
22
|
end
|
9
23
|
|
data/lib/linguify.rb
CHANGED
@@ -6,20 +6,57 @@ require 'linguify/sexp'
|
|
6
6
|
require 'linguify/string'
|
7
7
|
require 'linguify/proc'
|
8
8
|
|
9
|
+
# Defines a reduction rule.
|
10
|
+
#
|
11
|
+
# @param [ Hash ] pattern The step matching pattern
|
12
|
+
# @param [ Proc ] code The code
|
13
|
+
#
|
14
|
+
# The step matching pattern only one key-value pair, where the
|
15
|
+
# key is the step matching pattern and the
|
16
|
+
# value is on of:
|
17
|
+
# nil - indicating the last reduction,
|
18
|
+
# +String+ - the name of the reduction,
|
19
|
+
# +Hash+ - the name of the reduction and adittional parameters
|
20
|
+
#
|
21
|
+
# Supported parameters:
|
22
|
+
# :to - the name of the reduction
|
23
|
+
# :lang - what language the code block translates to. (:ruby or :js)
|
24
|
+
# :inline - if true, calls to this reduction will be inlined
|
25
|
+
#
|
26
|
+
# @example Define a reduction rule that reduce a text to a javascript reduction named query.
|
27
|
+
# reduce /a possible javascript NOSQL query/ => {:to => 'query', :lang => :js} do
|
28
|
+
# @db.forEach(lambda{ |record|
|
29
|
+
# emit(record);
|
30
|
+
# }
|
31
|
+
# )
|
32
|
+
# end
|
33
|
+
#
|
9
34
|
def reduce(regexp,&code)
|
10
|
-
rule = regexp.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
35
|
+
rule = if regexp.kind_of? Regexp
|
36
|
+
{
|
37
|
+
:match => regexp,
|
38
|
+
:result => '',
|
39
|
+
:lang => :ruby,
|
40
|
+
:inline => false,
|
41
|
+
:proc => code
|
42
|
+
}
|
43
|
+
elsif regexp.values[0].kind_of?(Hash)
|
44
|
+
{
|
45
|
+
:match => regexp.keys[0],
|
46
|
+
:result => regexp.values[0][:to] || '',
|
47
|
+
:lang => regexp.values[0][:lang] || :ruby,
|
48
|
+
:inline => regexp.values[0][:inline] || false,
|
49
|
+
:proc => code
|
50
|
+
}
|
51
|
+
else
|
52
|
+
{
|
53
|
+
:match => regexp.keys[0],
|
54
|
+
:result => regexp.values[0],
|
55
|
+
:lang => :ruby,
|
56
|
+
:inline => false,
|
57
|
+
:proc => code
|
58
|
+
}
|
59
|
+
end
|
23
60
|
Linguify::rules << rule
|
24
61
|
end
|
25
62
|
|
data/linguify.gemspec
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{linguify}
|
8
|
+
s.version = "0.4.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = [%q{Patrick Hanevold}]
|
12
|
+
s.date = %q{2011-10-27}
|
13
|
+
s.description = %q{Linguify is a linguistic compiler allowing you to compile and execute plain english.}
|
14
|
+
s.email = %q{patrick.hanevold@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.md"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
"Gemfile",
|
20
|
+
"Gemfile.lock",
|
21
|
+
"README.md",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"lib/linguify.rb",
|
25
|
+
"lib/linguify/linguified.rb",
|
26
|
+
"lib/linguify/proc.rb",
|
27
|
+
"lib/linguify/reduction.rb",
|
28
|
+
"lib/linguify/sexp.rb",
|
29
|
+
"lib/linguify/string.rb",
|
30
|
+
"lib/linguify/translators/javascript.rb",
|
31
|
+
"linguify.gemspec",
|
32
|
+
"spec/linguify/linguify_spec.rb",
|
33
|
+
"tasks/spec.rake"
|
34
|
+
]
|
35
|
+
s.homepage = %q{http://github.com/patrickhno/linguify}
|
36
|
+
s.licenses = [%q{MIT}]
|
37
|
+
s.require_paths = [%q{lib}]
|
38
|
+
s.rubygems_version = %q{1.8.8}
|
39
|
+
s.summary = %q{Linguify, the linguistic compiler.}
|
40
|
+
|
41
|
+
if s.respond_to? :specification_version then
|
42
|
+
s.specification_version = 3
|
43
|
+
|
44
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
45
|
+
s.add_runtime_dependency(%q<sourcify>, [">= 0"])
|
46
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
47
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
48
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
49
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
50
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<sourcify>, [">= 0"])
|
53
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
54
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
55
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
56
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
57
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
58
|
+
end
|
59
|
+
else
|
60
|
+
s.add_dependency(%q<sourcify>, [">= 0"])
|
61
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
62
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
63
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
64
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
65
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -29,7 +29,7 @@ describe Linguify::Linguified, "#linguify" do
|
|
29
29
|
dirs.map{ |f| File.new(f, "r") }
|
30
30
|
end
|
31
31
|
|
32
|
-
reduce /view ({files:[^}]*})/
|
32
|
+
reduce /view ({files:[^}]*})/ do |files|
|
33
33
|
files.each do |file|
|
34
34
|
pp file
|
35
35
|
end
|
@@ -46,7 +46,7 @@ describe Linguify::Linguified, "#linguify" do
|
|
46
46
|
)
|
47
47
|
end
|
48
48
|
|
49
|
-
reduce /execute ({query:[^}]*})/
|
49
|
+
reduce /execute ({query:[^}]*})/ do |query|
|
50
50
|
db.map query
|
51
51
|
end
|
52
52
|
|
@@ -64,7 +64,7 @@ describe Linguify::Linguified, "#linguify" do
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
reduce /execute ({code:[^}]*})/
|
67
|
+
reduce /execute ({code:[^}]*})/ do |code|
|
68
68
|
pp "hey mum"
|
69
69
|
code
|
70
70
|
code[:sub]
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: linguify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.4.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Patrick Hanevold
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-27 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sourcify
|
@@ -87,7 +87,6 @@ extensions: []
|
|
87
87
|
extra_rdoc_files:
|
88
88
|
- README.md
|
89
89
|
files:
|
90
|
-
- .document
|
91
90
|
- Gemfile
|
92
91
|
- Gemfile.lock
|
93
92
|
- README.md
|
@@ -100,6 +99,7 @@ files:
|
|
100
99
|
- lib/linguify/sexp.rb
|
101
100
|
- lib/linguify/string.rb
|
102
101
|
- lib/linguify/translators/javascript.rb
|
102
|
+
- linguify.gemspec
|
103
103
|
- spec/linguify/linguify_spec.rb
|
104
104
|
- tasks/spec.rake
|
105
105
|
homepage: http://github.com/patrickhno/linguify
|
@@ -115,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
115
|
requirements:
|
116
116
|
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
hash:
|
118
|
+
hash: 1805068760905318468
|
119
119
|
segments:
|
120
120
|
- 0
|
121
121
|
version: "0"
|