lite_enum 0.0.1

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.
@@ -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: