trax_model 0.0.6 → 0.0.7

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: 7872fe10e5e8fcbe93b6897dd20c4b7da7890d1c
4
- data.tar.gz: a3844a50a55a3a4d73699e5bddd8551539433e65
3
+ metadata.gz: ea648e5e27dcfea15c70cc7a42b75089f6a3511f
4
+ data.tar.gz: 611952b4b1f4031bf17d5e1857addabd371bb823
5
5
  SHA512:
6
- metadata.gz: 9c4010865a9e93b936268e272cc554e1f45fd6082688c165855d5472f7f08bd4ac114cd9aa589e0ac1c08de4936c86b8bc6f187cea7f2412e9683c4c046ec2e1
7
- data.tar.gz: 6f33aa0545ab904bee6517f1b58216bbe9b37ef18afa0a46d8ea871d4ea11e6d99d93fbf53fe671ce5332492b2583eb61272fe75473efdbc41415afb25d1e5d4
6
+ metadata.gz: 267094cef9ff8161ebc7029f41d59998495578fc17658aa41c5abb343be1fe31cae7e85d75e2ed4f37d196d80919f17d237b0500a2d88933d127759ebb7f479a
7
+ data.tar.gz: 456a2dbc24cddfabe0975be863ba62e4d4008630d0e1d551faa4378f2a5efc7abb095e98ba60df6410cf3f2a45883a387bcdf9b74e582e9046ec6cf0728becc9
@@ -15,6 +15,7 @@ module Trax
15
15
  extend ::ActiveSupport::Autoload
16
16
 
17
17
  autoload :Config
18
+ autoload :Enum
18
19
  autoload :Errors
19
20
  autoload :Freezable
20
21
  autoload :Registry
@@ -0,0 +1,52 @@
1
+ # An opinionated enum preconfiguration:
2
+ # Uses simple_enum instead of active record built in enum, due to the complete
3
+ # and utter polution it causes to your classes. in addition, AR does not prefix
4
+ # enums with anything, i.e.
5
+ # class User
6
+ # enum :gender => [:unknown, :male, :female]
7
+ # enum :locale => [:unknown, :en, :ca]
8
+ # will break because :unknown cant be used twice, since it defines an User.unknown
9
+ # method, the value which does not even make sense in alot of situations, out of context
10
+ #
11
+ # So, we use simple_enum instead, which will allow us to do that
12
+ # in addition, I dont like that simple_enum does not allow you to raise errrors at the activerecord
13
+ # level using validations, therefore you cant reuse the same interface for displaying errors
14
+ # to the user if an invalid value is picked
15
+ # so validation is added when an enum is defined
16
+ # also defines just 2 generic scopes, by_enum_name, and by_enum_name_not, which accept multiple args
17
+ # i.e. by_gender(:male), by_gender_not(:female, :unknown)
18
+ # in interest of not polluting the class with scopes for each individual enum value
19
+
20
+ module Trax
21
+ module Model
22
+ module Enum
23
+ extend ::ActiveSupport::Concern
24
+
25
+ module ClassMethods
26
+ def as_enum(enum_name, args, options = {})
27
+ options.assert_valid_keys(:prefix, :source, :message)
28
+ options[:message] ||= "Is not a valid value for #{enum_name}"
29
+ options[:prefix] ||= true
30
+ options[:source] ||= enum_name
31
+ enum_values = args.is_a?(Hash) ? args.keys : args
32
+ validation_options = { :in => enum_values, :message => options.extract!(:message) }
33
+
34
+ self.validates_inclusion_of(enum_name, validation_options)
35
+ scope_method_name = :"by_#{enum_name}"
36
+ scope_not_method_name = :"by_#{enum_name}_not"
37
+
38
+ self.scope scope_method_name, lambda { |*values|
39
+ enum_hash = self.__send__("#{enum_name}".pluralize).hash
40
+ where(enum_name => enum_hash.with_indifferent_access.slice(*values.flatten.compact.uniq).values)
41
+ }
42
+ self.scope scope_not_method_name, lambda { |*values|
43
+ enum_hash = self.__send__("#{enum_name}".pluralize).hash
44
+ where.not(enum_name => enum_hash.with_indifferent_access.slice(*values.flatten.compact.uniq).values)
45
+ }
46
+
47
+ super(enum_name, args, options)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,3 @@
1
1
  module TraxModel
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "trax_core", "~> 0.0.3"
22
22
  spec.add_dependency "default_value_for", "~> 3.0.0"
23
+ spec.add_dependency "simple_enum"
23
24
  spec.add_development_dependency "activerecord"
24
25
  spec.add_development_dependency "bundler", "~> 1.6"
25
26
  spec.add_development_dependency "rake"
@@ -35,4 +36,5 @@ Gem::Specification.new do |spec|
35
36
  spec.add_development_dependency 'guard-bundler', '~> 2'
36
37
  spec.add_development_dependency 'rb-fsevent'
37
38
  spec.add_development_dependency 'terminal-notifier-guard'
39
+
38
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trax_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Ayre
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-14 00:00:00.000000000 Z
11
+ date: 2014-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: trax_core
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: simple_enum
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: activerecord
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -266,6 +280,7 @@ files:
266
280
  - lib/trax.rb
267
281
  - lib/trax/model.rb
268
282
  - lib/trax/model/config.rb
283
+ - lib/trax/model/enum.rb
269
284
  - lib/trax/model/errors.rb
270
285
  - lib/trax/model/freezable.rb
271
286
  - lib/trax/model/matchable.rb
@@ -323,7 +338,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
323
338
  version: '0'
324
339
  requirements: []
325
340
  rubyforge_project:
326
- rubygems_version: 2.4.3
341
+ rubygems_version: 2.2.2
327
342
  signing_key:
328
343
  specification_version: 4
329
344
  summary: Higher level ActiveRecord models for rails