kosher 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
4
4
  gem 'rake'
5
+
6
+ unless ENV['CI']
7
+ gem 'ruby-debug19', :platforms => :mri_19
8
+ end
data/README.md CHANGED
@@ -1,5 +1,3 @@
1
1
  # Kosher
2
2
 
3
3
  [![travis](https://secure.travis-ci.org/hakanensari/kosher.png)](http://travis-ci.org/hakanensari/kosher)
4
-
5
- Online trading, abstracted.
data/kosher.gemspec CHANGED
@@ -9,13 +9,15 @@ 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{Online trade, abstracted}
13
- s.description = %q{Online trade, abstracted}
12
+ s.summary = %q{Online selling, abstracted}
13
+ s.description = %q{Online selling, abstracted}
14
14
 
15
15
  {
16
- 'activemodel' => '~> 3.0',
17
- 'money' => '~> 3.7',
18
- 'structure' => '~> 0.15'
16
+ 'activesupport' => '~> 3.0',
17
+ 'activemodel' => '~> 3.0',
18
+ 'certainty' => '~> 0.2',
19
+ 'money' => '~> 3.7',
20
+ 'structure' => '~> 0.18'
19
21
  }.each do |lib, version|
20
22
  s.add_runtime_dependency lib, version
21
23
  end
@@ -0,0 +1,19 @@
1
+ module Kosher
2
+ module Base
3
+ extend ActiveSupport::Concern
4
+ include ActiveModel::Validations
5
+
6
+ included do
7
+ key :foo
8
+ key :kosher, Boolean, :default => true
9
+ end
10
+
11
+ def kosher?
12
+ unless valid?
13
+ raise StandardError.new(errors.full_messages.join(', '))
14
+ end
15
+
16
+ kosher
17
+ end
18
+ end
19
+ end
data/lib/kosher/offer.rb CHANGED
@@ -1,31 +1,35 @@
1
+ require 'kosher/base'
2
+ require 'kosher/price'
3
+
4
+ require 'kosher/seller'
5
+ require 'kosher/shipping'
6
+ require 'kosher/unit'
7
+ require 'kosher/venue'
8
+
1
9
  module Kosher
2
10
  class Offer < Structure
3
- include ActiveModel::Validations
4
11
  include Comparable
5
12
 
6
13
  key :id
7
- one :seller
8
- one :shipping
9
- one :unit
14
+ key :seller
15
+ key :shipping
16
+ key :unit
10
17
  key :venue_id, Integer
11
18
 
12
- validates_presence_of :seller, :shipping, :unit, :venue
13
-
14
19
  def <=>(other)
15
20
  if kosher? != other.kosher?
16
21
  kosher? ? -1 : 1
17
22
  else
18
- total <=> other.total
23
+ price <=> other.price
19
24
  end
20
25
  end
21
26
 
22
27
  def kosher?
23
- raise Invalid.new(self) unless valid?
24
- seller.kosher? && shipping.kosher? && unit.kosher?
28
+ [seller, shipping, unit].all?(&:kosher?)
25
29
  end
26
30
 
27
31
  def price
28
- unit.price + shipping.cost
32
+ unit.price + shipping.price
29
33
  end
30
34
 
31
35
  def venue
@@ -0,0 +1,18 @@
1
+ module Kosher
2
+ module Price
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ key :cents, Integer
7
+ key :currency, String
8
+
9
+ validates_presence_of :currency
10
+ validates_numericality_of :cents,
11
+ :greater_than => 0
12
+ end
13
+
14
+ def price
15
+ Money.new(cents, currency)
16
+ end
17
+ end
18
+ end
data/lib/kosher/seller.rb CHANGED
@@ -1,13 +1,11 @@
1
1
  module Kosher
2
2
  class Seller < Structure
3
+ include Base
4
+
3
5
  key :id
4
- key :kosher, Boolean, :default => true
5
6
  key :name
6
7
  key :rating, Float
7
8
 
8
- # Returns whether the item is kosher.
9
- def kosher?
10
- kosher
11
- end
9
+ validates_presence_of :name
12
10
  end
13
11
  end
@@ -1,25 +1,10 @@
1
1
  module Kosher
2
2
  class Shipping < Structure
3
- include ActiveModel::Validations
3
+ include Base
4
+ include Price
4
5
 
5
- key :available
6
- key :cents, Integer
7
- key :currency
8
- key :kosher, Boolean, :default => true
6
+ key :available, Boolean
9
7
 
10
- validates_presence_of :currency, :available
11
- validates_numericality_of :cents,
12
- :greater_than => 0
13
-
14
- # Shipping cost.
15
- def cost
16
- Money.new(cents, currency)
17
- end
18
-
19
- # Returns whether the item is kosher.
20
- def kosher?
21
- raise Invalid.new(self) unless valid?
22
- kosher
23
- end
8
+ validates_presence_of :available
24
9
  end
25
10
  end
data/lib/kosher/unit.rb CHANGED
@@ -1,28 +1,20 @@
1
1
  module Kosher
2
2
  class Unit < Structure
3
- include ActiveModel::Validations
3
+ include Base
4
+ include Price
4
5
 
5
- key :cents, Integer
6
- key :condition, Integer
7
- key :currency
8
- key :description
9
- key :kosher, Boolean, :default => true
10
- key :quantity, Integer, :default => 1
6
+ key :condition, Integer
7
+ key :description, String
8
+ key :quantity, Integer, :default => 1
11
9
 
12
- validates_inclusion_of :condition, :in => 1..6
13
- validates_numericality_of :cents,
14
- :greater_than => 0
15
- validates_presence_of :currency
10
+ validates_inclusion_of :condition, :in => 1..6
16
11
 
17
- # Returns whether the item is kosher.
18
- def kosher?
19
- raise Invalid.new(self) unless valid?
20
- kosher
12
+ def new?
13
+ condition == 1
21
14
  end
22
15
 
23
- # Item price.
24
- def price
25
- Money.new(cents, currency)
16
+ def used?
17
+ !new?
26
18
  end
27
19
  end
28
20
  end
data/lib/kosher/venue.rb CHANGED
@@ -1,19 +1,12 @@
1
1
  module Kosher
2
2
  class Venue < Structure
3
- include Static
4
-
5
- set_data_path File.expand_path("../../../data/venues.yml", __FILE__)
6
-
7
- # The name of the venue.
3
+ key :country
8
4
  key :name
9
5
 
10
- # The country the venue is based in.
11
- key :country
6
+ set_data_file File.expand_path("../../../data/venues.yml", __FILE__)
12
7
 
13
- class << self
14
- def amazon
15
- @amazons ||= select { |record| record.name.include? 'Amazon' }
16
- end
8
+ def self.amazon
9
+ @amazons ||= find_all { |e| e.name.include? 'Amazon' }
17
10
  end
18
11
  end
19
12
  end
@@ -1,3 +1,3 @@
1
1
  module Kosher
2
- VERSION = '0.10.0'
2
+ VERSION = '0.11.0'
3
3
  end
data/lib/kosher.rb CHANGED
@@ -1,13 +1,7 @@
1
+ require 'active_support/concern'
1
2
  require 'active_model'
3
+ require 'certainty'
2
4
  require 'money'
3
5
  require 'structure'
4
6
 
5
- module Kosher
6
- autoload :Invalid, 'kosher/invalid'
7
- autoload :Item, 'kosher/item'
8
- autoload :Offer, 'kosher/offer'
9
- autoload :Seller, 'kosher/seller'
10
- autoload :Shipping, 'kosher/shipping'
11
- autoload :Unit, 'kosher/unit'
12
- autoload :Venue, 'kosher/venue'
13
- end
7
+ require 'kosher/offer'
data/test/kosher_test.rb CHANGED
@@ -3,64 +3,62 @@ require 'minitest/autorun'
3
3
 
4
4
  require_relative '../lib/kosher'
5
5
 
6
+ begin
7
+ require 'ruby-debug'
8
+ rescue LoadError
9
+ end
10
+
11
+ include Kosher
12
+
6
13
  class TestKosher < MiniTest::Unit::TestCase
7
- def test_unit_price
8
- unit = Kosher::Unit.new(:cents => '100',
9
- :currency => 'JPY')
10
- assert_equal '¥1.00', unit.price.format
11
- end
14
+ def test_prices
15
+ unit = Unit.new(:cents => '1000',
16
+ :currency => 'EUR')
17
+ assert_equal '10,00', unit.price.format
12
18
 
13
- def test_shipping_cost
14
- shipping = Kosher::Shipping.new(:cents => '100',
15
- :currency => 'EUR')
16
- assert_equal '1,00 €', shipping.cost.format
17
- end
19
+ shipping = Shipping.new(:cents => '300',
20
+ :currency => 'EUR')
21
+ assert_equal '3,00 ', shipping.price.format
18
22
 
19
- def test_offer_price
20
- shipping = Kosher::Shipping.new(:cents => 100,
21
- :currency => 'USD')
22
- unit = Kosher::Unit.new(:cents => 100,
23
- :currency => 'USD')
24
- offer = Kosher::Offer.new(:shipping => shipping,
25
- :unit => unit)
26
- assert_equal '$2.00', offer.price.format
23
+ offer = Offer.new(:shipping => shipping,
24
+ :unit => unit)
25
+ assert_equal '13,00 ', offer.price.format
27
26
  end
28
27
 
29
- def test_venue
30
- assert_equal 'Amazon.com', Kosher::Venue.find(1).name
31
- assert_equal 'Amazon.co.uk', Kosher::Venue.find(2).name
32
- end
28
+ def test_venues
29
+ assert_equal 'Amazon.com', Venue.find(1).name
30
+ assert_equal 'Amazon.co.uk', Venue.find(2).name
33
31
 
34
- def test_venue_in_offer
35
- offer = Kosher::Offer.new(:venue_id => 1)
36
- assert_equal Kosher::Venue.find(1), offer.venue
32
+ offer = Offer.new(:venue_id => 1)
33
+ assert_equal Venue.find(1), offer.venue
37
34
  end
38
35
 
39
36
  def test_validation
40
- assert_raises(Kosher::Invalid) { Kosher::Unit.new.kosher? }
41
- unit = Kosher::Unit.new(:condition => 1,
42
- :cents => 100,
43
- :currency => 'USD')
37
+ assert_raises(StandardError) { Unit.new.kosher? }
38
+ unit = Unit.new(:condition => 1,
39
+ :cents => 100,
40
+ :currency => 'USD')
44
41
  assert unit.kosher?
45
42
 
46
- assert_raises(Kosher::Invalid) { Kosher::Shipping.new.kosher? }
47
- shipping = Kosher::Shipping.new(:available => true,
48
- :cents => 100,
49
- :currency => 'USD')
43
+ assert_raises(StandardError) { Shipping.new.kosher? }
44
+ shipping = Shipping.new(:available => true,
45
+ :cents => 100,
46
+ :currency => 'USD')
50
47
  assert shipping.kosher?
51
48
 
52
- assert_raises(Kosher::Invalid) { Kosher::Offer.new.kosher? }
53
- offer = Kosher::Offer.new(:unit => unit,
54
- :shipping => shipping,
55
- :seller => Kosher::Seller.new,
56
- :venue_id => 1)
57
- assert offer.kosher?
49
+ assert_raises(StandardError) { Seller.new.kosher? }
50
+ seller = Seller.new(:name => 'John Doe')
51
+ assert seller.kosher?
58
52
 
59
- offer.venue_id = 0
60
- assert_raises(Kosher::Invalid) { offer.kosher? }
53
+ assert_raises(NoMethodError) { Offer.new.kosher? }
54
+ offer = Offer.new(:unit => unit,
55
+ :shipping => shipping,
56
+ :seller => seller,
57
+ :venue_id => 1)
58
+ assert offer.kosher?
61
59
  end
62
60
 
63
61
  def test_amazon_venues
64
- assert_equal 8, Kosher::Venue.amazon.size
62
+ assert_equal 8, Venue.amazon.size
65
63
  end
66
64
  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.10.0
4
+ version: 0.11.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-13 00:00:00.000000000Z
12
+ date: 2011-08-26 00:00:00.000000000Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: &70121457070860 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70121457070860
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: activemodel
16
- requirement: &70291732975860 !ruby/object:Gem::Requirement
27
+ requirement: &70121457069980 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ~>
@@ -21,10 +32,21 @@ dependencies:
21
32
  version: '3.0'
22
33
  type: :runtime
23
34
  prerelease: false
24
- version_requirements: *70291732975860
35
+ version_requirements: *70121457069980
36
+ - !ruby/object:Gem::Dependency
37
+ name: certainty
38
+ requirement: &70121457069440 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '0.2'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70121457069440
25
47
  - !ruby/object:Gem::Dependency
26
48
  name: money
27
- requirement: &70291732975020 !ruby/object:Gem::Requirement
49
+ requirement: &70121457068900 !ruby/object:Gem::Requirement
28
50
  none: false
29
51
  requirements:
30
52
  - - ~>
@@ -32,19 +54,19 @@ dependencies:
32
54
  version: '3.7'
33
55
  type: :runtime
34
56
  prerelease: false
35
- version_requirements: *70291732975020
57
+ version_requirements: *70121457068900
36
58
  - !ruby/object:Gem::Dependency
37
59
  name: structure
38
- requirement: &70291732974260 !ruby/object:Gem::Requirement
60
+ requirement: &70121457068360 !ruby/object:Gem::Requirement
39
61
  none: false
40
62
  requirements:
41
63
  - - ~>
42
64
  - !ruby/object:Gem::Version
43
- version: '0.15'
65
+ version: '0.18'
44
66
  type: :runtime
45
67
  prerelease: false
46
- version_requirements: *70291732974260
47
- description: Online trade, abstracted
68
+ version_requirements: *70121457068360
69
+ description: Online selling, abstracted
48
70
  email: code@papercavalier.com
49
71
  executables: []
50
72
  extensions: []
@@ -59,8 +81,9 @@ files:
59
81
  - data/venues.yml
60
82
  - kosher.gemspec
61
83
  - lib/kosher.rb
62
- - lib/kosher/invalid.rb
84
+ - lib/kosher/base.rb
63
85
  - lib/kosher/offer.rb
86
+ - lib/kosher/price.rb
64
87
  - lib/kosher/seller.rb
65
88
  - lib/kosher/shipping.rb
66
89
  - lib/kosher/unit.rb
@@ -81,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
104
  version: '0'
82
105
  segments:
83
106
  - 0
84
- hash: 3228881349343595223
107
+ hash: 2657274426638176480
85
108
  required_rubygems_version: !ruby/object:Gem::Requirement
86
109
  none: false
87
110
  requirements:
@@ -90,12 +113,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
113
  version: '0'
91
114
  segments:
92
115
  - 0
93
- hash: 3228881349343595223
116
+ hash: 2657274426638176480
94
117
  requirements: []
95
118
  rubyforge_project:
96
119
  rubygems_version: 1.8.6
97
120
  signing_key:
98
121
  specification_version: 3
99
- summary: Online trade, abstracted
122
+ summary: Online selling, abstracted
100
123
  test_files:
101
124
  - test/kosher_test.rb
@@ -1,7 +0,0 @@
1
- module Kosher
2
- class Invalid < StandardError
3
- def initialize(record)
4
- super(record.errors.full_messages.join(", "))
5
- end
6
- end
7
- end