mixiner 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mixiner.rb +56 -0
  3. metadata +73 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d0b2caa890502462d975ea5a7fa97513712afdc4
4
+ data.tar.gz: 6e786bfee393e1d075324c2034f21e6dc6f73787
5
+ SHA512:
6
+ metadata.gz: ac933f632339a9f29f3c8b19e7bfb08b4f15074a58920faa851265465fa5c785c47bd608801a761cc87c65fe225865570982c9ed26f9e6881159bbdf18b6ecd5
7
+ data.tar.gz: 8f64feed88c62a0ce6aab698c3f45157a645f14f2d64c2b2d8482a8eac48773a59c059265f29d426c4f4f35a375534766982a0fe2a1b36dccd75bb8a34a38a77
@@ -0,0 +1,56 @@
1
+ # Make easy to create mixin modules to group together related methods.
2
+ #
3
+ # As those methods are not defined directly on the class those can be redefined
4
+ # afterwards.
5
+ #
6
+ # @example
7
+ # class Settings
8
+ # # make the mixin method available
9
+ # include Mixiner
10
+ #
11
+ # def initialize
12
+ # @properties = {}
13
+ # end
14
+ #
15
+ # def property name, type
16
+ # # define the methods in the mixin
17
+ # mixin('Properties').define_method name do
18
+ # @properties[name]
19
+ # end
20
+ #
21
+ # mixin('Properties').define_method "#{ name }=" do |value|
22
+ # @properties[name] = value if value.kind_of? type
23
+ # end
24
+ # end
25
+ #
26
+ # property limit, Integer
27
+ # property name, String
28
+ #
29
+ # # overwrite the name writter with custom logic
30
+ # def name= value
31
+ # super value.capitalize
32
+ # end
33
+ #
34
+ # end
35
+ module Mixiner
36
+
37
+ # Initialize or retrieve a mixin module for the given subject
38
+ #
39
+ # Create a mixin module to group a set of related methods making sure that
40
+ # `define_method` is public so it is easier to add methods there.
41
+ #
42
+ # The module is defined just once and is included in the base class to make
43
+ # those methods accessible.
44
+ def mixin subject
45
+ if self.const_defined? subject, false
46
+ self.const_get subject
47
+ else
48
+ mod = Module.new do
49
+ public_class_method :define_method
50
+ end
51
+ self.const_set subject, mod
52
+ self.include mod
53
+ mod
54
+ end
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mixiner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eloy Espinaco
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cutest
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
+ - !ruby/object:Gem::Dependency
28
+ name: yard
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
+ description:
42
+ email: eloyesp@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/mixiner.rb
48
+ homepage: https://rubygems.org/gems/mixiner
49
+ licenses:
50
+ - GPL-3.0+
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.2.2
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Help you put methods in a mixin
72
+ test_files: []
73
+ has_rdoc: