entasis 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY CHANGED
@@ -1,2 +1,9 @@
1
+ == 0.2.1
2
+ Introduced ActiveModel validations
3
+
4
+ == 0.2.0
5
+ Moved away from Struct and started to use attr_accessor as boiler plate.
6
+ Added Base.attributes method to define attributes
7
+
1
8
  == 0.1.0
2
9
  Initial release
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Elabs AB
1
+ Copyright (c) 2010 Ingemar Edsborn
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -16,6 +16,9 @@ Example:
16
16
  hilda = Person.new(:name => 'Hilda', :age => '23', :city => 'Berlin')
17
17
  hilda.attribute_names # => ["name", "age", "city"]
18
18
  hilda.attributes # => {"name"=>"Hilda", "age"=>23, "city"=>"Berlin"}
19
+ anon = Person.new
20
+ anon.valid? # => false
21
+ anon.errors # => {:name=>["can't be blank"]}>
19
22
 
20
23
 
21
24
  Note on Patches/Pull Requests
@@ -31,11 +34,10 @@ Note on Patches/Pull Requests
31
34
  Author
32
35
  ------
33
36
 
34
- Ingemar Edsborn (ingemar@elabs.se)
37
+ Ingemar Edsborn (ingemar@xox.se)
35
38
 
36
39
 
37
40
  Copyright
38
41
  ---------
39
42
 
40
- Copyright (c) 2010 Elabs AB (http://www.elabs.se). See LICENSE for details
41
-
43
+ Copyright (c) 2010 Ingemar Edsborn. See LICENSE for details
data/entasis.gemspec CHANGED
@@ -3,15 +3,19 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
  require "entasis/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "entasis"
7
- s.version = Entasis::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Ingemar Edsborn"]
10
- s.email = ["ingemar@elabs.se"]
11
- s.homepage = "http://github.com/ingemar/entasis"
12
- s.summary = %q{A few neat methods for a basic class}
13
- s.description = %q{Entasis provides a few very useful instance methods for Struct based classes. Handy for models without a database.}
6
+ s.name = "entasis"
7
+ s.version = Entasis::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Ingemar Edsborn"]
10
+ s.email = ["ingemar@xox.se"]
14
11
 
15
- s.files = Dir.glob("lib/**/*") + %w(Gemfile entasis.gemspec HISTORY README.md LICENSE)
16
- s.test_files = Dir.glob('spec/*')
12
+ s.homepage = "http://github.com/ingemar/entasis"
13
+ s.summary = %q{A few neat methods for a basic class}
14
+ s.description = %q{Entasis provides a few useful methods for building a basic class. Handy for models without a database.}
15
+
16
+ s.files = Dir.glob("lib/**/*") + %w(Gemfile entasis.gemspec HISTORY README.md LICENSE)
17
+ s.test_files = Dir.glob('spec/*')
18
+
19
+ s.add_runtime_dependency('activemodel', '~> 3.0')
20
+ s.add_development_dependency 'rspec', '~> 2.0'
17
21
  end
@@ -0,0 +1,36 @@
1
+ module Entasis
2
+ class Base
3
+ include ActiveModel::Validations
4
+
5
+ class << self
6
+ # Takes a list of symbolized attribute names and defines them
7
+ def attributes(*attrs)
8
+ @@attribute_names = attrs.map(&:to_s)
9
+ attr_accessor(*attrs)
10
+ end
11
+ end
12
+
13
+ # Takes a hash and assigns keys and values to it's attributes members
14
+ def initialize(*args)
15
+ if args.first.is_a?(Hash) then set_attributes_from_hash(args.first) else super(*args) end
16
+ end
17
+
18
+ def attribute_names
19
+ @@attribute_names
20
+ end
21
+
22
+ # Returns an attributes hash
23
+ def attributes
24
+ attrs = {}
25
+ attribute_names.each { |name| attrs[name] = send(name) }
26
+ attrs
27
+ end
28
+
29
+ private
30
+ # Takes each key and value from the hash and assigns it to it's attribute.
31
+ def set_attributes_from_hash(hash)
32
+ hash.each_pair { |key, value| self.send("#{key}=", value) }
33
+ end
34
+ end
35
+ end
36
+
@@ -1,3 +1,3 @@
1
1
  module Entasis
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.2"
3
3
  end
data/lib/entasis.rb CHANGED
@@ -1,34 +1,5 @@
1
- module Entasis
2
- class Base
3
- class << self
4
- # Takes a list of symbolized attribute names and defines them
5
- def attributes(*attrs)
6
- @@attribute_names = attrs.map(&:to_s)
7
- attr_accessor(*attrs)
8
- end
9
- end
10
-
11
- # Takes a hash and assigns keys and values to it's attributes members
12
- def initialize(*args)
13
- if args.first.is_a?(Hash) then set_attributes_from_hash(args.first) else super(*args) end
14
- end
15
-
16
- def attribute_names
17
- @@attribute_names
18
- end
1
+ require 'active_model'
19
2
 
20
- # Returns an attributes hash
21
- def attributes
22
- attrs = {}
23
- attribute_names.each { |name| attrs[name] = send(name) }
24
- attrs
25
- end
26
-
27
- private
28
- # Takes each key and value from the hash and assigns it to it's attribute.
29
- def set_attributes_from_hash(hash)
30
- hash.each_pair { |key, value| self.send("#{key}=", value) }
31
- end
32
- end
3
+ module Entasis
4
+ autoload :Base, 'entasis/base'
33
5
  end
34
-
data/spec/entasis_spec.rb CHANGED
@@ -23,4 +23,18 @@ describe "Entasis::Base" do
23
23
  hilda.attributes.should == {"name"=>"Hilda", "age"=>23, "city"=>"Berlin"}
24
24
  end
25
25
  end
26
+
27
+ context "validations" do
28
+ describe "#valid?" do
29
+ it "validates" do
30
+ hilda.should be_valid
31
+ end
32
+
33
+ it "will have errors" do
34
+ anon = Person.new(:name => "")
35
+ anon.should_not be_valid
36
+ anon.errors.to_hash.should == { :name => ["can't be blank"] }
37
+ end
38
+ end
39
+ end
26
40
  end
data/spec/person.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  class Person < Entasis::Base
2
2
  attributes :name, :age, :city
3
3
 
4
+ validates_presence_of :name
5
+
4
6
  def age=(years)
5
7
  @age = years.to_i
6
8
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
3
4
  require 'entasis'
4
- require 'rspec'
5
5
 
6
- Rspec.configure do |config|
6
+ RSpec.configure do |config|
7
7
  end
metadata CHANGED
@@ -1,34 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: entasis
3
- version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Ingemar Edsborn
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-10-27 00:00:00 +02:00
19
- default_executable:
20
- dependencies: []
21
-
22
- description: Entasis provides a few very useful instance methods for Struct based classes. Handy for models without a database.
23
- email:
24
- - ingemar@elabs.se
12
+ date: 2012-08-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.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: '2.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: '2.0'
46
+ description: Entasis provides a few useful methods for building a basic class. Handy
47
+ for models without a database.
48
+ email:
49
+ - ingemar@xox.se
25
50
  executables: []
26
-
27
51
  extensions: []
28
-
29
52
  extra_rdoc_files: []
30
-
31
- files:
53
+ files:
54
+ - lib/entasis/base.rb
32
55
  - lib/entasis/version.rb
33
56
  - lib/entasis.rb
34
57
  - Gemfile
@@ -39,41 +62,31 @@ files:
39
62
  - spec/entasis_spec.rb
40
63
  - spec/person.rb
41
64
  - spec/spec_helper.rb
42
- has_rdoc: true
43
65
  homepage: http://github.com/ingemar/entasis
44
66
  licenses: []
45
-
46
67
  post_install_message:
47
68
  rdoc_options: []
48
-
49
- require_paths:
69
+ require_paths:
50
70
  - lib
51
- required_ruby_version: !ruby/object:Gem::Requirement
71
+ required_ruby_version: !ruby/object:Gem::Requirement
52
72
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
60
- required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
78
  none: false
62
- requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- hash: 3
66
- segments:
67
- - 0
68
- version: "0"
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  requirements: []
70
-
71
84
  rubyforge_project:
72
- rubygems_version: 1.3.7
85
+ rubygems_version: 1.8.23
73
86
  signing_key:
74
87
  specification_version: 3
75
88
  summary: A few neat methods for a basic class
76
- test_files:
89
+ test_files:
77
90
  - spec/entasis_spec.rb
78
91
  - spec/person.rb
79
92
  - spec/spec_helper.rb