whowish_word 0.1.4 → 0.1.5
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.
- data/README.md +93 -8
- data/lib/whowish_word/action_view/template.rb +10 -1
- data/lib/whowish_word/rails/public/javascripts/{1_csrf_and_authenticity_token_hook.js → 1_csrf_token_hook.js} +0 -0
- data/rails/app/views/layouts/nested_test_word_for.html.erb +3 -0
- data/rails/app/views/layouts/test_word_for.html.erb +3 -0
- data/rails/app/views/test_word_for/index.html.erb +5 -3
- data/rails/db/.gitdummy +0 -0
- data/rails/spec/integration/whowish_word_generator_spec.rb +24 -0
- data/whowish_word.gemspec +1 -1
- metadata +3 -2
data/README.md
CHANGED
@@ -1,25 +1,76 @@
|
|
1
|
-
WhowishWord
|
1
|
+
WhowishWord - A Rails framework for wording
|
2
2
|
====================
|
3
3
|
|
4
4
|
Have you ever been bored when a project manager (or marketing department) keeps changing wording on a website?
|
5
|
+
This kind of tasks can make programmers go crazy.
|
5
6
|
|
6
|
-
WhowishWord
|
7
|
+
WhowishWord allows normal users to change wording on a Rails website, directly.
|
8
|
+
|
9
|
+
The beauty of WhowishWord is that:
|
10
|
+
|
11
|
+
* It is almost transparent to programmers
|
12
|
+
* Programmers don't have to care how wording should be. This makes them work much faster
|
7
13
|
|
8
14
|
|
9
15
|
How you should work
|
10
16
|
-------------------
|
11
17
|
|
12
|
-
|
13
|
-
|
18
|
+
In your view, e.g. index.html.erb, use word_for(:identifier) and word_for_attr(:identifier):
|
19
|
+
|
20
|
+
```erb
|
21
|
+
<h1><%= word_for :title%></h1>
|
22
|
+
<h3><%= word_for :you_are_here_for_number_of_times, :number=> 10 %></h3>
|
23
|
+
|
24
|
+
<b><%= word_for :name_label%><b> <%= word_for :my_name%><br/>
|
25
|
+
|
26
|
+
<b><%= word_for :your_name_label%></b>
|
27
|
+
<input type="text" placeholder="<%= word_for_attr :your_name_here%>"><br/>
|
28
|
+
<a href="#" title="<%= word_for_attr :your_name_will_be_kept_secret%>">?</a>
|
29
|
+
|
30
|
+
<button><%= word_for_attr :submit_button%></button>
|
31
|
+
```
|
32
|
+
|
33
|
+
Now when you want to edit wording:
|
34
|
+
|
35
|
+
1. Activate edit mode by calling:
|
36
|
+
```
|
37
|
+
activate_whowish_word_edit_mode()
|
38
|
+
```
|
39
|
+
in any controller.
|
40
|
+
(The usual way is to use user's session to determine whether or not to activate WhowishWord's edit mode)
|
41
|
+
|
42
|
+
2. You'll see an edit icon on each word
|
14
43
|
3. Click on an edit icon to edit the corresponding word
|
15
44
|
4. Fill in a new word, and click save
|
16
|
-
|
45
|
+
* If it is the first time, you will need to fill master password at this point. (The instruction how to set password is in 'How to use it' section)
|
17
46
|
|
18
47
|
And when you have finished, deactivate edit mode.
|
19
48
|
|
20
49
|
WhowishWord empowers normal users (project manager, marketing department, or sales) to change wording on a website.
|
21
50
|
This take the burden off programmers because it is extremely boring to change wording...
|
22
51
|
|
52
|
+
Demo: http://whowish-word.heroku.com
|
53
|
+
|
54
|
+
### Note
|
55
|
+
|
56
|
+
WhowishWord supports variables:
|
57
|
+
|
58
|
+
```erb
|
59
|
+
<%= word_for :you_are_here_for_number_of_times, :number=> 10 %>
|
60
|
+
```
|
61
|
+
|
62
|
+
If you set the word :you_are_here_for_number_of_times to be
|
63
|
+
|
64
|
+
```
|
65
|
+
You are here {number} times already
|
66
|
+
```
|
67
|
+
|
68
|
+
WhowishWord renders it as:
|
69
|
+
|
70
|
+
```
|
71
|
+
You are here 10 times already
|
72
|
+
```
|
73
|
+
|
23
74
|
|
24
75
|
Prerequisite
|
25
76
|
-------------------
|
@@ -71,10 +122,23 @@ Performance
|
|
71
122
|
It is fast because words are kept in memory. They are not kept in database while your Rails is running.
|
72
123
|
|
73
124
|
|
74
|
-
|
125
|
+
Help me
|
75
126
|
-------------------------------------------------
|
76
127
|
|
77
|
-
|
128
|
+
1. Fork the project
|
129
|
+
* Run all tests first:
|
130
|
+
* Go to ROOT, type
|
131
|
+
```
|
132
|
+
bundle exec rspec spec/*
|
133
|
+
```
|
134
|
+
* Go to ROOT/rails, type
|
135
|
+
```
|
136
|
+
bundle exec rspec spec/*
|
137
|
+
```
|
138
|
+
* If all tests pass, you are ready to add a feature
|
139
|
+
2. Add a feature
|
140
|
+
3. Write a test for it
|
141
|
+
4. Send me a pull request
|
78
142
|
|
79
143
|
Please learn the code structure. If you have any question, feel free to ask me.
|
80
144
|
|
@@ -84,4 +148,25 @@ Authors
|
|
84
148
|
|
85
149
|
Tanin Na Nakorn
|
86
150
|
|
87
|
-
Tanun Niyomjit (
|
151
|
+
Tanun Niyomjit (Designer)
|
152
|
+
|
153
|
+
|
154
|
+
Boring license stuffs
|
155
|
+
-----------------------
|
156
|
+
|
157
|
+
WhowishWord relies on several libraries that you won't see.
|
158
|
+
They are embedded into whowish_word.js.
|
159
|
+
|
160
|
+
The libraries:
|
161
|
+
|
162
|
+
* jQuery 1.6.4 http://jquery.com/
|
163
|
+
* Class.js (John Resig) http://ejohn.org/blog/simple-javascript-inheritance/
|
164
|
+
* jQuery.escape http://plugins.jquery.com/project/escape
|
165
|
+
* JSizes http://www.bramstein.com/projects/jsizes/
|
166
|
+
* jQuery.loading_button (This is mine)
|
167
|
+
|
168
|
+
Please be aware of the licenses of other libraries.
|
169
|
+
|
170
|
+
For WhowishWord's code itself, it is under this license: http://creativecommons.org/licenses/by/3.0/
|
171
|
+
|
172
|
+
Basically, you can do whatever you want with it. Just give us some credits.
|
@@ -7,14 +7,23 @@ if defined?(ActionView) and defined?(ActionView::Base)
|
|
7
7
|
|
8
8
|
def render(view, locals, buffer=nil, &block)
|
9
9
|
|
10
|
+
previous_whowish_word_page = nil
|
11
|
+
|
12
|
+
if view.instance_variable_defined?(:@whowish_word_page)
|
13
|
+
previous_whowish_word_page = view.instance_variable_get(:@whowish_word_page)
|
14
|
+
end
|
15
|
+
|
10
16
|
view.instance_variable_set(:@whowish_word_page, @identifier)
|
11
17
|
|
12
18
|
if view.controller.respond_to?(:whowish_word_edit_mode)
|
13
19
|
view.instance_variable_set(:@whowish_word_edit_mode, view.controller.whowish_word_edit_mode)
|
14
20
|
end
|
15
21
|
|
16
|
-
|
22
|
+
html = render_original(view, locals, buffer, &block)
|
23
|
+
|
24
|
+
view.instance_variable_set(:@whowish_word_page, previous_whowish_word_page)
|
17
25
|
|
26
|
+
return html
|
18
27
|
end
|
19
28
|
|
20
29
|
end
|
File without changes
|
@@ -11,6 +11,9 @@
|
|
11
11
|
<%= stylesheet_link_tag "whowish_word.css"%>
|
12
12
|
</head>
|
13
13
|
<body>
|
14
|
+
|
15
|
+
<span id="layout_before_nested_layout"><%= word_for :text%></span>
|
16
|
+
|
14
17
|
<%= content_for?(:nested_layout) ? yield(:nested_layout) : yield %>
|
15
18
|
|
16
19
|
<span id="layout"><%= word_for :text%></span>
|
@@ -1,7 +1,9 @@
|
|
1
|
+
<span id="view_before_partial"><%= word_for :text%></span>
|
2
|
+
|
3
|
+
<%= render :partial=>"partial"%>
|
4
|
+
|
1
5
|
<span id="view"><%= word_for :text%></span>
|
2
6
|
<span id="view_attr"><%= word_for_attr :text%></span>
|
3
7
|
|
4
8
|
<span id="view_with_variables"><%= word_for :text, :number=>5, :name=>"tanin" %></span>
|
5
|
-
<span id="view_attr_with_variables"><%= word_for_attr :text, :number=>5, :name=>"tanin"%></span>
|
6
|
-
|
7
|
-
<%= render :partial=>"partial"%>
|
9
|
+
<span id="view_attr_with_variables"><%= word_for_attr :text, :number=>5, :name=>"tanin"%></span>
|
data/rails/db/.gitdummy
ADDED
File without changes
|
@@ -56,24 +56,36 @@ describe 'Generator spec' do
|
|
56
56
|
|
57
57
|
goto '/test_word_for?edit_mode=yes'
|
58
58
|
|
59
|
+
html("view_before_partial").should == get_whowish_word_in_edit_mode("test_word_for/index.html.erb", "text")
|
60
|
+
|
59
61
|
html("view").should == get_whowish_word_in_edit_mode("test_word_for/index.html.erb", "text")
|
60
62
|
html("view_attr").should == get_whowish_word_attr_in_edit_mode("test_word_for/index.html.erb", "text")
|
61
63
|
|
62
64
|
html("view_with_variables").should == get_whowish_word_in_edit_mode("test_word_for/index.html.erb", "text", {:number=>5,:name=>"tanin"})
|
63
65
|
html("view_attr_with_variables").should == get_whowish_word_attr_in_edit_mode("test_word_for/index.html.erb", "text", {:number=>5,:name=>"tanin"})
|
64
66
|
|
67
|
+
|
68
|
+
|
65
69
|
html("partial").should == get_whowish_word_in_edit_mode("test_word_for/_partial.html.erb", "text")
|
66
70
|
html("partial_attr").should == get_whowish_word_attr_in_edit_mode("test_word_for/_partial.html.erb", "text")
|
67
71
|
|
68
72
|
html("partial_with_variables").should == get_whowish_word_in_edit_mode("test_word_for/_partial.html.erb", "text", {:number=>5,:name=>"tanin"})
|
69
73
|
html("partial_attr_with_variables").should == get_whowish_word_attr_in_edit_mode("test_word_for/_partial.html.erb", "text", {:number=>5,:name=>"tanin"})
|
70
74
|
|
75
|
+
|
76
|
+
|
77
|
+
html("nested_layout_before_yield").should == get_whowish_word_in_edit_mode("layouts/nested_test_word_for.html.erb", "text")
|
78
|
+
|
71
79
|
html("nested_layout").should == get_whowish_word_in_edit_mode("layouts/nested_test_word_for.html.erb", "text")
|
72
80
|
html("nested_layout_attr").should == get_whowish_word_attr_in_edit_mode("layouts/nested_test_word_for.html.erb", "text")
|
73
81
|
|
74
82
|
html("nested_layout_with_variables").should == get_whowish_word_in_edit_mode("layouts/nested_test_word_for.html.erb", "text", {:number=>5,:name=>"tanin"})
|
75
83
|
html("nested_layout_attr_with_variables").should == get_whowish_word_attr_in_edit_mode("layouts/nested_test_word_for.html.erb", "text", {:number=>5,:name=>"tanin"})
|
76
84
|
|
85
|
+
|
86
|
+
|
87
|
+
html("layout_before_nested_layout").should == get_whowish_word_in_edit_mode("layouts/test_word_for.html.erb", "text")
|
88
|
+
|
77
89
|
html("layout").should == get_whowish_word_in_edit_mode("layouts/test_word_for.html.erb", "text")
|
78
90
|
html("layout_attr").should == get_whowish_word_attr_in_edit_mode("layouts/test_word_for.html.erb", "text")
|
79
91
|
|
@@ -86,24 +98,36 @@ describe 'Generator spec' do
|
|
86
98
|
|
87
99
|
goto '/test_word_for'
|
88
100
|
|
101
|
+
html("view_before_partial").should == get_whowish_word("test_word_for/index.html.erb", "text")
|
102
|
+
|
89
103
|
html("view").should == get_whowish_word("test_word_for/index.html.erb", "text")
|
90
104
|
html("view_attr").should == get_whowish_word("test_word_for/index.html.erb", "text")
|
91
105
|
|
92
106
|
html("view_with_variables").should == get_whowish_word("test_word_for/index.html.erb", "text", {:number=>5,:name=>"tanin"})
|
93
107
|
html("view_attr_with_variables").should == get_whowish_word("test_word_for/index.html.erb", "text", {:number=>5,:name=>"tanin"})
|
94
108
|
|
109
|
+
|
110
|
+
|
95
111
|
html("partial").should == get_whowish_word("test_word_for/_partial.html.erb", "text")
|
96
112
|
html("partial_attr").should == get_whowish_word("test_word_for/_partial.html.erb", "text")
|
97
113
|
|
98
114
|
html("partial_with_variables").should == get_whowish_word("test_word_for/_partial.html.erb", "text", {:number=>5,:name=>"tanin"})
|
99
115
|
html("partial_attr_with_variables").should == get_whowish_word("test_word_for/_partial.html.erb", "text", {:number=>5,:name=>"tanin"})
|
100
116
|
|
117
|
+
|
118
|
+
|
119
|
+
html("nested_layout_before_yield").should == get_whowish_word("layouts/nested_test_word_for.html.erb", "text")
|
120
|
+
|
101
121
|
html("nested_layout").should == get_whowish_word("layouts/nested_test_word_for.html.erb", "text")
|
102
122
|
html("nested_layout_attr").should == get_whowish_word("layouts/nested_test_word_for.html.erb", "text")
|
103
123
|
|
104
124
|
html("nested_layout_with_variables").should == get_whowish_word("layouts/nested_test_word_for.html.erb", "text", {:number=>5,:name=>"tanin"})
|
105
125
|
html("nested_layout_attr_with_variables").should == get_whowish_word("layouts/nested_test_word_for.html.erb", "text", {:number=>5,:name=>"tanin"})
|
106
126
|
|
127
|
+
|
128
|
+
|
129
|
+
html("layout_before_nested_layout").should == get_whowish_word("layouts/test_word_for.html.erb", "text")
|
130
|
+
|
107
131
|
html("layout").should == get_whowish_word("layouts/test_word_for.html.erb", "text")
|
108
132
|
html("layout_attr").should == get_whowish_word("layouts/test_word_for.html.erb", "text")
|
109
133
|
|
data/whowish_word.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whowish_word
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -63,7 +63,7 @@ files:
|
|
63
63
|
- lib/whowish_word/rails/app/models/mongoid/whowish_word_html.rb
|
64
64
|
- lib/whowish_word/rails/public/javascripts/0_class.js
|
65
65
|
- lib/whowish_word/rails/public/javascripts/0_jquery-1.6.4-whowish_word.js
|
66
|
-
- lib/whowish_word/rails/public/javascripts/
|
66
|
+
- lib/whowish_word/rails/public/javascripts/1_csrf_token_hook.js
|
67
67
|
- lib/whowish_word/rails/public/javascripts/1_jquery.escape.js
|
68
68
|
- lib/whowish_word/rails/public/javascripts/1_jquery.loading_button.js
|
69
69
|
- lib/whowish_word/rails/public/javascripts/1_jquery.sizes.min.js
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- rails/config/mongoid.rb
|
129
129
|
- rails/config/mongoid.yml
|
130
130
|
- rails/config/routes.rb
|
131
|
+
- rails/db/.gitdummy
|
131
132
|
- rails/log/.gitignore
|
132
133
|
- rails/mongo.bat
|
133
134
|
- rails/public/jasmine/MIT.LICENSE
|