active_module 0.1.4 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a8c9cd4a4af05550d638422b06fe34b22d88511fb899c0cb6385177c1ba38a3
4
- data.tar.gz: 11cbe4422096b9a3f961d401872d79e9bea9b4e2f3d60432ecb261284c1578e6
3
+ metadata.gz: 1473d88ff3d53e8948747dc7827ad2836478a0c6db139c54e11f2a96df58e758
4
+ data.tar.gz: 045e7b7689734cf7c98654ec1283a747063d1defba78c47e3efbd115c5046675
5
5
  SHA512:
6
- metadata.gz: e565d8b750e9841d6cbd3dd266f70644be738c4dbe04a5bf02812ce4a038bca852a80b1c1e0ddbb5c936e938b5aaac818c01ecaea77b949be42c7941e97317ec
7
- data.tar.gz: 2612bcb5734b38aeb4182a1c46c1f9e50234a96ea2dab4acb6411b59a4d036a3fd287a3721d73232dcbd1b4c64ad369e3f4c74bfcb81be40cdf7d1524c77e0c5
6
+ metadata.gz: 67321659d14a0aff48e5917e2242d42773dbc6f86a8fa8cef935956bbda4717858128a405264ff39cde9bd06e223ee266b08a4f4b07a62f600ee3b6de8c54714
7
+ data.tar.gz: bf7305eabb2c4d81e0514542c7172e440aaf5b17ea5d4bf732705100f8a92cc01f772aae9b3ba0f864c575f1040626d7730f5831d7d7889aec0ed88980f5271a
data/README.md CHANGED
@@ -17,6 +17,35 @@ This is a very generic mechanism that enables many possible utilizations, for in
17
17
 
18
18
  You can find examples of these in [Usage -> Examples :](#Examples)
19
19
 
20
+ ## TL;DR
21
+
22
+ Declare module attributes like this:
23
+ ```ruby
24
+ class MyARObject < ActiveRecord::Base
25
+ attribute :module_field,
26
+ :active_module,
27
+ possible_modules: [MyModule1, MyClass, Nested::Module]
28
+ end
29
+ ```
30
+
31
+ Assign them like this:
32
+ ```ruby
33
+ object.module_field = Nested::Module
34
+ object.module_field = :Module
35
+ object.module_field = "Module"
36
+ object.module_field #=> Nested::Module:Module
37
+ ```
38
+
39
+ And compare them like this (optional):
40
+ ```ruby
41
+ module MyNameSpace
42
+ using ActiveModule::Comparison
43
+
44
+ object.module_field =~ :Module1
45
+ object.module_field =~ "Module1"
46
+ end
47
+ ```
48
+
20
49
  ## Installation
21
50
 
22
51
  Add to your gemfile - and if you are using rails - that's all you need:
@@ -54,7 +83,7 @@ class MyARObject < ActiveRecord::Base
54
83
  module MyModule1; end
55
84
  module MyModule2; end
56
85
  class MyClass;
57
- module Module1; end
86
+ module MyModule1; end
58
87
  end
59
88
  end
60
89
  ```
@@ -63,13 +92,13 @@ You can make the field refer to one of these modules/classes like this:
63
92
  class MyARObject < ActiveRecord::Base
64
93
  attribute :module_field,
65
94
  :active_module,
66
- possible_modules: [MyModule1, MyModule2, MyClass, MyClass::Module1]
95
+ possible_modules: [MyModule1, MyModule2, MyClass, MyClass::MyModule1]
67
96
  end
68
97
  ```
69
98
  And this is it! Easy!<br>
70
99
 
71
100
  ### Assigning and querying module attributes
72
- Now you can use this attribute in many handy ways:
101
+ Now you can use this attribute in many handy ways!
73
102
  <br>
74
103
  <br>
75
104
  For instance, you may refer to it using module literals:
@@ -109,6 +138,22 @@ my_ar_object.module_field = "MyClass::MyModule1"
109
138
  my_ar_object.module_field #=> MyARObject::MyClass::MyModule::Module
110
139
  ```
111
140
 
141
+ ### Comparing modules with strings and symbols
142
+
143
+ In order to compare modules with Strings or Symbols you'll have to use the `ActiveModule::Comparison`
144
+ refinement. This refinement adds the method `Module#=~` to the `Module` class, but this change is
145
+ only available within the namespace that includes the refinement.
146
+
147
+ ```ruby
148
+ module YourClassOrModuleThatWantsToCompare
149
+ using ActiveModule::Comparison
150
+
151
+ def method_that_compares
152
+ my_ar_object.module_field =~ :MyModule1
153
+ end
154
+ end
155
+ ```
156
+
112
157
  ## Examples
113
158
 
114
159
  ### Strategy Pattern (composition-based polymorphism)
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveModule
4
+ module Comparison
5
+ refine ::Module do
6
+ using ActiveModule::ModuleRefinement
7
+
8
+ def =~(other)
9
+ case other
10
+ when ::String
11
+ (@possible_names ||= possible_names).include?(other)
12
+ when ::Symbol
13
+ (@possible_names ||= possible_names).include?(other.to_s)
14
+ else
15
+ self == other
16
+ end
17
+ end
18
+ end
19
+
20
+ using self
21
+
22
+ def self.compare(module1, module2)
23
+ module1 =~ module2
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveModule
4
- VERSION = "0.1.4"
4
+ VERSION = "0.1.6"
5
5
  end
data/lib/active_module.rb CHANGED
@@ -4,6 +4,7 @@ require_relative "active_module/version"
4
4
  require_relative "active_module/base"
5
5
  require_relative "active_module/invalid_module_value"
6
6
  require_relative "active_module/register"
7
+ require_relative "active_module/comparison"
7
8
  require "active_module/railtie" if defined?(Rails::Railtie)
8
9
 
9
10
  module ActiveModule
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_module
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pedro Rolo
@@ -58,6 +58,7 @@ files:
58
58
  - Rakefile
59
59
  - lib/active_module.rb
60
60
  - lib/active_module/base.rb
61
+ - lib/active_module/comparison.rb
61
62
  - lib/active_module/invalid_module_value.rb
62
63
  - lib/active_module/module_refinement.rb
63
64
  - lib/active_module/modules_index.rb