petroglyph 0.0.5 → 0.0.6

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/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - rbx-19mode
6
+
7
+ script: rspec spec
data/README.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  A simple, terse, and unsurprising ruby dsl to create json views.
4
4
 
5
+ [![Build Status](https://secure.travis-ci.org/kytrinyx/petroglyph.png?branch=master)](http://travis-ci.org/kytrinyx/petroglyph)
6
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/kytrinyx/petroglyph)
7
+
5
8
  ## Usage
6
9
 
7
10
  Add a node with a simple value:
@@ -85,13 +88,18 @@ In your controller:
85
88
 
86
89
  Support for partials is non-standard at this time: create a subdirectory in the directory that your template lives in and call it `partials`.
87
90
 
91
+ ## Sinatra
92
+
93
+ This works with version 1.3 of Sinatra. It may work with earlier versions.
94
+
95
+ There is a known incompatibility in Sinatra versions prior to 1.3 where a local variable named `post` will crash with Sinatra's HTTP `post` action.
96
+ The same goes for `get`, `head`, `put`, etc, but these are less likely to be resources in your application.
97
+
88
98
 
89
99
  ## Caveat
90
100
 
91
101
  There is currently no support for instance variables in Sinatra and Rails 3.
92
102
 
93
- Avoid using `post` as a local variable name in sinatra. Since the template context in sinatra is the controller, calling `post` from your template will call the http `post` action. Same goes for `get`, `head`, `put`, etc, but these are less likely to be resources in your application.
94
-
95
103
  ## Related Projects
96
104
 
97
105
  Other json templating libraries exist, some of which also generate XML.
@@ -1,3 +1,3 @@
1
1
  module Petroglyph
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/petroglyph.gemspec CHANGED
@@ -20,6 +20,6 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_runtime_dependency "tilt"
22
22
  s.add_development_dependency "rspec"
23
- s.add_development_dependency "sinatra"
23
+ s.add_development_dependency "sinatra", ">= 1.3"
24
24
  s.add_development_dependency "rack-test"
25
25
  end
data/spec/engine_spec.rb CHANGED
@@ -1,24 +1,24 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Petroglyph::Engine do
4
- specify "#to_hash" do
5
- engine = Petroglyph::Engine.new('node :whatever => thing')
6
- engine.to_hash({:thing => 'stuff'}).should eq({:whatever => 'stuff'})
4
+ specify "#to_hash takes local variables and passes them to the template" do
5
+ engine = Petroglyph::Engine.new('node :beverage => drink')
6
+ engine.to_hash({:drink => 'espresso'}).should eq({:beverage => 'espresso'})
7
7
  end
8
8
 
9
9
  it "takes a template" do
10
- engine = Petroglyph::Engine.new('node :whatever => "nevermind"')
11
- engine.render.should eq({:whatever => "nevermind"}.to_json)
10
+ engine = Petroglyph::Engine.new('node :beverage => "no, thanks"')
11
+ engine.render.should eq({:beverage => "no, thanks"}.to_json)
12
12
  end
13
13
 
14
14
  it "takes a block" do
15
15
  Petroglyph::Engine.new.render do
16
- node :whatever => "nevermind"
17
- end.should eq({:whatever => "nevermind"}.to_json)
16
+ node :beverage => "hot chocolate"
17
+ end.should eq({:beverage => "hot chocolate"}.to_json)
18
18
  end
19
19
 
20
20
  it "passes the locals" do
21
- engine = Petroglyph::Engine.new('node :whatever => thing')
22
- engine.render(nil, {:thing => 'stuff'}).should eq({:whatever => 'stuff'}.to_json)
21
+ engine = Petroglyph::Engine.new('node :beverage => drink')
22
+ engine.render(nil, {:drink => 'bai mu cha'}).should eq({:beverage => 'bai mu cha'}.to_json)
23
23
  end
24
24
  end
@@ -1 +1 @@
1
- partial :the_partial, :thing => 'stuff'
1
+ partial :the_partial, :drink => 'stuff'
@@ -1 +1 @@
1
- node :thing => thing
1
+ node :beverage => drink
@@ -1,3 +1,3 @@
1
1
  node :root do
2
- partial :the_partial, :thing => 'stuff'
2
+ partial :the_partial, :drink => 'stuff'
3
3
  end
data/spec/scope_spec.rb CHANGED
@@ -2,223 +2,227 @@ require 'spec_helper'
2
2
 
3
3
  describe Petroglyph::Scope do
4
4
 
5
- it "takes a simple string value" do
5
+ it 'takes a simple string value' do
6
6
  scope = Petroglyph::Scope.new
7
- scope.node :whatever => "nevermind"
8
- scope.value.should eq(:whatever => "nevermind")
7
+ scope.node :beverage => 'soda pop'
8
+ scope.value.should eq(:beverage => 'soda pop')
9
9
  end
10
10
 
11
- it "merges in a hash" do
12
- tea = {:tea => {:temperature => 'hot', :type => 'wulong'}}
11
+ it 'merges in a hash' do
12
+ tea = {:tea => {:type => 'wulong', :temperature => 'hot'}}
13
13
 
14
14
  scope = Petroglyph::Scope.new
15
15
  scope.merge tea
16
- scope.value.should eq({:tea => {:temperature => "hot", :type => 'wulong'}})
16
+ scope.value.should eq({:tea => {:type => 'wulong', :temperature => 'hot'}})
17
17
  end
18
18
 
19
- it "merges within a block" do
19
+ it 'merges within a block' do
20
20
  scope = Petroglyph::Scope.new
21
- scope.node :whatever do
22
- merge(:stuff => {:no => :way})
21
+ scope.node :beverage do
22
+ merge('espresso' => {:shots => 2})
23
23
  end
24
24
 
25
- scope.value.should eq({:whatever => {:stuff => {:no => :way}}})
25
+ scope.value.should eq({:beverage => {'espresso' => {:shots => 2}}})
26
26
  end
27
27
 
28
- it "lets you process what you merge in a block" do
28
+ it 'lets you process what you merge in a block' do
29
29
  scope = Petroglyph::Scope.new
30
- scope.node :whatever do
31
- merge(10) do
32
- attributes :to_s
30
+ drink = 'Zombie Driver'
31
+ def drink.tagline
32
+ 'Take your mind off the apocalypse!'
33
+ end
34
+ scope.node :beverage do
35
+ merge(drink) do
36
+ attributes :tagline
33
37
  end
34
38
  end
35
39
 
36
- scope.value.should eq({:whatever => {:to_s => '10'}})
40
+ scope.value.should eq({:beverage => {:tagline => 'Take your mind off the apocalypse!'}})
37
41
  end
38
42
 
39
- it "handles sibling nodes" do
43
+ it 'handles sibling nodes' do
40
44
  scope = Petroglyph::Scope.new
41
- scope.node :whatever => "nevermind"
42
- scope.node :stuff => "awesome"
45
+ scope.node :beverage => 'bubble milk tea'
46
+ scope.node :price => 2.5
43
47
 
44
- scope.value.should eq({:whatever => "nevermind", :stuff => "awesome"})
48
+ scope.value.should eq({:beverage => 'bubble milk tea', :price => 2.5})
45
49
  end
46
50
 
47
- it "handles sibling nodes as blocks" do
51
+ it 'handles sibling nodes as blocks' do
48
52
  scope = Petroglyph::Scope.new
49
- scope.node :whatever => "nevermind"
50
- scope.node :stuff do
51
- merge(:too => :cool)
53
+ scope.node :beverage => 'root beer float'
54
+ scope.node :ingredients do
55
+ merge(:ice_cream => 'vanilla', :root_beer => 'to taste')
52
56
  end
53
57
 
54
- scope.value.should eq({:whatever => "nevermind", :stuff => {:too => :cool}})
58
+ scope.value.should eq({:beverage => 'root beer float', :ingredients => {:ice_cream => 'vanilla', :root_beer => 'to taste'}})
55
59
  end
56
60
 
57
- it "nests nodes" do
61
+ it 'nests nodes' do
58
62
  scope = Petroglyph::Scope.new
59
- scope.node :whatever do
60
- node :stuff => "awesome"
63
+ scope.node :beverage do
64
+ node :tea => 'black'
61
65
  end
62
66
 
63
- scope.value.should eq({:whatever => {:stuff => 'awesome'}})
67
+ scope.value.should eq({:beverage => {:tea => 'black'}})
64
68
  end
65
69
 
66
- it "nests stuff arbitrarily deeply with complex values" do
70
+ it 'nests stuff arbitrarily deeply with complex values' do
67
71
  scope = Petroglyph::Scope.new
68
72
  scope.node :drink do
69
73
  node :tea do
70
74
  node :temperature do
71
- merge(:really => :hot)
75
+ merge(:really => 'hot')
72
76
  end
73
77
  end
74
78
  end
75
79
 
76
- scope.value.should eq({:drink => {:tea => {:temperature => {:really => :hot}}}})
80
+ scope.value.should eq({:drink => {:tea => {:temperature => {:really => 'hot'}}}})
77
81
  end
78
82
 
79
- it "uses regular ruby" do
83
+ it 'uses regular ruby' do
80
84
  scope = Petroglyph::Scope.new
81
- scope.node :drink do
85
+ scope.node :beverage do
82
86
  if false
83
- "cold"
87
+ 'hot'
84
88
  else
85
89
  node(:tea) do
86
- merge(:temperature => "hot".upcase)
90
+ merge(:temperature => 'iced'.upcase)
87
91
  end
88
92
  end
89
93
  end
90
94
 
91
- scope.value.should eq({:drink => {:tea => {:temperature => "HOT"}}})
95
+ scope.value.should eq({:beverage => {:tea => {:temperature => 'ICED'}}})
92
96
  end
93
97
 
94
- context "with locals" do
95
- let(:scope) { Petroglyph::Scope.new(nil, {:thing => 'stuff'}) }
98
+ context 'with locals' do
99
+ let(:scope) { Petroglyph::Scope.new(nil, {:drink => 'strawberry daikiri'}) }
96
100
 
97
101
  before(:each) do
98
102
  scope.instance_eval do
99
- node :thing => thing
103
+ node :beverage => drink
100
104
  end
101
105
  end
102
106
 
103
- it "resolves values" do
104
- scope.value.should eq({:thing => 'stuff'})
107
+ it 'resolves values' do
108
+ scope.value.should eq({:beverage => 'strawberry daikiri'})
105
109
  end
106
110
 
107
- it "responds to existing locals" do
108
- scope.respond_to?(:thing).should == true
111
+ it 'responds to existing locals' do
112
+ scope.respond_to?(:drink).should == true
109
113
  end
110
114
 
111
115
  it "doesn't respond to missing locals" do
112
116
  scope.respond_to?(:not_a_thing).should == false
113
117
  end
114
118
 
115
- it "doesn't clobber :respond_to?" do
119
+ it "doesn't clobber :respond_to? for existing methods" do
116
120
  scope.respond_to?(:value).should == true
117
121
  end
118
122
  end
119
123
 
120
- describe "within a context" do
121
- it "has access to methods" do
124
+ describe 'within a context' do
125
+ it 'has access to methods' do
122
126
  context = Object.new
123
- def context.thing
124
- 'stuff'
127
+ def context.drink
128
+ 'tisane'
125
129
  end
126
130
 
127
131
  scope = Petroglyph::Scope.new(context)
128
132
  scope.instance_eval do
129
- node :thing => thing
133
+ node :beverage => drink
130
134
  end
131
- scope.value.should eq({:thing => 'stuff'})
135
+ scope.value.should eq({:beverage => 'tisane'})
132
136
  end
133
137
 
134
- it "lets local variables take precedence over methods" do
138
+ it 'lets local variables take precedence over methods' do
135
139
  context = Object.new
136
- def context.thing
137
- 'junk'
140
+ def context.drink
141
+ 'coffee'
138
142
  end
139
143
 
140
- scope = Petroglyph::Scope.new(context, {:thing => 'stuff'})
144
+ scope = Petroglyph::Scope.new(context, {:drink => 'rooiboos tea'})
141
145
  scope.instance_eval do
142
- node :thing => thing
146
+ node :beverage => drink
143
147
  end
144
- scope.value.should eq({:thing => 'stuff'})
148
+ scope.value.should eq({:beverage => 'rooiboos tea'})
145
149
  end
146
150
  end
147
151
 
148
- describe "attributes" do
149
- it "evaluates on an object" do
150
- hal = OpenStruct.new(:name => 'HAL 9000', :temperament => 'psychotic', :garbage => 'junk')
152
+ describe 'attributes' do
153
+ it 'evaluates on an object' do
154
+ drink = OpenStruct.new(:name => "Grandma's Herb Garden", :temperature => 'luke warm', :origin => 'the garden')
151
155
 
152
156
  scope = Petroglyph::Scope.new
153
- scope.node :hal => hal do
154
- attributes :name, :temperament
157
+ scope.node :beverage => drink do
158
+ attributes :name, :temperature
155
159
  end
156
160
 
157
- scope.value.should eq({:hal => {:name => 'HAL 9000', :temperament => 'psychotic'}})
161
+ scope.value.should eq({:beverage => {:name => "Grandma's Herb Garden", :temperature => 'luke warm'}})
158
162
  end
159
163
 
160
- it "evaluates on a hash" do
161
- hal = {:name => 'HAL 9000', :temperament => 'psychotic', :garbage => 'junk'}
164
+ it 'evaluates on a hash' do
165
+ drink = {:name => 'darjeeling', :temperature => 'piping hot', :origin => 'the store'}
162
166
 
163
167
  scope = Petroglyph::Scope.new
164
- scope.node :hal => hal do
165
- attributes :name, :temperament
168
+ scope.node :beverage => drink do
169
+ attributes :name, :temperature
166
170
  end
167
171
 
168
- scope.value.should eq({:hal => {:name => 'HAL 9000', :temperament => 'psychotic'}})
172
+ scope.value.should eq({:beverage => {:name => 'darjeeling', :temperature => 'piping hot'}})
169
173
  end
170
174
  end
171
175
 
172
- context "with a collection" do
176
+ context 'with a collection' do
173
177
  let(:tea) { OpenStruct.new(:type => 'tea', :temperature => 'hot') }
174
- let(:coffee) { OpenStruct.new(:type => 'coffee', :temperature => 'lukewarm') }
178
+ let(:coffee) { OpenStruct.new(:type => 'coffee', :temperature => 'warm') }
175
179
  let(:drinks) { [tea, coffee] }
176
180
 
177
- it "evaluates attributes" do
181
+ it 'evaluates attributes' do
178
182
  scope = Petroglyph::Scope.new
179
- scope.collection :drinks => drinks do
183
+ scope.collection :beverages => drinks do
180
184
  attributes :type, :temperature
181
185
  end
182
186
 
183
- scope.value.should eq({:drinks => [{:type => 'tea', :temperature => 'hot'}, {:type => 'coffee', :temperature => 'lukewarm'}]})
187
+ scope.value.should eq({:beverages => [{:type => 'tea', :temperature => 'hot'}, {:type => 'coffee', :temperature => 'warm'}]})
184
188
  end
185
189
 
186
- it "evaluates attributes on explicitly named items" do
190
+ it 'evaluates attributes on explicitly named items' do
187
191
  scope = Petroglyph::Scope.new
188
- scope.collection :drinks => drinks do |drink|
192
+ scope.collection :beverages => drinks do |drink|
189
193
  node :drink do
190
194
  node :type => drink.type
191
195
  end
192
196
  node :prep => "Make water #{drink.temperature}."
193
197
  end
194
198
 
195
- scope.value.should eq({:drinks => [{:drink => {:type => 'tea'}, :prep => "Make water hot."}, {:drink => {:type => 'coffee'}, :prep => "Make water lukewarm."}]})
199
+ scope.value.should eq({:beverages => [{:drink => {:type => 'tea'}, :prep => 'Make water hot.'}, {:drink => {:type => 'coffee'}, :prep => 'Make water warm.'}]})
196
200
  end
197
201
 
198
- it "evaluates object attributes within a sub node" do
202
+ it 'evaluates object attributes within a sub node' do
199
203
  scope = Petroglyph::Scope.new
200
- scope.collection :drinks => drinks do |drink|
204
+ scope.collection :beverages => drinks do |drink|
201
205
  node :drink => drink do
202
206
  attributes :type
203
207
  end
204
- node :prep => "Make water #{drink.temperature}."
208
+ node :prep => "Water should be #{drink.temperature}."
205
209
  end
206
210
 
207
- scope.value.should eq({:drinks => [{:drink => {:type => 'tea'}, :prep => "Make water hot."}, {:drink => {:type => 'coffee'}, :prep => "Make water lukewarm."}]})
211
+ scope.value.should eq({:beverages => [{:drink => {:type => 'tea'}, :prep => 'Water should be hot.'}, {:drink => {:type => 'coffee'}, :prep => 'Water should be warm.'}]})
208
212
  end
209
213
 
210
- it "evaluates an empty collection to an empty array" do
214
+ it 'evaluates an empty collection to an empty array' do
211
215
  scope = Petroglyph::Scope.new
212
- scope.collection :drinks => [] do |drink|
216
+ scope.collection :beverages => [] do |drink|
213
217
  node :drink => drink
214
218
  end
215
219
 
216
- scope.value.should eq({:drinks => []})
220
+ scope.value.should eq({:beverages => []})
217
221
  end
218
222
  end
219
223
 
220
- context "with partials" do
221
- it "renders a partial" do
224
+ context 'with partials' do
225
+ it 'renders a partial' do
222
226
  Petroglyph.stub(:partial) { 'node :drink => "tea"' }
223
227
 
224
228
  scope = Petroglyph::Scope.new
@@ -229,7 +233,7 @@ describe Petroglyph::Scope do
229
233
  scope.value.should eq({:partial => {:drink => 'tea'}})
230
234
  end
231
235
 
232
- it "renders a partial with local variables" do
236
+ it 'renders a partial with local variables' do
233
237
  Petroglyph.stub(:partial) { 'node :drink => drink' }
234
238
 
235
239
  scope = Petroglyph::Scope.new
@@ -240,30 +244,32 @@ describe Petroglyph::Scope do
240
244
  scope.value.should eq({:partial => {:drink => 'tea'}})
241
245
  end
242
246
 
243
- it "defaults locals to match the name of the partial" do
244
- Petroglyph.stub(:partial) { 'node :drink => drink' }
247
+ it 'defaults locals to match the name of the partial' do
248
+ Petroglyph.stub(:partial) { 'node :beverage => drink' }
245
249
 
246
250
  scope = Petroglyph::Scope.new(nil, {:drink => 'coffee'})
247
- scope.node :drinks do
251
+ scope.node :beverages do
248
252
  partial :drink
249
253
  end
250
254
 
251
- scope.value.should eq({:drinks => {:drink => 'coffee'}})
255
+ scope.value.should eq({:beverages => {:beverage => 'coffee'}})
252
256
  end
253
257
 
254
- it "finds the partial" do
258
+ it 'finds the partial' do
255
259
  scope = Petroglyph::Scope.new
256
- scope.file = "spec/fixtures/views/some_template.pg"
260
+ # Pretend that this node is defined in some_template
261
+ # so that we have a decent relative path for the partial.
262
+ scope.file = 'spec/fixtures/views/some_template.pg'
257
263
  scope.node :partial do
258
- partial :the_partial, :thing => 'stuff'
264
+ partial :the_partial, :drink => 'mocha'
259
265
  end
260
266
 
261
- scope.value.should eq({:partial => {:thing => 'stuff'}})
267
+ scope.value.should eq({:partial => {:beverage => 'mocha'}})
262
268
  end
263
269
 
264
- it "finds the partial in a subdirectory" do
270
+ it 'finds the partial in a subdirectory' do
265
271
  scope = Petroglyph::Scope.new
266
- scope.file = "spec/fixtures/views/some_template.pg"
272
+ scope.file = 'spec/fixtures/views/some_template.pg'
267
273
  scope.node :partial do
268
274
  partial :sub_partial, :thing => 'stuff'
269
275
  end
@@ -271,15 +277,15 @@ describe Petroglyph::Scope do
271
277
  scope.value.should eq({:partial => {:thing => 'stuff'}})
272
278
  end
273
279
 
274
- it "finds nested partials" do
280
+ it 'finds nested partials' do
275
281
  scope = Petroglyph::Scope.new
276
- scope.file = "spec/fixtures/views/some_template.pg"
282
+ scope.file = 'spec/fixtures/views/some_template.pg'
277
283
 
278
284
  scope.node :partial do
279
285
  partial :nested_partial
280
286
  end
281
287
 
282
- scope.value.should eq({:partial => {:thing => 'stuff'}})
288
+ scope.value.should eq({:partial => {:beverage => 'stuff'}})
283
289
  end
284
290
  end
285
291
  end
@@ -30,10 +30,7 @@ describe "Sinatra integration" do
30
30
  last_response.body.should eq '{"drinks":[{"type":"tea","temperature":"hot"},{"type":"coffee","temperature":"lukewarm"}]}'
31
31
  end
32
32
 
33
- it "overshadows the controller methods" do
34
- # look at /views/fixtures/post.pg
35
- # and line 18 of this file
36
- pending "right now if you refer to a local var 'post' in the template, you will accidentally call sinatra's post method"
33
+ it "doesn't get overshadowed by controller methods (issue #5)" do
37
34
  post '/'
38
35
  last_response.body.should eq "{\"post\":\"a post\"}"
39
36
  end
data/spec/tilt_spec.rb CHANGED
@@ -32,7 +32,7 @@ describe "Tilt integration" do
32
32
  context "with partials" do
33
33
  it "loads the partial" do
34
34
  template = Tilt::PetroglyphTemplate.new('spec/fixtures/views/with_partial.pg')
35
- template.render.should eq('{"root":{"thing":"stuff"}}')
35
+ template.render.should eq('{"root":{"beverage":"stuff"}}')
36
36
  end
37
37
 
38
38
  it "loads the partial from a subdirectory" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: petroglyph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-18 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tilt
16
- requirement: &70270581389760 !ruby/object:Gem::Requirement
16
+ requirement: &70296704591240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70270581389760
24
+ version_requirements: *70296704591240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70270581388680 !ruby/object:Gem::Requirement
27
+ requirement: &70296704590820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,21 +32,21 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70270581388680
35
+ version_requirements: *70296704590820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sinatra
38
- requirement: &70270581387860 !ruby/object:Gem::Requirement
38
+ requirement: &70296704590320 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
- version: '0'
43
+ version: '1.3'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70270581387860
46
+ version_requirements: *70296704590320
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack-test
49
- requirement: &70270581387260 !ruby/object:Gem::Requirement
49
+ requirement: &70296704589900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70270581387260
57
+ version_requirements: *70296704589900
58
58
  description: A simple, terse, and unsurprising ruby dsl to create json views.
59
59
  email:
60
60
  - katrina.owen@gmail.com
@@ -65,6 +65,7 @@ files:
65
65
  - .gitignore
66
66
  - .rspec
67
67
  - .simplecov
68
+ - .travis.yml
68
69
  - Gemfile
69
70
  - README.md
70
71
  - Rakefile
@@ -118,3 +119,4 @@ signing_key:
118
119
  specification_version: 3
119
120
  summary: A simple, terse, and unsurprising ruby dsl to create json views.
120
121
  test_files: []
122
+ has_rdoc: