kosher 0.14.2 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/kosher.gemspec +4 -4
- data/lib/kosher/condition.rb +18 -0
- data/lib/kosher/filter.rb +2 -3
- data/lib/kosher/offer.rb +8 -22
- data/lib/kosher/price.rb +2 -2
- data/lib/kosher/seller.rb +2 -2
- data/lib/kosher/shipping.rb +4 -1
- data/lib/kosher/unit.rb +1 -1
- data/lib/kosher/version.rb +1 -1
- data/lib/kosher.rb +12 -5
- data/test/kosher_test.rb +15 -31
- metadata +17 -19
- data/data/venues.yml +0 -28
- data/lib/kosher/detail.rb +0 -18
- data/lib/kosher/venue.rb +0 -34
data/README.md
CHANGED
data/kosher.gemspec
CHANGED
@@ -9,14 +9,14 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ['Hakan Ensari']
|
10
10
|
s.email = 'code@papercavalier.com'
|
11
11
|
s.homepage = 'https://github.com/hakanensari/kosher'
|
12
|
-
s.summary = %q{I filter
|
13
|
-
s.description = %q{I filter
|
12
|
+
s.summary = %q{I filter things.}
|
13
|
+
s.description = %q{I filter things.}
|
14
14
|
|
15
15
|
{
|
16
|
-
'activemodel' => '~> 3.
|
16
|
+
'activemodel' => '~> 3.1',
|
17
17
|
'certainty' => '~> 0.2',
|
18
18
|
'money' => '~> 3.7',
|
19
|
-
'structure' => '~> 0.
|
19
|
+
'structure' => '~> 0.20'
|
20
20
|
}.each do |lib, version|
|
21
21
|
s.add_runtime_dependency lib, version
|
22
22
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Kosher
|
2
|
+
class Condition < Structure
|
3
|
+
include Filter
|
4
|
+
|
5
|
+
key :grade, Integer
|
6
|
+
key :description, String, ''
|
7
|
+
|
8
|
+
validates_inclusion_of :grade, :in => 1..6
|
9
|
+
|
10
|
+
def new?
|
11
|
+
grade == 1
|
12
|
+
end
|
13
|
+
|
14
|
+
def used?
|
15
|
+
grade != 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/kosher/filter.rb
CHANGED
data/lib/kosher/offer.rb
CHANGED
@@ -1,24 +1,15 @@
|
|
1
|
-
require 'kosher/filter'
|
2
|
-
require 'kosher/price'
|
3
|
-
|
4
|
-
require 'kosher/detail'
|
5
|
-
require 'kosher/seller'
|
6
|
-
require 'kosher/shipping'
|
7
|
-
require 'kosher/unit'
|
8
|
-
require 'kosher/venue'
|
9
|
-
|
10
1
|
module Kosher
|
11
2
|
class Offer < Structure
|
12
3
|
include Comparable
|
13
4
|
|
14
|
-
key :id,
|
15
|
-
key :
|
16
|
-
key :seller,
|
5
|
+
key :id, String
|
6
|
+
key :condition, Condition
|
7
|
+
key :seller, Seller
|
17
8
|
key :shipping, Shipping
|
18
|
-
key :unit,
|
19
|
-
key :
|
9
|
+
key :unit, Unit
|
10
|
+
key :venue, String
|
20
11
|
|
21
|
-
validates_presence_of :
|
12
|
+
validates_presence_of :condition, :seller, :shipping, :unit, :venue
|
22
13
|
|
23
14
|
def <=>(other)
|
24
15
|
if kosher? != other.kosher?
|
@@ -29,17 +20,12 @@ module Kosher
|
|
29
20
|
end
|
30
21
|
|
31
22
|
def kosher?
|
32
|
-
|
33
|
-
|
34
|
-
[seller, shipping, detail].all?(&:kosher?)
|
23
|
+
validate!
|
24
|
+
[seller, shipping, condition].all?(&:kosher?)
|
35
25
|
end
|
36
26
|
|
37
27
|
def price
|
38
28
|
unit.price + shipping.price
|
39
29
|
end
|
40
|
-
|
41
|
-
def venue
|
42
|
-
Venue.find(venue_id)
|
43
|
-
end
|
44
30
|
end
|
45
31
|
end
|
data/lib/kosher/price.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Kosher
|
2
2
|
module Price
|
3
3
|
def self.included(base)
|
4
|
-
base.key :cents,
|
4
|
+
base.key :cents, Integer
|
5
5
|
base.key :currency, String
|
6
6
|
|
7
7
|
base.validates_presence_of :currency
|
@@ -9,7 +9,7 @@ module Kosher
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def price
|
12
|
-
|
12
|
+
validate!
|
13
13
|
|
14
14
|
Money.new(cents, currency)
|
15
15
|
end
|
data/lib/kosher/seller.rb
CHANGED
data/lib/kosher/shipping.rb
CHANGED
data/lib/kosher/unit.rb
CHANGED
data/lib/kosher/version.rb
CHANGED
data/lib/kosher.rb
CHANGED
@@ -6,14 +6,13 @@ require 'structure'
|
|
6
6
|
class Structure
|
7
7
|
class InvalidRecord < StandardError
|
8
8
|
def initialize(record)
|
9
|
-
|
10
|
-
super msg
|
9
|
+
super record.errors.full_messages.join(', ')
|
11
10
|
end
|
12
11
|
end
|
13
12
|
|
14
13
|
include ActiveModel::Conversion
|
15
14
|
include ActiveModel::Validations
|
16
|
-
extend
|
15
|
+
extend ActiveModel::Naming
|
17
16
|
|
18
17
|
def persisted?
|
19
18
|
false
|
@@ -21,9 +20,17 @@ class Structure
|
|
21
20
|
|
22
21
|
private
|
23
22
|
|
24
|
-
def
|
23
|
+
def validate!
|
25
24
|
raise InvalidRecord.new(self) if invalid?
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
29
|
-
|
28
|
+
module Kosher
|
29
|
+
autoload :Condition, 'kosher/condition'
|
30
|
+
autoload :Filter, 'kosher/filter'
|
31
|
+
autoload :Offer, 'kosher/offer'
|
32
|
+
autoload :Price, 'kosher/price'
|
33
|
+
autoload :Seller, 'kosher/seller'
|
34
|
+
autoload :Shipping, 'kosher/shipping'
|
35
|
+
autoload :Unit, 'kosher/unit'
|
36
|
+
end
|
data/test/kosher_test.rb
CHANGED
@@ -11,33 +11,24 @@ end
|
|
11
11
|
include Kosher
|
12
12
|
|
13
13
|
class TestKosher < MiniTest::Unit::TestCase
|
14
|
-
def
|
15
|
-
unit
|
16
|
-
|
17
|
-
assert_equal '10,00 €', unit.price.format
|
18
|
-
|
14
|
+
def test_money
|
15
|
+
unit = Unit.new( :cents => '1000',
|
16
|
+
:currency => 'EUR')
|
19
17
|
shipping = Shipping.new(:available => true,
|
20
18
|
:cents => '300',
|
21
19
|
:currency => 'EUR')
|
22
|
-
|
20
|
+
offer = Offer.new( :shipping => shipping,
|
21
|
+
:unit => unit)
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
assert_equal '10,00 €', unit.price.format
|
24
|
+
assert_equal '3,00 €', shipping.price.format
|
26
25
|
assert_equal '13,00 €', offer.price.format
|
27
26
|
end
|
28
27
|
|
29
|
-
def test_venues
|
30
|
-
assert_equal 'Amazon.com', Venue.find(1).name
|
31
|
-
assert_equal 'Amazon.co.uk', Venue.find(2).name
|
32
|
-
|
33
|
-
offer = Offer.new(:venue_id => 1)
|
34
|
-
assert_equal Venue.find(1), offer.venue
|
35
|
-
end
|
36
|
-
|
37
28
|
def test_validation
|
38
|
-
assert_raises(Structure::InvalidRecord) {
|
39
|
-
|
40
|
-
assert
|
29
|
+
assert_raises(Structure::InvalidRecord) { Condition.new.kosher? }
|
30
|
+
condition = Condition.new(:grade => 1)
|
31
|
+
assert condition.kosher?
|
41
32
|
|
42
33
|
assert_raises(Structure::InvalidRecord) { Shipping.new.kosher? }
|
43
34
|
shipping = Shipping.new(:available => true,
|
@@ -50,18 +41,11 @@ class TestKosher < MiniTest::Unit::TestCase
|
|
50
41
|
assert seller.kosher?
|
51
42
|
|
52
43
|
assert_raises(Structure::InvalidRecord) { Offer.new.kosher? }
|
53
|
-
offer = Offer.new(:
|
54
|
-
:shipping
|
55
|
-
:seller
|
56
|
-
:unit
|
57
|
-
:
|
44
|
+
offer = Offer.new(:condition => condition,
|
45
|
+
:shipping => shipping,
|
46
|
+
:seller => seller,
|
47
|
+
:unit => Unit.new,
|
48
|
+
:venue => 'Amazon.com')
|
58
49
|
assert offer.kosher?
|
59
50
|
end
|
60
|
-
|
61
|
-
def test_venues
|
62
|
-
assert_kind_of Venue, Venue.first
|
63
|
-
assert 'Amazon.com', Venue.find(1).name
|
64
|
-
assert_nil Venue.find(0)
|
65
|
-
assert_equal 8, Venue.amazon.size
|
66
|
-
end
|
67
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kosher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,22 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-09-
|
12
|
+
date: 2011-09-07 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &70296149797340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '3.
|
21
|
+
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70296149797340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: certainty
|
27
|
-
requirement: &
|
27
|
+
requirement: &70296149796480 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0.2'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70296149796480
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: money
|
38
|
-
requirement: &
|
38
|
+
requirement: &70296149795640 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,19 +43,19 @@ dependencies:
|
|
43
43
|
version: '3.7'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70296149795640
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: structure
|
49
|
-
requirement: &
|
49
|
+
requirement: &70296149794680 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
54
|
+
version: '0.20'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
description: I filter
|
57
|
+
version_requirements: *70296149794680
|
58
|
+
description: I filter things.
|
59
59
|
email: code@papercavalier.com
|
60
60
|
executables: []
|
61
61
|
extensions: []
|
@@ -67,17 +67,15 @@ files:
|
|
67
67
|
- LICENSE
|
68
68
|
- README.md
|
69
69
|
- Rakefile
|
70
|
-
- data/venues.yml
|
71
70
|
- kosher.gemspec
|
72
71
|
- lib/kosher.rb
|
73
|
-
- lib/kosher/
|
72
|
+
- lib/kosher/condition.rb
|
74
73
|
- lib/kosher/filter.rb
|
75
74
|
- lib/kosher/offer.rb
|
76
75
|
- lib/kosher/price.rb
|
77
76
|
- lib/kosher/seller.rb
|
78
77
|
- lib/kosher/shipping.rb
|
79
78
|
- lib/kosher/unit.rb
|
80
|
-
- lib/kosher/venue.rb
|
81
79
|
- lib/kosher/version.rb
|
82
80
|
- test/kosher_test.rb
|
83
81
|
homepage: https://github.com/hakanensari/kosher
|
@@ -94,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
92
|
version: '0'
|
95
93
|
segments:
|
96
94
|
- 0
|
97
|
-
hash:
|
95
|
+
hash: -3818355639004243263
|
98
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
97
|
none: false
|
100
98
|
requirements:
|
@@ -103,12 +101,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
101
|
version: '0'
|
104
102
|
segments:
|
105
103
|
- 0
|
106
|
-
hash:
|
104
|
+
hash: -3818355639004243263
|
107
105
|
requirements: []
|
108
106
|
rubyforge_project:
|
109
107
|
rubygems_version: 1.8.6
|
110
108
|
signing_key:
|
111
109
|
specification_version: 3
|
112
|
-
summary: I filter
|
110
|
+
summary: I filter things.
|
113
111
|
test_files:
|
114
112
|
- test/kosher_test.rb
|
data/data/venues.yml
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
---
|
2
|
-
- id: 1
|
3
|
-
name: Amazon.com
|
4
|
-
country: us
|
5
|
-
- id: 2
|
6
|
-
name: Amazon.co.uk
|
7
|
-
country: uk
|
8
|
-
- id: 3
|
9
|
-
name: Amazon.de
|
10
|
-
country: de
|
11
|
-
- id: 4
|
12
|
-
name: Amazon.ca
|
13
|
-
country: ca
|
14
|
-
- id: 5
|
15
|
-
name: Amazon.fr
|
16
|
-
country: fr
|
17
|
-
- id: 6
|
18
|
-
name: Amazon.co.jp
|
19
|
-
country: jp
|
20
|
-
- id: 7
|
21
|
-
name: Amazon.co.jp
|
22
|
-
country: jp
|
23
|
-
- id: 8
|
24
|
-
name: Amazon.cn
|
25
|
-
country: cn
|
26
|
-
- id: 9
|
27
|
-
name: Barnesandnoble.com
|
28
|
-
country: us
|
data/lib/kosher/detail.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Kosher
|
2
|
-
class Detail < Structure
|
3
|
-
include Filter
|
4
|
-
|
5
|
-
key :condition, Integer
|
6
|
-
key :description, String, :default => ''
|
7
|
-
|
8
|
-
validates_inclusion_of :condition, :in => 1..6
|
9
|
-
|
10
|
-
def new?
|
11
|
-
condition == 1
|
12
|
-
end
|
13
|
-
|
14
|
-
def used?
|
15
|
-
!new?
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/kosher/venue.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Kosher
|
4
|
-
class Venue < Structure
|
5
|
-
DATA_PATH = File.expand_path("../../../data/venues.yml", __FILE__)
|
6
|
-
|
7
|
-
key :_id, Integer
|
8
|
-
key :country, String
|
9
|
-
key :name, String
|
10
|
-
|
11
|
-
class << self
|
12
|
-
include Enumerable
|
13
|
-
|
14
|
-
def all
|
15
|
-
@all ||= YAML.load_file(DATA_PATH).map do |hsh|
|
16
|
-
hsh['_id'] ||= hsh.delete('id')
|
17
|
-
new(hsh)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def amazon
|
22
|
-
@amazons ||= find_all { |e| e.name.include? 'Amazon' }
|
23
|
-
end
|
24
|
-
|
25
|
-
def each(&block)
|
26
|
-
all.each { |item| block.call(item) }
|
27
|
-
end
|
28
|
-
|
29
|
-
def find(id)
|
30
|
-
super() { |item| item._id == id }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|