yukata 1.1.0 → 1.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/lib/yukata.rb +9 -10
- data/lib/yukata/coercer.rb +7 -1
- data/lib/yukata/coercion.rb +7 -0
- data/lib/yukata/coercions.rb +25 -0
- data/lib/yukata/coercions/boolean_definitions.rb +15 -0
- data/lib/yukata/coercions/date_definitions.rb +13 -0
- data/lib/yukata/coercions/date_time_definitions.rb +13 -0
- data/lib/yukata/coercions/fixnum_definitions.rb +15 -0
- data/lib/yukata/coercions/float_definitions.rb +13 -0
- data/lib/yukata/coercions/hash_definitions.rb +10 -0
- data/lib/yukata/coercions/integer_definitions.rb +12 -0
- data/lib/yukata/coercions/string_definitions.rb +26 -0
- data/lib/yukata/coercions/time_definitions.rb +13 -0
- data/lib/yukata/version.rb +1 -1
- data/spec/attribute_spec.rb +26 -0
- data/spec/base_spec.rb +30 -0
- data/spec/coercer_spec.rb +0 -0
- data/spec/coercion_spec.rb +21 -0
- data/spec/coercions/boolean_definitions_spec.rb +27 -0
- data/spec/coercions/date_definitions_spec.rb +45 -0
- data/spec/coercions/date_time_definitions_spec.rb +45 -0
- data/spec/coercions/fixnum_definitions_spec.rb +52 -0
- data/spec/spec_helper.rb +9 -0
- data/yukata.gemspec +1 -0
- metadata +41 -11
- data/lib/yukata/coercions/array.rb +0 -1
- data/lib/yukata/coercions/boolean.rb +0 -8
- data/lib/yukata/coercions/date.rb +0 -5
- data/lib/yukata/coercions/date_time.rb +0 -5
- data/lib/yukata/coercions/fixnum.rb +0 -7
- data/lib/yukata/coercions/float.rb +0 -5
- data/lib/yukata/coercions/hash.rb +0 -2
- data/lib/yukata/coercions/integer.rb +0 -4
- data/lib/yukata/coercions/string.rb +0 -26
- data/lib/yukata/coercions/time.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7b57e16a64efce928a8711ebd9d5e5eb365b369
|
4
|
+
data.tar.gz: 0d2286cb23cc7d2f990dbe80bf76320186a74bab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f73c161f1afbead3c48916976e0bc775c2741bdce4a94e03a737ecbee2d26ed30b12fd27c358e561f892543aeb7f5e1466363a185e67b9749eda1df5043a895a
|
7
|
+
data.tar.gz: 68749b61090828c39497aac9bb26d281b5ece1ad4cd19faa9810782591e3962610a158bb3100d749499562b541e11294841a9a3b439c277566615938893b4f4b
|
data/lib/yukata.rb
CHANGED
@@ -2,24 +2,23 @@ require 'json'
|
|
2
2
|
|
3
3
|
require 'yukata/version'
|
4
4
|
require 'yukata/errors'
|
5
|
+
require 'yukata/coercions'
|
5
6
|
require 'yukata/coercion'
|
6
7
|
require 'yukata/coercer'
|
7
8
|
|
8
9
|
module Yukata
|
9
10
|
def self.coercer
|
10
|
-
@coercer
|
11
|
+
return @coercer if @coercer
|
12
|
+
@coercer = Yukata::Coercer.new
|
13
|
+
Yukata::Coercions.bind_to(@coercer)
|
14
|
+
@coercer
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.coercer=(coercer)
|
18
|
+
@coercer = coercer
|
11
19
|
end
|
12
20
|
end
|
13
21
|
|
14
22
|
require 'yukata/attribute'
|
15
23
|
require 'yukata/base'
|
16
24
|
|
17
|
-
require 'yukata/coercions/date'
|
18
|
-
require 'yukata/coercions/date_time'
|
19
|
-
require 'yukata/coercions/fixnum'
|
20
|
-
require 'yukata/coercions/float'
|
21
|
-
require 'yukata/coercions/integer'
|
22
|
-
require 'yukata/coercions/string'
|
23
|
-
require 'yukata/coercions/time'
|
24
|
-
require 'yukata/coercions/hash'
|
25
|
-
require 'yukata/coercions/boolean'
|
data/lib/yukata/coercer.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
module Yukata
|
2
|
+
# The class that coerces objects based on the definitions that are registered
|
3
|
+
# with it.
|
4
|
+
#
|
5
|
+
# @author Matthew A. Johnston
|
2
6
|
class Coercer
|
3
7
|
def initialize
|
4
8
|
@coercions = Hash.new do |hash, origin|
|
@@ -34,7 +38,9 @@ module Yukata
|
|
34
38
|
# @param object [Object] the object to coerce
|
35
39
|
# @param target [Class] what you want the object to turn in to
|
36
40
|
def coerce(object, target)
|
37
|
-
@
|
41
|
+
@mutex.synchronize do
|
42
|
+
@coercions[object.class][target].call(object)
|
43
|
+
end
|
38
44
|
end
|
39
45
|
end
|
40
46
|
end
|
data/lib/yukata/coercion.rb
CHANGED
@@ -1,15 +1,22 @@
|
|
1
1
|
module Yukata
|
2
|
+
# This wraps the block that is provided when you register a coercion.
|
3
|
+
#
|
2
4
|
# @author Matthew A. Johnston
|
3
5
|
class Coercion
|
4
6
|
# Just passes the object on through
|
5
7
|
PASS_THROUGH = ->(obj, _) { obj }
|
6
8
|
|
9
|
+
# @param origin [Class] the class that the object is
|
10
|
+
# @param target [Class] the class you wish to coerce to
|
7
11
|
def initialize(origin, target, &block)
|
8
12
|
@origin = origin
|
9
13
|
@target = target
|
10
14
|
@block = block_given? ? block : PASS_THROUGH
|
11
15
|
end
|
12
16
|
|
17
|
+
# Calls the coercion
|
18
|
+
#
|
19
|
+
# @return [Object]
|
13
20
|
def call(object)
|
14
21
|
@block.call(object, @target)
|
15
22
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'yukata/coercions/date_definitions'
|
2
|
+
require 'yukata/coercions/date_time_definitions'
|
3
|
+
require 'yukata/coercions/fixnum_definitions'
|
4
|
+
require 'yukata/coercions/float_definitions'
|
5
|
+
require 'yukata/coercions/integer_definitions'
|
6
|
+
require 'yukata/coercions/string_definitions'
|
7
|
+
require 'yukata/coercions/time_definitions'
|
8
|
+
require 'yukata/coercions/hash_definitions'
|
9
|
+
require 'yukata/coercions/boolean_definitions'
|
10
|
+
|
11
|
+
module Yukata
|
12
|
+
module Coercions
|
13
|
+
def self.bind_to(coercer)
|
14
|
+
Yukata::Coercions::DateDefinitions.bind_to(coercer)
|
15
|
+
Yukata::Coercions::DateTimeDefinitions.bind_to(coercer)
|
16
|
+
Yukata::Coercions::FixnumDefinitions.bind_to(coercer)
|
17
|
+
Yukata::Coercions::FloatDefinitions.bind_to(coercer)
|
18
|
+
Yukata::Coercions::IntegerDefinitions.bind_to(coercer)
|
19
|
+
Yukata::Coercions::StringDefinitions.bind_to(coercer)
|
20
|
+
Yukata::Coercions::TimeDefinitions.bind_to(coercer)
|
21
|
+
Yukata::Coercions::HashDefinitions.bind_to(coercer)
|
22
|
+
Yukata::Coercions::BooleanDefinitions.bind_to(coercer)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
unless defined?(Boolean)
|
2
|
+
class Boolean
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
module Yukata
|
7
|
+
module Coercions
|
8
|
+
class BooleanDefinitions
|
9
|
+
def self.bind_to(coercer)
|
10
|
+
coercer.register(TrueClass, String) { |o, _| 'true' }
|
11
|
+
coercer.register(FalseClass, String) { |o, _| 'false' }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class DateDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
coercer.register(Date, Time) { |obj, _| obj.to_time }
|
6
|
+
coercer.register(Date, DateTime) { |obj, _| obj.to_datetime }
|
7
|
+
coercer.register(Date, Integer) { |obj, _| obj.to_time.to_i }
|
8
|
+
coercer.register(Date, Float) { |obj, _| obj.to_time.to_f }
|
9
|
+
coercer.register(Date, String) { |obj, _| obj.to_s }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class DateTimeDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
coercer.register(DateTime, Time) { |obj, _| obj.to_time }
|
6
|
+
coercer.register(DateTime, Date) { |obj, _| obj.to_date }
|
7
|
+
coercer.register(DateTime, Integer) { |obj, _| obj.to_time.to_i }
|
8
|
+
coercer.register(DateTime, Float) { |obj, _| obj.to_time.to_f }
|
9
|
+
coercer.register(DateTime, String) { |obj, _| obj.to_s }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class FixnumDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
coercer.register(Fixnum, String) { |obj, _| obj.to_s }
|
6
|
+
coercer.register(Fixnum, Time) { |obj, _| Time.at(obj) }
|
7
|
+
coercer.register(Fixnum, Date) { |obj, _| Time.at(obj).to_date }
|
8
|
+
coercer.register(Fixnum, DateTime) { |obj, _| Time.at(obj).to_datetime }
|
9
|
+
coercer.register(Fixnum, String) { |obj, _| obj.to_s }
|
10
|
+
coercer.register(Fixnum, Integer) { |obj, _| obj.to_i }
|
11
|
+
coercer.register(Fixnum, Float) { |obj, _| obj.to_f }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class FloatDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
coercer.register(Float, Time) { |obj, _| Time.at(obj) }
|
6
|
+
coercer.register(Float, Date) { |obj, _| Time.at(obj).to_date }
|
7
|
+
coercer.register(Float, DateTime) { |obj, _| Time.at(obj).to_datetime }
|
8
|
+
coercer.register(Float, String) { |obj, _| obj.to_s }
|
9
|
+
coercer.register(Float, Integer) { |obj, _| obj.to_i }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class IntegerDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
coercer.register(Integer, Time) { |obj, _| Time.at(obj) }
|
6
|
+
coercer.register(Integer, Date) { |obj, _| Time.at(obj).to_date }
|
7
|
+
coercer.register(Integer, DateTime) { |obj, _| Time.at(obj).to_datetime }
|
8
|
+
coercer.register(Integer, String) { |obj, _| obj.to_s }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class StringDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
# Attempt to parse the date. If it can't be parsed just return nil.
|
6
|
+
# Silently failing is about the only thing I can think of.
|
7
|
+
type_parser = -> (obj, target) do
|
8
|
+
begin
|
9
|
+
target.parse(obj)
|
10
|
+
rescue ArgumentError
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
coercer.register(String, Time, &type_parser)
|
16
|
+
coercer.register(String, Date, &type_parser)
|
17
|
+
coercer.register(String, DateTime, &type_parser)
|
18
|
+
coercer.register(String, Integer) { |obj, _| obj.to_i }
|
19
|
+
coercer.register(String, Float) { |obj, _| obj.to_f }
|
20
|
+
coercer.register(String, Boolean) do |string, _|
|
21
|
+
%w(1 on t true y yes).include?(string.downcase)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Yukata
|
2
|
+
module Coercions
|
3
|
+
class TimeDefinitions
|
4
|
+
def self.bind_to(coercer)
|
5
|
+
coercer.register(Time, Date) { |obj, _| obj.to_date }
|
6
|
+
coercer.register(Time, DateTime) { |obj, _| obj.to_datetime }
|
7
|
+
coercer.register(Time, Integer) { |obj, _| obj.to_i }
|
8
|
+
coercer.register(Time, Float) { |obj, _| obj.to_f }
|
9
|
+
coercer.register(Time, String) { |obj, _| obj.to_s }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/yukata/version.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Attribute do
|
4
|
+
describe '#initialize' do
|
5
|
+
context 'when the default is a proc' do
|
6
|
+
subject { Yukata::Attribute.new(String, { default: -> { 'nothing' } }) }
|
7
|
+
it 'sets the default' do
|
8
|
+
expect(subject.default).to eq('nothing')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'when the default is a String' do
|
13
|
+
subject { Yukata::Attribute.new(String, { default: 'nothing' }) }
|
14
|
+
it 'sets the default' do
|
15
|
+
expect(subject.default).to eq('nothing')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when no default is provided' do
|
20
|
+
subject { Yukata::Attribute.new(String) }
|
21
|
+
it 'sets the default to nil' do
|
22
|
+
expect(subject.default).to eq(nil)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/base_spec.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Base do
|
4
|
+
class MockedBase < Yukata::Base
|
5
|
+
attribute :id, Integer
|
6
|
+
attribute :foo, String
|
7
|
+
attribute :created_at, DateTime, default: -> { DateTime.now }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#initialize' do
|
11
|
+
context 'when a hash is not passed' do
|
12
|
+
subject { MockedBase.new }
|
13
|
+
|
14
|
+
its(:id) { should be_nil }
|
15
|
+
its(:foo) { should be_nil }
|
16
|
+
its(:created_at) { should_not be_nil }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when a hash is passed' do
|
20
|
+
let(:now) { DateTime.now }
|
21
|
+
let(:params) { { id: '1', foo: 'bar', created_at: now } }
|
22
|
+
|
23
|
+
subject { MockedBase.new(params) }
|
24
|
+
|
25
|
+
its(:id) { should eq(1) }
|
26
|
+
its(:foo) { should eq('bar') }
|
27
|
+
its(:created_at) { should eq(now) }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Coercion do
|
4
|
+
describe '#initialize' do
|
5
|
+
context 'when no block is provided' do
|
6
|
+
subject { Yukata::Coercion.new(Object, String) }
|
7
|
+
it 'becomes a pass through coercion' do
|
8
|
+
test = double('SomeObject')
|
9
|
+
expect(subject.call(test)).to eq(test)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
context 'when a block is provided' do
|
13
|
+
subject { Yukata::Coercion.new(Object, String) { |o,_| o.to_s } }
|
14
|
+
|
15
|
+
it 'sets the block to the one that is provided' do
|
16
|
+
test = double('SomeObject', to_s: 'something')
|
17
|
+
expect(subject.call(test)).to eq('something')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Coercions::BooleanDefinitions do
|
4
|
+
let(:coercer) { Yukata::Coercer.new }
|
5
|
+
|
6
|
+
before do
|
7
|
+
described_class.bind_to(coercer)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'Boolean to String' do
|
11
|
+
context 'when the value is false' do
|
12
|
+
subject { coercer.coerce(false, String) }
|
13
|
+
|
14
|
+
it 'returns "false"' do
|
15
|
+
expect(subject).to eq('false')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when the value is true' do
|
20
|
+
subject { coercer.coerce(true, String) }
|
21
|
+
|
22
|
+
it 'return "true"' do
|
23
|
+
expect(subject).to eq('true')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Coercions::DateDefinitions do
|
4
|
+
let(:coercer) { Yukata::Coercer.new }
|
5
|
+
let(:date) { Date.today }
|
6
|
+
|
7
|
+
before do
|
8
|
+
described_class.bind_to(coercer)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'Date to Time' do
|
12
|
+
subject { coercer.coerce(date, Time) }
|
13
|
+
it 'coerces to a Time' do
|
14
|
+
expect(subject).to eq(date.to_time)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'Date to DateTime' do
|
19
|
+
subject { coercer.coerce(date, DateTime) }
|
20
|
+
it 'coerces to a DateTime' do
|
21
|
+
expect(subject).to eq(date.to_datetime)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'Date to Integer' do
|
26
|
+
subject { coercer.coerce(date, Integer) }
|
27
|
+
it 'coerces to an Integer' do
|
28
|
+
expect(subject).to eq(date.to_time.to_i)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'Date to Float' do
|
33
|
+
subject { coercer.coerce(date, Float) }
|
34
|
+
it 'coerces to a Float' do
|
35
|
+
expect(subject).to eq(date.to_time.to_f)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'Date to String' do
|
40
|
+
subject { coercer.coerce(date, String) }
|
41
|
+
it 'coerces to a String' do
|
42
|
+
expect(subject).to eq(date.to_s)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Coercions::DateTimeDefinitions do
|
4
|
+
let(:coercer) { Yukata::Coercer.new }
|
5
|
+
let(:date) { DateTime.new }
|
6
|
+
|
7
|
+
before do
|
8
|
+
described_class.bind_to(coercer)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'DateTime to Time' do
|
12
|
+
subject { coercer.coerce(date, Time) }
|
13
|
+
it 'coerces to a Time' do
|
14
|
+
expect(subject).to eq(date.to_time)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'DateTime to Date' do
|
19
|
+
subject { coercer.coerce(date, Date) }
|
20
|
+
it 'coerces to a Date' do
|
21
|
+
expect(subject).to eq(date.to_date)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'DateTime to Integer' do
|
26
|
+
subject { coercer.coerce(date, Integer) }
|
27
|
+
it 'coerces to an Integer' do
|
28
|
+
expect(subject).to eq(date.to_time.to_i)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'DateTime to Float' do
|
33
|
+
subject { coercer.coerce(date, Float) }
|
34
|
+
it 'coerces to a Float' do
|
35
|
+
expect(subject).to eq(date.to_time.to_f)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'DateTime to String' do
|
40
|
+
subject { coercer.coerce(date, String) }
|
41
|
+
it 'coerces to a String' do
|
42
|
+
expect(subject).to eq(date.to_s)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yukata::Coercions::FixnumDefinitions do
|
4
|
+
let(:coercer) { Yukata::Coercer.new }
|
5
|
+
let(:fixnum) { 1 }
|
6
|
+
|
7
|
+
before do
|
8
|
+
described_class.bind_to(coercer)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'Fixnum to String' do
|
12
|
+
subject { coercer.coerce(fixnum, String) }
|
13
|
+
it 'coerces to a String' do
|
14
|
+
expect(subject).to eq(fixnum.to_s)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'Fixnum to Time' do
|
19
|
+
subject { coercer.coerce(fixnum, Time) }
|
20
|
+
it 'coerces to a Time' do
|
21
|
+
expect(subject).to eq(Time.at(fixnum))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'Fixnum to Date' do
|
26
|
+
subject { coercer.coerce(fixnum, Date) }
|
27
|
+
it 'coerces to a Date' do
|
28
|
+
expect(subject).to eq(Time.at(fixnum).to_date)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'Fixnum to DateTime' do
|
33
|
+
subject { coercer.coerce(fixnum, DateTime) }
|
34
|
+
it 'coerces to a DateTime' do
|
35
|
+
expect(subject).to eq(Time.at(fixnum).to_datetime)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'Fixnum to Integer' do
|
40
|
+
subject { coercer.coerce(fixnum, Integer) }
|
41
|
+
it 'coerces to a Integer' do
|
42
|
+
expect(subject).to eq(fixnum.to_i)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'Fixnum to Float' do
|
47
|
+
subject { coercer.coerce(fixnum, Float) }
|
48
|
+
it 'coerces to a Float' do
|
49
|
+
expect(subject).to eq(fixnum.to_f)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/yukata.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yukata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Johnston
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Attributes for ruby objects
|
56
70
|
email:
|
57
71
|
- warmwaffles@gmail.com
|
@@ -72,18 +86,26 @@ files:
|
|
72
86
|
- lib/yukata/base.rb
|
73
87
|
- lib/yukata/coercer.rb
|
74
88
|
- lib/yukata/coercion.rb
|
75
|
-
- lib/yukata/coercions
|
76
|
-
- lib/yukata/coercions/
|
77
|
-
- lib/yukata/coercions/
|
78
|
-
- lib/yukata/coercions/
|
79
|
-
- lib/yukata/coercions/
|
80
|
-
- lib/yukata/coercions/
|
81
|
-
- lib/yukata/coercions/
|
82
|
-
- lib/yukata/coercions/
|
83
|
-
- lib/yukata/coercions/
|
84
|
-
- lib/yukata/coercions/
|
89
|
+
- lib/yukata/coercions.rb
|
90
|
+
- lib/yukata/coercions/boolean_definitions.rb
|
91
|
+
- lib/yukata/coercions/date_definitions.rb
|
92
|
+
- lib/yukata/coercions/date_time_definitions.rb
|
93
|
+
- lib/yukata/coercions/fixnum_definitions.rb
|
94
|
+
- lib/yukata/coercions/float_definitions.rb
|
95
|
+
- lib/yukata/coercions/hash_definitions.rb
|
96
|
+
- lib/yukata/coercions/integer_definitions.rb
|
97
|
+
- lib/yukata/coercions/string_definitions.rb
|
98
|
+
- lib/yukata/coercions/time_definitions.rb
|
85
99
|
- lib/yukata/errors.rb
|
86
100
|
- lib/yukata/version.rb
|
101
|
+
- spec/attribute_spec.rb
|
102
|
+
- spec/base_spec.rb
|
103
|
+
- spec/coercer_spec.rb
|
104
|
+
- spec/coercion_spec.rb
|
105
|
+
- spec/coercions/boolean_definitions_spec.rb
|
106
|
+
- spec/coercions/date_definitions_spec.rb
|
107
|
+
- spec/coercions/date_time_definitions_spec.rb
|
108
|
+
- spec/coercions/fixnum_definitions_spec.rb
|
87
109
|
- spec/spec_helper.rb
|
88
110
|
- spec/yukata_spec.rb
|
89
111
|
- yukata.gemspec
|
@@ -112,5 +134,13 @@ signing_key:
|
|
112
134
|
specification_version: 4
|
113
135
|
summary: Attributes for ruby objects
|
114
136
|
test_files:
|
137
|
+
- spec/attribute_spec.rb
|
138
|
+
- spec/base_spec.rb
|
139
|
+
- spec/coercer_spec.rb
|
140
|
+
- spec/coercion_spec.rb
|
141
|
+
- spec/coercions/boolean_definitions_spec.rb
|
142
|
+
- spec/coercions/date_definitions_spec.rb
|
143
|
+
- spec/coercions/date_time_definitions_spec.rb
|
144
|
+
- spec/coercions/fixnum_definitions_spec.rb
|
115
145
|
- spec/spec_helper.rb
|
116
146
|
- spec/yukata_spec.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
Yukata.coercer.coerce(Array, String) { |obj, _| obj.to_s }
|
@@ -1,5 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(Date, Time) { |obj, _| obj.to_time }
|
2
|
-
Yukata.coercer.register(Date, DateTime) { |obj, _| obj.to_datetime }
|
3
|
-
Yukata.coercer.register(Date, Integer) { |obj, _| obj.to_time.to_i }
|
4
|
-
Yukata.coercer.register(Date, Float) { |obj, _| obj.to_time.to_f }
|
5
|
-
Yukata.coercer.register(Date, String) { |obj, _| obj.to_s }
|
@@ -1,5 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(DateTime, Time) { |obj, _| obj.to_time }
|
2
|
-
Yukata.coercer.register(DateTime, Date) { |obj, _| obj.to_date }
|
3
|
-
Yukata.coercer.register(DateTime, Integer) { |obj, _| obj.to_time.to_i }
|
4
|
-
Yukata.coercer.register(DateTime, Float) { |obj, _| obj.to_time.to_f }
|
5
|
-
Yukata.coercer.register(DateTime, String) { |obj, _| obj.to_s }
|
@@ -1,7 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(Fixnum, String) { |obj, _| obj.to_s }
|
2
|
-
Yukata.coercer.register(Fixnum, Time) { |obj, _| Time.at(obj) }
|
3
|
-
Yukata.coercer.register(Fixnum, Date) { |obj, _| Time.at(obj).to_date }
|
4
|
-
Yukata.coercer.register(Fixnum, DateTime) { |obj, _| Time.at(obj).to_datetime }
|
5
|
-
Yukata.coercer.register(Fixnum, String) { |obj, _| obj.to_s }
|
6
|
-
Yukata.coercer.register(Fixnum, Integer) { |obj, _| obj.to_i }
|
7
|
-
Yukata.coercer.register(Fixnum, Float) { |obj, _| obj.to_f }
|
@@ -1,5 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(Float, Time) { |obj, _| Time.at(obj) }
|
2
|
-
Yukata.coercer.register(Float, Date) { |obj, _| Time.at(obj).to_date }
|
3
|
-
Yukata.coercer.register(Float, DateTime) { |obj, _| Time.at(obj).to_datetime }
|
4
|
-
Yukata.coercer.register(Float, String) { |obj, _| obj.to_s }
|
5
|
-
Yukata.coercer.register(Float, Integer) { |obj, _| obj.to_i }
|
@@ -1,4 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(Integer, Time) { |obj, _| Time.at(obj) }
|
2
|
-
Yukata.coercer.register(Integer, Date) { |obj, _| Time.at(obj).to_date }
|
3
|
-
Yukata.coercer.register(Integer, DateTime) { |obj, _| Time.at(obj).to_datetime }
|
4
|
-
Yukata.coercer.register(Integer, String) { |obj, _| obj.to_s }
|
@@ -1,26 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(String, Time) do |obj, type|
|
2
|
-
begin
|
3
|
-
type.parse(obj)
|
4
|
-
rescue ArgumentError
|
5
|
-
nil
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
Yukata.coercer.register(String, Date) do |obj, type|
|
10
|
-
begin
|
11
|
-
type.parse(obj)
|
12
|
-
rescue ArgumentError
|
13
|
-
nil
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
Yukata.coercer.register(String, DateTime) do |obj, type|
|
18
|
-
begin
|
19
|
-
type.parse(obj)
|
20
|
-
rescue ArgumentError
|
21
|
-
nil
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
Yukata.coercer.register(String, Integer) { |obj, _| obj.to_i }
|
26
|
-
Yukata.coercer.register(String, Float) { |obj, _| obj.to_f }
|
@@ -1,5 +0,0 @@
|
|
1
|
-
Yukata.coercer.register(Time, Date) { |obj, _| obj.to_date }
|
2
|
-
Yukata.coercer.register(Time, DateTime) { |obj, _| obj.to_datetime }
|
3
|
-
Yukata.coercer.register(Time, Integer) { |obj, _| obj.to_i }
|
4
|
-
Yukata.coercer.register(Time, Float) { |obj, _| obj.to_f }
|
5
|
-
Yukata.coercer.register(Time, String) { |obj, _| obj.to_s }
|