mixiner 0.1.0

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