sorting_service_books 0.1.0 → 0.2.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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +14 -10
- data/VERSION +1 -1
- data/bin/test.rb +24 -0
- data/config_one_condition.yml +22 -0
- data/config_three_conditions.yml +28 -0
- data/config_two_conditions.yml +26 -0
- data/config_without_condition.yml +1 -0
- data/lib/sorting_service_books/book.rb +12 -0
- data/lib/sorting_service_books/client.rb +17 -0
- data/lib/sorting_service_books/load_config.rb +33 -0
- data/lib/sorting_service_books/order.rb +11 -0
- data/lib/sorting_service_books/ordering_exception.rb +5 -0
- data/lib/sorting_service_books/sort_books.rb +36 -0
- data/lib/sorting_service_books/version.rb +6 -0
- data/lib/sorting_service_books.rb +11 -0
- data/sorting_service_books.gemspec +81 -0
- data/spec/book_spec.rb +16 -0
- data/spec/client_spec.rb +47 -0
- data/spec/load_config_spec.rb +82 -0
- data/spec/order_spec.rb +15 -0
- data/spec/sort_books_spec.rb +92 -0
- data/spec/sorting_service_books_spec.rb +9 -3
- data/spec/spec_helper.rb +3 -1
- metadata +25 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50cf00ef383a5e93cdc68f83d4651cb91a542cd2
|
4
|
+
data.tar.gz: 5336d33c190b31202768a7875e6263f7de1c9a39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19896eae6c581a736949a3a2caada789e3ea3cc031869cb0cad1c6282f8e97dc91c9c454fe957571ad460af1a0ee18ac2ad8d46a7a46cd127be38920bb9be7f5
|
7
|
+
data.tar.gz: 4c3c1eddabca86e2a72dc8809069259cc1225e2622cfe426106e0208c85e23475afd19eb10dffef349146e5ef34c852b42640cd9f1cf77dddeb4f109e2b0cac5
|
data/Gemfile
CHANGED
@@ -6,7 +6,7 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
-
gem "rspec"
|
9
|
+
gem "rspec"
|
10
10
|
gem "rdoc", "~> 3.12"
|
11
11
|
gem "bundler", "~> 1.0"
|
12
12
|
gem "jeweler", "~> 2.0.1"
|
data/Gemfile.lock
CHANGED
@@ -5,7 +5,7 @@ GEM
|
|
5
5
|
builder (3.2.2)
|
6
6
|
descendants_tracker (0.0.4)
|
7
7
|
thread_safe (~> 0.3, >= 0.3.1)
|
8
|
-
diff-lcs (1.
|
8
|
+
diff-lcs (1.2.5)
|
9
9
|
docile (1.1.3)
|
10
10
|
faraday (0.9.0)
|
11
11
|
multipart-post (>= 1.2, < 3)
|
@@ -47,14 +47,18 @@ GEM
|
|
47
47
|
rake (10.3.2)
|
48
48
|
rdoc (3.12.2)
|
49
49
|
json (~> 1.4)
|
50
|
-
rspec (
|
51
|
-
rspec-core (~>
|
52
|
-
rspec-expectations (~>
|
53
|
-
rspec-mocks (~>
|
54
|
-
rspec-core (
|
55
|
-
|
56
|
-
|
57
|
-
|
50
|
+
rspec (3.0.0)
|
51
|
+
rspec-core (~> 3.0.0)
|
52
|
+
rspec-expectations (~> 3.0.0)
|
53
|
+
rspec-mocks (~> 3.0.0)
|
54
|
+
rspec-core (3.0.0)
|
55
|
+
rspec-support (~> 3.0.0)
|
56
|
+
rspec-expectations (3.0.0)
|
57
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
58
|
+
rspec-support (~> 3.0.0)
|
59
|
+
rspec-mocks (3.0.0)
|
60
|
+
rspec-support (~> 3.0.0)
|
61
|
+
rspec-support (3.0.0)
|
58
62
|
simplecov (0.8.2)
|
59
63
|
docile (~> 1.1.0)
|
60
64
|
multi_json
|
@@ -69,5 +73,5 @@ DEPENDENCIES
|
|
69
73
|
bundler (~> 1.0)
|
70
74
|
jeweler (~> 2.0.1)
|
71
75
|
rdoc (~> 3.12)
|
72
|
-
rspec
|
76
|
+
rspec
|
73
77
|
simplecov
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/test.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require "sorting_service_books"
|
5
|
+
|
6
|
+
|
7
|
+
client = Client.new("../config_one_condition.yml")
|
8
|
+
puts "*"*50
|
9
|
+
puts client.books
|
10
|
+
puts client.sort
|
11
|
+
puts "*"*50
|
12
|
+
|
13
|
+
client = Client.new("../config_two_conditions.yml")
|
14
|
+
puts "*"*50
|
15
|
+
puts client.books
|
16
|
+
puts client.sort
|
17
|
+
puts "*"*50
|
18
|
+
|
19
|
+
client = Client.new("../config_three_conditions.yml")
|
20
|
+
puts "*"*50
|
21
|
+
puts client.books
|
22
|
+
puts client.sort
|
23
|
+
puts "*"*50
|
24
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
conditions:
|
2
|
+
-
|
3
|
+
key: !ruby/symbol title
|
4
|
+
value: !ruby/symbol asc
|
5
|
+
|
6
|
+
books:
|
7
|
+
-
|
8
|
+
title: 'Java How to Program'
|
9
|
+
author: 'Deitel & Deitel'
|
10
|
+
edition: '2007'
|
11
|
+
-
|
12
|
+
title: 'Patterns of Enterprise Application Architecture'
|
13
|
+
author: 'Martin Fowler'
|
14
|
+
edition: '2002'
|
15
|
+
-
|
16
|
+
title: 'Head First Design Patterns'
|
17
|
+
author: 'Elisabeth Freeman'
|
18
|
+
edition: '2004'
|
19
|
+
-
|
20
|
+
title: 'Internet & World Wide Web: How to Program'
|
21
|
+
author: 'Deitel & Deitel'
|
22
|
+
edition: '2007'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
conditions:
|
2
|
+
-
|
3
|
+
key: !ruby/symbol edition
|
4
|
+
value: !ruby/symbol desc
|
5
|
+
-
|
6
|
+
key: !ruby/symbol author
|
7
|
+
value: !ruby/symbol desc
|
8
|
+
-
|
9
|
+
key: !ruby/symbol title
|
10
|
+
value: !ruby/symbol asc
|
11
|
+
|
12
|
+
books:
|
13
|
+
-
|
14
|
+
title: 'Java How to Program'
|
15
|
+
author: 'Deitel & Deitel'
|
16
|
+
edition: '2007'
|
17
|
+
-
|
18
|
+
title: 'Patterns of Enterprise Application Architecture'
|
19
|
+
author: 'Martin Fowler'
|
20
|
+
edition: '2002'
|
21
|
+
-
|
22
|
+
title: 'Head First Design Patterns'
|
23
|
+
author: 'Elisabeth Freeman'
|
24
|
+
edition: '2004'
|
25
|
+
-
|
26
|
+
title: 'Internet & World Wide Web: How to Program'
|
27
|
+
author: 'Deitel & Deitel'
|
28
|
+
edition: '2007'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
conditions:
|
2
|
+
-
|
3
|
+
key: !ruby/symbol author
|
4
|
+
value: !ruby/symbol asc
|
5
|
+
|
6
|
+
-
|
7
|
+
key: !ruby/symbol title
|
8
|
+
value: !ruby/symbol desc
|
9
|
+
|
10
|
+
books:
|
11
|
+
-
|
12
|
+
title: 'Java How to Program'
|
13
|
+
author: 'Deitel & Deitel'
|
14
|
+
edition: '2007'
|
15
|
+
-
|
16
|
+
title: 'Patterns of Enterprise Application Architecture'
|
17
|
+
author: 'Martin Fowler'
|
18
|
+
edition: '2002'
|
19
|
+
-
|
20
|
+
title: 'Head First Design Patterns'
|
21
|
+
author: 'Elisabeth Freeman'
|
22
|
+
edition: '2004'
|
23
|
+
-
|
24
|
+
title: 'Internet & World Wide Web: How to Program'
|
25
|
+
author: 'Deitel & Deitel'
|
26
|
+
edition: '2007'
|
@@ -0,0 +1 @@
|
|
1
|
+
conditions:
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SortingServiceBooks
|
2
|
+
class Client
|
3
|
+
attr_accessor :books
|
4
|
+
|
5
|
+
def initialize(file)
|
6
|
+
@config = LoadConfig.new(file)
|
7
|
+
@books = @config.books
|
8
|
+
@conditions = @config.orders
|
9
|
+
@sort_books = SortBooks.new(@books, @conditions)
|
10
|
+
end
|
11
|
+
|
12
|
+
def sort
|
13
|
+
@sort_books.sort
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "yaml"
|
2
|
+
module SortingServiceBooks
|
3
|
+
class LoadConfig
|
4
|
+
attr_accessor :file_config, :orders, :books
|
5
|
+
|
6
|
+
def initialize(file_config)
|
7
|
+
@file_config = file_config
|
8
|
+
@orders = get_conditions || []
|
9
|
+
@books = get_books || []
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def get_conditions
|
14
|
+
orders = []
|
15
|
+
config = YAML::load_file @file_config
|
16
|
+
config["conditions"].each do |condition|
|
17
|
+
order = Order.new(condition["key"].to_sym, condition["value"].to_sym)
|
18
|
+
orders << order if order != nil
|
19
|
+
end if config["conditions"]
|
20
|
+
orders
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_books
|
24
|
+
books = []
|
25
|
+
config = YAML::load_file @file_config
|
26
|
+
config["books"].each do |b|
|
27
|
+
book = Book.new(b["title"], b["author"], b["edition"])
|
28
|
+
books << book if book != nil
|
29
|
+
end if config["books"]
|
30
|
+
books
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
module SortingServiceBooks
|
3
|
+
|
4
|
+
class SortBooks
|
5
|
+
|
6
|
+
attr_accessor :books, :conditions
|
7
|
+
|
8
|
+
def initialize(books, conditions)
|
9
|
+
@books = books
|
10
|
+
@conditions = conditions
|
11
|
+
end
|
12
|
+
|
13
|
+
def sort
|
14
|
+
raise OrderingException if @conditions.nil?
|
15
|
+
|
16
|
+
collection = @books.sort do |a, b|
|
17
|
+
methods_call_first = []
|
18
|
+
methods_call_second = []
|
19
|
+
@conditions.each do |order|
|
20
|
+
if order.value == :asc
|
21
|
+
methods_call_first << a.send(order.key)
|
22
|
+
methods_call_second << b.send(order.key)
|
23
|
+
else
|
24
|
+
methods_call_second << a.send(order.key)
|
25
|
+
methods_call_first << b.send(order.key)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
methods_call_first <=> methods_call_second
|
30
|
+
end
|
31
|
+
|
32
|
+
collection
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "sorting_service_books/sort_books"
|
2
|
+
require "sorting_service_books/version"
|
3
|
+
require "sorting_service_books/order"
|
4
|
+
require "sorting_service_books/book"
|
5
|
+
require "sorting_service_books/ordering_exception"
|
6
|
+
require "sorting_service_books/load_config"
|
7
|
+
require "sorting_service_books/client"
|
8
|
+
|
9
|
+
module SortingServiceBooks
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,81 @@
|
|
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 = "sorting_service_books"
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Douglas Petronilio"]
|
12
|
+
s.date = "2014-06-02"
|
13
|
+
s.description = "Gem to sorting a collection of the books by any atributes."
|
14
|
+
s.email = "dougpetronilio@gmail.com"
|
15
|
+
s.executables = ["test.rb"]
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE.txt",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
".rspec",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"LICENSE.txt",
|
26
|
+
"README.rdoc",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"bin/test.rb",
|
30
|
+
"config_one_condition.yml",
|
31
|
+
"config_three_conditions.yml",
|
32
|
+
"config_two_conditions.yml",
|
33
|
+
"config_without_condition.yml",
|
34
|
+
"lib/sorting_service_books.rb",
|
35
|
+
"lib/sorting_service_books/book.rb",
|
36
|
+
"lib/sorting_service_books/client.rb",
|
37
|
+
"lib/sorting_service_books/load_config.rb",
|
38
|
+
"lib/sorting_service_books/order.rb",
|
39
|
+
"lib/sorting_service_books/ordering_exception.rb",
|
40
|
+
"lib/sorting_service_books/sort_books.rb",
|
41
|
+
"lib/sorting_service_books/version.rb",
|
42
|
+
"sorting_service_books.gemspec",
|
43
|
+
"spec/book_spec.rb",
|
44
|
+
"spec/client_spec.rb",
|
45
|
+
"spec/load_config_spec.rb",
|
46
|
+
"spec/order_spec.rb",
|
47
|
+
"spec/sort_books_spec.rb",
|
48
|
+
"spec/sorting_service_books_spec.rb",
|
49
|
+
"spec/spec_helper.rb"
|
50
|
+
]
|
51
|
+
s.homepage = "http://github.com/dougpetronilio/sorting_service_books"
|
52
|
+
s.licenses = ["MIT"]
|
53
|
+
s.require_paths = ["lib"]
|
54
|
+
s.rubygems_version = "2.0.3"
|
55
|
+
s.summary = "Gem to sorting a collection of the books."
|
56
|
+
|
57
|
+
if s.respond_to? :specification_version then
|
58
|
+
s.specification_version = 4
|
59
|
+
|
60
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
61
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
62
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
63
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
64
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
|
65
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
66
|
+
else
|
67
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
68
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
69
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
70
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
71
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
72
|
+
end
|
73
|
+
else
|
74
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
75
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
76
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
77
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
78
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
data/spec/book_spec.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
module SortingServiceBooks
|
4
|
+
|
5
|
+
describe "Book" do
|
6
|
+
describe "#new" do
|
7
|
+
it "create the book with params" do
|
8
|
+
book = Book.new("java", "deitel", "2007")
|
9
|
+
|
10
|
+
expect(book.title).to eq "java"
|
11
|
+
expect(book.author).to eq "deitel"
|
12
|
+
expect(book.edition).to eq "2007"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
module SortingServiceBooks
|
4
|
+
|
5
|
+
describe "Client" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@book1 = Book.new("Java How to Program", "Deitel & Deitel", "2007")
|
9
|
+
@book2 = Book.new("Patterns of Enterprise Application Architecture", "Martin Fowler", "2002")
|
10
|
+
@book3 = Book.new("Head First Design Patterns", "Elisabeth Freeman", "2004")
|
11
|
+
@book4 = Book.new("Internet & World Wide Web: How to Program", "Deitel & Deitel", "2007")
|
12
|
+
end
|
13
|
+
|
14
|
+
context "Client start with path to file correct" do
|
15
|
+
it "return list books and sort books to one condition" do
|
16
|
+
file = "config_one_condition.yml"
|
17
|
+
client = Client.new(file)
|
18
|
+
|
19
|
+
expect(client.books[0].title).to eq(@book1.title)
|
20
|
+
expect(client.sort[0].title).to eq(@book3.title)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "return list books and sort books to two conditions" do
|
24
|
+
file = "config_two_conditions.yml"
|
25
|
+
client = Client.new(file)
|
26
|
+
|
27
|
+
expect(client.books[0].title).to eq(@book1.title)
|
28
|
+
expect(client.sort[0].title).to eq(@book1.title)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "return list books and sort books to two conditions" do
|
32
|
+
file = "config_three_conditions.yml"
|
33
|
+
client = Client.new(file)
|
34
|
+
|
35
|
+
expect(client.books[0].title).to eq(@book1.title)
|
36
|
+
expect(client.sort[0].title).to eq(@book4.title)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "return empty to books and conditions empty" do
|
40
|
+
file = "config_without_condition.yml"
|
41
|
+
|
42
|
+
client = Client.new(file)
|
43
|
+
expect(client.sort).to eq([])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
module SortingServiceBooks
|
4
|
+
describe "LoadConfig" do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@book1 = Book.new("Java How to Program", "Deitel & Deitel", "2007")
|
8
|
+
@book2 = Book.new("Patterns of Enterprise Application Architecture", "Martin Fowler", "2002")
|
9
|
+
@book3 = Book.new("Head First Design Patterns", "Elisabeth Freeman", "2004")
|
10
|
+
@book4 = Book.new("Internet & World Wide Web: How to Program", "Deitel & Deitel", "2007")
|
11
|
+
end
|
12
|
+
|
13
|
+
context "load config with one condition" do
|
14
|
+
it "return configurations to one condition" do
|
15
|
+
file = "config_one_condition.yml"
|
16
|
+
order = Order.new(:title, :asc)
|
17
|
+
config = LoadConfig.new(file)
|
18
|
+
|
19
|
+
expect(config.file_config).to eq(file)
|
20
|
+
expect(config.orders[0].key).to eq(order.key)
|
21
|
+
expect(config.orders[0].value).to eq(order.value)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "load config with two conditions" do
|
26
|
+
it "return configurations to two conditions" do
|
27
|
+
file = "config_two_conditions.yml"
|
28
|
+
order1 = Order.new(:author, :asc)
|
29
|
+
order2 = Order.new(:title, :desc)
|
30
|
+
config = LoadConfig.new(file)
|
31
|
+
|
32
|
+
expect(config.orders[0].key).to eq(order1.key)
|
33
|
+
expect(config.orders[0].value).to eq(order1.value)
|
34
|
+
|
35
|
+
expect(config.orders[1].key).to eq(order2.key)
|
36
|
+
expect(config.orders[1].value).to eq(order2.value)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "load config with three conditions" do
|
41
|
+
it "return configurations to three conditions" do
|
42
|
+
file = "config_three_conditions.yml"
|
43
|
+
order1 = Order.new(:edition, :desc)
|
44
|
+
order2 = Order.new(:author, :desc)
|
45
|
+
order3 = Order.new(:title, :asc)
|
46
|
+
config = LoadConfig.new(file)
|
47
|
+
|
48
|
+
expect(config.orders[0].key).to eq(order1.key)
|
49
|
+
expect(config.orders[0].value).to eq(order1.value)
|
50
|
+
|
51
|
+
expect(config.orders[1].key).to eq(order2.key)
|
52
|
+
expect(config.orders[1].value).to eq(order2.value)
|
53
|
+
|
54
|
+
expect(config.orders[2].key).to eq(order3.key)
|
55
|
+
expect(config.orders[2].value).to eq(order3.value)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "loag config without conditions" do
|
60
|
+
it "return a message to configuration conditions" do
|
61
|
+
file = "config_without_condition.yml"
|
62
|
+
config = LoadConfig.new(file)
|
63
|
+
|
64
|
+
expect(config.orders.length).to eq(0)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "load config books" do
|
69
|
+
it "return list of books" do
|
70
|
+
file = "config_two_conditions.yml"
|
71
|
+
|
72
|
+
config = LoadConfig.new(file)
|
73
|
+
|
74
|
+
expect(config.books.length).to eq(4)
|
75
|
+
expect(config.books[0].title).to eq(@book1.title)
|
76
|
+
expect(config.books[1].title).to eq(@book2.title)
|
77
|
+
expect(config.books[2].title).to eq(@book3.title)
|
78
|
+
expect(config.books[3].title).to eq(@book4.title)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/spec/order_spec.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
module SortingServiceBooks
|
4
|
+
|
5
|
+
describe "Order" do
|
6
|
+
describe "#new" do
|
7
|
+
it "create the order with params" do
|
8
|
+
order = Order.new(:title, :asc)
|
9
|
+
|
10
|
+
expect(order.key).to eq :title
|
11
|
+
expect(order.value).to eq :asc
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
module SortingServiceBooks
|
4
|
+
|
5
|
+
describe "SortBooks" do
|
6
|
+
let(:java) { double("java", :id => 1, :title => "Java How to Program", :author => "Deitel & Deitel", :edition => "2007").as_null_object }
|
7
|
+
let(:patterns) { double("patterns", :id => 2, :title => "Patterns of Enterprise Application Architecture", :author => "Martin Fowler", :edition => "2002").as_null_object }
|
8
|
+
let(:head) { double("head", :id => 3, :title => "Head First Design Patterns", :author => "Elisabeth Freeman", :edition => "2004").as_null_object }
|
9
|
+
let(:internet) { double("internet", :id => 4, :title => "Internet & World Wide Web: How to Program", :author => "Deitel & Deitel", :edition => "2007").as_null_object }
|
10
|
+
|
11
|
+
let(:title_asc) { double("title_asc", :key => :title, :value => :asc).as_null_object}
|
12
|
+
let(:title_desc) { double("title_desc", :key => :title, :value => :desc).as_null_object}
|
13
|
+
let(:author_asc) { double("author_asc", :key => :author, :value => :asc).as_null_object}
|
14
|
+
let(:author_desc) { double("author_desc", :key => :author, :value => :desc).as_null_object}
|
15
|
+
let(:edition_asc) { double("edition_asc", :key => :edition, :value => :asc).as_null_object}
|
16
|
+
let(:edition_desc) { double("edition_desc", :key => :edition, :value => :desc).as_null_object}
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
@books = []
|
20
|
+
@books << java << patterns << head << internet
|
21
|
+
|
22
|
+
@conditions = []
|
23
|
+
end
|
24
|
+
|
25
|
+
after(:each) do
|
26
|
+
@books = []
|
27
|
+
@conditions = []
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#new" do
|
31
|
+
it "should params to SortBooks is correct" do
|
32
|
+
@conditions << title_asc
|
33
|
+
@conditions << author_asc
|
34
|
+
sort_books = SortBooks.new(@books, @conditions)
|
35
|
+
|
36
|
+
expect(sort_books.books).to match_array([java, patterns, head, internet])
|
37
|
+
expect(sort_books.conditions).to match_array([title_asc, author_asc])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#sort" do
|
42
|
+
context "when title asc" do
|
43
|
+
it "return in order head, internet, java and patterns" do
|
44
|
+
@conditions << title_asc
|
45
|
+
sort_books = SortBooks.new(@books, @conditions)
|
46
|
+
|
47
|
+
expect(sort_books.sort).to eql([head, internet, java, patterns])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "when author asc and title desc" do
|
52
|
+
it "return in order java, internet, head, patterns" do
|
53
|
+
@conditions << author_asc
|
54
|
+
@conditions << title_desc
|
55
|
+
sort_books = SortBooks.new(@books, @conditions)
|
56
|
+
|
57
|
+
expect(sort_books.sort).to eql([java, internet, head, patterns])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when edition desc, author desc, title asc" do
|
62
|
+
it "return in order internet, java, head, patterns" do
|
63
|
+
@conditions << edition_desc
|
64
|
+
@conditions << author_desc
|
65
|
+
@conditions << title_asc
|
66
|
+
sort_books = SortBooks.new(@books, @conditions)
|
67
|
+
|
68
|
+
expect(sort_books.sort).to eql([internet, java, head, patterns])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when conditions is nil" do
|
73
|
+
it "return OrderingException if conditions is nil" do
|
74
|
+
@conditions = nil
|
75
|
+
sort_books = SortBooks.new(@books, @conditions)
|
76
|
+
expect { sort_books.sort }.to raise_error OrderingException
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when conditions or books is empty" do
|
81
|
+
it "return empty array" do
|
82
|
+
@conditions = []
|
83
|
+
@books = []
|
84
|
+
sort_books = SortBooks.new(@books, @conditions)
|
85
|
+
expect(sort_books.sort).to eq([])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -1,7 +1,13 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
module SortingServiceBooks
|
4
|
+
|
5
|
+
describe "SortingServiceBooks" do
|
6
|
+
|
7
|
+
it "should have a version" do
|
8
|
+
expect(SortingServiceBooks.const_defined?('VERSION')).to eq(true)
|
9
|
+
end
|
10
|
+
|
6
11
|
end
|
12
|
+
|
7
13
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sorting_service_books
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Douglas Petronilio
|
@@ -14,16 +14,16 @@ dependencies:
|
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +82,8 @@ dependencies:
|
|
82
82
|
version: '0'
|
83
83
|
description: Gem to sorting a collection of the books by any atributes.
|
84
84
|
email: dougpetronilio@gmail.com
|
85
|
-
executables:
|
85
|
+
executables:
|
86
|
+
- test.rb
|
86
87
|
extensions: []
|
87
88
|
extra_rdoc_files:
|
88
89
|
- LICENSE.txt
|
@@ -96,7 +97,25 @@ files:
|
|
96
97
|
- README.rdoc
|
97
98
|
- Rakefile
|
98
99
|
- VERSION
|
100
|
+
- bin/test.rb
|
101
|
+
- config_one_condition.yml
|
102
|
+
- config_three_conditions.yml
|
103
|
+
- config_two_conditions.yml
|
104
|
+
- config_without_condition.yml
|
99
105
|
- lib/sorting_service_books.rb
|
106
|
+
- lib/sorting_service_books/book.rb
|
107
|
+
- lib/sorting_service_books/client.rb
|
108
|
+
- lib/sorting_service_books/load_config.rb
|
109
|
+
- lib/sorting_service_books/order.rb
|
110
|
+
- lib/sorting_service_books/ordering_exception.rb
|
111
|
+
- lib/sorting_service_books/sort_books.rb
|
112
|
+
- lib/sorting_service_books/version.rb
|
113
|
+
- sorting_service_books.gemspec
|
114
|
+
- spec/book_spec.rb
|
115
|
+
- spec/client_spec.rb
|
116
|
+
- spec/load_config_spec.rb
|
117
|
+
- spec/order_spec.rb
|
118
|
+
- spec/sort_books_spec.rb
|
100
119
|
- spec/sorting_service_books_spec.rb
|
101
120
|
- spec/spec_helper.rb
|
102
121
|
homepage: http://github.com/dougpetronilio/sorting_service_books
|