simple_model 0.0.1

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/.autotest ADDED
@@ -0,0 +1,10 @@
1
+ Autotest.add_hook :reset do |at|
2
+ at.clear_mappings
3
+ at.add_mapping(/^(.*?)(_spec)?\.rb$/) { |filename, m|
4
+ if m[2]
5
+ filename
6
+ else
7
+ "#{m[1]}_spec.rb"
8
+ end
9
+ }
10
+ end
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ .DS_Store
5
+ nbproject/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in simple_model.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,13 @@
1
+ module SimpleModel
2
+
3
+ autoload :ExtendCore, "simple_model/extend_core"
4
+ autoload :Attributes, "simple_model/attributes"
5
+ autoload :Errors, "simple_model/errors"
6
+ autoload :Validation, "simple_model/validation"
7
+
8
+ class Base
9
+ include SimpleModel::Errors
10
+ include SimpleModel::Attributes
11
+ include SimpleModel::Validation
12
+ end
13
+ end
@@ -0,0 +1,170 @@
1
+ module SimpleModel
2
+ module Attributes
3
+ include ExtendCore
4
+
5
+
6
+ #Set attribute values to those supplied at initialization
7
+ def initialize(*attrs)
8
+ attrs.extract_options!.each do |attr|
9
+ self.send(("#{attr[0]}=").to_sym, attr[1])
10
+ end
11
+ end
12
+
13
+ ############## Pseudo Rails Methods ###############
14
+ def id
15
+ @id
16
+ end
17
+
18
+ def id=(id)
19
+ @id=id
20
+ end
21
+
22
+ # Defaults to true so rails will create a "new" form
23
+ # Set to false and rails will produce an "edit" form
24
+ def new_record
25
+ @new_record = true if @new_record.nil?
26
+ @new_record
27
+ end
28
+
29
+ def new_record?
30
+ new_record
31
+ end
32
+
33
+ def new_record=(new_record)
34
+ @new_record = new_record.to_b
35
+ end
36
+
37
+ ############### End Pseudo Rails Methods ##############
38
+
39
+ # Place to store set attributes and their values
40
+ def attributes
41
+ @attributes ||= {}
42
+ @attributes
43
+ end
44
+
45
+
46
+ def self.included(base)
47
+ base.extend(ClassMethods)
48
+ end
49
+
50
+ module ClassMethods
51
+ def has_attributes(*attrs)
52
+ attrs.each do |attr|
53
+ attr_reader attr
54
+
55
+ define_method("#{attr.to_s}=") do |val|
56
+ instance_variable_set("@#{attr}", val)
57
+ attributes[attr] = val
58
+ val
59
+ end
60
+ end
61
+ end
62
+
63
+ # Creates setter and getter methods for boolean attributes
64
+ def has_booleans(*attrs)
65
+ options = attrs.extract_options!
66
+ attrs.each do |attr|
67
+ attr_reader attr
68
+ define_reader_with_options(attr,options)
69
+ define_method("#{attr.to_s}=") do |val|
70
+ instance_variable_set("@#{attr}", val.to_s.to_b)
71
+ attributes[attr] = val
72
+ val
73
+ end
74
+
75
+ define_method ("#{attr.to_s}?") do
76
+ send("#{attr.to_s}".to_sym).to_s.to_b
77
+ end
78
+ end
79
+ end
80
+
81
+ # Creates setter and getter methods for integer attributes
82
+ def has_ints(*attrs)
83
+ options = attrs.extract_options!
84
+ attrs.each do |attr|
85
+ attr_accessor attr
86
+ define_reader_with_options(attr,options)
87
+ define_method("#{attr.to_s}=") do |val|
88
+ instance_variable_set("@#{attr}", val.to_i)
89
+ attributes[attr] = val
90
+ val
91
+ end
92
+ end
93
+ end
94
+
95
+ # Creates setter and getter methods for float attributes
96
+ def has_currency(*attrs)
97
+ options = attrs.extract_options!
98
+ attrs.each do |attr|
99
+ define_reader_with_options(attr,options)
100
+ define_method("#{attr.to_s}=") do |val|
101
+ instance_variable_set("@#{attr}", val.to_currency)
102
+ attributes[attr] = val
103
+ val
104
+ end
105
+ end
106
+ end
107
+ # Creates setter and getter methods for float attributes
108
+ def has_floats(*attrs)
109
+ options = attrs.extract_options!
110
+ attrs.each do |attr|
111
+ attr_reader attr
112
+ define_reader_with_options(attr,options)
113
+
114
+ define_method("#{attr.to_s}=") do |val|
115
+ instance_variable_set("@#{attr}", val.to_f)
116
+ attributes[attr] = val
117
+ val
118
+ end
119
+ end
120
+ end
121
+
122
+ # Creates setter and getter methods for date attributes
123
+ def has_dates(*attrs)
124
+ options = attrs.extract_options!
125
+ attrs.each do |attr|
126
+ attr_reader
127
+ define_reader_with_options(attr,options)
128
+ define_method("#{attr.to_s}=") do |val|
129
+ instance_variable_set("@#{attr}", val.to_date)
130
+ attributes[attr] = val
131
+ val
132
+ end
133
+ end
134
+ end
135
+
136
+ # Creates setter and getter methods for time attributes
137
+ def has_times(*attrs)
138
+ options = attrs.extract_options!
139
+ attrs.each do |attr|
140
+ attr_reader
141
+ define_reader_with_options(attr,options)
142
+ define_method("#{attr.to_s}=") do |val|
143
+
144
+ instance_variable_set("@#{attr}", val.to_time)
145
+ attributes[attr] = val
146
+ val
147
+ end
148
+ end
149
+ end
150
+
151
+ def fetch_alias_name(attr)
152
+ alias_name = (attr.to_s << "_old=").to_sym
153
+ self.module_eval("alias #{alias_name} #{attr}")
154
+ alias_name
155
+ end
156
+
157
+ # Defines a reader method that returns a default value if current value
158
+ # is nil, if :default is present in the options hash
159
+ def define_reader_with_options(attr,options)
160
+ unless options[:default].blank?
161
+ define_method (attr.to_s) do
162
+ val = instance_variable_get("@#{attr.to_s}")
163
+ val = options[:default] if val.nil?
164
+ val
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,92 @@
1
+ module SimpleModel
2
+
3
+ module Errors
4
+ def errors
5
+ @errors ||= ErrorsHash.new
6
+ @errors
7
+ end
8
+
9
+
10
+ def valid?
11
+ self.errors.clear if errors
12
+ validate
13
+ self.errors.blank? || self.errors.empty?
14
+ end
15
+
16
+ def errors?
17
+ !self.errors.nil? && !errors.empty?
18
+ end
19
+
20
+
21
+ def errors_on(attr)
22
+ self.valid?
23
+ [self.errors.on(attr.to_s)].flatten.compact
24
+ end
25
+
26
+ alias :error_on :errors_on
27
+
28
+ def errors_to_s
29
+ error_string = ""
30
+ self.errors.full_messages.each do |m|
31
+ error_string << "#{m} "
32
+ end
33
+ error_string
34
+ end
35
+
36
+ def validate
37
+ # Override to implement validation
38
+ end
39
+
40
+ def errors_for_flash
41
+ error_string = ""
42
+ errors.full_messages.each do |m|
43
+ error_string << "<div>#{m}</div>"
44
+ end
45
+ error_string
46
+ end
47
+
48
+ class ErrorsHash
49
+ attr_accessor :errors
50
+ def initialize
51
+ errors
52
+ end
53
+
54
+ def errors
55
+ @errors ||= {}
56
+ @errors
57
+ end
58
+
59
+ def clear
60
+ self.errors = {}
61
+ end
62
+
63
+ def add(attr, message)
64
+ errors[attr.to_s] ||= []
65
+ errors[attr.to_s] << message
66
+ end
67
+ def count
68
+ errors.length
69
+ end
70
+ def empty?
71
+ errors.empty?
72
+ end
73
+ def full_messages
74
+ full_messages = []
75
+ errors.each do |error|
76
+ error[1].each do |message|
77
+ full_messages << "#{error[0].titleize} #{message}"
78
+ end
79
+ end
80
+ full_messages
81
+ end
82
+
83
+
84
+ def on(attr)
85
+ errors[attr.to_s] if errors[attr.to_s]
86
+ end
87
+
88
+ alias :[] :on
89
+ end
90
+ end
91
+ end
92
+
@@ -0,0 +1,108 @@
1
+ module ExtendCore
2
+ require 'time'
3
+ require 'date'
4
+ Float.class_eval do
5
+ def round_to(precision)
6
+ split = precision.to_s.split(".")
7
+ mulitplier = 10.0 ** (split[1].length)
8
+ (((((self)*mulitplier).round).to_f)/mulitplier)
9
+ end
10
+
11
+ # Round to nearest cent
12
+ def to_currency
13
+ round_to(0.01)
14
+ end
15
+ end
16
+
17
+ Object.class_eval do
18
+ # Borrowed from Rails activesupport/lib/active_support/core_ext/object/blank.rb
19
+ def blank?
20
+ respond_to?(:empty?) ? empty? : !self
21
+ end
22
+ end
23
+
24
+
25
+ #Extend Ruby Array.rb
26
+ Array.class_eval do
27
+ # Borrowed from Rails: activesupport/lib/active_support/core_ext/array/extract_options.rb
28
+ # Extracts options from a set of arguments. Removes and returns the last
29
+ # element in the array if it's a hash, otherwise returns a blank hash.
30
+ #
31
+ # def options(*args)
32
+ # args.extract_options!
33
+ # end
34
+ #
35
+ # options(1, 2) # => {}
36
+ # options(1, 2, :a => :b) # => {:a=>:b}
37
+ def extract_options!
38
+ last.is_a?(::Hash) ? pop : {}
39
+ end
40
+ end
41
+
42
+ #Extend Ruby String.rb
43
+ String.class_eval do
44
+
45
+ # to_b => to_boolean
46
+ def to_b
47
+ ['1',"true", "t"].include?(self)
48
+ end
49
+
50
+ alias :to_boolean :to_b
51
+
52
+
53
+ def to_date
54
+ Date.parse(safe_datetime_string)
55
+ end
56
+
57
+
58
+ def to_time
59
+ Time.parse(safe_datetime_string)
60
+ end
61
+
62
+ # Takes known US formatted date/time strings (MM/DD/YYYY TIME) and converts
63
+ # them to international format (YYYY/MM/DD TIME)
64
+ #
65
+ # * safe_date_string("12/31/2010") # => '2010-12-31'
66
+ # * safe_date_string("12/31/2010T23:30:25") # => '2010-12-31T23:30:25'
67
+ # * safe_date_string("12/31/2010 23:30:25") # => '2010-12-31 23:30:25'
68
+ def safe_datetime_string
69
+ date = self
70
+ date_string = ""
71
+ if date[0..9].match(/^(0[1-9]|[1-9]|1[012])[- \/.]([1-9]|0[1-9]|[12][0-9]|3[01])[- \/.][0-9][0-9][0-9][0-9]/)
72
+ if date.include?("/")
73
+ split = date.split("/")
74
+ else
75
+ split = date.split("-")
76
+ end
77
+ time = ""
78
+ if split[2].length > 4
79
+ time = split[2][4..(split[2].length - 1)]
80
+ split[2] = split[2][0..3]
81
+ end
82
+ if split.length == 3 && split[2].length == 4
83
+ date_string << "#{split[2]}-#{split[0]}-#{split[1]}"
84
+ date_string << "#{time}" unless time.blank?
85
+ end
86
+ end
87
+ date_string = date if date_string.blank?
88
+ date_string
89
+ end
90
+
91
+ alias :old_to_f :to_f
92
+ # Remove none numeric characters the run default ruby float cast
93
+ def to_f
94
+ gsub(/[^0-9\.\+\-]/, '').old_to_f
95
+ end
96
+
97
+ def to_currency
98
+ to_f.to_currency
99
+ end
100
+
101
+ end
102
+ Fixnum.class_eval do
103
+ #Any value greater than 0 is true
104
+ def to_b
105
+ self > 0
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,66 @@
1
+ module SimpleModel
2
+ module Validation
3
+ def validates_presence_of(*attr_names)
4
+ options = attr_names.extract_options!
5
+ #set defaults
6
+ options[:message] = "cannot be blank." if options[:message].blank?
7
+ attr_names.each do |attr|
8
+ break if conditional?(options)
9
+
10
+ errors.add(attr, options[:message]) if send(attr).blank?
11
+ end
12
+ end
13
+
14
+
15
+ def validates_format_of(*attr_names)
16
+ options = attr_names.extract_options!
17
+ #set defaults
18
+ options[:message] = "is an invalid format." if options[:message].blank?
19
+
20
+ attr_names.each do |attr|
21
+ break if conditional?(options)
22
+
23
+ method = send(attr)
24
+ unless method.blank?
25
+ errors.add(attr, options[:message]) unless method.to_s.match(options[:with])
26
+ end
27
+ end
28
+ end
29
+ def validates_length_of(*attr_names)
30
+ options = attr_names.extract_options!
31
+
32
+ attr_names.each do |attr|
33
+ break if conditional?(options)
34
+
35
+ att_method = send(attr)
36
+ unless att_method.blank?
37
+ errors.add(attr,(options[:message].blank? ? "must equal #{options[:equal]} characters in length." : options[:message])) if options[:equal] && att_method.to_s.length != options[:equal]
38
+ errors.add(attr,(options[:message].blank? ? "cannot have more than #{options[:max]} characters in length." : options[:message])) if options[:max] && att_method.to_s.length > options[:max]
39
+ errors.add(attr,(options[:message].blank? ? "cannot have less than #{options[:min]} characters in length." : options[:message])) if options[:min] && att_method.to_s.length < options[:min]
40
+ end
41
+ end
42
+ end
43
+
44
+ def validates_inclusion_of(*attr_names)
45
+ options = attr_names.extract_options!
46
+
47
+ first = options[:in].first
48
+ last = options[:in].last
49
+ options[:message] = "must be greater than or equal to #{first} and less than or equal to #{last}" if options[:message].blank?
50
+ attr_names.each do |attr|
51
+ break if conditional?(options)
52
+ attr_method = send(attr).to_f
53
+ unless attr_method.blank?
54
+ errors.add(attr,options[:message]) if attr_method < first || attr_method > last
55
+ end
56
+ end
57
+ end
58
+
59
+ private
60
+ def conditional?(options)
61
+ return true unless ((options[:if].blank? && options[:unless].blank?) ||
62
+ !options[:if].blank? && send(options[:if])) ||
63
+ (!options[:unless].blank? && !send(options[:unless]))
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,3 @@
1
+ module SimpleModel
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "simple_model/version"
4
+
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "simple_model"
8
+ s.version = SimpleModel::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Joshua T Mckinney"]
11
+ s.email = ["joshmckin@gmail.com"]
12
+ s.homepage = ""
13
+ s.summary = %q{Simpifies building tableless models or models backed by webservices}
14
+ s.description = %q{Simpifies building tableless models or models backed by webservices. Create data type specific attributes with default if values. Also, provides a simple error and validation api for non-rails 3 apps.}
15
+
16
+ s.add_development_dependency 'rspec', ' 1.3.1'
17
+ s.rubyforge_project = "simple_model"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe SimpleModel::Attributes do
4
+ before(:all) do
5
+ class TestInit
6
+ include SimpleModel::Attributes
7
+ has_attributes :test1,:test2
8
+ end
9
+ @init = TestInit.new(:test1 => "1", :test2 => '2')
10
+ end
11
+
12
+ it "should set provided attributes on initialize" do
13
+ @init.test1.should eql("1")
14
+ @init.test2.should eql("2")
15
+ end
16
+
17
+ it "should include set attributes in attributes hash" do
18
+ @init.attributes.class.should eql(Hash)
19
+ @init.attributes[:test1].should eql("1")
20
+ @init.attributes[:test2].should eql("2")
21
+ end
22
+
23
+ end
24
+ describe SimpleModel::Attributes, 'define_reader_with_options' do
25
+ before(:all) do
26
+ class TestDefault
27
+ include SimpleModel::Attributes
28
+ attr_accessor :test
29
+ define_reader_with_options :test, :default => "test"
30
+ end
31
+ end
32
+
33
+ it "should define setter method with default value" do
34
+ default = TestDefault.new
35
+ default.test.should eql("test")
36
+ end
37
+ it "should not intefer with setting" do
38
+ default = TestDefault.new
39
+ default.test = "New"
40
+ default.test.should eql("New")
41
+ end
42
+
43
+ end
44
+ describe SimpleModel::Attributes, 'has_booleans' do
45
+ before(:all) do
46
+ class TestBoolean
47
+ include SimpleModel::Attributes
48
+ has_booleans :test
49
+ end
50
+ end
51
+
52
+ it "should add setter=, getter and getter? methods" do
53
+ methods = TestBoolean.new.methods
54
+ union = methods | [:test, :test=, :test?]
55
+ union.should eql(methods)
56
+ end
57
+
58
+ end
@@ -0,0 +1,64 @@
1
+
2
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
+ describe ExtendCore, 'Float.rb' do
4
+ before(:all) do
5
+ include ExtendCore
6
+ end
7
+ describe ExtendCore, 'round_to' do
8
+ it "should return float rounded to specified precision" do
9
+ 0.3333.round_to(0.01).should eql(0.33)
10
+ 0.3333.round_to(0.001).should eql(0.333)
11
+ 0.33335.round_to(0.0001).should eql(0.3334)
12
+ end
13
+ end
14
+ end
15
+
16
+
17
+ describe ExtendCore, 'String.rb' do
18
+ before(:all) do
19
+ include ExtendCore
20
+ end
21
+ describe ExtendCore, 'safe_datetime_string' do
22
+ it "should set US formated datetime string to international" do
23
+ "12/31/2010".safe_datetime_string.should eql("2010-12-31")
24
+ "12/31/2010T23:31:59".safe_datetime_string.should eql("2010-12-31T23:31:59")
25
+ "12/31/2010 23:31:59".safe_datetime_string.should eql("2010-12-31 23:31:59")
26
+
27
+ end
28
+ end
29
+ describe ExtendCore, 'to_b' do
30
+ it "should return a Boolean" do
31
+ "1".to_b.class.should eql(TrueClass)
32
+ "".to_b.class.should eql(FalseClass)
33
+ end
34
+
35
+ it "should return true if string is '1' or 't' or 'true'"do
36
+ ['1','t','true'].each do |s|
37
+ s.to_b.should be_true
38
+ end
39
+ end
40
+
41
+ end
42
+ describe ExtendCore, 'to_date' do
43
+ it "return a Date object" do
44
+ "12/31/2010".to_date.class.should eql(Date)
45
+ end
46
+ end
47
+ describe ExtendCore, 'to_date' do
48
+ it "return a Time object" do
49
+ "12/31/2010".to_time.class.should eql(Time)
50
+ end
51
+ end
52
+ describe ExtendCore, 'to_f' do
53
+ it "return a Foat from a string that may contain non-numeric values" do
54
+ "$5,000.006".to_f.should eql(5000.006)
55
+ end
56
+ end
57
+ describe ExtendCore, 'to_currency' do
58
+ it "return a Foat from a string that may contain non-numeric values" do
59
+ "$5,000.006".to_currency.should eql(5000.01)
60
+ end
61
+ end
62
+
63
+ end
64
+
@@ -0,0 +1,43 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe SimpleModel do
4
+ it 'Should add a boolean setter' do
5
+ class TestStuff < SimpleModel::Base
6
+ has_booleans :test_boolean
7
+ end
8
+ TestStuff.new.methods.include?(:test_boolean).should be_true
9
+ #a.test.should be_false
10
+ end
11
+ it 'Should add a boolean setter' do
12
+ class TestStuff < SimpleModel::Base
13
+ has_booleans :test_boolean
14
+ end
15
+ t = TestStuff.new
16
+ t.methods.include?(:test_boolean).should be_true
17
+ t.test_boolean = true
18
+ t.test_boolean.should be_true
19
+ #a.test.should be_false
20
+ end
21
+ it 'Should add a error setter' do
22
+ class TestStuff < SimpleModel::Base
23
+ has_attributes :test_attr
24
+ end
25
+ a = TestStuff.new
26
+ a.errors.add(:test_attr, "test")
27
+ a.errors?.should be_true
28
+ end
29
+ end
30
+
31
+ describe SimpleModel::Errors do
32
+ it 'Should add a error setter' do
33
+ class TestError
34
+ include SimpleModel::Errors
35
+ attr_accessor :test_attr
36
+ end
37
+ a = TestError.new(self)
38
+ a.errors.add(:test_attr, "test")
39
+ a.errors?.should be_true
40
+
41
+ #a.test.should be_false
42
+ end
43
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'simple_model'
4
+ require 'spec'
5
+
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ Spec::Runner.configure do |config|
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_model
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Joshua T Mckinney
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-27 00:00:00 -06:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - "="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 3
31
+ - 1
32
+ version: 1.3.1
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: Simpifies building tableless models or models backed by webservices. Create data type specific attributes with default if values. Also, provides a simple error and validation api for non-rails 3 apps.
36
+ email:
37
+ - joshmckin@gmail.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - .autotest
46
+ - .gitignore
47
+ - Gemfile
48
+ - Rakefile
49
+ - lib/simple_model.rb
50
+ - lib/simple_model/attributes.rb
51
+ - lib/simple_model/errors.rb
52
+ - lib/simple_model/extend_core.rb
53
+ - lib/simple_model/validation.rb
54
+ - lib/simple_model/version.rb
55
+ - simple_model.gemspec
56
+ - spec/attributes_spec.rb
57
+ - spec/extend_core_spec.rb
58
+ - spec/simple_model_spec.rb
59
+ - spec/spec.opts
60
+ - spec/spec_helper.rb
61
+ has_rdoc: true
62
+ homepage: ""
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options: []
67
+
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ requirements: []
87
+
88
+ rubyforge_project: simple_model
89
+ rubygems_version: 1.3.7
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Simpifies building tableless models or models backed by webservices
93
+ test_files:
94
+ - spec/attributes_spec.rb
95
+ - spec/extend_core_spec.rb
96
+ - spec/simple_model_spec.rb
97
+ - spec/spec.opts
98
+ - spec/spec_helper.rb