klassy 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 876578480efd6ee6151b969189756f8aa85825a5
4
- data.tar.gz: 7b2e075727aa9211bf872e80c9bef72177657a16
3
+ metadata.gz: ff888d87d4fd08f511a23222c408faa7b99b90ba
4
+ data.tar.gz: 8a4050708d3154dfcd2628ceb744b7c270e29857
5
5
  SHA512:
6
- metadata.gz: 8435d75c2b12d14cccc3d1b0328b0b500153884ed3afa9cc42ad1164eeccfafa38fee6ba8d13727080fee1bc7b4cafb5583653ae3ac7c41d392dc28fabe7c6bc
7
- data.tar.gz: 96b63e82fc38aa47da01459febeada036c849f416135fd8f94f4cf610d306fa983628afd348a57d018c666334627bddaaae8426f60e7ff718d55aa9c4c40282a
6
+ metadata.gz: 570ce1e29591b37f525750b46217c9004e85464cd94c0091be99ffcd280a9b3712bf0e6add3defa95a34fb1b436e241297144800b96d87a53598ac38f43c869d
7
+ data.tar.gz: 0043dc3725f95ef8815e28583fadf980005bc54d5658aa4f7500f2791d57ddff8449d1a2447f13703878d2c66f62baa30833c066f6a827bfcea5eea0c9d020fe
data/Gemfile CHANGED
@@ -4,3 +4,4 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  gem 'activesupport', '~> 4.0.0'
7
+ gem 'activemodel', '~> 4.0.0'
data/README.md CHANGED
@@ -36,11 +36,12 @@ Example:
36
36
 
37
37
  results in:
38
38
  ```
39
- #<Klassy::FirstClass @children=[
40
- #<Klassy::SecondClass @children=[
41
- #<Klassy::ThirdClass @children=[]>
42
- ], @color="green", @answer=42>
43
- ], @name="bob">
39
+ #<Klassy::FirstClass:0x007fe25397e5b8 @name="bob", @second_class=[
40
+ #<Klassy::SecondClass:0x007fe25396bd50 @color="green", @answer=42,
41
+ @third_class=[
42
+ #<Klassy::ThirdClass:0x007fe2539690f0>
43
+ ]>
44
+ ]>
44
45
  ```
45
46
 
46
47
 
@@ -1,3 +1,5 @@
1
+ require 'active_model'
2
+
1
3
  module Klassy
2
4
  class Klassic
3
5
 
@@ -15,25 +17,36 @@ module Klassy
15
17
  private
16
18
 
17
19
  def method_missing(name, *args, &block)
20
+ # find or create the class
21
+ klass = find_or_create_class(name)
22
+
18
23
  # create the object
19
- obj = create_object(name, *args, &block)
24
+ attribs = args.find{|x| x.class == Hash }
25
+ obj = create_object(klass, name, attribs)
20
26
 
21
27
  # if there's a parent, make this object one of it's children
22
- if parent
23
- parent.children << obj
24
- end
28
+ add_nested_object(name, obj) if parent
25
29
 
26
30
  # if block_given? then we have more objects to create.
27
- if block_given?
28
- Klassic.klassify({parent: obj}, &block)
29
- end
31
+ Klassic.klassify({parent: obj}, &block) if block_given?
30
32
 
31
33
  obj
32
34
  end
33
35
 
34
- def create_object(name, *args, &block)
35
- klass = find_or_create_class(name)
36
- attribs = args.find{|x| x.class == Hash }
36
+ def add_nested_object(object_name, object)
37
+ parent.instance_eval do
38
+ if respond_to? object_name
39
+ eval(object_name.to_s) << object
40
+ else
41
+ instance_variable_set "@#{object_name}", [object]
42
+ self.class.class_eval do
43
+ attr_accessor object_name
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def create_object(klass, name, attribs)
37
50
  obj = klass.new
38
51
  if attribs
39
52
  obj.instance_eval do
@@ -45,6 +58,13 @@ module Klassy
45
58
  end
46
59
  end
47
60
  end
61
+
62
+ obj.class.class_eval do
63
+ def attributes
64
+ instance_values
65
+ end
66
+ end
67
+
48
68
  obj
49
69
  end
50
70
 
@@ -53,10 +73,8 @@ module Klassy
53
73
  Klassy.const_get("#{name.to_s.camelize}")
54
74
  rescue
55
75
  Klassy.const_set("#{name.to_s.camelize}", Class.new do
56
- def initialize
57
- @children = []
58
- end
59
- attr_accessor :children
76
+ include ::ActiveModel::Serializers::JSON
77
+ include ::ActiveModel::Serializers::Xml
60
78
  end)
61
79
  end
62
80
  end
@@ -1,3 +1,3 @@
1
1
  module Klassy
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/klassy_spec.rb CHANGED
@@ -23,25 +23,25 @@ describe Klassy do
23
23
  end
24
24
 
25
25
  it "should create children recursively" do
26
- @result_object.children.first.should
26
+ @result_object.second_class.first.should
27
27
  be_an_instance_of(Klassy::SecondClass)
28
- @result_object.children.first.children.first.should
28
+ @result_object.second_class.first.third_class.first.should
29
29
  be_an_instance_of(Klassy::ThirdClass)
30
- @result_object.children.count.should eq(2)
30
+ @result_object.second_class.count.should eq(2)
31
31
  end
32
32
 
33
33
  it "should create attributes dynamically" do
34
34
  @result_object.name.should eq("bob")
35
- @result_object.children.first.color.should eq("green")
36
- @result_object.children.first.answer.should eq(42)
37
- @result_object.children.last.sky.should eq("blue")
35
+ @result_object.second_class.first.color.should eq("green")
36
+ @result_object.second_class.first.answer.should eq(42)
37
+ @result_object.second_class.last.sky.should eq("blue")
38
38
  end
39
39
 
40
40
  end
41
41
 
42
42
  describe "resulting object" do
43
43
  it "should respond to #children" do
44
- @result_object.should respond_to(:children)
44
+ @result_object.should respond_to(:second_class)
45
45
  end
46
46
 
47
47
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klassy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johnny Holton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-01 00:00:00.000000000 Z
11
+ date: 2013-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler