italian-ruby 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +42 -0
- data/README.md +107 -0
- data/Rakefile +6 -0
- data/bin/italian-rspec +29 -0
- data/bin/italian-ruby +18 -0
- data/italian-ruby.gemspec +36 -0
- data/lib/italian/ruby/core_ext/array.rb +23 -0
- data/lib/italian/ruby/core_ext/hanami/interactor.rb +50 -0
- data/lib/italian/ruby/core_ext/hanami/mongoid.rb +14 -0
- data/lib/italian/ruby/core_ext/hash.rb +25 -0
- data/lib/italian/ruby/core_ext/kernel.rb +56 -0
- data/lib/italian/ruby/core_ext/main.rb +39 -0
- data/lib/italian/ruby/core_ext/mongoid/criteria.rb +19 -0
- data/lib/italian/ruby/core_ext/object.rb +31 -0
- data/lib/italian/ruby/core_ext/rspec/core.rb +27 -0
- data/lib/italian/ruby/core_ext/rspec/expectations.rb +18 -0
- data/lib/italian/ruby/core_ext/string.rb +8 -0
- data/lib/italian/ruby/core_ext.rb +13 -0
- data/lib/italian/ruby/richiedi_test.ir +5 -0
- data/lib/italian/ruby/ruby_parser_patches.rb +67 -0
- data/lib/italian/ruby/traduttore.rb +32 -0
- data/lib/italian/ruby/version.rb +5 -0
- data/lib/italian/ruby.rb +8 -0
- data/vscode/italianruby.tmGrammar.json +2019 -0
- metadata +133 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e77bc57386211592f254fc0a17f9b2ce05c31453d5115bb23aacb3fa56759192
|
4
|
+
data.tar.gz: 03b44542875df8c82407332db861544a5766fd12551e0dc1dbcb8ad8f9697b7e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d0b5e0f98b9333652a89af5cb893f1e9e8aab144882053bfc27eb85f000870d0f3a4dea38be185d191f1cbb0c2f11e2af942f0ea92858fb7368b5806a51fb69d
|
7
|
+
data.tar.gz: 717a0ebc33dc4ab89e3df7c1cb739ce1238121a5e705db031cef09e59b39c6725692a0ebd393e0c7bb992bc85fb3274afd5ac49ffeafbe3dc2295f526773c87d
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.0
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
italian-ruby (0.1.0)
|
5
|
+
ruby2ruby (~> 2.4)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.3)
|
11
|
+
rake (13.0.1)
|
12
|
+
rspec (3.9.0)
|
13
|
+
rspec-core (~> 3.9.0)
|
14
|
+
rspec-expectations (~> 3.9.0)
|
15
|
+
rspec-mocks (~> 3.9.0)
|
16
|
+
rspec-core (3.9.1)
|
17
|
+
rspec-support (~> 3.9.1)
|
18
|
+
rspec-expectations (3.9.0)
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
20
|
+
rspec-support (~> 3.9.0)
|
21
|
+
rspec-mocks (3.9.1)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.9.0)
|
24
|
+
rspec-support (3.9.2)
|
25
|
+
ruby2ruby (2.4.4)
|
26
|
+
ruby_parser (~> 3.1)
|
27
|
+
sexp_processor (~> 4.6)
|
28
|
+
ruby_parser (3.14.2)
|
29
|
+
sexp_processor (~> 4.9)
|
30
|
+
sexp_processor (4.14.1)
|
31
|
+
|
32
|
+
PLATFORMS
|
33
|
+
ruby
|
34
|
+
|
35
|
+
DEPENDENCIES
|
36
|
+
bundler (~> 2.1)
|
37
|
+
italian-ruby!
|
38
|
+
rake (~> 13.0)
|
39
|
+
rspec (~> 3.9)
|
40
|
+
|
41
|
+
BUNDLED WITH
|
42
|
+
2.1.2
|
data/README.md
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
# Italian::Ruby
|
2
|
+
|
3
|
+
Benvenuti nella gemma `italian/ruby`.
|
4
|
+
Scrivo questo tutorial in italiano, perché, diciamocelo, chi sarebbe interessato a questa gemma se non fosse italiano? La gemma è semplice. Ti permette di scrivere Ruby, ma usando la nostra cara lingua madre.
|
5
|
+
|
6
|
+
Son da sempre convinto che una delle difficoltà della programmazione sia pensare e leggere il codice sorgente scritto in una lingua che non ti è nativa. Infatti, per quanto vogliamo raccontarcela e per quanti film in inglese scegliamo di guardare, finché viviamo in Italia, penseremo e parleremo in italiano.
|
7
|
+
Questo vuol dire che, quando programmiamo software, dobbiamo pensare l'algoritmo, tradurlo in inglese, tradurlo in Ruby e poi scriverlo a tastiera. Allo stesso modo, quando leggiamo software, dobbiamo tradurre dall'inglese, tradurre dal Ruby e poi ricostruire l'algoritmo in testa.
|
8
|
+
|
9
|
+
E se eliminassimo un passaggio? Beh diciamo che più che eliminarlo, lo facciamo fare ad una macchina. D'altra parte le macchine fan questo: attività ripetitive, banali, e stupide. Sì perché le macchine sono e resteranno sempre stupide. E non fatemi iniziare a parlare di "intelligenza" artificiale.. !
|
10
|
+
Ecco il motivo della nascita di Italian Ruby.
|
11
|
+
|
12
|
+
## Installazione
|
13
|
+
|
14
|
+
Al solito.
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'italian-ruby'
|
18
|
+
```
|
19
|
+
|
20
|
+
Oppure.
|
21
|
+
|
22
|
+
```bash
|
23
|
+
gem install italian-ruby
|
24
|
+
```
|
25
|
+
|
26
|
+
Per poterla usare bisogna caricarla.
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
require "italian/ruby"
|
30
|
+
```
|
31
|
+
|
32
|
+
## Utilizzo
|
33
|
+
|
34
|
+
Il codice sorgente in Italian Ruby è scritto in file con estensione `.ir`. Ho fatto anche una grammatica per l'evidenziazione della sintassi, funziona per VS Code, penso anche per altri editor, la trovate nel file `vscode/italianruby.tmGrammar.json` in questo repository.
|
35
|
+
|
36
|
+
A questo punto ci sono due strade. Prima strada, usare l'eseguibile `italian-ruby`:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
# persona.ir
|
40
|
+
classe Persona
|
41
|
+
def inizializzatore(nome)
|
42
|
+
@nome = nome
|
43
|
+
fine
|
44
|
+
|
45
|
+
def come_ti_chiami?
|
46
|
+
stampa "Ciao, mi chiamo #{@nome}."
|
47
|
+
fine
|
48
|
+
fine
|
49
|
+
|
50
|
+
toni = Persona.nuova("Toni")
|
51
|
+
toni.come_ti_chiami?
|
52
|
+
```
|
53
|
+
|
54
|
+
Eseguendolo così:
|
55
|
+
|
56
|
+
```bash
|
57
|
+
italian-ruby persona.ir
|
58
|
+
# Ciao, mi chiamo Toni.
|
59
|
+
```
|
60
|
+
|
61
|
+
Oppure si può richiedere all'interno di codice sorgente Ruby standard, in modo che venga caricato esattamente come fa il `require` di Ruby standard. Esempio:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
# libreria_interessantissima.rb
|
65
|
+
modulo LibreriaInteressantissima
|
66
|
+
def se_stesso.metodo_interessantissimo
|
67
|
+
stampa "Che roba!"
|
68
|
+
fine
|
69
|
+
fine
|
70
|
+
|
71
|
+
# tuo_file_ruby.rb
|
72
|
+
require "italian/ruby"
|
73
|
+
richiedi_relativo "libreria_interessantissima"
|
74
|
+
|
75
|
+
LibreriaInteressantissima.metodo_interessantissimo
|
76
|
+
# Che roba!
|
77
|
+
```
|
78
|
+
|
79
|
+
È possibile anche utilizzare il `richiedi`, che funziona come il `require` di Ruby, nel remoto caso in cui _qualcuno_ faccia una gemma in Italian Ruby, la pubblichi su rubygems.org e _qualcun'altro_ la scarichi e la installi. Se mai succedesse, funzionerebbe così:
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
# tuo_file_ruby.rb
|
83
|
+
require "italian/ruby"
|
84
|
+
richiedi "gemma_impossibile"
|
85
|
+
|
86
|
+
GemmaImpossibile.esiste?
|
87
|
+
# false
|
88
|
+
```
|
89
|
+
|
90
|
+
## Come funziona?
|
91
|
+
|
92
|
+
> Vuoi sapere la verità su una cosa? Allora devi sapere **come funziona**.
|
93
|
+
>
|
94
|
+
> \- un tizio saggio, qualche anno fa.
|
95
|
+
|
96
|
+
Volete sapere la verità su Italian Ruby? Ecco come funziona. Ho preso ispirazione da questa gemma che si chiama [Bato](https://github.com/jjuliano/bato). Praticamente è la stessa cosa di Italian Ruby solo che in filippino. Bato vuole dire "Roccia" in filippino. Bato funziona usando la gemma [RubyParser](https://github.com/seattlerb/ruby_parser) che parsa codice Ruby e lo converte in espressioni sexp, e la gemma [Ruby2Ruby](https://github.com/seattlerb/ruby2ruby) che converte espressioni sexp in codice Ruby.
|
97
|
+
In mezzo a queste due, ci infiliamo la nostra gemma, che, patchando il ruby parser, legge codice in italiano e lo converte in espressioni sexp. Il trucco sta nel file `lib/italian/ruby/ruby_parser_patches.rb` dove vengono definite nuove keywords al posto di quelle originali (es. `classe` al posti di `class`).
|
98
|
+
|
99
|
+
Bato però ha solo un binario che permette di eseguire codice filippino. Italian Ruby, invece, permette di inglobare codice italiano all'interno di progetti Ruby già esistenti. Avete un gigantesco codebase con megabyte di codice, ma volete riscrivere un solo piccolo pezzettino in italiano? Con Italian Ruby si può.
|
100
|
+
|
101
|
+
Per concludere, ci sono degli avvertimenti.
|
102
|
+
1. il namespace verrà sporcato. Ho fatto del mio meglio per essere più chirurgico possibile, ma se fate `require "italian/ruby"` sappiate che verranno su un sacco di classi e di alias nuovi (es. `Oggetto.nuovo` ecc.).
|
103
|
+
2. il `richiedi` e `richiedi_relativo` funzionano traducendo un file sorgente in italiano nella stessa cartella in cui si trova, caricandolo in memoria con il `require` di Ruby, e poi cancellandolo. Non so se questo possa creare problemi. Immagino di no. Ma vi ho avvertito!
|
104
|
+
|
105
|
+
## Contribuire
|
106
|
+
|
107
|
+
Bug e issue qui -> https://github.com/[USERNAME]/italian-ruby.
|
data/Rakefile
ADDED
data/bin/italian-rspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "rspec"
|
5
|
+
require "italian/ruby"
|
6
|
+
|
7
|
+
def translate_spec(file)
|
8
|
+
spec_file = "#{File.dirname file}/#{File.basename(file, ".ir")}.rb"
|
9
|
+
File.write spec_file, Italian::Ruby::Traduttore.traduci(file)
|
10
|
+
end
|
11
|
+
|
12
|
+
def destroy_spec(file)
|
13
|
+
spec_file = "#{File.dirname file}/#{File.basename(file, ".ir")}.rb"
|
14
|
+
File.delete spec_file if File.exist? spec_file
|
15
|
+
end
|
16
|
+
|
17
|
+
if ARGV[0].nil?
|
18
|
+
spec_files = Dir["spec/**/*_spec.ir"]
|
19
|
+
if spec_files.empty?
|
20
|
+
"Nessun file *_spec.ir trovato."
|
21
|
+
return
|
22
|
+
end
|
23
|
+
else
|
24
|
+
spec_files = ARGV
|
25
|
+
end
|
26
|
+
|
27
|
+
spec_files.each { |file| translate_spec file }
|
28
|
+
RSpec::Core::Runner.run([ "spec" ], STDIN, STDOUT)
|
29
|
+
spec_files.each { |file| destroy_spec file }
|
data/bin/italian-ruby
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "italian/ruby"
|
5
|
+
|
6
|
+
if ARGV[0].nil?
|
7
|
+
puts <<~EOS
|
8
|
+
Esegue un file scritto in Italian Ruby. Sintassi:
|
9
|
+
italian-ruby file.ir
|
10
|
+
EOS
|
11
|
+
else
|
12
|
+
ARGV.each do |file|
|
13
|
+
next unless file
|
14
|
+
|
15
|
+
codice_ruby = Italian::Ruby::Traduttore.traduci file
|
16
|
+
eval codice_ruby
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'lib/italian/ruby/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "italian-ruby"
|
5
|
+
spec.version = Italian::Ruby::VERSION
|
6
|
+
spec.authors = ["Francesco Ballardin"]
|
7
|
+
spec.email = ["francesco.ballardin@gmail.com"]
|
8
|
+
spec.licenses = ["MIT"]
|
9
|
+
|
10
|
+
spec.summary = %q{Program in Ruby writing in Italian.}
|
11
|
+
spec.description = %q{Program in Ruby writing in Italian. Yay!}
|
12
|
+
spec.homepage = "https://github.com/Pluvie/italian-ruby"
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
14
|
+
|
15
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://github.com/Pluvie/italian-ruby"
|
19
|
+
spec.metadata["changelog_uri"] = "https://github.com/Pluvie/italian-ruby/CHANGELOG.md"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = "bin"
|
27
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
28
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
29
|
+
spec.require_paths = ["lib"]
|
30
|
+
|
31
|
+
spec.add_dependency 'ruby2ruby', '~> 2.4'
|
32
|
+
|
33
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
34
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
35
|
+
spec.add_development_dependency 'rspec', '~> 3.9'
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Array
|
3
|
+
#
|
4
|
+
# Alias di metodi della classe Array.
|
5
|
+
|
6
|
+
class Array
|
7
|
+
alias :per_ogni :each
|
8
|
+
alias :per_ognuno :each
|
9
|
+
alias :per_ognuna :each
|
10
|
+
alias :mappa :map
|
11
|
+
alias :vuoto? :empty?
|
12
|
+
alias :vuota? :empty?
|
13
|
+
alias :primo :first
|
14
|
+
alias :prima :first
|
15
|
+
alias :ultimo :last
|
16
|
+
alias :ultima :last
|
17
|
+
|
18
|
+
def esiste?
|
19
|
+
!nil? && !empty?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Lista = Array
|
@@ -0,0 +1,50 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Hanami::Interactor
|
3
|
+
|
4
|
+
module Hanami
|
5
|
+
module Interactor
|
6
|
+
alias :fallisci! :error!
|
7
|
+
alias :errore! :error!
|
8
|
+
alias :errore :error
|
9
|
+
|
10
|
+
module LegacyInterface
|
11
|
+
def chiama
|
12
|
+
_call { super }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
module Interface
|
16
|
+
def chiama(*args)
|
17
|
+
@__result = ::Hanami::Interactor::Result.new
|
18
|
+
_call(*args) { super }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Result
|
23
|
+
alias :riuscito? :successful?
|
24
|
+
alias :errore :error
|
25
|
+
|
26
|
+
def fallito?
|
27
|
+
!successful?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
Risultato = Result
|
32
|
+
end
|
33
|
+
|
34
|
+
Interattore = Interactor
|
35
|
+
|
36
|
+
module ClassMethods
|
37
|
+
alias :esponi :expose
|
38
|
+
|
39
|
+
def method_added(method_name)
|
40
|
+
super
|
41
|
+
return unless method_name == :chiama
|
42
|
+
|
43
|
+
if instance_method(:chiama).arity.zero?
|
44
|
+
prepend Hanami::Interactor::LegacyInterface
|
45
|
+
else
|
46
|
+
prepend Hanami::Interactor::Interface
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Hash
|
3
|
+
#
|
4
|
+
# Alias di metodi della classe Hash.
|
5
|
+
|
6
|
+
class Hash
|
7
|
+
alias :per_ogni :each
|
8
|
+
alias :per_ognuno :each
|
9
|
+
alias :per_ognuna :each
|
10
|
+
alias :chiavi :keys
|
11
|
+
alias :valori :values
|
12
|
+
alias :mappa :map
|
13
|
+
alias :vuoto? :empty?
|
14
|
+
alias :vuota? :empty?
|
15
|
+
alias :ottieni :fetch
|
16
|
+
alias :scava :dig
|
17
|
+
alias :trasforma_chiavi :transform_keys
|
18
|
+
alias :trasforma_valori :transform_values
|
19
|
+
|
20
|
+
def esiste?
|
21
|
+
!nil? && !empty?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Mappa = Hash
|
@@ -0,0 +1,56 @@
|
|
1
|
+
##
|
2
|
+
# CoreExt - Kernel
|
3
|
+
#
|
4
|
+
# Aggiunge i metodi :richiedi e :richiedi_relativo, che permettono di caricare
|
5
|
+
# un file sorgente scritto in Italian Ruby e usarlo allo stesso modo di come
|
6
|
+
# funzionano :require e :require_relative di Ruby standard.
|
7
|
+
#
|
8
|
+
# È possibile utilizzare :richiedi e :richiedi_relativo sia in file sorgenti
|
9
|
+
# scritti in Italian Ruby che in file sorgenti scritti in Ruby standard.
|
10
|
+
|
11
|
+
module Kernel
|
12
|
+
|
13
|
+
def richiedi(name)
|
14
|
+
file_to_require = $:.map { |dir| Dir["#{dir}/**/#{name}.ir"] }.flatten.compact.first
|
15
|
+
raise LoadError.new("cannot load such file -- #{name}") if file_to_require.nil?
|
16
|
+
|
17
|
+
traduci_carica_e_distruggi file_to_require
|
18
|
+
end
|
19
|
+
|
20
|
+
def richiedi_relativo(name)
|
21
|
+
caller_location_dir = File.dirname caller_locations.first.absolute_path
|
22
|
+
file_to_require = File.expand_path "#{caller_location_dir}/#{name}.ir"
|
23
|
+
raise LoadError.new("cannot load such file -- #{name}") unless File.exist? file_to_require
|
24
|
+
|
25
|
+
traduci_carica_e_distruggi file_to_require
|
26
|
+
end
|
27
|
+
|
28
|
+
def richiedi_assoluto(file)
|
29
|
+
raise LoadError.new("cannot load suc file -- #{file}") unless File.exist? file
|
30
|
+
traduci_carica_e_distruggi file
|
31
|
+
end
|
32
|
+
|
33
|
+
def richiedi_tutti(dir)
|
34
|
+
caller_location_dir = File.dirname caller_locations.first.absolute_path
|
35
|
+
raise LoadError.new("cannot load such directory -- #{dir}") unless Dir.exist? caller_location_dir
|
36
|
+
|
37
|
+
Dir["#{caller_location_dir}/**/*.ir"].each do |file|
|
38
|
+
richiedi_assoluto file
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def traduci_carica_e_distruggi(file_to_require)
|
45
|
+
parsed_code = Italian::Ruby::Traduttore.traduci file_to_require
|
46
|
+
file_to_require_dir = File.dirname(file_to_require)
|
47
|
+
file_to_require_basename = File.basename(file_to_require, ".ir")
|
48
|
+
tmp_parsed_file = "#{file_to_require_dir}/#{file_to_require_basename}.rb"
|
49
|
+
|
50
|
+
File.write tmp_parsed_file, parsed_code
|
51
|
+
require_output = require tmp_parsed_file
|
52
|
+
File.delete tmp_parsed_file if File.exist? tmp_parsed_file
|
53
|
+
require_output
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Main
|
3
|
+
#
|
4
|
+
# Alias di metodi del namespace principale.
|
5
|
+
|
6
|
+
alias :stampa :puts
|
7
|
+
alias :cicla :loop
|
8
|
+
alias :definisci_metodo_singolo :define_singleton_method
|
9
|
+
|
10
|
+
def includi(*args)
|
11
|
+
include *args
|
12
|
+
end
|
13
|
+
def preponi(*args)
|
14
|
+
prepend *args
|
15
|
+
end
|
16
|
+
def estendi(*args)
|
17
|
+
extend *args
|
18
|
+
end
|
19
|
+
|
20
|
+
def privati(*args)
|
21
|
+
private
|
22
|
+
end
|
23
|
+
def protetti(*args)
|
24
|
+
protected
|
25
|
+
end
|
26
|
+
def pubblici(*args)
|
27
|
+
public
|
28
|
+
end
|
29
|
+
|
30
|
+
def alza(*args)
|
31
|
+
raise *args
|
32
|
+
end
|
33
|
+
def fallisci(*args)
|
34
|
+
fail *args
|
35
|
+
end
|
36
|
+
|
37
|
+
def non_in?(*args)
|
38
|
+
!in? *args
|
39
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Mongoid Criteria
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
class Criteria
|
6
|
+
def tutti(*args, &block)
|
7
|
+
all *args, &block
|
8
|
+
end
|
9
|
+
|
10
|
+
def dove(*args, &block)
|
11
|
+
where *args, &block
|
12
|
+
end
|
13
|
+
|
14
|
+
def dati
|
15
|
+
entries
|
16
|
+
end
|
17
|
+
alias :voci :dati
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Oggetti
|
3
|
+
#
|
4
|
+
# Alias di metodi della classe Object.
|
5
|
+
|
6
|
+
class Object
|
7
|
+
class << self
|
8
|
+
alias_method :nuovo, :new
|
9
|
+
alias_method :nuova, :new
|
10
|
+
end
|
11
|
+
|
12
|
+
alias :nullo? :nil?
|
13
|
+
alias :nulla? :nil?
|
14
|
+
alias :risponde_a? :respond_to?
|
15
|
+
|
16
|
+
def esiste?
|
17
|
+
!nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def inizializzatore(*args, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(*args, &block)
|
26
|
+
inizializzatore *args, &block
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
Oggetto = Object
|
@@ -0,0 +1,27 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Rspec Core
|
3
|
+
|
4
|
+
module RSpec
|
5
|
+
def self.descrivi(*args, &block)
|
6
|
+
describe *args, &block
|
7
|
+
end
|
8
|
+
|
9
|
+
module Core
|
10
|
+
module Hooks
|
11
|
+
alias_method :prima, :before
|
12
|
+
alias_method :dopo, :after
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
RSpec::Matchers.alias_matcher :sia, :be
|
19
|
+
RSpec::Matchers.alias_matcher :equivalga_a, :eq
|
20
|
+
|
21
|
+
config.alias_example_to :esso
|
22
|
+
config.alias_example_to :essa
|
23
|
+
|
24
|
+
config.before :each do
|
25
|
+
alias :verifica :expect
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
##
|
2
|
+
# Core Ext - Rspec Expectations
|
3
|
+
|
4
|
+
module RSpec
|
5
|
+
module Expectations
|
6
|
+
class ExpectationTarget
|
7
|
+
module InstanceMethods
|
8
|
+
def che(*args, &block)
|
9
|
+
to *args, &block
|
10
|
+
end
|
11
|
+
|
12
|
+
def che_non(*args, &block)
|
13
|
+
not_to *args, &block
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
original_verbosity = $VERBOSE
|
4
|
+
$VERBOSE = nil
|
5
|
+
|
6
|
+
require_relative "core_ext/kernel"
|
7
|
+
require_relative "core_ext/main"
|
8
|
+
require_relative "core_ext/object"
|
9
|
+
require_relative "core_ext/array"
|
10
|
+
require_relative "core_ext/hash"
|
11
|
+
require_relative "core_ext/string"
|
12
|
+
|
13
|
+
$VERBOSE = original_verbosity
|