active_finite 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -24,7 +24,7 @@ Let's start by defining a simple migration:
24
24
  end
25
25
 
26
26
  Now that we some hellos in our Hello model, we can access them using:
27
- hellos = get_finite_table :hellos
27
+ hellos = get_table :hellos
28
28
 
29
29
  The variable hellos now holds a class derived from ActiveRecord named
30
30
  Hello, so all of the normal ActiveRecord methods can be used.
@@ -33,7 +33,7 @@ We can also a collection of all of the active record classes defined by
33
33
  active_finite by using:
34
34
  all_finite_tables
35
35
 
36
- Using get_finite_table and all_finite_tables implicitly bring the associated
36
+ Using get_table and all_finite_tables implicitly bring the associated
37
37
  classes into scope, so a single call to all_finite_tables is sufficent to
38
38
  define all of the models.
39
39
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
data/lib/active_finite.rb CHANGED
@@ -3,59 +3,13 @@ require 'find'
3
3
  require 'active_support/inflector'
4
4
  require 'active_record'
5
5
  require 'json'
6
-
7
- def get_finite_table sym, *args
8
- class_name = as_class_name sym
9
- class_not_defined = not(Object.const_defined? class_name)
10
- should_force = args.any? {|x| x == :force}
11
- if class_not_defined or should_force
12
- anon = Class.new ActiveRecord::Base
13
- Object.const_set class_name, anon
14
- else
15
- Object.const_get class_name
16
- end
17
- end
18
-
19
- def as_class_name table_name
20
- table_name.to_s.singularize.capitalize.to_sym
21
- end
6
+ require_relative 'master_table.rb'
7
+ require_relative 'get_table.rb'
22
8
 
23
9
  def all_finite_tables
24
- master = get_finite_table(master_table_name)
25
- if master.table_exists?
26
- master
27
- .where("#{default_column_name} != ?", master_table_name)
28
- .collect {|x| x.send default_column_name.to_s}
29
- .collect {|x| get_finite_table x}
30
- else
31
- []
32
- end
33
- end
34
-
35
- def master_table_name
36
- :active_finites
37
- end
38
-
39
- def add_to_master table_name
40
- add_finites in_table: master_table_name, values: [table_name]
41
- end
42
-
43
- def delete_from_master table_name
44
- delete_finites in_table: master_table_name, values: [table_name]
45
- end
46
-
47
- def is_in_master_table? table_name
48
- if table_name.eql? master_table_name
49
- true
50
- else
51
- get_finite_table(master_table_name)
52
- .where("#{default_column_name} != ?", master_table_name)
53
- .where("#{default_column_name} == ?", table_name)
54
- .any?
55
- end
10
+ MasterTable.all
56
11
  end
57
12
 
58
-
59
13
  def add_finites args
60
14
  modify_finite args do |vs, klass, column_name|
61
15
  if not klass.table_exists?
@@ -63,9 +17,10 @@ def add_finites args
63
17
  create_table klass.table_name do |t|
64
18
  t.string column_name, :null => false
65
19
  end
20
+ add_index klass.table_name, column_name, :unique => true
66
21
  end
67
- add_to_master klass.table_name
68
22
  end
23
+ MasterTable.add klass.table_name
69
24
  vs.each do |v|
70
25
  obj = klass.new
71
26
  obj.send column_name.to_s + '=', v
@@ -74,12 +29,13 @@ def add_finites args
74
29
  end
75
30
  end
76
31
 
77
- def delete_finites args,
32
+ def delete_finites args
78
33
  delete_all = args[:values] == :all
79
34
  if delete_all
80
35
  args[:values] = []
81
36
  end
82
37
  modify_finite args do |vs, klass, column_name|
38
+ MasterTable.add klass.table_name
83
39
  if delete_all
84
40
  klass.all.each do |o|
85
41
  klass.destroy o
@@ -96,7 +52,7 @@ def delete_finites args,
96
52
  ActiveRecord::Schema.define do
97
53
  drop_table klass.table_name
98
54
  end
99
- delete_from_master klass.table_name
55
+ MasterTable.delete klass.table_name
100
56
  Object.send 'remove_const', klass.to_s.to_sym
101
57
  end
102
58
  end
@@ -105,7 +61,7 @@ end
105
61
  def modify_finite args
106
62
  table_name = args[:in_table]
107
63
  if table_name.nil?
108
- raise 'A table name must be specified for :in_table .'
64
+ raise 'A table name must be specified for :in_table.'
109
65
  end
110
66
  file_name = args[:from_file]
111
67
  values = args[:values]
@@ -123,7 +79,7 @@ def modify_finite args
123
79
  to_be_modified = to_be_modified.concat JSON.load open file_name
124
80
  end
125
81
 
126
- klass = get_finite_table table_name
82
+ klass = get_table table_name
127
83
  ActiveRecord::Base.transaction do
128
84
  yield to_be_modified, klass, column_name
129
85
  end
@@ -132,3 +88,7 @@ end
132
88
  def default_column_name
133
89
  :value
134
90
  end
91
+
92
+ def as_class_name table_name
93
+ table_name.to_s.singularize.capitalize.to_sym
94
+ end
data/lib/get_table.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'active_record'
2
+
3
+ def get_table sym, *args
4
+ class_name = as_class_name sym
5
+ class_not_defined = not(Object.const_defined? class_name)
6
+ should_force = args.any? {|x| x == :force}
7
+ if class_not_defined or should_force
8
+ anon = Class.new ActiveRecord::Base
9
+ Object.const_set class_name, anon
10
+ else
11
+ Object.const_get class_name
12
+ end
13
+ end
@@ -0,0 +1,49 @@
1
+ require_relative 'get_table.rb'
2
+
3
+ module MasterTable
4
+ def self.table_name
5
+ :active_finites
6
+ end
7
+ def self.column_name
8
+ :value
9
+ end
10
+ def self.table
11
+ get_table self.table_name
12
+ end
13
+ def self.all
14
+ if self.table.table_exists?
15
+ self.table
16
+ .all
17
+ .collect {|x| x.send default_column_name.to_s}
18
+ .collect {|x| get_table x}
19
+ else
20
+ []
21
+ end
22
+ end
23
+ def self.add table_name
24
+ if not self.table.table_exists?
25
+ ActiveRecord::Schema.define do
26
+ create_table MasterTable.table_name do |t|
27
+ t.string MasterTable.column_name, :null => false
28
+ end
29
+ add_index MasterTable.table_name, MasterTable.column_name, :unique => true
30
+ end
31
+ end
32
+ if self.table.where(self.column_name => table_name).empty?
33
+ new_finite = self.table.new
34
+ new_finite.send self.column_name.to_s + '=', table_name
35
+ new_finite.save
36
+ end
37
+ end
38
+ def self.delete table_name
39
+ matches = self.table.where self.column_name => table_name
40
+ matches.each do |m|
41
+ self.table.destroy m
42
+ end
43
+ if self.table.count.eql? 0
44
+ ActiveRecord::Schema.define do
45
+ drop_table MasterTable.table_name
46
+ end
47
+ end
48
+ end
49
+ end
@@ -8,25 +8,25 @@ def reconnect
8
8
  :timeout => 5000)
9
9
  end
10
10
 
11
- describe 'get_finite_table' do
11
+ describe 'get_table' do
12
12
  before :each do
13
13
  reconnect
14
14
  end
15
15
  it 'returns a class that is a child of active record base' do
16
- get_finite_table(:test).superclass.should eql ActiveRecord::Base
16
+ get_table(:test).superclass.should eql ActiveRecord::Base
17
17
  end
18
18
  it 'brings a class into scope' do
19
- get_finite_table :spaces
19
+ get_table :spaces
20
20
  Object.const_defined?(:Space).should be true
21
21
  end
22
22
  it 'will not redefine a previously defined constant' do
23
23
  Define = true
24
- get_finite_table :defines
24
+ get_table :defines
25
25
  Define.should == true
26
26
  end
27
27
  it 'will redefine a previously defined constant with the force option' do
28
28
  Anyway = true
29
- get_finite_table :anyways, :force
29
+ get_table :anyways, :force
30
30
  Anyway.should_not == true
31
31
  end
32
32
  end
@@ -45,12 +45,41 @@ describe 'all_finite_tables' do
45
45
  delete_finites in_table: :things, values: ['1']
46
46
  all_finite_tables.should == []
47
47
  end
48
+ it 'returns a table that was used with add_finites' do
49
+ ActiveRecord::Schema.define do
50
+ create_table :things do |t|
51
+ t.string :column, :null => false
52
+ end
53
+ end
54
+ add_finites in_table: :things,
55
+ column_name: :column,
56
+ values: ['1']
57
+
58
+ all_finite_tables.should == [Thing]
59
+ end
60
+ it 'returns a table that was used with delete_finites' do
61
+ ActiveRecord::Schema.define do
62
+ create_table :things do |t|
63
+ t.string :column, :null => false
64
+ end
65
+ end
66
+ t = Thing.new
67
+ t.column = "hi"
68
+ t.save
69
+
70
+ u = Thing.new
71
+ u.column = "bye"
72
+ u.save
73
+
74
+ delete_finites in_table: :things,
75
+ column_name: :column,
76
+ values: ["bye"]
77
+
78
+ all_finite_tables.should == [Thing]
79
+ end
48
80
  end
49
81
 
50
82
  describe 'as_class_name' do
51
- before :each do
52
- reconnect
53
- end
54
83
  it 'capitalizes its input' do
55
84
  as_class_name(:as).should eql :A
56
85
  end
@@ -105,13 +134,18 @@ describe 'add_finites' do
105
134
  add_finites in_table: :wu_members, values: ['rza', 'gza', nil]
106
135
  rescue
107
136
  ['rza', 'gza'].each do |w|
108
- get_finite_table(:wu_members).where(default_column_name => w).should nil
137
+ get_table(:wu_members).where(default_column_name => w).should nil
109
138
  end
110
139
  end
111
140
  end
141
+ it 'will not add a duplicate value' do
142
+ lambda do
143
+ add_finites(in_table: :numbers, values: ['1','1'])
144
+ end.should raise_error ActiveRecord::RecordNotUnique
145
+ end
112
146
  end
113
147
 
114
- describe 'delete_finies' do
148
+ describe 'delete_finites' do
115
149
  before :each do
116
150
  reconnect
117
151
  end
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
4
  require 'active_finite'
5
- require 'active_support/core_ext'
5
+ require 'active_record'
6
6
 
7
7
  # Requires supporting files with custom matchers and macros, etc,
8
8
  # in ./support/ and its subdirectories.
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: active_finite
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.4
5
+ version: 0.1.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - me
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-21 00:00:00 -04:00
13
+ date: 2011-04-23 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -96,6 +96,8 @@ files:
96
96
  - Rakefile
97
97
  - VERSION
98
98
  - lib/active_finite.rb
99
+ - lib/get_table.rb
100
+ - lib/master_table.rb
99
101
  - spec/active_finite_spec.rb
100
102
  - spec/spec_helper.rb
101
103
  - spec/villans.json
@@ -113,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
115
  requirements:
114
116
  - - ">="
115
117
  - !ruby/object:Gem::Version
116
- hash: 138921425
118
+ hash: 611629043
117
119
  segments:
118
120
  - 0
119
121
  version: "0"