mastar 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ vendor/bundle
@@ -0,0 +1,3 @@
1
+ rvm:
2
+ - 1.9.3
3
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mastar.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 pinzolo
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Mastar
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'mastar'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install mastar
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ task :default => [:spec]
5
+ begin
6
+ require 'rspec/core/rake_task'
7
+ RSpec::Core::RakeTask.new(:spec) do |spec|
8
+ spec.pattern = 'spec/**/*_spec.rb'
9
+ spec.rspec_opts = ['-cfs']
10
+ end
11
+ rescue LoadError => e
12
+ end
@@ -0,0 +1,100 @@
1
+ # coding: utf-8
2
+ require 'mastar/version'
3
+ require 'mastar/configuration'
4
+ require 'mastar/name_value_pair'
5
+
6
+ module Mastar
7
+ def self.included(base)
8
+ class << base
9
+ alias_method :find!, :find
10
+ end
11
+ base.extend(ClassMethods)
12
+ base.__send__(:include, InstanceMethods)
13
+ base.__send__(:before_save, :remove_record_cache)
14
+ end
15
+
16
+ module ClassMethods
17
+ def pairs(options = {})
18
+ opts = safe_options(options)
19
+ name = extract_option_value(opts, :name, mastar_config.name)
20
+ value = extract_option_value(opts, :value, mastar_config.value)
21
+ self.select([name, value]).map { |r| NameValuePair.new(r.__send__(name), r.__send__(value)) }
22
+ end
23
+
24
+ def find(id)
25
+ mastar_records[id] ||= find!(id)
26
+ mastar_records[id]
27
+ end
28
+
29
+ private
30
+ def mastar(options = {})
31
+ opts = safe_options(options)
32
+ unless opts.empty?
33
+ mastar_config.name(extract_option_value(opts, :name))
34
+ mastar_config.value(extract_option_value(opts, :value))
35
+ mastar_config.key(extract_option_value(opts, :key))
36
+ end
37
+ mastar_config
38
+ end
39
+
40
+ def mastar_config
41
+ @mastar_config ||= Mastar::Configuration.new
42
+ end
43
+
44
+ def mastar_records
45
+ @mastar_records ||= {}
46
+ end
47
+
48
+ def safe_options(options)
49
+ options.is_a?(Hash) ? options : {}
50
+ end
51
+
52
+ def extract_option_value(options, key, default_value = nil)
53
+ val = options[key] || options[key.to_s]
54
+ val = val || default_value if default_value
55
+ val.to_sym
56
+ end
57
+
58
+ def method_missing(name, *args)
59
+ if mastar_config.key
60
+ define_direct_method(name)
61
+ respond_to?(name) ? __send__(name, *args) : nil
62
+ else
63
+ super
64
+ end
65
+ end
66
+
67
+ def define_direct_method(name)
68
+ rec = where(mastar_config.key => name.to_s).first
69
+ return unless rec
70
+
71
+ mastar_records[rec.id] = rec
72
+ klass = class << self; self end
73
+ klass.class_eval do
74
+ eval("instance_variable_set('@#{name}_id', #{rec.id})")
75
+ define_method(name) do |*args|
76
+ record_id = klass.instance_variable_get("@#{name}_id")
77
+ mastar_records[record_id] ||= find(record_id)
78
+ record = mastar_records[record_id]
79
+ if args.nil? || args.empty? || record.nil?
80
+ record
81
+ elsif args.length == 1
82
+ record.__send__(args.first)
83
+ else
84
+ args.map { |arg| record.__send__(arg) }
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ module InstanceMethods
92
+ private
93
+ def remove_record_cache
94
+ if self.id
95
+ records = self.class.__send__('mastar_records')
96
+ records[self.id] = nil
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ module Mastar
3
+ class Configuration
4
+ def initialize(options = {})
5
+ opts = options.is_a?(Hash) ? options : {}
6
+ [:name, :value, :key].each do |k|
7
+ v = opts[k] || opts[k.to_s]
8
+ __send__(k, v.to_sym) if v
9
+ end
10
+ end
11
+
12
+ def name(name = nil)
13
+ @name = name if name
14
+ @name || :name
15
+ end
16
+
17
+ def value(value = nil)
18
+ @value = value if value
19
+ @value || :id
20
+ end
21
+
22
+ def key(key = nil)
23
+ @key = key if key
24
+ @key
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ # coding: utf-8
2
+ module Mastar
3
+ class NameValuePair
4
+ attr_accessor :name, :value
5
+ alias_method :first, :name
6
+ alias_method :last, :value
7
+
8
+ def initialize(name, value)
9
+ @name = name
10
+ @value = value
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ # coding: utf-8
2
+ module Mastar
3
+ VERSION = "0.9.0"
4
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/mastar/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["pinzolo"]
6
+ gem.email = ["pinzolo@gmail.com"]
7
+ gem.description = %q{MASTer table on Active Record}
8
+ gem.summary = %q{add some features to master table class on ActiveRecord}
9
+ gem.homepage = "https://github.com/pinzolo/mastar"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "mastar"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Mastar::VERSION
17
+
18
+ gem.add_development_dependency 'rake'
19
+ gem.add_development_dependency 'rspec'
20
+ gem.add_development_dependency 'sqlite3'
21
+ gem.add_development_dependency 'activerecord'
22
+ end
@@ -0,0 +1,35 @@
1
+ sunday:
2
+ id: 1
3
+ name: sunday
4
+ short_name: Sun.
5
+ holiday: true
6
+ monday:
7
+ id: 2
8
+ name: monday
9
+ short_name: Mon.
10
+ holiday: false
11
+ tuesday:
12
+ id: 3
13
+ name: tuesday
14
+ short_name: Tue.
15
+ holiday: false
16
+ wednesday:
17
+ id: 4
18
+ name: wednesday
19
+ short_name: Wed.
20
+ holiday: false
21
+ thursday:
22
+ id: 5
23
+ name: thursday
24
+ short_name: Thu.
25
+ holiday: false
26
+ friday:
27
+ id: 6
28
+ name: friday
29
+ short_name: Fri.
30
+ holiday: false
31
+ saturday:
32
+ id: 7
33
+ name: saturday
34
+ short_name: Sat.
35
+ holiday: true
@@ -0,0 +1,111 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+ describe Mastar::Configuration do
4
+ context 'initialized without parameter' do# {{{
5
+ before do
6
+ @config = Mastar::Configuration.new
7
+ end
8
+ describe '#name' do
9
+ it 'is :name' do
10
+ @config.name.should be :name
11
+ end
12
+ end
13
+ describe '#value' do
14
+ it 'is :id' do
15
+ @config.value.should be :id
16
+ end
17
+ end
18
+ describe '#key' do
19
+ it 'is nil' do
20
+ @config.key.should be nil
21
+ end
22
+ end
23
+ end# }}}
24
+
25
+ context 'initialized with Hash parameters (name: title, value: value, key: uid)' do
26
+ context 'key: symbol, value: symbol' do# {{{
27
+ before do
28
+ @config = Mastar::Configuration.new(:name => :title, :value => :value, :key => :uid)
29
+ end
30
+ describe '#name' do
31
+ it 'is :title' do
32
+ puts @config.name
33
+ @config.name.should be :title
34
+ end
35
+ end
36
+ describe '#value' do
37
+ it 'is :value' do
38
+ @config.value.should be :value
39
+ end
40
+ end
41
+ describe '#key' do
42
+ it 'is :uid' do
43
+ @config.key.should be :uid
44
+ end
45
+ end
46
+ end# }}}
47
+
48
+ context 'key: symbol, value: string' do# {{{
49
+ before do
50
+ @config = Mastar::Configuration.new(:name => 'title', :value => 'value', :key => 'uid')
51
+ end
52
+ describe '#name' do
53
+ it 'is :title' do
54
+ @config.name.should be :title
55
+ end
56
+ end
57
+ describe '#value' do
58
+ it 'is :value' do
59
+ @config.value.should be :value
60
+ end
61
+ end
62
+ describe '#key' do
63
+ it 'is :uid' do
64
+ @config.key.should be :uid
65
+ end
66
+ end
67
+ end# }}}
68
+
69
+ context 'key: string, value: string' do# {{{
70
+ before do
71
+ @config = Mastar::Configuration.new('name' => 'title', 'value' => 'value', 'key' => 'uid')
72
+ end
73
+ describe '#name' do
74
+ it 'is :title' do
75
+ @config.name.should be :title
76
+ end
77
+ end
78
+ describe '#value' do
79
+ it 'is :value' do
80
+ @config.value.should be :value
81
+ end
82
+ end
83
+ describe '#key' do
84
+ it 'is :uid' do
85
+ @config.key.should be :uid
86
+ end
87
+ end
88
+ end# }}}
89
+ end
90
+
91
+ context 'initialized with parameters (not Hash)' do# {{{
92
+ before do
93
+ @config = Mastar::Configuration.new(['title', 'value', 'uid'])
94
+ end
95
+ describe '#name' do
96
+ it 'is :name' do
97
+ @config.name.should be :name
98
+ end
99
+ end
100
+ describe '#value' do
101
+ it 'is :id' do
102
+ @config.value.should be :id
103
+ end
104
+ end
105
+ describe '#key' do
106
+ it 'is nil' do
107
+ @config.key.should be nil
108
+ end
109
+ end
110
+ end# }}}
111
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+ describe Mastar::NameValuePair do
4
+ context 'initialized with name and value' do
5
+ before do
6
+ @pair = Mastar::NameValuePair.new('label', 1)
7
+ end
8
+ describe '#name' do
9
+ it 'is label' do
10
+ @pair.name.should eq 'label'
11
+ end
12
+ end
13
+ describe '#value' do
14
+ it 'is 1' do
15
+ @pair.value.should eq 1
16
+ end
17
+ end
18
+ describe '#first' do
19
+ it 'is equal #name' do
20
+ @pair.first.should eq @pair.name
21
+ end
22
+ end
23
+ describe '#last' do
24
+ it 'is equal #value' do
25
+ @pair.last.should eq @pair.last
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,195 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+ def pair_map(pairs)
4
+ pairs.inject({}) do |result, item|
5
+ result[item.value] = item.name
6
+ result
7
+ end
8
+ end
9
+
10
+ describe Mastar do
11
+ describe Mastar::ClassMethods do
12
+ describe '.pairs' do
13
+ context 'default' do
14
+ context 'directly called' do
15
+ before do
16
+ @all_dows = Dow1.all
17
+ end
18
+ it 'defined' do
19
+ defined?(Dow1.pairs).should be_true
20
+ end
21
+ context 'without option argument' do
22
+ it 'respond to :first' do
23
+ Dow1.pairs.all? { |pair| pair.respond_to?(:first) }.should be_true
24
+ end
25
+ it 'respond to :last' do
26
+ Dow1.pairs.all? { |pair| pair.respond_to?(:last) }.should be_true
27
+ end
28
+ it 'get all rows' do
29
+ pairs = pair_map(Dow1.pairs)
30
+ @all_dows.all? { |dow| pairs[dow.id] == dow.name }.should be_true
31
+ end
32
+ end
33
+ context 'with option argument(:name => :short_name, :value => :name)' do# {{{
34
+ context 'key: Symbol, value: Symbol' do
35
+ it 'get specified columns by option' do
36
+ pairs = pair_map(Dow1.pairs(:name => :short_name, :value => :name))
37
+ @all_dows.all? { |dow| pairs[dow.name] == dow.short_name }.should be_true
38
+ end
39
+ end
40
+ context 'key: String, value: Symbol' do
41
+ it 'same as above' do
42
+ pairs = pair_map(Dow1.pairs('name' => :short_name, 'value' => :name))
43
+ @all_dows.all? { |dow| pairs[dow.name] == dow.short_name }.should be_true
44
+ end
45
+ end
46
+ context 'key: Symbol, value: String' do
47
+ it 'same as above' do
48
+ pairs = pair_map(Dow1.pairs(:name => 'short_name', :value => 'name'))
49
+ @all_dows.all? { |dow| pairs[dow.name] == dow.short_name }.should be_true
50
+ end
51
+ end
52
+ context 'key: String, value: String' do
53
+ it 'same as above' do
54
+ pairs = pair_map(Dow1.pairs('name' => 'short_name', 'value' => 'name'))
55
+ @all_dows.all? { |dow| pairs[dow.name] == dow.short_name }.should be_true
56
+ end
57
+ end
58
+ end# }}}
59
+ context 'with nil argument' do
60
+ it 'same as no option' do
61
+ pairs = pair_map(Dow1.pairs)
62
+ @all_dows.all? { |dow| pairs[dow.id] == dow.name }.should be_true
63
+ end
64
+ end
65
+ end
66
+ context 'called by way of ARel' do
67
+ it 'respond' do
68
+ Dow1.holiday.respond_to?(:pairs).should be_true
69
+ end
70
+ it 'get filtered rows' do
71
+ pairs = pair_map(Dow1.holiday.pairs)
72
+ Dow1.where(:holiday => true).all? { |dow| pairs[dow.id] == dow.name }.should be_true
73
+ end
74
+ end
75
+ end
76
+ context 'use mastar_name method' do
77
+ it 'use mastar_name attr as name' do
78
+ pairs = pair_map(Dow3.pairs)
79
+ Dow3.all.all? { |dow| pairs[dow.id] == dow.short_name }.should be_true
80
+ end
81
+ end
82
+ context 'use mastar_value method' do
83
+ it 'use mastar_value attr as value' do
84
+ pairs = pair_map(Dow2.pairs)
85
+ Dow2.all.all? { |dow| pairs[dow.short_name] == dow.name }.should be_true
86
+ end
87
+ end
88
+ end
89
+ describe 'define direct class method' do
90
+ context 'no argument' do
91
+ it 'get record object' do
92
+ Dow1.respond_to?(:sunday).should be_false
93
+ Dow1.sunday.is_a?(Dow1).should be_true
94
+ Dow1.respond_to?(:sunday).should be_true
95
+ Dow1.sunday.name.should eq 'sunday'
96
+ end
97
+ end
98
+ context 'with 1 argument' do
99
+ it 'get attribute value at direct' do
100
+ Dow1.monday(:short_name).should eq 'Mon.'
101
+ end
102
+ end
103
+ context 'with multiple arguments' do
104
+ it 'get Array of attribute values at a time' do
105
+ Dow1.tuesday(:short_name, :holiday).is_a?(Array).should be_true
106
+ short_name, name = Dow1.wednesday(:short_name, :name)
107
+ short_name.should eq 'Wed.'
108
+ name.should eq 'wednesday'
109
+ end
110
+ end
111
+ context 'mastar.key is not set' do
112
+ it 'raise NoMethodError' do
113
+ lambda { Dow2.monday }.should raise_error(NoMethodError)
114
+ end
115
+ end
116
+ end
117
+ describe 'not exist in key column' do
118
+ context 'no argument' do
119
+ it 'get nil' do
120
+ Dow1.foo.should be_nil
121
+ end
122
+ end
123
+ context 'with 1 argument' do
124
+ it 'get nil' do
125
+ Dow1.bar(:name).should be_nil
126
+ end
127
+ end
128
+ context 'with multiple arguments' do
129
+ it 'get nil' do
130
+ Dow1.baz(:name, :value).should be_nil
131
+ end
132
+ end
133
+ end
134
+ describe '.mastar multiple setting' do
135
+ context 'mastar#name, mastar#value' do
136
+ it '.pairs method works' do
137
+ pairs = pair_map(Dow4.pairs)
138
+ Dow4.all.all? { |dow| pairs[dow.name] == dow.short_name }.should be_true
139
+ end
140
+ end
141
+ context 'mastar#key' do
142
+ it 'direct class method defining works' do
143
+ Dow4.respond_to?(:sunday).should be_false
144
+ Dow4.sunday.is_a?(Dow4).should be_true
145
+ Dow4.respond_to?(:sunday).should be_true
146
+ Dow4.sunday.name.should eq 'sunday'
147
+ end
148
+ end
149
+ end
150
+ describe '.find' do
151
+ context 'called by cached id' do
152
+ it 'get cached record' do
153
+ rec = Dow4.wednesday
154
+ rec.respond_to?(:iii).should be_false
155
+ class << rec
156
+ def iii
157
+ 'iii'
158
+ end
159
+ end
160
+ Dow4.find(4).respond_to?(:iii).should be_true
161
+ end
162
+ end
163
+ context 'called by uncached id' do
164
+ it 'get new record and cache' do
165
+ recs = Dow4.__send__(:mastar_records)
166
+ recs[5].should be_nil
167
+ Dow4.find(5)
168
+ recs = Dow4.__send__(:mastar_records)
169
+ recs[5].should_not be_nil
170
+ end
171
+ end
172
+ end
173
+ describe '.find!' do
174
+ it 'defined' do
175
+ Dow2.respond_to?(:find!).should be_true
176
+ end
177
+ context 'called' do
178
+ it 'get record' do
179
+ Dow2.find(4).id.should eq 4
180
+ end
181
+ end
182
+ end
183
+ end
184
+ describe Mastar::InstanceMethods do
185
+ context 'record update' do
186
+ it 'direct method record is updated automatically' do
187
+ Dow1.friday.holiday?.should eq false
188
+ fri = Dow1.find(Dow1.friday.id)
189
+ fri.holiday = true
190
+ fri.save
191
+ Dow1.friday.holiday?.should eq true
192
+ end
193
+ end
194
+ end
195
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ class Dow1 < ActiveRecord::Base
3
+ include Mastar
4
+ scope :holiday, lambda { where(:holiday => true) }
5
+ mastar.key :name
6
+
7
+ end
8
+
9
+ class Dow2 < ActiveRecord::Base
10
+ include Mastar
11
+ mastar.value :short_name
12
+
13
+ end
14
+
15
+ class Dow3 < ActiveRecord::Base
16
+ include Mastar
17
+ mastar.name :short_name
18
+
19
+ end
20
+
21
+ class Dow4 < ActiveRecord::Base
22
+ include Mastar
23
+ mastar :name => :short_name, :value => :name, :key => :name
24
+ end
@@ -0,0 +1,10 @@
1
+ # coding: utf-8
2
+ ActiveRecord::Schema.define :version => 0 do
3
+ (1..4).to_a.each do |i|
4
+ create_table "dow#{i}s", :force => true do |t|
5
+ t.string :name
6
+ t.string :short_name
7
+ t.boolean :holiday
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ base_dir = File.dirname(__FILE__)
3
+ $:.unshift(base_dir, '/../lib')
4
+ require 'mastar'
5
+ require 'active_record'
6
+
7
+ ActiveRecord::Base.establish_connection(
8
+ :adapter => 'sqlite3',
9
+ :database => ':memory:'
10
+ )
11
+
12
+ ActiveRecord::Base.silence do
13
+ load(base_dir + '/schema.rb')
14
+ load(base_dir + '/models.rb')
15
+ end
16
+
17
+ require 'yaml'
18
+ (1..4).to_a.each do |i|
19
+ yml = YAML.load_file("#{base_dir}/fixtures/dows.yml")
20
+ yml.keys.each do |k|
21
+ eval("Dow#{i}.create(yml[k])")
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mastar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - pinzolo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: activerecord
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: MASTer table on Active Record
79
+ email:
80
+ - pinzolo@gmail.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - .travis.yml
87
+ - Gemfile
88
+ - LICENSE
89
+ - README.md
90
+ - Rakefile
91
+ - lib/mastar.rb
92
+ - lib/mastar/configuration.rb
93
+ - lib/mastar/name_value_pair.rb
94
+ - lib/mastar/version.rb
95
+ - mastar.gemspec
96
+ - spec/fixtures/dows.yml
97
+ - spec/mastar/configuration_spec.rb
98
+ - spec/mastar/name_value_pair_spec.rb
99
+ - spec/mastar_spec.rb
100
+ - spec/models.rb
101
+ - spec/schema.rb
102
+ - spec/spec_helper.rb
103
+ homepage: https://github.com/pinzolo/mastar
104
+ licenses: []
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 1.8.23
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: add some features to master table class on ActiveRecord
127
+ test_files:
128
+ - spec/fixtures/dows.yml
129
+ - spec/mastar/configuration_spec.rb
130
+ - spec/mastar/name_value_pair_spec.rb
131
+ - spec/mastar_spec.rb
132
+ - spec/models.rb
133
+ - spec/schema.rb
134
+ - spec/spec_helper.rb