trax_core 0.0.83 → 0.0.84

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: c6d3edf83c6a6d1b9b57bfacf6e6b185139c5e9e
4
- data.tar.gz: fe41bc8fa78daa685df68da9d513bb3d5377b421
3
+ metadata.gz: cc61a40b6e173df7ff14e66550fd7c5fa558ab4c
4
+ data.tar.gz: 9b5f6b14a3b4c714b094f8020b66f3d532a79855
5
5
  SHA512:
6
- metadata.gz: 2c3579335b54d9831cd2bf708aad4ad3d6bcd011b208b0514ccf75ab43a272dd3aa52fdab1aff545382606d26535740bdb6ba56dd7879676f027368ef755bbc9
7
- data.tar.gz: 0c29fc5fd805a2476345dd692ed5b6a19720241343b8bcba259c428e6cd31d16e257fa5d033209a838d488567c4732809f22586da9b644749598f48c598401b6
6
+ metadata.gz: 18b3e5d1d9dc44a315bc88480c76b68ecb81a00d07dd41d14b831040ea3e62c7c696477ba9965c34f449a5f168aa35529f94ef3619f7ef2ebc99af8a5457bab7
7
+ data.tar.gz: 1013d42d2b1900af67bd2e46edf65c0e28a59c301c400ae60423d945acf7d06ae2656b260a95d5baec813671323b50adabcfefb4438fd40102be00f349e47a47
data/Gemfile CHANGED
@@ -3,6 +3,10 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in trax_core.gemspec
4
4
  gemspec
5
5
 
6
+ # gem 'hashie', :github => "intridea/hashie"
7
+ #pointing at branch until default value procs for dash is merged
8
+ gem 'hashie', :github => "jasonayre/hashie"
9
+
6
10
  group :development do
7
11
  gem 'guard-bundler'
8
12
  end
@@ -12,6 +12,7 @@ module Trax
12
12
  autoload :Float
13
13
  autoload :Integer
14
14
  autoload :Json
15
+ autoload :Set
15
16
  autoload :String
16
17
  autoload :Struct
17
18
  autoload :Time
@@ -5,6 +5,11 @@ module Trax
5
5
  def self.type
6
6
  :boolean
7
7
  end
8
+
9
+ def self.to_schema
10
+ result = super
11
+ result[:values] = [true, false]
12
+ end
8
13
  end
9
14
  end
10
15
  end
@@ -0,0 +1,15 @@
1
+ module Trax
2
+ module Core
3
+ module Types
4
+ class Set < ::Trax::Core::Types::ValueObject
5
+ def initialize(*args)
6
+ super(::Set[*args.flatten])
7
+ end
8
+
9
+ def self.type
10
+ :set
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -22,6 +22,7 @@ module Trax
22
22
  :float => 0.0,
23
23
  :integer => nil,
24
24
  :json => {},
25
+ :set => [],
25
26
  :string => "",
26
27
  :struct => {},
27
28
  :time => nil
@@ -70,6 +71,10 @@ module Trax
70
71
  define_attribute_class_for_type(:json, name, *args, **options, &block)
71
72
  end
72
73
 
74
+ def self.set_property(name, *args, **options, &block)
75
+ define_attribute_class_for_type(:set, name, *args, :coerce => true, **options, &block)
76
+ end
77
+
73
78
  def self.string_property(name, *args, **options, &block)
74
79
  define_attribute_class_for_type(:string, name, *args, :coerce => ::String, **options, &block)
75
80
  end
@@ -79,7 +84,20 @@ module Trax
79
84
  end
80
85
 
81
86
  def self.time_property(name, *args, **options, &block)
82
- define_attribute_class_for_type(:time, name, *args, :coerce => ->(value){ ::Time.parse(value) if value }, **options, &block)
87
+ define_attribute_class_for_type(:time, name, *args, :coerce => ->(value){
88
+ result = if value
89
+ case value
90
+ when ::String
91
+ ::Time.parse(value)
92
+ when ::Time
93
+ value
94
+ when ::Proc
95
+ value.call
96
+ end
97
+ end
98
+
99
+ result
100
+ }, **options, &block)
83
101
  end
84
102
 
85
103
  def self.to_schema
@@ -110,6 +128,7 @@ module Trax
110
128
  alias :float :float_property
111
129
  alias :integer :integer_property
112
130
  alias :json :json_property
131
+ alias :set :set_property
113
132
  alias :string :string_property
114
133
  alias :struct :struct_property
115
134
  alias :time :time_property
@@ -136,6 +155,7 @@ module Trax
136
155
  end
137
156
 
138
157
  options[:default] = options.key?(:default) ? options[:default] : DEFAULT_VALUES_FOR_PROPERTY_TYPES[type_name]
158
+
139
159
  property(property_name.to_sym, *args, **options)
140
160
 
141
161
  if coerce.is_a?(::Proc)
@@ -17,6 +17,14 @@ module Trax
17
17
  def self.to_sym
18
18
  :value
19
19
  end
20
+
21
+ def self.to_schema
22
+ ::Trax::Core::Definition.new(
23
+ :name => self.name.demodulize.underscore,
24
+ :source => self.name,
25
+ :type => self.type
26
+ )
27
+ end
20
28
  end
21
29
  end
22
30
  end
@@ -1,3 +1,3 @@
1
1
  module TraxCore
2
- VERSION = "0.0.83"
2
+ VERSION = "0.0.84"
3
3
  end
@@ -17,6 +17,19 @@ describe ::Trax::Core::Types::Array do
17
17
  let(:test_subject) { subject.new({:width => 1}) }
18
18
  it { test_subject[0].width.should eq 1 }
19
19
  it { test_subject[0].height.should eq 0 }
20
+
21
+ context "does not duplicate values" do
22
+ it {
23
+ test_subject << {:width => 2, :height => 2}
24
+ expect(test_subject.length).to eq 2
25
+ }
26
+
27
+ it {
28
+ test_subject << {}
29
+ test_subject << {}
30
+ expect(test_subject.last.width).to eq 0
31
+ }
32
+ end
20
33
  end
21
34
 
22
35
  context "ArrayOf" do
@@ -16,6 +16,13 @@ describe ::Trax::Core::Types::Struct do
16
16
  end
17
17
 
18
18
  time :created_at
19
+ time :last_updated_at, :default => lambda{|record| ::Time.mktime(1980,1,1) }
20
+
21
+ float :latitude, :default => 1.0
22
+ float :longitude, :default => 5.0
23
+
24
+ set :place_ids
25
+ set :lat_long_with_sum, :default => lambda{|record| [ record.latitude, record.longitude, (record.latitude + record.longitude) ] }
19
26
  end
20
27
 
21
28
  struct :Locale do
@@ -85,6 +92,27 @@ describe ::Trax::Core::Types::Struct do
85
92
  end
86
93
  end
87
94
 
95
+ context "with set property" do
96
+ let(:definition) { "::MyFakeStructNamespace::Location".constantize.new(:place_ids => [1, 2]) }
97
+
98
+ subject { definition }
99
+ it { expect(definition.place_ids.first).to eq(1) }
100
+
101
+ context "behaves like a set" do
102
+ it {
103
+ subject.place_ids << 1
104
+ subject.place_ids << 1
105
+ expect(subject.place_ids.length).to eq 2
106
+ }
107
+ end
108
+
109
+ context "default value" do
110
+ it {
111
+ expect(subject.lat_long_with_sum).to eq [1.0, 5.0, 6.0].to_set
112
+ }
113
+ end
114
+ end
115
+
88
116
  context "with boolean property" do
89
117
  let(:definition) { "::MyFakeStructNamespace::Locale".constantize }
90
118
  subject { definition.new(:is_whatever => false) }
@@ -107,10 +135,15 @@ describe ::Trax::Core::Types::Struct do
107
135
  subject { definition.new(:created_at => fake_time1) }
108
136
  it { expect(subject.created_at).to eq fake_time1 }
109
137
 
110
- context do
138
+ context "parsing timestamps" do
111
139
  let(:db_timestamp) { "2015-12-05 15:34:57.701289" }
112
140
  let(:test_subject) { definition.new(:created_at => db_timestamp) }
113
141
  it { test_subject.created_at.should be_a(::Time) }
114
142
  end
143
+
144
+ context "default value" do
145
+ subject{ definition.new }
146
+ it { expect(subject.last_updated_at).to eq ::Time.mktime(1980,1,1) }
147
+ end
115
148
  end
116
149
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "hashie"
21
+ spec.add_dependency "hashie", '~>3.4.4'
22
22
  spec.add_dependency "activesupport"
23
23
  spec.add_dependency "activemodel"
24
24
  spec.add_dependency "wannabe_bool"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trax_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.83
4
+ version: 0.0.84
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Ayre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-06 00:00:00.000000000 Z
11
+ date: 2016-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 3.4.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 3.4.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -239,6 +239,7 @@ files:
239
239
  - lib/trax/core/types/float.rb
240
240
  - lib/trax/core/types/integer.rb
241
241
  - lib/trax/core/types/json.rb
242
+ - lib/trax/core/types/set.rb
242
243
  - lib/trax/core/types/string.rb
243
244
  - lib/trax/core/types/struct.rb
244
245
  - lib/trax/core/types/time.rb