encapsulate_as_money 0.1 → 0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 871fc3992a7bc06f07246f53da916ac9488782a5
4
- data.tar.gz: cfb3f79877ec1b350bd984235f57126051840ef7
3
+ metadata.gz: 0c6b4e070f12e143adb39e5f507981a3962f35bc
4
+ data.tar.gz: 362cf15ef24f6f0424a02a309b43deb1a3391fbb
5
5
  SHA512:
6
- metadata.gz: 11fd7c0c1ea70da59ea3ec0a19e6771cbcac143b63ea1e6c35fe81f2aaa4f3e0f058ecf64bc9a277d4a481c8f6a9be145a1482b99597395d6f59e42b0eaafc10
7
- data.tar.gz: 9e2dd5dd3a400dea78ac0bf13c0c44d5b2ce1775fe824942e81d340d2580588f528597415764d996495122892fbb57f2e3a9c52be1c55fd1114f28a5e0b4c048
6
+ metadata.gz: 5bf283d26e20491e4be2a81500133f0cb2ebd909301fe6fb9ecd0e1deb30b2b7f622965e0d2f59f47db639452263bbbd8ff634f5627deec4fdf103d71898ffdb
7
+ data.tar.gz: 318dac26671a0b62d2651d399b575724c871b7e93a750e9d854e799c28d43335800588d10f0275996dc056cce5d147cacc4ba7539308473b86c2924728cf57fb
data/.gitignore CHANGED
@@ -17,6 +17,7 @@ test/tmp
17
17
  test/version_tmp
18
18
  tmp
19
19
  *.bundle
20
+ *.gemfile.lock
20
21
  *.so
21
22
  *.o
22
23
  *.a
data/.travis.yml CHANGED
@@ -1,8 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.1
3
+ - 2.1.2
4
4
  - 1.9.3
5
+ before_install:
6
+ - gem update bundler
7
+ gemfile:
8
+ - gemfiles/rails_3_2.gemfile
9
+ - gemfiles/rails_4_0.gemfile
5
10
  notifications:
6
11
  email:
7
12
  recipients:
8
- - orien@envato.com
13
+ - financedev@envato.com
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ - LICENSE.txt
data/Appraisals ADDED
@@ -0,0 +1,7 @@
1
+ appraise 'rails-3_2' do
2
+ gem 'activemodel', '3.2.22.2'
3
+ end
4
+
5
+ appraise 'rails-4_0' do
6
+ gem 'activemodel', '4.0.13'
7
+ end
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # EncapsulateAsMoney
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/encapsulate_as_money.svg)](http://badge.fury.io/rb/encapsulate_as_money)
2
4
  [![Build Status](https://travis-ci.org/envato/encapsulate_as_money.svg?branch=master)](https://travis-ci.org/envato/encapsulate_as_money)
3
5
 
4
6
  Want your model attribute to be a [Money](https://github.com/RubyMoney/money)
data/Rakefile CHANGED
@@ -1,9 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
- require "rake/testtask"
2
+ require 'rspec/core/rake_task'
3
+ require "yard"
3
4
 
4
5
  task :default => :spec
5
6
 
6
- Rake::TestTask.new(:spec) do |t|
7
- t.libs << "spec"
8
- t.test_files = Dir.glob("spec/**/*_spec.rb")
9
- end
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ YARD::Rake::YardocTask.new
@@ -19,8 +19,11 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency "money", ">= 5.1.0"
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "bundler"
23
23
  spec.add_development_dependency "rake"
24
- spec.add_development_dependency "minitest-given"
24
+ spec.add_development_dependency "rspec", "~> 2.0"
25
+ spec.add_development_dependency "rspec-given"
25
26
  spec.add_development_dependency "yard"
27
+ spec.add_development_dependency "appraisal"
28
+ spec.add_development_dependency "pry"
26
29
  end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activemodel", "3.2.22.2"
6
+
7
+ gemspec :path => "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activemodel", "4.0.13"
6
+
7
+ gemspec :path => "../"
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require "encapsulate_as_money/version"
3
+ require "encapsulate_as_money/activemodel_integration"
3
4
  require "money"
4
5
 
5
6
  module EncapsulateAsMoney
@@ -17,14 +18,19 @@ private
17
18
  define_method attribute do
18
19
  Money.new(super()) if super()
19
20
  end
21
+
22
+ define_method "#{attribute}=" do |money|
23
+ super(money && money.fractional)
24
+ end
20
25
  else
21
26
  define_method attribute do
22
27
  Money.new(super() || 0)
23
28
  end
24
- end
25
29
 
26
- define_method "#{attribute}=" do |money|
27
- super(money && money.fractional)
30
+ define_method "#{attribute}=" do |money|
31
+ num = (money && money.fractional) || 0
32
+ super(num)
33
+ end
28
34
  end
29
35
  end
30
36
 
@@ -0,0 +1,24 @@
1
+ begin
2
+ require 'active_model'
3
+
4
+ if ActiveModel::VERSION::MAJOR == 4
5
+ module ActiveModel::Validations::Clusivity
6
+ private
7
+
8
+ def inclusion_method(enumerable)
9
+ if enumerable.first.is_a?(Money)
10
+ :cover?
11
+ else
12
+ return :include? unless enumerable.is_a?(Range)
13
+ case enumerable.first
14
+ when Numeric, Time, DateTime
15
+ :cover?
16
+ else
17
+ :include?
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ rescue LoadError
24
+ end
@@ -1,3 +1,3 @@
1
1
  module EncapsulateAsMoney
2
- VERSION = "0.1"
2
+ VERSION = '0.2'
3
3
  end
data/script/setup.sh ADDED
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ echo "This command will setup your local dev environment, including"
4
+ echo " * bundle install"
5
+ echo
6
+
7
+ echo "Bundling..."
8
+ bundle install --binstubs bin --path .bundle
@@ -10,7 +10,6 @@ describe EncapsulateAsMoney do
10
10
  }
11
11
  }
12
12
  Given(:model_instance) { model_class.new }
13
- Given!(:init_attr_value) { model_instance.instance_variable_set :@attribute, initial_attr_value }
14
13
 
15
14
  describe "encapsulating the attribute as money" do
16
15
  When(:model_class) {
@@ -19,19 +18,41 @@ describe EncapsulateAsMoney do
19
18
  }
20
19
  }
21
20
 
22
- context "initial value is nil" do
23
- Given(:initial_attr_value) { nil }
24
- Then { model_instance.attribute == Money.new(0) }
25
- end
21
+ describe "reading" do
22
+ Given!(:init_attr_value) { model_instance.instance_variable_set :@attribute, initial_attr_value }
23
+
24
+ context "initial value is nil" do
25
+ Given(:initial_attr_value) { nil }
26
+ Then { model_instance.attribute == Money.zero }
27
+ end
28
+
29
+ context "initial value is 0" do
30
+ Given(:initial_attr_value) { 0 }
31
+ Then { model_instance.attribute == Money.zero }
32
+ end
26
33
 
27
- context "initial value is 0" do
28
- Given(:initial_attr_value) { 0 }
29
- Then { model_instance.attribute == Money.new(0) }
34
+ context "initial value is 1" do
35
+ Given(:initial_attr_value) { 1 }
36
+ Then { model_instance.attribute == Money.new(1) }
37
+ end
30
38
  end
31
39
 
32
- context "initial value is 1" do
33
- Given(:initial_attr_value) { 1 }
34
- Then { model_instance.attribute == Money.new(1) }
40
+ describe "writing" do
41
+
42
+ context "a value of $1" do
43
+ When { model_instance.attribute = Money.new(1_00) }
44
+ Then { model_instance.instance_variable_get(:@attribute) == 1_00 }
45
+ end
46
+
47
+ context "a value of $0" do
48
+ When { model_instance.attribute = Money.zero }
49
+ Then { model_instance.instance_variable_get(:@attribute) == 0 }
50
+ end
51
+
52
+ context "a value of nil" do
53
+ When { model_instance.attribute = nil }
54
+ Then { model_instance.instance_variable_get(:@attribute) == 0 }
55
+ end
35
56
  end
36
57
  end
37
58
 
@@ -42,19 +63,41 @@ describe EncapsulateAsMoney do
42
63
  }
43
64
  }
44
65
 
45
- context "initial value is nil" do
46
- Given(:initial_attr_value) { nil }
47
- Then { model_instance.attribute == nil }
48
- end
66
+ describe "reading" do
67
+ Given!(:init_attr_value) { model_instance.instance_variable_set :@attribute, initial_attr_value }
68
+
69
+ context "initial value is nil" do
70
+ Given(:initial_attr_value) { nil }
71
+ Then { model_instance.attribute == nil }
72
+ end
73
+
74
+ context "initial value is 0" do
75
+ Given(:initial_attr_value) { 0 }
76
+ Then { model_instance.attribute == Money.zero }
77
+ end
49
78
 
50
- context "initial value is 0" do
51
- Given(:initial_attr_value) { 0 }
52
- Then { model_instance.attribute == Money.new(0) }
79
+ context "initial value is 1" do
80
+ Given(:initial_attr_value) { 1 }
81
+ Then { model_instance.attribute == Money.new(1) }
82
+ end
53
83
  end
54
84
 
55
- context "initial value is 1" do
56
- Given(:initial_attr_value) { 1 }
57
- Then { model_instance.attribute == Money.new(1) }
85
+ describe "writing" do
86
+
87
+ context "a value of $1" do
88
+ When { model_instance.attribute = Money.new(1_00) }
89
+ Then { model_instance.instance_variable_get(:@attribute) == 1_00 }
90
+ end
91
+
92
+ context "a value of $0" do
93
+ When { model_instance.attribute = Money.zero }
94
+ Then { model_instance.instance_variable_get(:@attribute) == 0 }
95
+ end
96
+
97
+ context "a value of nil" do
98
+ When { model_instance.attribute = nil }
99
+ Then { model_instance.instance_variable_get(:@attribute).nil? }
100
+ end
58
101
  end
59
102
  end
60
103
  end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe "ActiveModel integration", skip: !ENV['APPRAISAL_INITIALIZED'] && !ENV['TRAVIS'] do
4
+ describe '.validates_inclusion_of' do
5
+ it "validates money correctly" do
6
+ expect(Price.new(amount: Money.new(0))).not_to be_valid
7
+ expect(Price.new(amount: Money.new(1))).to be_valid
8
+ expect(Price.new(amount: Money.new(2))).to be_valid
9
+ expect(Price.new(amount: Money.new(3))).not_to be_valid
10
+ end
11
+
12
+ it "validates numbers correctly" do
13
+ expect(Price.new(qty: 0)).not_to be_valid
14
+ expect(Price.new(qty: 1)).to be_valid
15
+ expect(Price.new(qty: 2)).to be_valid
16
+ expect(Price.new(qty: 3)).not_to be_valid
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,38 @@
1
+ require 'active_model'
2
+
3
+ class Price
4
+ extend EncapsulateAsMoney
5
+
6
+ case ActiveModel::VERSION::MAJOR
7
+ when 3 then include ActiveModel::AttributeMethods
8
+ when 4 then include ActiveModel::Model
9
+ else raise NotImplementedError, ActiveModel::VERSION::MAJOR
10
+ end
11
+
12
+ include ActiveModel::Validations
13
+
14
+ encapsulate_as_money :amount
15
+ validates_inclusion_of :amount, in: Money.new(1)..Money.new(2), allow_nil: true
16
+ validates_inclusion_of :qty, in: 1..2, allow_nil: true
17
+
18
+ def initialize(attributes = {})
19
+ @amount = attributes[:amount]
20
+ @qty = attributes[:qty]
21
+ end
22
+
23
+ def amount
24
+ @amount
25
+ end
26
+
27
+ def amount=(amount)
28
+ @amount = amount
29
+ end
30
+
31
+ def qty
32
+ @qty
33
+ end
34
+
35
+ def qty=(qty)
36
+ @qty = qty
37
+ end
38
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # encoding: utf-8
2
- require "encapsulate_as_money"
3
- require "minitest/autorun"
4
- require "minitest/given"
5
- require "minitest/pride"
6
- Dir[File.expand_path("../support/**/*.rb", __FILE__)].each { |f| require f }
2
+ require 'encapsulate_as_money'
3
+ require 'rspec/given'
4
+ require 'integration_helper' if ENV['APPRAISAL_INITIALIZED'] || ENV['TRAVIS']
5
+
6
+ RSpec.configure do |config|
7
+ config.color = true
8
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: encapsulate_as_money
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Sellitti
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2014-05-01 00:00:00.000000000 Z
16
+ date: 2016-04-26 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: money
@@ -33,16 +33,16 @@ dependencies:
33
33
  name: bundler
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
- - - "~>"
36
+ - - ">="
37
37
  - !ruby/object:Gem::Version
38
- version: '1.6'
38
+ version: '0'
39
39
  type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
- - - "~>"
43
+ - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: '1.6'
45
+ version: '0'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rake
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -58,7 +58,21 @@ dependencies:
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  - !ruby/object:Gem::Dependency
61
- name: minitest-given
61
+ name: rspec
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '2.0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rspec-given
62
76
  requirement: !ruby/object:Gem::Requirement
63
77
  requirements:
64
78
  - - ">="
@@ -85,6 +99,34 @@ dependencies:
85
99
  - - ">="
86
100
  - !ruby/object:Gem::Version
87
101
  version: '0'
102
+ - !ruby/object:Gem::Dependency
103
+ name: appraisal
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ type: :development
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ - !ruby/object:Gem::Dependency
117
+ name: pry
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
88
130
  description:
89
131
  email:
90
132
  - anthony.sellitti@envato.com
@@ -99,14 +141,22 @@ extra_rdoc_files: []
99
141
  files:
100
142
  - ".gitignore"
101
143
  - ".travis.yml"
144
+ - ".yardopts"
145
+ - Appraisals
102
146
  - Gemfile
103
147
  - LICENSE.txt
104
148
  - README.md
105
149
  - Rakefile
106
150
  - encapsulate_as_money.gemspec
151
+ - gemfiles/rails_3_2.gemfile
152
+ - gemfiles/rails_4_0.gemfile
107
153
  - lib/encapsulate_as_money.rb
154
+ - lib/encapsulate_as_money/activemodel_integration.rb
108
155
  - lib/encapsulate_as_money/version.rb
156
+ - script/setup.sh
109
157
  - spec/encapsulate_as_money_spec.rb
158
+ - spec/integration/activemodel_spec.rb
159
+ - spec/integration_helper.rb
110
160
  - spec/spec_helper.rb
111
161
  homepage: https://github.com/envato/encapsulate_as_money
112
162
  licenses:
@@ -128,11 +178,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
178
  version: '0'
129
179
  requirements: []
130
180
  rubyforge_project:
131
- rubygems_version: 2.2.2
181
+ rubygems_version: 2.5.1
132
182
  signing_key:
133
183
  specification_version: 4
134
184
  summary: Represent model attributes as Money instances
135
185
  test_files:
136
186
  - spec/encapsulate_as_money_spec.rb
187
+ - spec/integration/activemodel_spec.rb
188
+ - spec/integration_helper.rb
137
189
  - spec/spec_helper.rb
138
190
  has_rdoc: