biblioDSL 0.1.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.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Guardfile +89 -0
- data/README.md +129 -0
- data/Rakefile +6 -0
- data/biblioDSL.gemspec +37 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/biblioDSL.rb +13 -0
- data/lib/biblioDSL/bibliografia.rb +37 -0
- data/lib/biblioDSL/referencias/capitulo.rb +86 -0
- data/lib/biblioDSL/referencias/documentoElectronico.rb +83 -0
- data/lib/biblioDSL/referencias/libro.rb +56 -0
- data/lib/biblioDSL/referencias/periodico.rb +44 -0
- data/lib/biblioDSL/referencias/referencia.rb +154 -0
- data/lib/biblioDSL/version.rb +4 -0
- metadata +176 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 514df1d6ff15300b562940feed3861ca542f4f81
|
4
|
+
data.tar.gz: f4878250baaf27d16bb5557cd9c8224725801e52
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6a79e06151e1baae25a2e23f64fa82cfe972273cb0547e2afca5980bcf4e91ea35935b0b205ed5f14a22db0424fa352f71034c93c1853187dc4b66edebee3556
|
7
|
+
data.tar.gz: f9f2a625ff1b032e2a156c8fb24c9cbf6a0b100a1577bc5c1c8fcbb29236695316e28032b614479e6032171d984cb0be2ce9d07ba76dc76d70ee588c60d7665a
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features) \
|
6
|
+
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
+
|
8
|
+
## Note: if you are using the `directories` clause above and you are not
|
9
|
+
## watching the project directory ('.'), then you will want to move
|
10
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
+
#
|
12
|
+
# $ mkdir config
|
13
|
+
# $ mv Guardfile config/
|
14
|
+
# $ ln -s config/Guardfile .
|
15
|
+
#
|
16
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
+
|
18
|
+
guard :bundler do
|
19
|
+
require 'guard/bundler'
|
20
|
+
require 'guard/bundler/verify'
|
21
|
+
helper = Guard::Bundler::Verify.new
|
22
|
+
|
23
|
+
files = ['Gemfile']
|
24
|
+
files += Dir['*.gemspec'] if files.any? { |f| helper.uses_gemspec?(f) }
|
25
|
+
|
26
|
+
# Assume files are symlinked from somewhere
|
27
|
+
files.each { |file| watch(helper.real_path(file)) }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Note: The cmd option is now required due to the increasing number of ways
|
31
|
+
# rspec may be run, below are examples of the most common uses.
|
32
|
+
# * bundler: 'bundle exec rspec'
|
33
|
+
# * bundler binstubs: 'bin/rspec'
|
34
|
+
# * spring: 'bin/rspec' (This will use spring if running and you have
|
35
|
+
# installed the spring binstubs per the docs)
|
36
|
+
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
37
|
+
# * 'just' rspec: 'rspec'
|
38
|
+
|
39
|
+
guard :rspec, cmd: "bundle exec rspec" do
|
40
|
+
require "guard/rspec/dsl"
|
41
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
42
|
+
|
43
|
+
# Feel free to open issues for suggestions and improvements
|
44
|
+
|
45
|
+
# RSpec files
|
46
|
+
rspec = dsl.rspec
|
47
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
48
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
49
|
+
watch(rspec.spec_files)
|
50
|
+
|
51
|
+
watch(/.*/) do |m|
|
52
|
+
fichero = m.join(" ").sub("lib/biblioDSL","").sub(".rb", "")
|
53
|
+
"spec#{fichero}_spec.rb"
|
54
|
+
end
|
55
|
+
|
56
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
57
|
+
|
58
|
+
# Ruby files
|
59
|
+
ruby = dsl.ruby
|
60
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
61
|
+
|
62
|
+
# Rails files
|
63
|
+
rails = dsl.rails(view_extensions: %w(erb haml slim))
|
64
|
+
dsl.watch_spec_files_for(rails.app_files)
|
65
|
+
dsl.watch_spec_files_for(rails.views)
|
66
|
+
|
67
|
+
watch(rails.controllers) do |m|
|
68
|
+
[
|
69
|
+
rspec.spec.("routing/#{m[1]}_routing"),
|
70
|
+
rspec.spec.("controllers/#{m[1]}_controller"),
|
71
|
+
rspec.spec.("acceptance/#{m[1]}")
|
72
|
+
]
|
73
|
+
end
|
74
|
+
|
75
|
+
# Rails config changes
|
76
|
+
watch(rails.spec_helper) { rspec.spec_dir }
|
77
|
+
watch(rails.routes) { "#{rspec.spec_dir}/routing" }
|
78
|
+
watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
|
79
|
+
|
80
|
+
# Capybara features specs
|
81
|
+
watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") }
|
82
|
+
watch(rails.layouts) { |m| rspec.spec.("features/#{m[1]}") }
|
83
|
+
|
84
|
+
# Turnip features and steps
|
85
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
86
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
|
87
|
+
Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
|
88
|
+
end
|
89
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# LPP: Práctica 11 - Lenguajes de Dominio Específico
|
2
|
+
[](https://travis-ci.org/DanielRamosAcosta/prct11) [](https://coveralls.io/github/DanielRamosAcosta/prct11?branch=master)
|
3
|
+
## Enunciado
|
4
|
+
Se nos pide crear un Lenguaje de Dominio Específico para representar bibliografías.
|
5
|
+
## Implementación
|
6
|
+
Voy a usar la implentación que está en el enunciado del ejercicio, y usando el mismo formato que el de la [práctica 10](https://github.com/DanielRamosAcosta/prct10).
|
7
|
+
|
8
|
+
###Libro:
|
9
|
+
|
10
|
+
* **Título**: Crónicas de una Muerte Anunciada
|
11
|
+
* **Autor**: Gabriel García Márquez
|
12
|
+
* **Año de publicación**: 1981
|
13
|
+
* **Edición**: 4
|
14
|
+
* **Volumen**: 1
|
15
|
+
* **Lugar de publicación**: Colombia
|
16
|
+
* **Editorial**: La Oveja Negra
|
17
|
+
* **Resultado esperado**: `García, M. G. (1981). Crónicas de una Muerte Anunciada (4) (1). Colombia: La Oveja Negra.`
|
18
|
+
* **Instanciación**:
|
19
|
+
|
20
|
+
``` ruby
|
21
|
+
@libro = DRA::Libro.new("Crónicas de una muerte anunciada") do
|
22
|
+
autores :apellido => "García",
|
23
|
+
:apellido2 => "Márquez",
|
24
|
+
:nombre => "Gabriel"
|
25
|
+
fecha :anio=>1981
|
26
|
+
pais "Colombia"
|
27
|
+
editorial "La Oveja Negra"
|
28
|
+
edicion 4
|
29
|
+
volumen 1
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
###Artículo/Capítulo de un libro
|
34
|
+
|
35
|
+
* **Título de la obra**: Acreditación en Chile: La experiencia de un lustro
|
36
|
+
* **Autor 1**: María Persico Jiménez
|
37
|
+
* **Autor 2**: Pablo Perisco Jiménez
|
38
|
+
* **Año de publicación**: 1997
|
39
|
+
* **Título del artículo o capítulo**: El Estado
|
40
|
+
* **Editor 1**: Eduardo Villalba García
|
41
|
+
* **Editor 2**: Godalupe Magana Gonzáles
|
42
|
+
* **Número de páginas del capítulo**: 27.
|
43
|
+
* **Edición**: 8
|
44
|
+
* **Volumen**: 2
|
45
|
+
* **Lugar de publicación**: Chile.
|
46
|
+
* **Editorial**: Creatividad, educación y desarrollo
|
47
|
+
* **Resultado esperado**: `Perisco, J. M. & Perisco, J. P. (1997). El Estado. En Villalba, G. E. & Magana, G. G. (Eds.), Acreditación en Chile: la Experiencia de un Lustro (27) (8) (2). Chile: Creatividad, educación y desarrollo.`
|
48
|
+
* **Instanciación**:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
@capitulo = DRA::Capitulo.new("Acreditación en Chile: La experiencia de un lustro") do
|
52
|
+
autores :apellido => "Perisco",
|
53
|
+
:apellido2 => "Jiménez",
|
54
|
+
:nombre => "Maria"
|
55
|
+
autores :apellido => "Perisco",
|
56
|
+
:apellido2 => "Jiménez",
|
57
|
+
:nombre => "Pablo"
|
58
|
+
fecha :anio=>1997
|
59
|
+
pais "Chile"
|
60
|
+
editorial "Creatividad, educación y desarrollo"
|
61
|
+
edicion 8
|
62
|
+
volumen 2
|
63
|
+
capitulo "El Estado"
|
64
|
+
paginas 27
|
65
|
+
editores :apellido => "Villalba",
|
66
|
+
:apellido2 => "García",
|
67
|
+
:nombre => "Eduardo"
|
68
|
+
editores :apellido => "Magana",
|
69
|
+
:apellido2 => "Gonzáles",
|
70
|
+
:nombre => "Godalupe"
|
71
|
+
end
|
72
|
+
```
|
73
|
+
|
74
|
+
### Artículo de periódico
|
75
|
+
|
76
|
+
* **Título**: El primer móvil con Android One
|
77
|
+
* **Autor 1**: Javier Palazón
|
78
|
+
* **Autor 2**: Laura Pajuelo
|
79
|
+
* **Fecha**: 15-11-2015
|
80
|
+
* **Periódico**: El País
|
81
|
+
* **Páginas del periódico**: 68
|
82
|
+
* **Resultado esperado**: `Palazon, J. & Pajuelo, L. (15 de noviembre de 2015). El Primer Móvil con Android one. El País, pp. 68.`
|
83
|
+
* **Instanciación**:
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
@periodico = DRA::Periodico.new("El primer móvil con Android One") do
|
87
|
+
autores :apellido => "Palazón",
|
88
|
+
:nombre => "Javier"
|
89
|
+
autores :apellido => "Pajuelo",
|
90
|
+
:nombre => "Laura"
|
91
|
+
fecha :dia=>15,
|
92
|
+
:mes=>11,
|
93
|
+
:anio=>2015
|
94
|
+
periodico "El País"
|
95
|
+
paginas 68
|
96
|
+
end
|
97
|
+
```
|
98
|
+
|
99
|
+
###Documentos electrónicos
|
100
|
+
|
101
|
+
* **Título**: Evaluación del impacto de los proyectos de desarrollo en la pobreza: Manual para profesionales
|
102
|
+
* **Autor 1**: James Baker
|
103
|
+
* **Fecha**: 25-7-2000
|
104
|
+
* **Edición**: 6
|
105
|
+
* **Tipo de medio**: Web
|
106
|
+
* **Lugar de publicación**: España
|
107
|
+
* **Editor**: Banco Internacional de Reconstrucción y Fomento/BANCO MUNDIAL
|
108
|
+
* **Disponible en**: http://siteresources.worldbank.org/INTISPMA/Resources/Impact-Evaluation-Handbook--Spanish-/manual.pdf
|
109
|
+
* **Fecha de acceso**: 3-12-2015
|
110
|
+
* **Resultado esperado**: `Backer. J. (25 de Julio de 2000). Evaluación del impacto de los proyectos de desarrollo en la pobreza: Manual para profesionales (6), Web. España: Banco Internacional de Reconstrucción y Fomento/BANCO MUNDIAL. Disponible en: http://siteresources.worldbank.org/INTISPMA/Resources/Impact-Evaluation-Handbook--Spanish-/manual.pdf (3-12-2015).`
|
111
|
+
* **Instanciación**:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
@documentoElectronico = DRA::DocumentoElectronico.new("Evaluación del impacto de los proyectos de desarrollo en la pobreza: Manual para profesionales") do
|
115
|
+
autores :apellido => "Baker",
|
116
|
+
:nombre => "James"
|
117
|
+
fecha :dia=>25,
|
118
|
+
:mes=>7,
|
119
|
+
:anio=>2000
|
120
|
+
edicion 6
|
121
|
+
formato "Web"
|
122
|
+
pais "España"
|
123
|
+
editor "Banco Internacional de Reconstrucción y Fomento/BANCO MUNDIAL"
|
124
|
+
disponible "http://siteresources.worldbank.org/INTISPMA/Resources/Impact-Evaluation-Handbook--Spanish-/manual.pdf"
|
125
|
+
fecha_acc :dia=>3,
|
126
|
+
:mes=>12,
|
127
|
+
:anio=>2015
|
128
|
+
end
|
129
|
+
```
|
data/Rakefile
ADDED
data/biblioDSL.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'biblioDSL/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "biblioDSL"
|
8
|
+
spec.version = BiblioDSL::VERSION
|
9
|
+
spec.authors = ["Daniel Ramos"]
|
10
|
+
spec.email = ["danielramosacosta@hotmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Esta es una gema para representar referencias en forma de una bilbiografía}
|
13
|
+
spec.description = %q{Tiene su propopio DSL así que es super mega fácil de usar}
|
14
|
+
spec.homepage = "https://github.com/DanielRamosAcosta/prct11"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
+
# delete this section to allow pushing this gem to any host.
|
18
|
+
if spec.respond_to?(:metadata)
|
19
|
+
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
20
|
+
else
|
21
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
+
end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = "exe"
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
30
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
31
|
+
spec.add_development_dependency "rspec"
|
32
|
+
spec.add_development_dependency "guard"
|
33
|
+
spec.add_development_dependency "guard-rspec"
|
34
|
+
spec.add_development_dependency "guard-bundler"
|
35
|
+
spec.add_development_dependency "coveralls"
|
36
|
+
spec.add_development_dependency "yard"
|
37
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "biblioDSL"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/lib/biblioDSL.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require "biblioDSL/version"
|
3
|
+
require 'biblioDSL/referencias/referencia'
|
4
|
+
require 'biblioDSL/referencias/libro'
|
5
|
+
require 'biblioDSL/referencias/capitulo'
|
6
|
+
require 'biblioDSL/referencias/periodico'
|
7
|
+
require 'biblioDSL/referencias/documentoElectronico'
|
8
|
+
require 'biblioDSL/bibliografia'
|
9
|
+
|
10
|
+
# Módulo por defecto creado por bundler
|
11
|
+
module BiblioDSL
|
12
|
+
# Your code goes here...
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative 'referencias/documentoElectronico'
|
3
|
+
require_relative 'referencias/periodico'
|
4
|
+
require_relative 'referencias/capitulo'
|
5
|
+
require_relative 'referencias/libro'
|
6
|
+
|
7
|
+
module DRA
|
8
|
+
# Esta clase representa una lista de referencias.
|
9
|
+
# @author Daniel Ramos Acossta <alu0100843095@ull.edu.es>
|
10
|
+
class Bibliografia
|
11
|
+
include Enumerable
|
12
|
+
# Constructor de la clase
|
13
|
+
def initialize
|
14
|
+
@lista = []
|
15
|
+
end
|
16
|
+
# Inserta una referencia en nuestra lista de forma ordenada
|
17
|
+
# @param [Referencia] referencia Es la referencia que se desea insertar. El ancestro en común debe ser referencia.
|
18
|
+
# @raise [ArgumentError] si el parámetro no es de tipo referencia
|
19
|
+
def insertar(referencia)
|
20
|
+
raise ArgumentError, "El tipo para insertar debe ser Referencia" unless referencia.kind_of?(Referencia)
|
21
|
+
@lista << referencia
|
22
|
+
@lista.sort!
|
23
|
+
end
|
24
|
+
# Método para que la clase sea enumerable.
|
25
|
+
# @yield [i] Cada elemento de la lista de referencias.
|
26
|
+
def each
|
27
|
+
@lista.each{ |i| yield i}
|
28
|
+
end
|
29
|
+
# Saca la bibliografía formateada
|
30
|
+
# @return la bibliografía como string
|
31
|
+
def to_s
|
32
|
+
str = ""
|
33
|
+
@lista.each { |i| str << "#{i.to_s}\n" } #Quitar las comillas de aqui
|
34
|
+
return str
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative 'referencia'
|
3
|
+
|
4
|
+
module DRA
|
5
|
+
# Esta es la clase que representa una referencia hacia un capítulo de un libro.
|
6
|
+
# @author Daniel Ramos Acossta <alu0100843095@ull.edu.es>
|
7
|
+
class Capitulo < Referencia
|
8
|
+
# Constructor de la clase
|
9
|
+
# @param [String] título de la obra
|
10
|
+
# @param [Proc] block bloque se evalúa como DSL si no se pasa implícitamente
|
11
|
+
# @raise [ArgumentError] cuando no se especifica el país
|
12
|
+
# @raise [ArgumentError] cuando no se especifica la editorial
|
13
|
+
# @raise [ArgumentError] cuando no se especifica la edición
|
14
|
+
# @raise [ArgumentError] cuando no se especifica el volumen
|
15
|
+
# @raise [ArgumentError] cuando no se especifica el capítulo
|
16
|
+
# @raise [ArgumentError] cuando no se especifica el número de páginas
|
17
|
+
# @raise [ArgumentError] cuando no se especifican los editores
|
18
|
+
def initialize(titulo, &block)
|
19
|
+
if block_given? #En esta parte revisamos si se le pasa un bloque
|
20
|
+
if block.arity == 1 #Si tiene un parámetro, entoces lazamos un yield de nosotros mismos
|
21
|
+
yield self
|
22
|
+
else
|
23
|
+
instance_eval &block #en otro caso, evaluamos el bloque de código que se nos pasa. NO USAMOS EVAL porque es peligroso
|
24
|
+
end
|
25
|
+
end
|
26
|
+
raise ArgumentError, "No se ha especificado el país" if @pais.nil?
|
27
|
+
raise ArgumentError, "No se ha especificado la editorial" if @editorial.nil?
|
28
|
+
raise ArgumentError, "No se ha especificado la edición" if @edicion.nil?
|
29
|
+
raise ArgumentError, "No se ha especificado el volumen" if @volumen.nil?
|
30
|
+
raise ArgumentError, "No se ha especificado el capítulo" if @capitulo.nil?
|
31
|
+
raise ArgumentError, "No se ha especificado el número de páginas" if @paginas.nil?
|
32
|
+
raise ArgumentError, "No se ha especificado los editores" if @editores.nil?
|
33
|
+
@editores = @editores[0...-3] unless @editores.nil?
|
34
|
+
super(titulo)
|
35
|
+
end
|
36
|
+
# Establece la editorial
|
37
|
+
# @param [String] editorial la editorial a establecer
|
38
|
+
# @raise [ArgumentError] si el tipo de la editorial es incorrecto
|
39
|
+
def editorial(editorial)
|
40
|
+
raise ArgumentError, "El tipo de la editorial es incorrecto" unless editorial.is_a?(String)
|
41
|
+
@editorial = editorial
|
42
|
+
end
|
43
|
+
# Establece la edición
|
44
|
+
# @param [Integer] edicion la edición a establecer
|
45
|
+
# @raise [ArgumentError] si el tipo de la edición es incorrecto
|
46
|
+
def edicion(edicion)
|
47
|
+
raise ArgumentError, "El tipo de la edición es incorrecto" unless edicion.is_a?(Integer)
|
48
|
+
@edicion = edicion
|
49
|
+
end
|
50
|
+
# Establece el volumen
|
51
|
+
# @param [Integer] volumen el volumen a establecer
|
52
|
+
# @raise [ArgumentError] si el tipo del volumen es incorrecto
|
53
|
+
def volumen(volumen)
|
54
|
+
raise ArgumentError, "El tipo del volumen es incorrecto" unless volumen.is_a?(Integer)
|
55
|
+
@volumen = volumen
|
56
|
+
end
|
57
|
+
# Establece el capítulo
|
58
|
+
# @param [String] capitulo el capítulo a establecer
|
59
|
+
# @raise [ArgumentError] si el tipo del capítulo es incorrecto
|
60
|
+
def capitulo(capitulo)
|
61
|
+
raise ArgumentError, "El tipo del capítulo es incorrecto" unless capitulo.is_a?(String)
|
62
|
+
@capitulo = capitulo
|
63
|
+
end
|
64
|
+
# Establece los editores
|
65
|
+
# @param [Hash] editores los editores a establecer
|
66
|
+
# @option editores [String] :nombre el nombre del autor
|
67
|
+
# @option editores [String] :apellido el primer apellido del autor
|
68
|
+
# @option editores [String] :apellido2 el segundo apellido del autor
|
69
|
+
def editores(editores)
|
70
|
+
#No hay que hacer raise de nada, ya que se encarga normalize_autores
|
71
|
+
@editores = "" if @editores.nil?
|
72
|
+
@editores << normalize_autores(editores[:nombre], editores[:apellido], editores[:apellido2])
|
73
|
+
end
|
74
|
+
# Establece el número de páginas
|
75
|
+
# @param [Integer] paginas el número de páginas a establecer
|
76
|
+
# @raise [ArgumentError] si el tipo del número de páginas es incorrecto
|
77
|
+
def paginas(paginas)
|
78
|
+
raise ArgumentError, "El tipo del número de páginas es incorrecto" unless paginas.is_a?(Integer)
|
79
|
+
@paginas = paginas
|
80
|
+
end
|
81
|
+
# Convierte la referencia en una cadena de carácteres bien formateada
|
82
|
+
def to_s
|
83
|
+
"#{@autores} (#{fecha_anio()}). #{@capitulo}. En #{@editores} (Eds.), #{@titulo} (#{@paginas.to_s}) (#{@edicion.to_s}) (#{@volumen.to_s}). #{@pais}: #{@editorial}."
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative 'referencia'
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
module DRA
|
6
|
+
# Esta clase representa una referencia hacia un documento electrónico
|
7
|
+
# @author Daniel Ramos Acossta <alu0100843095@ull.edu.es>
|
8
|
+
class DocumentoElectronico < Referencia
|
9
|
+
# @param [String] título de la obra
|
10
|
+
# @param [Proc] block bloque se evalúa como DSL si no se pasa implícitamente
|
11
|
+
# @raise [ArgumentError] cuando no se especifica la edición
|
12
|
+
# @raise [ArgumentError] cuando no se especifica el formato
|
13
|
+
# @raise [ArgumentError] cuando no se especifica el país
|
14
|
+
# @raise [ArgumentError] cuando no se especifica el editor
|
15
|
+
# @raise [ArgumentError] cuando no se especifica la disponibilidad
|
16
|
+
# @raise [ArgumentError] cuando no se especifica la última fecha de acceso
|
17
|
+
def initialize(titulo, &block)
|
18
|
+
if block_given? #En esta parte revisamos si se le pasa un bloque
|
19
|
+
if block.arity == 1 #Si tiene un parámetro, entoces lazamos un yield de nosotros mismos
|
20
|
+
yield self
|
21
|
+
else
|
22
|
+
instance_eval &block #en otro caso, evaluamos el bloque de código que se nos pasa. NO USAMOS EVAL porque es peligroso.
|
23
|
+
end
|
24
|
+
end
|
25
|
+
raise ArgumentError, "No se ha especificado la edición" if @edicion.nil?
|
26
|
+
raise ArgumentError, "No se ha especificado el formato" if @formato.nil?
|
27
|
+
raise ArgumentError, "No se ha especificado el país" if @pais.nil?
|
28
|
+
raise ArgumentError, "No se ha especificado el editor" if @editor.nil?
|
29
|
+
raise ArgumentError, "No se ha especificado la disponibilidad" if @disponible.nil?
|
30
|
+
raise ArgumentError, "No se ha especificado la última fecha de acceso" if @fecha_acc.nil?
|
31
|
+
super(titulo)
|
32
|
+
end
|
33
|
+
# Establece la edición
|
34
|
+
# @param [Integer] edicion la edición a establecer
|
35
|
+
# @raise [ArgumentError] si el tipo de la edición es incorrecto
|
36
|
+
def edicion(edicion)
|
37
|
+
raise ArgumentError, "El tipo de la edición es incorrecto" unless edicion.is_a?(Integer)
|
38
|
+
@edicion = edicion
|
39
|
+
end
|
40
|
+
# Establece el formato
|
41
|
+
# @param [String] formato el formato a establecer
|
42
|
+
# @raise [ArgumentError] si el tipo del formato es incorrecto
|
43
|
+
def formato(formato)
|
44
|
+
raise ArgumentError, "El tipo del formato es incorrecto" unless formato.is_a?(String)
|
45
|
+
@formato = formato
|
46
|
+
end
|
47
|
+
# Establece el editor
|
48
|
+
# @param [String] editor el editor a establecer
|
49
|
+
# @raise [ArgumentError] si el tipo del editor es incorrecto
|
50
|
+
def editor(editor)
|
51
|
+
raise ArgumentError, "El tipo del editor es incorrecto" unless editor.is_a?(String)
|
52
|
+
@editor = editor
|
53
|
+
end
|
54
|
+
# Establece la fuente de la referencia
|
55
|
+
# @param [String] disponible la url de la fuente
|
56
|
+
# @raise [ArgumentError] si el tipo de la fuente es incorrecto
|
57
|
+
def disponible(disponible)
|
58
|
+
raise ArgumentError, "El tipo de la disponibilidad es incorrecto" unless disponible.is_a?(String)
|
59
|
+
@disponible = disponible
|
60
|
+
end
|
61
|
+
# Establece la fecha de acceso de la referencia
|
62
|
+
# @param [Hash] fecha_acc la fecha de acceso a establecer
|
63
|
+
# @option fecha [Integer] :dia el día
|
64
|
+
# @option fecha [Integer] :mes el mes
|
65
|
+
# @option fecha [Integer] :anio el año
|
66
|
+
# @raise [ArgumentError] si el tipo de la fecha no es hash
|
67
|
+
# @raise [ArgumentError] si el tipo del día es incorrecto
|
68
|
+
# @raise [ArgumentError] si el tipo del mes es incorrecto
|
69
|
+
# @raise [ArgumentError] si el tipo del año es incorrecto
|
70
|
+
def fecha_acc(fecha_acc)
|
71
|
+
raise ArgumentError, "El tipo de la última fecha de acceso es incorrecto" unless fecha_acc.is_a?(Hash)
|
72
|
+
raise ArgumentError, "El día es de tipo incorrecto o no se especifica" unless fecha_acc[:dia].is_a?(Integer)
|
73
|
+
raise ArgumentError, "El mes es de tipo incorrecto o no se especifica" unless fecha_acc[:mes].is_a?(Integer)
|
74
|
+
raise ArgumentError, "El año es de tipo incorrecto o no se especifica" unless fecha_acc[:anio].is_a?(Integer)
|
75
|
+
@fecha_acc = Date.new(fecha_acc[:anio], fecha_acc[:mes], fecha_acc[:dia])
|
76
|
+
end
|
77
|
+
# Método para formatear esta referencia como se pide en el PDF
|
78
|
+
# @return [String] la referencia formateada
|
79
|
+
def to_s
|
80
|
+
"#{@autores} (#{fecha_completa}). #{@titulo} (#{@edicion.to_s}), #{@formato}. #{@pais}: #{@editor}. Disponible en: #{@disponible} (#{@fecha_acc.day.to_s}-#{@fecha_acc.mon.to_s}-#{@fecha_acc.year.to_s})."
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative 'referencia'
|
3
|
+
|
4
|
+
module DRA
|
5
|
+
# Clase que representa una referencia hacia un libro
|
6
|
+
# @author Daniel Ramos Acossta <alu0100843095@ull.edu.es>
|
7
|
+
class Libro < Referencia
|
8
|
+
# Constructor de la clase
|
9
|
+
# @param [String] título de la obra
|
10
|
+
# @param [Proc] block bloque se evalúa como DSL si no se pasa implícitamente
|
11
|
+
# @raise [ArgumentError] cuando no se especifica el país
|
12
|
+
# @raise [ArgumentError] cuando no se especifica la editorial
|
13
|
+
# @raise [ArgumentError] cuando no se especifica la edición
|
14
|
+
# @raise [ArgumentError] cuando no se especifica el volumen
|
15
|
+
def initialize(titulo, &block)
|
16
|
+
if block_given? #En esta parte revisamos si se le pasa un bloque
|
17
|
+
if block.arity == 1 #Si tiene un parámetro, entoces lazamos un yield de nosotros mismos
|
18
|
+
yield self
|
19
|
+
else
|
20
|
+
instance_eval &block #en otro caso, evaluamos el bloque de código que se nos pasa. NO USAMOS EVAL porque es peligroso.
|
21
|
+
end
|
22
|
+
end
|
23
|
+
raise ArgumentError, "No se ha especificado el país" if @pais.nil?
|
24
|
+
raise ArgumentError, "No se ha especificado la editorial" if @editorial.nil?
|
25
|
+
raise ArgumentError, "No se ha especificado la edición" if @edicion.nil?
|
26
|
+
raise ArgumentError, "No se ha especificado el volumen" if @volumen.nil?
|
27
|
+
super(titulo)
|
28
|
+
end
|
29
|
+
# Establece la editorial
|
30
|
+
# @param [String] editorial la editorial a establecer
|
31
|
+
# @raise [ArgumentError] si el tipo de la editorial es incorrecto
|
32
|
+
def editorial(editorial)
|
33
|
+
raise ArgumentError, "El tipo de la editorial es incorrecto" unless editorial.is_a?(String)
|
34
|
+
@editorial = editorial
|
35
|
+
end
|
36
|
+
# Establece la edición
|
37
|
+
# @param [Integer] edicion la edición a establecer
|
38
|
+
# @raise [ArgumentError] si el tipo de la edición es incorrecto
|
39
|
+
def edicion(edicion)
|
40
|
+
raise ArgumentError, "El tipo de la edición es incorrecto" unless edicion.is_a?(Integer)
|
41
|
+
@edicion = edicion
|
42
|
+
end
|
43
|
+
# Establece el volumen
|
44
|
+
# @param [Integer] volumen el volumen a establecer
|
45
|
+
# @raise [ArgumentError] si el tipo del volumen es incorrecto
|
46
|
+
def volumen(volumen)
|
47
|
+
raise ArgumentError, "El tipo del volumen es incorrecto" unless volumen.is_a?(Integer)
|
48
|
+
@volumen = volumen
|
49
|
+
end
|
50
|
+
# Método para formatear esta referencia como se pide en el PDF
|
51
|
+
# @return [String] la referencia formateada
|
52
|
+
def to_s
|
53
|
+
"#{@autores} (#{fecha_anio()}). #{@titulo} (#{@edicion.to_s}) (#{@volumen.to_s}). #{@pais}: #{@editorial}."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require_relative 'referencia'
|
3
|
+
|
4
|
+
module DRA
|
5
|
+
# Esta clase representa una referencia a un periódico
|
6
|
+
# @author Daniel Ramos Acossta <alu0100843095@ull.edu.es>
|
7
|
+
class Periodico < Referencia
|
8
|
+
# @param [String] título de la obra
|
9
|
+
# @param [Proc] block bloque se evalúa como DSL si no se pasa implícitamente
|
10
|
+
# @raise [ArgumentError] cuando no se especifica el periódico
|
11
|
+
# @raise [ArgumentError] cuando no se especifica el número de páginas
|
12
|
+
def initialize(titulo, &block)
|
13
|
+
if block_given? #En esta parte revisamos si se le pasa un bloque
|
14
|
+
if block.arity == 1 #Si tiene un parámetro, entoces lazamos un yield de nosotros mismos
|
15
|
+
yield self
|
16
|
+
else
|
17
|
+
instance_eval &block #en otro caso, evaluamos el bloque de código que se nos pasa. NO USAMOS EVAL porque es peligroso.
|
18
|
+
end
|
19
|
+
end
|
20
|
+
raise ArgumentError, "No se ha especificado el periódico" if @periodico.nil?
|
21
|
+
raise ArgumentError, "No se ha especificado el número de páginas" if @paginas.nil?
|
22
|
+
super(titulo)
|
23
|
+
end
|
24
|
+
# Establece el periódico
|
25
|
+
# @param [String] periodico el periódico a establecer
|
26
|
+
# @raise [ArgumentError] si el tipo del periódico es incorrecto
|
27
|
+
def periodico(periodico)
|
28
|
+
raise ArgumentError, "El tipo del periódico es incorrecto" unless periodico.is_a?(String)
|
29
|
+
@periodico = periodico
|
30
|
+
end
|
31
|
+
# Establece el número de páginas
|
32
|
+
# @param [String] paginas el número de páginas a establecer
|
33
|
+
# @raise [ArgumentError] si el tipo del número de páginas es incorrecto
|
34
|
+
def paginas(paginas)
|
35
|
+
raise ArgumentError, "El tipo del número de páginas es incorrecto" unless paginas.is_a?(Integer)
|
36
|
+
@paginas = paginas
|
37
|
+
end
|
38
|
+
# Método para formatear esta referencia como se pide en el PDF
|
39
|
+
# @return [String] la referencia formateada
|
40
|
+
def to_s
|
41
|
+
"#{@autores} (#{fecha_completa(@fecha)}). #{@titulo}. #{@periodico}, pp. #{@paginas.to_s}."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require "date"
|
3
|
+
|
4
|
+
# Abriendo la clase Date para traducir los nombres de los meses.
|
5
|
+
class Date
|
6
|
+
# Array que contiene los nombres de los meses. Es una simplificación bastante grande respecto del switch
|
7
|
+
NOMBREMES = ["DUMMY", "enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"]
|
8
|
+
end
|
9
|
+
|
10
|
+
module DRA
|
11
|
+
# Esta es la clase que representa una referencia bibliográfica. Tiene los atributos comunes a cualquier referencia bilbiográfica.
|
12
|
+
# @abstract Aunque se puede instanciar para realizar pruebas
|
13
|
+
# @author Daniel Ramos Acosta <alu0100843095@ull.edu.es>
|
14
|
+
class Referencia
|
15
|
+
include Comparable
|
16
|
+
# Este es el constructor de la clase
|
17
|
+
# @param titulo [String] Título de la obra
|
18
|
+
def initialize(titulo)
|
19
|
+
#Declaramos las variables de instancia que vamos a usar
|
20
|
+
@titulo = normalize_titulo(titulo)
|
21
|
+
@autores = @autores[0...-3] unless @autores.nil? #Eliminamos los 3 últimos carácteres para evitar el ' & '
|
22
|
+
end
|
23
|
+
# Inserta un nuevo autor
|
24
|
+
# @param [Hash] autor el autor que se quiere insertar
|
25
|
+
# @option autor [String] :nombre el nombre del autor
|
26
|
+
# @option autor [String] :apellido el primer apellido del autor
|
27
|
+
# @option autor [String] :apellido2 el segundo apellido del autor
|
28
|
+
def autores(autor)
|
29
|
+
@autores = "" if @autores.nil?
|
30
|
+
@autores << normalize_autores(autor[:nombre], autor[:apellido], autor[:apellido2])
|
31
|
+
end
|
32
|
+
# Establece la fecha de publicación
|
33
|
+
# @param [Hash] fecha la fecha que se quiere establecer
|
34
|
+
# @option fecha [Integer] :dia el día
|
35
|
+
# @option fecha [Integer] :mes el mes
|
36
|
+
# @option fecha [Integer] :anio el año
|
37
|
+
# @raise [ArgumentError] si el día no es de tipo entero
|
38
|
+
# @raise [ArgumentError] si el mes no es de tipo entero
|
39
|
+
# @raise [ArgumentError] si el año no es de tipo entero o no se especifica
|
40
|
+
def fecha(fecha)
|
41
|
+
# Todo: comprobar que nos viene como mínimo el año
|
42
|
+
raise ArgumentError, "No se ha especificado el año o es de tipo incorrecto" unless fecha[:anio].is_a?(Integer)
|
43
|
+
raise ArgumentError, "El mes es de tipo incorrecto" unless fecha[:mes].is_a?(Integer) or fecha[:mes].nil?
|
44
|
+
raise ArgumentError, "El día es de tipo incorrecto" unless fecha[:dia].is_a?(Integer) or fecha[:dia].nil?
|
45
|
+
unless fecha[:mes].nil? or fecha[:dia].nil?
|
46
|
+
@fecha = Date.new(fecha[:anio], fecha[:mes], fecha[:dia])
|
47
|
+
else
|
48
|
+
@fecha = Date.new(fecha[:anio])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
# Establece el nombre del país
|
52
|
+
# @param pais [String] el país nombre del país que se quiere establecer
|
53
|
+
# @raise [ArgumentError] si el país no es de tipo string
|
54
|
+
def pais(pais)
|
55
|
+
raise ArgumentError, "El país es de tipo incorrecto" unless pais.is_a?(String)
|
56
|
+
@pais = pais
|
57
|
+
end
|
58
|
+
# Devuelve el título
|
59
|
+
# @return [String] el título
|
60
|
+
def get_titulo
|
61
|
+
@titulo
|
62
|
+
end
|
63
|
+
# Devuelve los autores
|
64
|
+
# @return [String] el/los autores
|
65
|
+
def get_autores
|
66
|
+
@autores
|
67
|
+
end
|
68
|
+
# Devuelve el país
|
69
|
+
# @return [String|NilClass] el país, o nulo si no se ha establecido
|
70
|
+
def get_pais
|
71
|
+
@pais
|
72
|
+
end
|
73
|
+
# Devuelve la fecha
|
74
|
+
# @return [Date] la fecha
|
75
|
+
def get_fecha
|
76
|
+
@fecha
|
77
|
+
end
|
78
|
+
# Devuelve la fecha (día, mes y año) formateado en español, PE: 14 de enero de 2015
|
79
|
+
# @param fecha optional [Date] fecha que se quiere convertir
|
80
|
+
# @return [String] Fecha larga formateada
|
81
|
+
def fecha_completa(fecha=@fecha)
|
82
|
+
"#{fecha.day.to_s} de #{Date::NOMBREMES[fecha.mon]} de #{fecha.year.to_s}"
|
83
|
+
end
|
84
|
+
# Devuelve únicamente el año como string
|
85
|
+
# @param fecha optional [Date] fecha que se quiere convertir
|
86
|
+
# @return [String] Fecha con sólo el mes y el año
|
87
|
+
def fecha_anio(fecha=@fecha)
|
88
|
+
fecha.year.to_s
|
89
|
+
end
|
90
|
+
# Método para poder usar las funciones del módulo Enumerable. Se ordena según el PDF de la práctica 10.
|
91
|
+
# @param other El segundo miembro de la comparación
|
92
|
+
# @return [Integer] Devuelve -1, 0 o 1 dependiendo del orden que se ha implementado
|
93
|
+
def <=>(other)
|
94
|
+
if(@autores == other.get_autores)
|
95
|
+
if(@fecha == other.get_fecha)
|
96
|
+
if(@titulo == other.get_titulo)
|
97
|
+
return 0 #Son iguales
|
98
|
+
else
|
99
|
+
arr = [@titulo, other.get_titulo]
|
100
|
+
arr.sort_by!{|t| t.downcase}
|
101
|
+
if(arr.first == @titulo)
|
102
|
+
return 1
|
103
|
+
end
|
104
|
+
return -1
|
105
|
+
end
|
106
|
+
elsif get_fecha > other.get_fecha
|
107
|
+
return -1
|
108
|
+
else
|
109
|
+
return 1
|
110
|
+
end
|
111
|
+
else
|
112
|
+
arr = [@autores, other.get_autores]
|
113
|
+
arr.sort_by!{|t| t.downcase}
|
114
|
+
if(arr.first == @autores)
|
115
|
+
return -1
|
116
|
+
end
|
117
|
+
return 1
|
118
|
+
end
|
119
|
+
end
|
120
|
+
# Se le pasa un autor con su nombre y apellido/s, y lo devuelve formateado correctamente con un '&' a la derecha
|
121
|
+
# @param nombre el nombre del autor
|
122
|
+
# @param apellido1 el primer apellido del autor
|
123
|
+
# @param apellido2 el segundo apellido del autor
|
124
|
+
# @raise [ArgumentError] si no se especifica el primer apellido, o no es un String
|
125
|
+
# @raise [ArgumentError] si no se especifica el nombre, o no es un String
|
126
|
+
# @raise [ArgumentError] si el tipo del segundo apellido es incorrecto
|
127
|
+
# @return [String] el autor formateado
|
128
|
+
def normalize_autores(nombre, apellido1, apellido2=nil)
|
129
|
+
raise ArgumentError, "No se ha especificado el primer apellido o es de tipo incorrecto" unless apellido1.is_a?(String)
|
130
|
+
raise ArgumentError, "El tipo del segundo apellido es incorrecto" unless apellido2.is_a?(String) or apellido2.nil?
|
131
|
+
raise ArgumentError, "No se ha especificado el nombre o es de tipo incorrecto" unless nombre.is_a?(String)
|
132
|
+
str = "#{apellido1}, "
|
133
|
+
str << "#{apellido2[0]}. " unless apellido2.nil?
|
134
|
+
str << "#{nombre[0]}."
|
135
|
+
str << " & "
|
136
|
+
end
|
137
|
+
# Se le pasa un título, y se devuelve correctamente formateado
|
138
|
+
# @param titulo el título que se desea formatear
|
139
|
+
# @return [String] el título formateado
|
140
|
+
# @raise [ArgumentError] si el título no es un string
|
141
|
+
def normalize_titulo(titulo)
|
142
|
+
raise ArgumentError, "El titulo es de tipo incorrecto" unless titulo.is_a?(String)
|
143
|
+
titarr = titulo.split(' ')
|
144
|
+
titarr.each do |palabra|
|
145
|
+
if palabra.length > 3
|
146
|
+
palabra.capitalize!
|
147
|
+
else
|
148
|
+
palabra.downcase! unless palabra == titarr[0]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
return titarr.join(' ')
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
metadata
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: biblioDSL
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Ramos
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Tiene su propopio DSL así que es super mega fácil de usar
|
126
|
+
email:
|
127
|
+
- danielramosacosta@hotmail.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".coveralls.yml"
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rspec"
|
135
|
+
- ".travis.yml"
|
136
|
+
- Gemfile
|
137
|
+
- Guardfile
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- biblioDSL.gemspec
|
141
|
+
- bin/console
|
142
|
+
- bin/setup
|
143
|
+
- lib/biblioDSL.rb
|
144
|
+
- lib/biblioDSL/bibliografia.rb
|
145
|
+
- lib/biblioDSL/referencias/capitulo.rb
|
146
|
+
- lib/biblioDSL/referencias/documentoElectronico.rb
|
147
|
+
- lib/biblioDSL/referencias/libro.rb
|
148
|
+
- lib/biblioDSL/referencias/periodico.rb
|
149
|
+
- lib/biblioDSL/referencias/referencia.rb
|
150
|
+
- lib/biblioDSL/version.rb
|
151
|
+
homepage: https://github.com/DanielRamosAcosta/prct11
|
152
|
+
licenses: []
|
153
|
+
metadata:
|
154
|
+
allowed_push_host: https://rubygems.org
|
155
|
+
post_install_message:
|
156
|
+
rdoc_options: []
|
157
|
+
require_paths:
|
158
|
+
- lib
|
159
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
requirements: []
|
170
|
+
rubyforge_project:
|
171
|
+
rubygems_version: 2.4.8
|
172
|
+
signing_key:
|
173
|
+
specification_version: 4
|
174
|
+
summary: Esta es una gema para representar referencias en forma de una bilbiografía
|
175
|
+
test_files: []
|
176
|
+
has_rdoc:
|