symbol_decoration 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +50 -0
- data/lib/symbol_decoration.rb +13 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 50f521f730b37b3aa512481b9a3cd4ac0df32bdd
|
4
|
+
data.tar.gz: ace420edc4102c58d385212e33a83ce639aca91b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 447af63c714e8d6d572a9ae75575c1a5d2009515911b4e32bb5fdff36627961c1b62396f72cf8eaf380785712fe27e142ad68bf7fcc9a196409c1329ddee4358
|
7
|
+
data.tar.gz: f03dd020f3df2dc87547ff4e3aa4ba4df29a75ec8c513bdaf814456e3a03bef3c9bfb92950af387ee3fad166db88cf94febd88037a9e2ec448bf71a4701f47c3
|
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
Symbol Decoration
|
2
|
+
=================
|
3
|
+
|
4
|
+
The Symbol Decoration gem provides symbol method extensions to implement
|
5
|
+
DSL such as like `where(:field.in => [1,2,3])`.
|
6
|
+
|
7
|
+
The goal is to allow different ORMs such as Mongoid and NoBrainer to co-exist as
|
8
|
+
both ORMs need such functionality.
|
9
|
+
|
10
|
+
Usage
|
11
|
+
=====
|
12
|
+
|
13
|
+
In the following example: `where(:field.in => [1,2,3])`, the `in` keyword is a *decorator*, and *decorates* the `:field` symbol.
|
14
|
+
|
15
|
+
To register decorators, you may call `Symbol::Decoration.register(decorator, ...)`. For example:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
Symbol::Decoration.register(:in)
|
19
|
+
Symbol::Decoration.register(*%w(in nin eq ne not gt ge gte lt le lte))
|
20
|
+
```
|
21
|
+
|
22
|
+
Once registered, a decorator can be used with `symbol.decorator`, which returns
|
23
|
+
a `Symbol::Decoration` instance.
|
24
|
+
|
25
|
+
To support the lowest common denominator, decorators may accept arguments and
|
26
|
+
blocks. For example, `:field.gt(5)` is valid.
|
27
|
+
|
28
|
+
You may retrieve the decoration properties with:
|
29
|
+
|
30
|
+
* `decorated_symbol.symbol` to get the symbol which is being decorated.
|
31
|
+
* `decorated_symbol.decorator` to get the decoration (for example `:gt`).
|
32
|
+
* `decorated_symbol.args` to get the decoration arguments.
|
33
|
+
* `decorated_symbol.blocks` to get the decoration block.
|
34
|
+
|
35
|
+
Full example:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
Symbol::Decoration.register(:gt)
|
39
|
+
|
40
|
+
:field.gt.class == Symbol::Decoration
|
41
|
+
:field.gt.symbol == :field
|
42
|
+
:field.gt.decorator == :gt
|
43
|
+
:field.gt(5).args == [5]
|
44
|
+
:field.gt { 5 }.block.call == 5
|
45
|
+
```
|
46
|
+
|
47
|
+
License
|
48
|
+
=======
|
49
|
+
|
50
|
+
Symbol Decoration is MIT Licensed.
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Symbol
|
2
|
+
Decoration = Struct.new(:symbol, :decorator, :args, :block) do
|
3
|
+
def self.register(*decorators)
|
4
|
+
Symbol.class_eval do
|
5
|
+
decorators.map(&:to_sym).each do |decorator|
|
6
|
+
define_method(decorator) do |*args, &block|
|
7
|
+
Decoration.new(self, decorator, args, block)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: symbol_decoration
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nicolas Viennot
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-14 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Support for symbol decorations such as where(:field.in => [1,2,3])
|
14
|
+
email:
|
15
|
+
- nicolas@viennot.biz
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- lib/symbol_decoration.rb
|
22
|
+
homepage: http://github.com/nviennot/symbol_decoration
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.2.2
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: Symbol Decoration
|
46
|
+
test_files: []
|
47
|
+
has_rdoc: false
|