meta_vars 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,146 @@
1
+ # MetaVars
2
+ This gem provides you a way to declare variables which value depends on some context. You can declare these variables inside a namespace so you can access easily to them.
3
+
4
+ ## Installation
5
+ gem install meta_vars
6
+
7
+ ## Based on and unaware collaborators
8
+ The idea of this gem came to me thanks to the [activenetwork's OmnitureClient gem](https://github.com/activenetwork/omniture_client "activenetwork's OmnitureClient")
9
+
10
+ There is some borrowed code from unawared coders. So thank you to
11
+
12
+ * [acatighera](https://github.com/acatighera "acatighera github homepage")
13
+ * [activenetwork](https://github.com/activenetwork "activenetwork github homepage")
14
+ * [John Nunemaker](http://railstips.org/about "railstips") for his [ClassLevelInheritableAttributes solution](http://railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/ "Class and instance variables in ruby")
15
+
16
+ ## Usage
17
+ ###Defining meta_vars
18
+ You must include MetaVars and then declare the meta\_vars you are going to use calling the has_meta_var function passing a generic name for your meta\_vars.
19
+
20
+ class Foo
21
+ include MetaVars
22
+ has_meta_var :var
23
+ end
24
+
25
+ has\_meta\_var accepts one options hash, with these options:
26
+
27
+ * **:inheritable**
28
+
29
+ _true_ or _false_, the meta\_vars will be inherited by subclasses
30
+
31
+ * **:default\_namespace**
32
+
33
+ default\_namespace for vars. If not given, the default namespace will be _''_
34
+
35
+ ### Methods available
36
+ Once you have done this, you will be able to call all these methods inside your class. Note that these methods are generated for the generic name 'var'.
37
+
38
+ ####Class methods:
39
+
40
+ * **var(varname, *namespaces, &block)**
41
+
42
+ It creates a new meta_var, with its name like var\_name and a block, which will be evaluated when the value is needed inside a given contxt.
43
+
44
+ * **find\_meta\_var(var\_name, namespace=default\_var\_namespace)**
45
+
46
+ Returns the MetaVar or MetaContainer corresponding to the namespace given
47
+
48
+ ####Instance methods
49
+
50
+ * **meta\_vars**
51
+
52
+ Returns an array with all meta\_vars
53
+
54
+ * **find\_meta\_vars(namespace=default\_var\_namespace)**
55
+
56
+ Returns the MetaVar or MetaContainer corresponding to the namespace given
57
+
58
+ * **find\_meta_var(var\_name, namespace=default\_var\_namespace)**
59
+
60
+ The same as find\_meta\_vars, but you can specify a var name. In fact, it is the same as find\_meta\_vars("#{namespace}.#{var\_name}")
61
+
62
+ * **vars(contxt)**
63
+
64
+ Returns an array with all meta\_vars evaluated in the given contxt. The evaluation is done by calling an instance_eval in the contxt passed of the proc in the var
65
+
66
+ * **find\_vars(contxt, namespace=default\_var\_namespace)**
67
+
68
+ Returns an array with all meta\_vars evaluated in the given contxt, which are inside the given namespace.
69
+
70
+ * **find\_var(contxt, var\_name, namespace=default\_var\_namespace)**
71
+
72
+ The same as find\_vars, but you can specify a var name. In fact, it is the same as find\_vars(contxt, "#{namespace}.#{var\_name}")
73
+
74
+ * **vars\_container**
75
+
76
+ Returns the MetaContainer object which keeps all meta\_vars
77
+
78
+ * **default\_var\_namespace**
79
+
80
+ Returns the default\_namespace given. This default\_namespace is set when declaring the meta\_vars
81
+
82
+ ###Components
83
+ There are three components:
84
+
85
+ * MetaContainer
86
+ * MetaVar
87
+ * Var
88
+
89
+ ####MetaContainer
90
+ It stores the meta\_vars. You should not use this class directly, but if you want to... take a look to its code ;-)
91
+
92
+ ####MetaVar
93
+ The MetaVar itself.
94
+
95
+ * **name**
96
+
97
+ Returns the name of the instance
98
+
99
+ * **proc**
100
+
101
+ Returns the proc associated to this meta_var
102
+
103
+ * **to_var(contxt)**
104
+
105
+ Returns a Var object, which contains the value of the meta_var resulting from evaluating its proc in the given contxt
106
+
107
+ ####Var
108
+ The result of the evaluation of the MetaVar in a context. You can get this by calling the to_var method in a MetaVar instance
109
+
110
+ * **name**
111
+
112
+ Returns the name of the var -which it's the same as the meta_var
113
+
114
+ * **value**
115
+
116
+ Returns the value of the var
117
+
118
+ ###Example
119
+
120
+ Let's create a meta_var for storing the title of the page. Since this value it's not going to be the same in every action, we can use action names as namespaces.
121
+
122
+ class FooController
123
+ include MetaVars
124
+
125
+ has_meta_var :seo_var, :inheritable => true, :default_namespace => 'default'
126
+
127
+ before_filter :get_seo_title
128
+
129
+ seo_var :title, 'index' do
130
+ I18n.t('seo.index.title')
131
+ end
132
+
133
+ seo_var :title, 'show', 'edit' do
134
+ I18n.t("seo.#{params[:action]}.title", :foo => @foo)
135
+ end
136
+
137
+ seo_var :title do
138
+ I18n.t('seo.global.title')
139
+ end
140
+
141
+ def get_seo_title
142
+ @seo_title = (find\_seo_var(self, 'title', params[:action]) || find\_seo_var(self, 'title')).value
143
+ end
144
+
145
+ end
146
+ ##### Copyright (c) 2011 Javier Lafora, released under MIT license
@@ -23,9 +23,9 @@ module MetaVars
23
23
  def inherited(subclass)
24
24
  @meta_vars_inheritable_attributes.each do |inheritable_attribute|
25
25
  instance_var = "@#{inheritable_attribute}"
26
- subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
26
+ subclass.instance_variable_set(instance_var, instance_variable_get(instance_var).clone)
27
27
  end
28
28
  end
29
29
  end
30
30
  end
31
- end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module MetaVars
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meta_vars
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
10
- version: 1.0.1
9
+ - 2
10
+ version: 1.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - eLafo
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-21 00:00:00 Z
18
+ date: 2012-04-04 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: Creates variables for an object, which their value depends on some context. These vars will be accessible by methods and will be contained in an instance var -a container
@@ -30,6 +30,7 @@ extra_rdoc_files: []
30
30
  files:
31
31
  - .gitignore
32
32
  - Gemfile
33
+ - README.markdown
33
34
  - Rakefile
34
35
  - lib/class_level_inheritable_attributes.rb
35
36
  - lib/meta_vars.rb