yaml_enumeration 0.1.0 → 0.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 +5 -5
- data/CHANGELOG.md +9 -0
- data/README.md +72 -7
- data/lib/yaml_enumeration/enumeration.rb +22 -0
- data/lib/yaml_enumeration/version.rb +1 -1
- data/yaml_enumeration.gemspec +5 -4
- metadata +16 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 939fc41bc3dae93b1f734a20300fb3b28e8a06d39d53606dea2ad550c6fc329a
|
4
|
+
data.tar.gz: caf13ede07f9ddd88489e73b53f13e95b0b5f62129ad79130fe5c53a04a901f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 268c4a9f2aaeb23b5b5692c0d2ae0824c7701eed23fc076c4beb42a90f4a0336fee9bce62b324e5e3e2cf31ced72a23fba6aceaa85e40cd9f88171bebdfc6e54
|
7
|
+
data.tar.gz: ea9a72ecb8bf7214e63ded302257f73e16dac0d289b909f4b377a0d5a43f336dbac72836633871a1627f7de6352c9dc19bfe05c8210b62ec3db54838ee86fdea
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,12 +1,17 @@
|
|
1
|
-
#
|
1
|
+
# Yaml Enumeration
|
2
2
|
|
3
|
-
|
3
|
+
[](http://badge.fury.io/rb/yaml_enumeration)
|
4
|
+
[](https://travis-ci.org/alto/yaml_enumeration)
|
4
5
|
|
5
|
-
|
6
|
+
Create classes which work (a bit) like
|
7
|
+
[ActiveRecord](http://guides.rubyonrails.org/active_record_basics.html)
|
8
|
+
classes, but are defined as fixed enumerations based on
|
9
|
+
[YAML](http://yaml.org)
|
10
|
+
files.
|
6
11
|
|
7
12
|
## Installation
|
8
13
|
|
9
|
-
Add this line to your application's Gemfile
|
14
|
+
Add this line to your application's `Gemfile`:
|
10
15
|
|
11
16
|
```ruby
|
12
17
|
gem 'yaml_enumeration'
|
@@ -22,7 +27,68 @@ Or install it yourself as:
|
|
22
27
|
|
23
28
|
## Usage
|
24
29
|
|
25
|
-
|
30
|
+
Let's assume you have a `User` class representing a user who can log into your app.
|
31
|
+
This user is supposed to have a home country, and you want to do things like
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
user = User.new(country: Country.find_by_code('nz'))
|
35
|
+
puts user.country.code
|
36
|
+
# => 'nz'
|
37
|
+
puts user.country.name
|
38
|
+
# => 'New Zealand'
|
39
|
+
```
|
40
|
+
|
41
|
+
You can then simply create a `Country` class:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
# country.rb
|
45
|
+
class Country < YamlEnumeration::Enumeration
|
46
|
+
# imports the definitions from the yaml file countries.yml
|
47
|
+
load_values :countries
|
48
|
+
|
49
|
+
# all, where, find_by and find_by_type are provided
|
50
|
+
def self.find_by_code(code)
|
51
|
+
all.find_by(code: code)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
a `yaml` file containing all your countries:
|
57
|
+
|
58
|
+
```yaml
|
59
|
+
# countries.yml
|
60
|
+
---
|
61
|
+
nz:
|
62
|
+
id: 1 # has to be provided
|
63
|
+
type: new_zealand # has to be provided
|
64
|
+
name: New Zealand
|
65
|
+
code: nz
|
66
|
+
au:
|
67
|
+
id: 2
|
68
|
+
type: australia
|
69
|
+
name: Australia
|
70
|
+
code: au
|
71
|
+
...
|
72
|
+
```
|
73
|
+
|
74
|
+
and link that into your `User` class:
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
# user.rb
|
78
|
+
class User < ActiveRecord::Base
|
79
|
+
belongs_to_enumeration :country
|
80
|
+
end
|
81
|
+
```
|
82
|
+
|
83
|
+
## Accessing members
|
84
|
+
|
85
|
+
If you include a call to class method `with_named_items` you will get an item defined for each typed entry in the enumeration, e.g. `Country.NEW_ZEALAND` and `Country.AUSTRALIA`.
|
86
|
+
|
87
|
+
By passing a column name, e.g:
|
88
|
+
```
|
89
|
+
with_named_items(:code)
|
90
|
+
```
|
91
|
+
that column will be used, e.g: `Country.AU` and `Country.NZ`
|
26
92
|
|
27
93
|
## Development
|
28
94
|
|
@@ -32,10 +98,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
98
|
|
33
99
|
## Contributing
|
34
100
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
101
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/alto/yaml_enumeration. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
102
|
|
37
103
|
|
38
104
|
## License
|
39
105
|
|
40
106
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
41
|
-
|
@@ -73,6 +73,7 @@ module YamlEnumeration
|
|
73
73
|
|
74
74
|
class << self
|
75
75
|
def all
|
76
|
+
return [] unless values
|
76
77
|
# values.keys.map {|id| new(id)} # override this if you do not want to keep associated obj loaded against
|
77
78
|
self.all_instances ||= values.keys.map {|id| new(id)}
|
78
79
|
end
|
@@ -89,10 +90,31 @@ module YamlEnumeration
|
|
89
90
|
end
|
90
91
|
alias_method :find_by_id, :find
|
91
92
|
|
93
|
+
def find_by(column, value)
|
94
|
+
all.find {|item| item.send(column) == value }
|
95
|
+
end
|
96
|
+
|
92
97
|
def find_by_type(type)
|
93
98
|
all.detect {|a| a.type == type.to_s}
|
94
99
|
end
|
95
100
|
|
101
|
+
def where(matches)
|
102
|
+
raise "Only the hash form of where is supported, not #{matches}" unless matches.is_a?(Hash)
|
103
|
+
|
104
|
+
all.select do |item|
|
105
|
+
matches.all? {|k,v| item.send(k) == v }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Define singleton methods .BLAH for each type
|
110
|
+
def with_named_items(column = :type)
|
111
|
+
all.each do |item|
|
112
|
+
define_singleton_method "#{item.send(column).upcase}" do
|
113
|
+
find_by(column, item.send(column).downcase)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
96
118
|
protected :new
|
97
119
|
end # class << self
|
98
120
|
|
data/yaml_enumeration.gemspec
CHANGED
@@ -10,7 +10,8 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["boettger@mt7.de"]
|
11
11
|
|
12
12
|
spec.summary = %q{Create ActiveRecord enumerations based on YAML files.}
|
13
|
-
spec.description = %q{Create
|
13
|
+
spec.description = %q{Create classes which work like ActiveRecord classes,
|
14
|
+
but are defined as fixed enumerations based on YAML files.}
|
14
15
|
spec.homepage = "https://github.com/alto/yaml_enumeration"
|
15
16
|
spec.license = "MIT"
|
16
17
|
|
@@ -21,9 +22,9 @@ Gem::Specification.new do |spec|
|
|
21
22
|
|
22
23
|
spec.add_development_dependency "bundler", "~> 1.12"
|
23
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
-
spec.add_development_dependency "
|
25
|
+
spec.add_development_dependency "maxitest", '~> 1'
|
25
26
|
spec.add_development_dependency "shoulda-context"
|
26
27
|
|
27
|
-
spec.add_dependency "activesupport"
|
28
|
-
spec.add_dependency "railties"
|
28
|
+
spec.add_dependency "activesupport", '>= 4'
|
29
|
+
spec.add_dependency "railties", '>= 4'
|
29
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml_enumeration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thorsten Boettger
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: maxitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: shoulda-context
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,29 +72,31 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '4'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '4'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: railties
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '4'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
97
|
-
description:
|
96
|
+
version: '4'
|
97
|
+
description: |-
|
98
|
+
Create classes which work like ActiveRecord classes,
|
99
|
+
but are defined as fixed enumerations based on YAML files.
|
98
100
|
email:
|
99
101
|
- boettger@mt7.de
|
100
102
|
executables: []
|
@@ -103,6 +105,7 @@ extra_rdoc_files: []
|
|
103
105
|
files:
|
104
106
|
- ".gitignore"
|
105
107
|
- ".travis.yml"
|
108
|
+
- CHANGELOG.md
|
106
109
|
- CODE_OF_CONDUCT.md
|
107
110
|
- Gemfile
|
108
111
|
- LICENSE.txt
|
@@ -136,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
139
|
version: '0'
|
137
140
|
requirements: []
|
138
141
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.7.6
|
140
143
|
signing_key:
|
141
144
|
specification_version: 4
|
142
145
|
summary: Create ActiveRecord enumerations based on YAML files.
|