rails_dictionary 0.0.1 → 0.0.2

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.rdoc CHANGED
@@ -1,12 +1,104 @@
1
1
  = Intro
2
- Mapping web static data to Dictionary Class
3
- = Usage
2
+ There are many static data in application.
3
+ In a student application,there will be some static data like diploma kind,school and city.This gem can map these static data to a Dictionary#method like Dictionary#student_diploma_kind which return data list of diploma kind and a Student.named_school like @student.named_city which return city name of @student city
4
4
 
5
- ==
5
+ = Usage
6
+ == Installation
6
7
  Rail3
7
- gem "dictionary",:git => 'git://github.com/raykin/dictionary'
8
+ gem "dictionary",:git => 'git://github.com/raykin/dictionary'
9
+ or
10
+ gem 'rails_dictionary'
11
+
12
+ == Sample
13
+ In this usage sample,there are three tables.
14
+ === Table Definition
15
+ Make sure you have two tables which named as dict_types and dictionaries.
16
+ For version 0.0.1,I'm not going to add more configurations.
17
+ The students table is not required.
18
+ create_table :dict_types do |t|
19
+ t.string :name
20
+ t.string :comment
21
+ t.timestamps
22
+ end
23
+ create_table :dictionaries do |t|
24
+ t.string :name_en
25
+ t.string :name_zh
26
+ t.string :name_fr
27
+ t.integer :dict_type_id
28
+ t.timestamps
29
+ end
30
+ create_table :students do |t|
31
+ t.string :email
32
+ t.integer :city
33
+ t.integer :school
34
+ t.timestamps
35
+ end
36
+
37
+ === Class Definition
38
+ Method acts_as_dict_type,acts_as_dictionary,acts_as_dict_slave like other simple gem method used as class method.
39
+ Here is what should be like.Student model can be other models.
40
+ class DictType < ActiveRecord::Base
41
+ acts_as_dict_type
42
+ end
43
+
44
+ class Dictionary < ActiveRecord::Base
45
+ acts_as_dictionary
46
+ end
47
+
48
+ class Student < ActiveRecord::Base
49
+ acts_as_dict_slave
50
+ end
51
+
52
+ === Sample Data
53
+ Conventions over configuration make magic again.
54
+ The name value convention of DictType is "model_column".Here the city and school column of student model are static values that will be mapping to dynamic method,so the DictType value should be as following code according convention.
55
+ Dictionary value has simple convention,just keep the name structure as "name_locale".Dictionary store the real static data that will not change in certain period.
56
+ Student is a slave model which will be automatically generate a (or a list of)belongs_to associations to dictionary and a list of dynamic query method according to DictType data.
57
+ DictType.find(1).name => "student_city"
58
+ DictType.find(2).name => "student_school"
59
+ DictType.count => 2
60
+ Dictionary.count => 2
61
+ Dictionary.find(5) =>
62
+ #<Dictionary id: 1, name_en: "shanghai", name_zh: "上海", name_fr: "shanghai", dict_type_id: 1, created_at: "2011-02-27 13:28:55", updated_at: "2011-02-27 13:28:55">
63
+ Dictionary.find(6) =>
64
+ #<Dictionary id: 2, name_en: "beijing", name_zh: "北京", name_fr: "Pékin", dict_type_id: 1, created_at: "2011-02-27 13:28:55", updated_at: "2011-02-27 13:28:55">
65
+ Student.find(1) =>
66
+ #<Student id: 1, email: "beijing@dict.com", city: 6, school: nil, created_at: "2011-02-27 13:28:55", updated_at: "2011-02-27 13:28:55">
67
+ Student.find(2) =>
68
+ #<Student id: 2, email: "shanghai@dict.com", city: 5, school: nil, created_at: "2011-02-27 13:28:55", updated_at: "2011-02-27 13:28:55">
69
+
70
+ == Methods and results (relies on the above data)
71
+ DictType.all_cached => return cache of DictType.all
72
+ DictType.all_types => %w[student_city student_school]
73
+ Dictionary.student_city => [Dictionary.find(5),Dictionary.find(6)]
74
+ # student_city is a dynamic method which returns a list of dictionary object which dict_type is student_city.Actually Dictionary will has as many dynamic methods as DictType.count and the dynamic method name is DictType.name,so there is another dynamic method which return nil
75
+ Dictionary.student_school => nil
76
+ Dictionary.student_city(:locale => :en) => [["shanghai",1],["beijing",2]]
77
+ so you can use these method in form select like
78
+ select :student,:city,Dictionary.student_city
79
+ this select method has a more clear format which may do some other magic coding
80
+ Student.find(1).named_city = "beijing"
81
+ Student.find(1).named_city(:zh) = "北京"
82
+ Student.find(1).named_city(:fr) = "Pékin"
83
+ Here is an other solution for international translation.
84
+ Student.find(1).city_dict = Dictionary.find(6)
85
+ In these simple example,Student has 2 belongs_to assocition which named as city_dict and school_dict,the naming convention is columname_dict.
86
+
87
+ = Practical Suggestion
88
+ If you start a new application and there are more than 10 kinds of static data,you may have a try with the gem.
89
+ However,if you see many static data in an old system and want to refactor it,the decision would be judged by the real situations.
90
+
91
+ = Warnning
92
+ The most used debug method would be DictType.all_types and Dictionary.student_city(or other dynamic generate method)
93
+ When you get some confused with these method,try running
94
+ rails tmp:clear
95
+ cause these methods all return static data,I just add caches to these output for better performance.If you straight forward change db data in db console(not throught Rails) like running
96
+ delete from dict_types;
97
+ The rails cache would not refresh.
98
+ In short,when you confused with the debug data,try running "rails tmp:clear" first.
8
99
 
9
- ==
100
+ = TODO & Problems
101
+ Get a more smart method(Rails way method) to get all Model Class and there is a problem with it.Class like Ckeditor::Asset will not be recognized.
10
102
 
11
- ==TODO
12
- Add test code.
103
+ = Help
104
+ Need an friendly english native guy to help me improve this readme to make it more clear and readable.
data/dictionary.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = ["raykincoldxiao@campus.com"]
11
11
  s.homepage = "https://github.com/raykin/dictionary"
12
12
  s.summary = %q{dictionary data for application}
13
- s.description = %q{mapping application static data to dictionary class and slave class}
13
+ s.description = %q{mapping static data of web application to Dictionary class}
14
14
 
15
15
  s.rubyforge_project = "rails_dictionary"
16
16
 
@@ -1,3 +1,3 @@
1
1
  module Dictionary
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,8 +1,4 @@
1
-
2
- #require "active_record"
3
- require "dictionary/array_core_ext"
4
1
  require "dictionary/acts_as_dictionary"
5
2
  require "dictionary/acts_as_dict_slave"
6
3
  require "dictionary/acts_as_dict_type"
7
-
8
-
4
+ require "dictionary/array_core_ext"
@@ -8,7 +8,7 @@ Object.const_set "RAILS_CACHE", ActiveSupport::Cache.lookup_store
8
8
  require "active_support/cache"
9
9
  require "rails"
10
10
  # $: << "/home/raykin/studio/dictionary/lib" # tmply added for local testing
11
- require "#{File.dirname(__FILE__)}/../lib/dictionary.rb"
11
+ require "#{File.dirname(__FILE__)}/../lib/rails_dictionary.rb"
12
12
 
13
13
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
14
14
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rails_dictionary
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - raykin
@@ -10,11 +10,11 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-26 00:00:00 +08:00
13
+ date: 2011-02-28 00:00:00 +08:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
17
- description: mapping application static data to dictionary class and slave class
17
+ description: mapping static data of web application to Dictionary class
18
18
  email:
19
19
  - raykincoldxiao@campus.com
20
20
  executables: []
@@ -29,12 +29,12 @@ files:
29
29
  - README.rdoc
30
30
  - Rakefile
31
31
  - dictionary.gemspec
32
- - lib/dictionary.rb
33
32
  - lib/dictionary/acts_as_dict_slave.rb
34
33
  - lib/dictionary/acts_as_dict_type.rb
35
34
  - lib/dictionary/acts_as_dictionary.rb
36
35
  - lib/dictionary/array_core_ext.rb
37
36
  - lib/dictionary/version.rb
37
+ - lib/rails_dictionary.rb
38
38
  - test/dictionary_test.rb
39
39
  has_rdoc: true
40
40
  homepage: https://github.com/raykin/dictionary