collectable 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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YTE4ODA2MDhmMmViYWE5YzU2MTkyMTRlYWI5ZGViYjI4ZTMxY2ZjOA==
5
+ data.tar.gz: !binary |-
6
+ YjVhMzBiODc0ZDEwM2UxMjMxZDYzYzE0Njk0ZmVhOGVkM2E0MDJjYw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MDkxMGFlNTNkOTVhZmZmYjI0MzdmOGU1NjYyMGE5MGY2ZTQwMmRmZThiNzQw
10
+ NmRiMGQyNzhmZTZlNTg1MzY3YWE5MTUxNGM5MzIzNzEyMzYzM2MwOGVlNzY3
11
+ MmZiOGY1ZTc3MmY3MzZkM2E4NDViYWZjNmNjMTY1MzMyMWNlYjM=
12
+ data.tar.gz: !binary |-
13
+ MTFiODQ4NGFmYjE5NGYyNGZiYTI2ZTQ5ZjAzNTFjMDA0NmM1MGFiM2E3Yjc0
14
+ YmVmNGI2ODA4NDE5ODFiODliMDRmYTIwNWYxZjQ4YTEyMzJmYTI3NjVjMDFl
15
+ MTNkYTY2NDM4NGI3YTI1ZmQzNGQxNWE1YTcxMTRlMDY0NjIzNTQ=
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 Dennis Walters
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ ## Collectable ##
2
+
3
+ So, I serialize stuff into arrays in my AR objects where it doesn't make
4
+ sense to go through the rigamaroe of actually making an empty AR model
5
+ to use for the association. This is just a bit of glue to make using
6
+ that pattern a bit easier with
7
+
8
+ There's not much to this thing, and what's there exists only to serve the
9
+ needs that I've had for this sort of thing.
10
+
11
+ That said, pull requests are totally welcome :)
12
+
13
+ ## Gem Setup ##
14
+
15
+ ```ruby
16
+ gem install collectable
17
+
18
+ # Gemfile
19
+ gem 'collectable'
20
+ ```
21
+ ## Basic usage ##
22
+
23
+ The short version is "include the module and define some traits." That's also
24
+ the long version, as it were.
25
+
26
+ ```ruby
27
+ class HairColor
28
+ include Collectable
29
+
30
+ trait :blonde
31
+ trait :brown
32
+ trait :red
33
+ trait :black
34
+ trait :purple
35
+ trait :tie_dye
36
+ end
37
+ ```
38
+
39
+ Then, to actually use the thing, do something like this in your view:
40
+
41
+ ```erb
42
+ <%= form_for @person do |f| %>
43
+ <%= f.collection_check_boxes(:hair_color, HairColor.collected, HairColor.value, HairColor.name) %>
44
+ <% end %>
45
+ ```
46
+
47
+ ## Contributing ##
48
+
49
+ Do you use git-flow? I sure do. Please base anything you do off of
50
+ [the develop branch](https://github.com/ess/absolution/tree/develop).
51
+
52
+ 1. Fork it.
53
+ 2. Perform some BDD magic. Seriously. Be testing.
54
+ 3. Submit a pull request.
55
+
56
+ ## History ##
57
+
58
+ * 0.0.1 - Public release
59
+
60
+ ## License ##
61
+
62
+ MIT License. Copyright 2014 Dennis Walters
@@ -0,0 +1,3 @@
1
+ module Collectable
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,26 @@
1
+ require 'ostruct'
2
+
3
+ module Collectable
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def traits
10
+ @traits ||= []
11
+ end
12
+
13
+ def trait(trait_name)
14
+ traits.push(trait_name.to_s.downcase)
15
+ traits.uniq!
16
+ end
17
+
18
+ def collected(sort_field = :name)
19
+ traits.each_with_index.map {|name, index|
20
+ OpenStruct.new(name: name, val: index)
21
+ }.sort {|a,b|
22
+ a.send(sort_field) <=> b.send(sort_field)
23
+ }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+ require 'collectable'
3
+
4
+ class Dummy
5
+ include Collectable
6
+ end
7
+
8
+ class TraitDummy
9
+ include Collectable
10
+ end
11
+
12
+ class TraitsDummy
13
+ include Collectable
14
+ end
15
+
16
+ class CollectedDummy
17
+ include Collectable
18
+ end
19
+
20
+ describe Collectable do
21
+ let(:klass) {Collectable}
22
+
23
+ context 'when included' do
24
+ let(:dummy) {Dummy}
25
+
26
+ it 'knows how to define traits' do
27
+ expect(dummy).to respond_to(:trait)
28
+ end
29
+
30
+ it 'can report its tratis' do
31
+ expect(dummy).to respond_to(:traits)
32
+ end
33
+
34
+ it 'knows how to collect the traits' do
35
+ expect(dummy).to respond_to(:collected)
36
+ end
37
+ end
38
+
39
+ describe '.trait' do
40
+ let(:trait_dummy) {
41
+ TraitDummy
42
+ }
43
+
44
+ it 'can take a symbol' do
45
+ expect {trait_dummy.trait :Blah}.not_to raise_error
46
+ end
47
+
48
+ it 'can take a string' do
49
+ expect {trait_dummy.trait 'Trait 2'}.not_to raise_error
50
+ end
51
+
52
+ it 'adds a trait to the collectable traits' do
53
+ new_trait = :New_Trait
54
+ trait_dummy.trait new_trait
55
+ expect(trait_dummy.traits).to include(new_trait.to_s.downcase)
56
+ end
57
+ end
58
+
59
+ describe '.traits' do
60
+ let(:traits_dummy) {
61
+ TraitsDummy
62
+ }
63
+
64
+ let(:new_trait) {:new_trait}
65
+
66
+ it 'is an array' do
67
+ expect(traits_dummy.traits).to be_a(Array)
68
+ end
69
+
70
+ it 'contains the traits defined by the class' do
71
+ expect(traits_dummy.traits).to be_empty
72
+
73
+ traits_dummy.trait new_trait
74
+ expect(traits_dummy.traits).to include(new_trait.to_s.downcase)
75
+ end
76
+ end
77
+
78
+ describe '.collected' do
79
+ let(:collected_dummy) {
80
+ CollectedDummy
81
+ }
82
+
83
+ it 'is an array' do
84
+ expect(collected_dummy.collected).to be_a(Array)
85
+ end
86
+
87
+ it 'contains OpenStruct representations of the known traits' do
88
+ collected_dummy.trait :trait_1
89
+ collected_dummy.trait :trait_2
90
+
91
+ expect(collected_dummy.collected.map(&:name)).
92
+ to eql(collected_dummy.traits.sort)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,9 @@
1
+ require 'rspec'
2
+ require 'rspec/mocks'
3
+ require 'rspec/expectations'
4
+
5
+ $:.unshift File.join(File.dirname(__FILE__), '..')
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_framework = :rspec
9
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: collectable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dennis Walters
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Make PORO models work with collection_check_boxes
28
+ email:
29
+ - pooster@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/collectable/version.rb
35
+ - lib/collectable.rb
36
+ - MIT-LICENSE
37
+ - README.md
38
+ - spec/collectable_spec.rb
39
+ - spec/spec_helper.rb
40
+ homepage: http://github.com/ess/collectable
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.1.11
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Make PORO models work with collection_check_boxes
64
+ test_files:
65
+ - spec/collectable_spec.rb
66
+ - spec/spec_helper.rb