lite_enum 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0a50aba22ca2f57d2b36c6159995affa4d0f2a71
4
+ data.tar.gz: 0f321e80beb4af6fb509def84c7916dec6ad7e17
5
+ SHA512:
6
+ metadata.gz: c9d6dfa0636cab799f9df14fb627e1c7476e1e4e719d9354306fc9a239eca0ea16a9d301b1a145467fd0812d629848d36c4c384d7299c3c4498797a1ecadcd6b
7
+ data.tar.gz: 7bb6d3ed9b585ee8144f9cf99360cdcc3ec9ed2f9853c1df6a61a9b15a02561255c32c7cbfb933df82c820bd208d49a3ed7018680574c8f3513ad030cd829d7a
@@ -0,0 +1,5 @@
1
+ .bundle/
2
+ log/*.log
3
+ tmp/*
4
+ *.gem
5
+ Gemfile.lock
@@ -0,0 +1 @@
1
+ 2.1.5
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ script: bundle exec rspec
3
+ notifications:
4
+ email: false
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
@@ -0,0 +1,35 @@
1
+ lite_enum [![version]](http://rubygems.org/gems/lite_enum) [![build]](https://travis-ci.org/dobtco/lite_enum)
2
+ =======
3
+
4
+ A short and sweet enumerator class for usage with ActiveRecord, most likely.
5
+
6
+ ## Goals:
7
+
8
+ - Concise
9
+ - Readable
10
+ - Useful for DOBT's stack
11
+ - Plain ol' Ruby API
12
+ - No auto-generation of predicate methods like in `ActiveRecord::Enum`
13
+
14
+ ## Usage
15
+
16
+ ```rb
17
+ # Gemfile
18
+ gem 'lite_enum'
19
+
20
+ # app/models/foo.rb
21
+ class Foo < ActiveRecord::Base
22
+ def self.sizes
23
+ LiteEnum.new(:small, :medium, :large)
24
+ end
25
+ end
26
+
27
+ Foo.sizes[1] # => :small
28
+ Foo.sizes[:small] # => 1
29
+ foo = Foo.new(size: Foo.sizes[:small])
30
+ foo.size # => 1
31
+ foo.size == Foo.sizes[:small] # => true
32
+ ```
33
+
34
+ [version]: https://img.shields.io/gem/v/lite_enum.svg
35
+ [build]: http://img.shields.io/travis/dobtco/lite_enum.svg
@@ -0,0 +1,63 @@
1
+ require 'active_support/all'
2
+
3
+ class LiteEnum < SimpleDelegator
4
+ # Public: Initialize an enum.
5
+ #
6
+ # members - the array of enum members. May contain a hash of options:
7
+ # :start - the number of first enum member. Defaults to 1.
8
+ #
9
+ # Examples
10
+ #
11
+ # FRUITS = LiteEnum.new(:apple, :orange, :kiwi)
12
+ def initialize(*members)
13
+ super({})
14
+
15
+ # Support for explicit values
16
+ if members.length == 1 && members[0].is_a?(Hash)
17
+ return update members[0]
18
+ end
19
+
20
+ options = members.extract_options!
21
+ start = options.fetch(:start) { 1 }
22
+
23
+ update Hash[members.zip(start..members.count + start)]
24
+ end
25
+
26
+ # Public: Access the number/value of member.
27
+ #
28
+ # ids_or_value - number or value of member.
29
+ #
30
+ # Returns value if number was provided, and number if value was provided.
31
+ def [](id_or_value)
32
+ fetch(id_or_value) { key(id_or_value) }
33
+ end
34
+
35
+ # Public: Check if supplied member is valid.
36
+ def valid?(member)
37
+ has_key?(member)
38
+ end
39
+
40
+ # Public: Create a subset of enum, only include specified keys.
41
+ def only(*keys)
42
+ dup.tap do |d|
43
+ d.__getobj__.keep_if { |k| keys.include?(k) }
44
+ end
45
+ end
46
+
47
+ # Public: Create a subset of enum, preserve all items but specified ones.
48
+ def except(*keys)
49
+ dup.tap do |d|
50
+ d.__getobj__.delete_if { |k| keys.include?(k) }
51
+ end
52
+ end
53
+ end
54
+
55
+ begin
56
+ require 'simple_form'
57
+ require 'simple_form/version'
58
+ rescue
59
+ end
60
+
61
+ if defined?(SimpleForm) && Gem::Version.new(SimpleForm::VERSION) >= Gem::Version.new('3.1.0')
62
+ require 'simple_form_monkeypatch'
63
+ end
@@ -0,0 +1,26 @@
1
+ module SimpleForm
2
+ module Inputs
3
+ class CollectionInput
4
+ def collection_with_lite_enum
5
+ @collection ||= begin
6
+ if options[:collection] &&
7
+ options[:collection].is_a?(LiteEnum) &&
8
+ (translated = translate_from_namespace(:options))
9
+
10
+ options.delete(:collection).map do |k, v|
11
+ if translated[k].is_a?(Hash)
12
+ [translated[k][:short], v, translated[k][:long]]
13
+ else
14
+ [translated[k], v]
15
+ end
16
+ end
17
+ else
18
+ collection_without_lite_enum
19
+ end
20
+ end
21
+ end
22
+
23
+ alias_method_chain :collection, :lite_enum
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Describe your gem and declare its dependencies:
4
+ Gem::Specification.new do |s|
5
+ s.name = 'lite_enum'
6
+ s.version = '0.0.1'
7
+ s.required_ruby_version = Gem::Requirement.new('>= 2.0.0')
8
+ s.authors = ['Adam Becker']
9
+ s.summary = 'Lightweight Enum class'
10
+ s.email = 'adam@dobt.co'
11
+ s.license = 'MIT'
12
+ s.files = `git ls-files`.split("\n")
13
+ s.test_files = `git ls-files -- {features,spec}/*`.split("\n")
14
+ s.homepage = 'http://github.com/dobtco/lite_enum'
15
+
16
+ s.add_dependency 'activesupport'
17
+
18
+ s.add_development_dependency 'rspec-rails', '3.1.0'
19
+ s.add_development_dependency 'simple_form', '3.1.0'
20
+ end
@@ -0,0 +1,38 @@
1
+ #!/bin/sh
2
+ # Tag and push a release.
3
+
4
+ set -e
5
+
6
+ # Make sure we're in the project root.
7
+
8
+ cd $(dirname "$0")/..
9
+
10
+ # Build a new gem archive.
11
+
12
+ rm -rf lite_enum-*.gem
13
+ gem build -q lite_enum.gemspec
14
+
15
+ # Make sure we're on the master branch.
16
+
17
+ (git branch | grep -q '* master') || {
18
+ echo "Only release from the master branch."
19
+ exit 1
20
+ }
21
+
22
+ # Figure out what version we're releasing.
23
+
24
+ tag=v`ls lite_enum-*.gem | sed 's/^lite_enum-\(.*\)\.gem$/\1/'`
25
+
26
+ # Make sure we haven't released this version before.
27
+
28
+ git fetch -t origin
29
+
30
+ (git tag -l | grep -q "$tag") && {
31
+ echo "Whoops, there's already a '${tag}' tag."
32
+ exit 1
33
+ }
34
+
35
+ # Tag it and bag it.
36
+
37
+ gem push lite_enum-*.gem && git tag "$tag" &&
38
+ git push origin master && git push origin "$tag"
@@ -0,0 +1,61 @@
1
+ require 'lite_enum'
2
+ require 'rspec/core'
3
+
4
+ describe LiteEnum do
5
+ let(:enum) { LiteEnum.new(:jake, :finn, :princess_bubblegum, :peppermint_butler) }
6
+
7
+ describe ".[]" do
8
+ it "looks up a number by symbol" do
9
+ expect(enum[:princess_bubblegum]).to eq(3)
10
+ end
11
+
12
+ it "looks up a symbol by number" do
13
+ expect(enum[2]).to eq(:finn)
14
+ end
15
+ end
16
+
17
+ describe ".valid?" do
18
+ it "returns true if a key exists" do
19
+ expect(enum.valid?(:finn)).to eq(true)
20
+ end
21
+
22
+ it "returns false if a key does not exist" do
23
+ expect(enum.valid?(:obama)).to eq(false)
24
+ end
25
+ end
26
+
27
+ describe ".only" do
28
+ it "returns only the values we ask for" do
29
+ expect(enum.only(:jake, :princess_bubblegum)).to eq({ jake: 1, princess_bubblegum: 3 })
30
+ end
31
+ end
32
+
33
+ describe ".except" do
34
+ it "returns everything but the values we ask to delete" do
35
+ expect(enum.except(:jake, :princess_bubblegum)).to eq({ finn: 2, peppermint_butler: 4 })
36
+ end
37
+ end
38
+
39
+ describe "options" do
40
+ describe "start" do
41
+ let(:zero_enum) { LiteEnum.new(:foo, :bar, start: 0) }
42
+
43
+ it "optionally takes a start option" do
44
+ expect(zero_enum[:foo]).to eq(0)
45
+ expect(zero_enum[:bar]).to eq(1)
46
+ end
47
+ end
48
+
49
+ describe "explicit values" do
50
+ let(:explicit_enum) do
51
+ LiteEnum.new(foo: 1, bar: 2, fizz: 4)
52
+ end
53
+
54
+ it "sets values explicitly" do
55
+ expect(explicit_enum[:foo]).to eq(1)
56
+ expect(explicit_enum[:bar]).to eq(2)
57
+ expect(explicit_enum[:fizz]).to eq(4)
58
+ end
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lite_enum
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Adam Becker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 3.1.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: simple_form
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 3.1.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.1.0
55
+ description:
56
+ email: adam@dobt.co
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".gitignore"
62
+ - ".ruby-version"
63
+ - ".travis.yml"
64
+ - Gemfile
65
+ - README.md
66
+ - lib/lite_enum.rb
67
+ - lib/simple_form_monkeypatch.rb
68
+ - lite_enum.gemspec
69
+ - script/release
70
+ - spec/lite_enum_spec.rb
71
+ homepage: http://github.com/dobtco/lite_enum
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 2.0.0
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.2.2
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Lightweight Enum class
95
+ test_files:
96
+ - spec/lite_enum_spec.rb
97
+ has_rdoc: