groupy 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +108 -0
  3. data/Rakefile +11 -8
  4. data/lib/groupy.rb +6 -1
  5. data/test/test_helper.rb +3 -5
  6. metadata +115 -79
  7. data/README +0 -92
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5aaf7c85ef5a4ea110b016cc5d6ba2f5019ff6ef0209bc6153146db6944857fa
4
+ data.tar.gz: c40deb91bf687c41a642ce2bc9f4e36b28c95c8c3916a00ded4e965b9d5ddae2
5
+ SHA512:
6
+ metadata.gz: 24eec4b353c8dde515de7109c42d0895146c499986bcf5eb86b823183520dc4dc7cca90262021b19e49476d5c5911e18bd5df8e44c316770bc9f82b972f39f11
7
+ data.tar.gz: ff9d25151280abe55bdad25b8f3eddd4f039cbc80d2b899ec5701dd22bb694d44b54b3b3b3c8a098eb7cb1ec7ed7ed0f69ee740d5352fcffd03c0cb1ac048abe
@@ -0,0 +1,108 @@
1
+ Groupy [![Build Status](https://travis-ci.org/matthewrudy/groupy.svg?branch=master)](https://travis-ci.org/matthewrudy/groupy)
2
+ =======
3
+
4
+ Categorise records into nested groups of values.
5
+
6
+ Example
7
+ =======
8
+
9
+ Define our groups
10
+
11
+ ``` ruby
12
+ class Food
13
+ property :dish, String
14
+
15
+ include Groupy
16
+ groupy :dish do
17
+ group :healthy do
18
+ group :fruit do
19
+ value :apple
20
+ value :orange
21
+ end
22
+ value :rice
23
+ end
24
+
25
+ group :unhealthy do
26
+ value :fried_egg
27
+ value :bacon
28
+ end
29
+ end
30
+ end
31
+ ```
32
+
33
+ We can then ask a particular food:
34
+
35
+ ``` ruby
36
+ apple.healthy?
37
+ apple.fruit?
38
+ apple.apple?
39
+ ```
40
+
41
+ And we can scope the class by any of these groups
42
+
43
+ ``` ruby
44
+ Food.apples.count
45
+ Food.fruits.all
46
+ ```
47
+
48
+ We also get a magic "all_" method
49
+
50
+ ``` ruby
51
+ Food.all_dishes
52
+ ```
53
+
54
+ You can also tell groupy to add the column name as a suffix
55
+
56
+ ``` ruby
57
+ class Something
58
+ groupy :size, :suffix => true do
59
+ value :small
60
+ value :medium
61
+ value :large
62
+ end
63
+ end
64
+
65
+ something.small_size?
66
+ ```
67
+
68
+ Or you may want to store all the values as a conveniently named constant.
69
+
70
+ ``` ruby
71
+ class Something
72
+ groupy :size, :constants => true do
73
+ value :small
74
+ value :medium
75
+ value :large
76
+ end
77
+ end
78
+
79
+ Something::SMALL
80
+ Something::MEDIUM
81
+ Something::LARGE
82
+ ```
83
+
84
+ Or of course you can do both together
85
+
86
+ ``` ruby
87
+ Something::SMALL_SIZE
88
+ Something::MEDIUM_SIZE
89
+ Something::LARGE_SIZE
90
+ ```
91
+
92
+ Any values will be lowercased and underscored
93
+
94
+ ``` ruby
95
+ class Something
96
+ groupy :type do
97
+ value :SomeClass
98
+ value :"Namespace::KlassName"
99
+ end
100
+ end
101
+
102
+ something.some_class?
103
+ something.namespace_klass_name?
104
+ ```
105
+
106
+ B00m!
107
+
108
+ Copyright (c) 2010 [Matthew Rudy Jacobs], released under the MIT license
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
- require 'rake/rdoctask'
3
+ require 'rdoc/task'
4
4
 
5
5
  desc 'Default: run unit tests.'
6
6
  task :default => :test
@@ -22,7 +22,7 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
22
22
  rdoc.rdoc_files.include('lib/**/*.rb')
23
23
  end
24
24
 
25
- require "rake/gempackagetask"
25
+ require 'rubygems/package_task'
26
26
 
27
27
  # This builds the actual gem. For details of what all these options
28
28
  # mean, and other ones you can add, check the documentation here:
@@ -33,18 +33,17 @@ spec = Gem::Specification.new do |s|
33
33
 
34
34
  # Change these as appropriate
35
35
  s.name = "groupy"
36
- s.version = "0.2.3"
36
+ s.version = "0.3.0"
37
37
  s.summary = "Categorise Active Records in nested groups with magical scopes, ? methods, and constants."
38
38
  s.author = "Matthew Rudy Jacobs"
39
39
  s.email = "MatthewRudyJacobs@gmail.com"
40
40
  s.homepage = "https://github.com/matthewrudy/groupy"
41
41
 
42
- s.has_rdoc = true
43
- s.extra_rdoc_files = %w(README)
44
- s.rdoc_options = %w(--main README)
42
+ s.extra_rdoc_files = %w(README.md)
43
+ s.rdoc_options = %w(--main README.md)
45
44
 
46
45
  # Add any extra files to include in the gem
47
- s.files = %w(README MIT-LICENSE Rakefile) + Dir.glob("{test,lib}/**/*")
46
+ s.files = %w(README.md MIT-LICENSE Rakefile) + Dir.glob("{test,lib}/**/*")
48
47
  s.require_paths = ["lib"]
49
48
 
50
49
  # If you want to depend on other gems, add them here, along with any
@@ -53,7 +52,11 @@ spec = Gem::Specification.new do |s|
53
52
 
54
53
  # If your tests use any gems, include them here
55
54
  s.add_development_dependency("activerecord")
55
+ s.add_development_dependency("minitest")
56
+ s.add_development_dependency("rake")
57
+ s.add_development_dependency("rdoc")
56
58
  s.add_development_dependency("sqlite3-ruby")
59
+ s.add_development_dependency("test-unit")
57
60
  end
58
61
 
59
62
  # This task actually builds the gem. We also regenerate a static
@@ -63,7 +66,7 @@ end
63
66
  #
64
67
  # To publish your gem online, install the 'gemcutter' gem; Read more
65
68
  # about that here: http://gemcutter.org/pages/gem_docs
66
- Rake::GemPackageTask.new(spec) do |pkg|
69
+ Gem::PackageTask.new(spec) do |pkg|
67
70
  pkg.gem_spec = spec
68
71
  end
69
72
 
@@ -1,4 +1,5 @@
1
1
  require 'active_support/core_ext/class/attribute_accessors'
2
+ require 'active_support/core_ext/string/inflections'
2
3
 
3
4
  module Groupy
4
5
 
@@ -96,7 +97,11 @@ module Groupy
96
97
  scope_name = method_name.to_s.pluralize
97
98
 
98
99
  if defined?(ActiveRecord) && klass < ActiveRecord::Base
99
- klass.scope(scope_name, klass.where(column_name => group_values))
100
+ klass.class_eval <<-RUBY
101
+ def self.#{scope_name}
102
+ where(#{column_name.inspect} => #{group_values.inspect})
103
+ end
104
+ RUBY
100
105
  end
101
106
  end
102
107
 
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'active_support'
4
-
5
- $:.unshift File.expand_path(File.dirname(__FILE__)+"/../lib")
1
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2
+ require "active_support"
3
+ require "minitest/autorun"
metadata CHANGED
@@ -1,115 +1,151 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: groupy
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 3
10
- version: 0.2.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Matthew Rudy Jacobs
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-02-16 00:00:00 +08:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2018-07-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: activesupport
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
27
17
  - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
33
20
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
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
36
28
  name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
37
49
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
41
52
  - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  type: :development
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
50
84
  name: sqlite3-ruby
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
51
91
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
55
94
  - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: test-unit
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
61
104
  type: :development
62
- version_requirements: *id003
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
63
111
  description:
64
112
  email: MatthewRudyJacobs@gmail.com
65
113
  executables: []
66
-
67
114
  extensions: []
68
-
69
- extra_rdoc_files:
70
- - README
71
- files:
72
- - README
115
+ extra_rdoc_files:
116
+ - README.md
117
+ files:
73
118
  - MIT-LICENSE
119
+ - README.md
74
120
  - Rakefile
121
+ - lib/groupy.rb
75
122
  - test/groupy_test.rb
76
123
  - test/test_helper.rb
77
124
  - test/with_database_test.rb
78
- - lib/groupy.rb
79
- has_rdoc: true
80
125
  homepage: https://github.com/matthewrudy/groupy
81
126
  licenses: []
82
-
127
+ metadata: {}
83
128
  post_install_message:
84
- rdoc_options:
85
- - --main
86
- - README
87
- require_paths:
129
+ rdoc_options:
130
+ - "--main"
131
+ - README.md
132
+ require_paths:
88
133
  - lib
89
- required_ruby_version: !ruby/object:Gem::Requirement
90
- none: false
91
- requirements:
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
92
136
  - - ">="
93
- - !ruby/object:Gem::Version
94
- hash: 3
95
- segments:
96
- - 0
97
- version: "0"
98
- required_rubygems_version: !ruby/object:Gem::Requirement
99
- none: false
100
- requirements:
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
101
141
  - - ">="
102
- - !ruby/object:Gem::Version
103
- hash: 3
104
- segments:
105
- - 0
106
- version: "0"
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
107
144
  requirements: []
108
-
109
145
  rubyforge_project:
110
- rubygems_version: 1.5.2
146
+ rubygems_version: 2.7.7
111
147
  signing_key:
112
- specification_version: 3
113
- summary: Categorise Active Records in nested groups with magical scopes, ? methods, and constants.
148
+ specification_version: 4
149
+ summary: Categorise Active Records in nested groups with magical scopes, ? methods,
150
+ and constants.
114
151
  test_files: []
115
-
data/README DELETED
@@ -1,92 +0,0 @@
1
- Groupy
2
- =======
3
-
4
- Categorise records into nested groups of values.
5
-
6
- Example
7
- =======
8
-
9
- Define our groups
10
-
11
- class Food
12
- property :dish, String
13
-
14
- include Groupy
15
- groupy :dish do
16
- group :healthy do
17
- group :fruit do
18
- value :apple
19
- value :orange
20
- end
21
- value :rice
22
- end
23
-
24
- group :unhealthy do
25
- value :fried_egg
26
- value :bacon
27
- end
28
- end
29
- end
30
-
31
- We can then ask a particular food:
32
-
33
- apple.healthy?
34
- apple.fruit?
35
- apple.apple?
36
-
37
- And we can scope the class by any of these groups
38
-
39
- Food.apples.count
40
- Food.fruits.all
41
-
42
- We also get a magic "all_" method
43
-
44
- Food.all_dishes
45
-
46
- You can also tell groupy to add the column name as a suffix
47
-
48
- class Something
49
- groupy :size, :suffix => true do
50
- value :small
51
- value :medium
52
- value :large
53
- end
54
- end
55
-
56
- something.small_size?
57
-
58
- Or you may want to store all the values as a conveniently named constant.
59
-
60
- class Something
61
- groupy :size, :constants => true do
62
- value :small
63
- value :medium
64
- value :large
65
- end
66
- end
67
-
68
- Something::SMALL
69
- Something::MEDIUM
70
- Something::LARGE
71
-
72
- Or of course you can do both together
73
-
74
- Something::SMALL_SIZE
75
- Something::MEDIUM_SIZE
76
- Something::LARGE_SIZE
77
-
78
- Any values will be lowercased and underscored
79
-
80
- class Something
81
- groupy :type do
82
- value :SomeClass
83
- value :"Namespace::KlassName"
84
- end
85
- end
86
-
87
- something.some_class?
88
- something.namespace_klass_name?
89
-
90
- B00m!
91
-
92
- Copyright (c) 2010 [Matthew Rudy Jacobs], released under the MIT license