kosher 0.10.0 → 0.11.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.
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