odata-model 0.1.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe33f5051420883663adf80b9d1a59b13eafec5d
4
- data.tar.gz: 126f1440868c5fd7daf861b1b15719934599756f
3
+ metadata.gz: c9af1e9a92b9ecf511d9da7347473c779824b9b8
4
+ data.tar.gz: 6172738728c6b5ed9349611bb700c5b578c3d383
5
5
  SHA512:
6
- metadata.gz: 939c3fbb81c39e03a56b412383fd9822c486aa39f0439b7efeb1b97bf8f161f34ee2c242dbbef4fa50ad0016c54b85f69f9b31e6a50d2fa19bd31e2acd727a79
7
- data.tar.gz: 5a88c0a36091e278714ca0026c164f1773f11f423ea0add97571766969063201bd1d19bd270ddeb78a3597a28d8e615e641c2cec106352eba358a3c089ee3d4e
6
+ metadata.gz: 344ff2fb53b0bc6feb3f2a9cf7ca2936a44335cb5af249d773618967d808c1772cce02bbab53a510e90a214aa79722f9091b0710e43475c745ca4dc54b525e19
7
+ data.tar.gz: c286f7a764c5597b190466b20e3a457d2dab750aed01ee91e214c06621f181807b80f9a886ea80d03b2c03f89ad13c3289172a5d1c8b1e2d471f2a96979f2661
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.2.0
4
+
5
+ * Added `odata_service_name` to private API methods
6
+ * Added `for_entity` as alternative to `use_entity_set`
7
+
3
8
  ## 0.1.1
4
9
 
5
10
  * Added bin/odata-model
data/bin/odata-model CHANGED
@@ -1,58 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- require 'odata/model'
3
2
  require 'slop'
4
- require 'erb'
5
-
6
- def validate_service_url(opts)
7
- unless opts[:service_url]
8
- puts 'You must supply a service_url (-s, --service_url=)'
9
- exit(1)
10
- end
11
- end
12
-
13
- def handle_auth_options(opts)
14
- service_options = {}
15
- if opts[:username] && opts[:password]
16
- service_options[:typhoeus] = {
17
- username: opts[:username],
18
- password: opts[:password]
19
- }
20
- if opts[:auth_type]
21
- auth_type = opts[:auth_type].to_sym
22
- service_options[:typhoeus][:httpauth] = auth_type
23
- end
24
- end
25
- service_options
26
- end
27
-
28
- class ModelTemplate
29
- attr_reader :class_name, :service_name, :properties
30
-
31
- def initialize(class_name, service_name, properties)
32
- @class_name = class_name
33
- @service_name = service_name
34
- @properties = properties
35
- end
36
3
 
37
- def template
38
- <<-EOS
39
- class <%= @class_name %>
40
- include OData::Model
41
-
42
- use_service '<%= @service_name %>'
43
-
44
- <% properties.each do |property_name, as_name| %>
45
- property '<%= property_name %>'<%= as_name.nil? ? nil : ", as: :\#\{as_name\}" %>
46
- <% end %>
47
- end
48
- EOS
49
- end
50
-
51
- def render
52
- renderer = ERB.new(template, 0, '<>')
53
- renderer.result(binding)
54
- end
55
- end
4
+ require 'odata/model'
5
+ require 'odata/model/cli/model_template'
6
+ require 'odata/model/cli/generator_configuration'
56
7
 
57
8
  opts = Slop.parse do
58
9
  banner 'Usage: odata-model <command> [options]'
@@ -69,10 +20,10 @@ opts = Slop.parse do
69
20
  on :a, :auth_type=, 'CURL authentication type (optional)', argument: :optional
70
21
 
71
22
  run do |opts, args|
72
- validate_service_url(opts)
23
+ OData::Model::CLI::GeneratorConfiguration.validate_service_url(opts)
24
+ generator = OData::Model::CLI::GeneratorConfiguration.new(opts)
73
25
 
74
- service = OData::Service.open(opts[:service_url], handle_auth_options(opts))
75
- service.entity_sets.each do |type, name|
26
+ generator.service.entity_sets.each do |type, name|
76
27
  puts "#{name} <EntityType: #{type}>"
77
28
  end
78
29
 
@@ -86,23 +37,17 @@ opts = Slop.parse do
86
37
  on :p, :password=, 'password (optional)', argument: :optional
87
38
  on :a, :auth_type=, 'CURL authentication type (optional)', argument: :optional
88
39
 
89
- on :sn, :service_name=, 'OData service name to use', argument: :optional
40
+ on :n, :service_name=, 'OData service name to use', argument: :optional
90
41
  on :m, :model_name=, 'name to give model', argument: :optional
91
42
  on :e, :entity_set=, 'EntitySet to generate model for'
92
43
 
93
- run do |opts, args|
94
- validate_service_url(opts)
44
+ on :properties=, as: Array, argument: :optional
95
45
 
96
- service = OData::Service.open(opts[:service_url], handle_auth_options(opts))
97
- entity_set = service[opts[:entity_set]]
98
- properties = service.properties_for(entity_set.type)
99
-
100
- class_name = opts[:model_name] || entity_set.type
101
- service_name = opts[:service_name] || opts[:service_url]
102
- properties = Hash[properties.collect {|k,v| [k, nil]}]
46
+ run do |opts, args|
47
+ OData::Model::CLI::GeneratorConfiguration.validate_service_url(opts)
103
48
 
104
- template = ModelTemplate.new(class_name, service_name, properties)
105
- puts template.render
49
+ generator = OData::Model::CLI::GeneratorConfiguration.new(opts)
50
+ puts generator.generate
106
51
 
107
52
  exit(0)
108
53
  end
@@ -0,0 +1,72 @@
1
+ module OData
2
+ module Model
3
+ # Module for classes related to command-line tools
4
+ module CLI
5
+ # Represents the configuration for the command-line tool responsible for
6
+ # model generation.
7
+ # @api private
8
+ class GeneratorConfiguration
9
+ attr_reader :service, :options
10
+
11
+ def initialize(options)
12
+ @options = options
13
+ @service = OData::Service.open(service_url, handle_auth_options)
14
+ end
15
+
16
+ def generate
17
+ template = ModelTemplate.new(class_name, service_name, properties)
18
+ template.render
19
+ end
20
+
21
+ def self.validate_service_url(opts)
22
+ unless opts[:service_url]
23
+ puts 'You must supply a service_url (-s, --service_url=)'
24
+ exit(1)
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def class_name
31
+ options[:model_name] || entity_set.type
32
+ end
33
+
34
+ def properties
35
+ if options[:properties]
36
+ Hash[options[:properties].collect {|property_set| property_set.split(':')}]
37
+ else
38
+ properties = service.properties_for(entity_set.type)
39
+ Hash[properties.collect {|k,v| [k, nil]}]
40
+ end
41
+ end
42
+
43
+ def service_name
44
+ options[:service_name] || service_url
45
+ end
46
+
47
+ def service_url
48
+ options[:service_url]
49
+ end
50
+
51
+ def entity_set
52
+ service[options[:entity_set]]
53
+ end
54
+
55
+ def handle_auth_options
56
+ service_options = {}
57
+ if options[:username] && options[:password]
58
+ service_options[:typhoeus] = {
59
+ username: options[:username],
60
+ password: options[:password]
61
+ }
62
+ if options[:auth_type]
63
+ auth_type = options[:auth_type].to_sym
64
+ service_options[:typhoeus][:httpauth] = auth_type
65
+ end
66
+ end
67
+ service_options
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,41 @@
1
+ require 'erb'
2
+
3
+ module OData
4
+ module Model
5
+ # Module for classes related to command-line tools
6
+ module CLI
7
+ # Represents the model template used by the command-line generator.
8
+ # @api private
9
+ class ModelTemplate
10
+ attr_reader :class_name, :service_name, :properties
11
+
12
+ def initialize(class_name, service_name, properties, entity_name)
13
+ @class_name = class_name
14
+ @service_name = service_name
15
+ @properties = properties
16
+ @entity_name = entity_name
17
+ end
18
+
19
+ def template
20
+ <<-EOS
21
+ class <%= @class_name %>
22
+ include OData::Model
23
+
24
+ use_service '<%= @service_name %>'
25
+ <%= @entity_name.nil? ? nil : "use_entity_set '\#\{@entity_name\}'" %>
26
+
27
+ <% properties.each do |property_name, as_name| %>
28
+ property '<%= property_name %>'<%= as_name.nil? ? nil : ", as: :\#\{as_name\}" %>
29
+ <% end %>
30
+ end
31
+ EOS
32
+ end
33
+
34
+ def render
35
+ renderer = ERB.new(template, 0, '<>')
36
+ renderer.result(binding)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -59,6 +59,17 @@ module OData
59
59
  nil
60
60
  end
61
61
 
62
+ # Define the entity set to use for the current OData::Model. This
63
+ # method will look up the correct EntitySet using the Entity's type
64
+ # name.
65
+ #
66
+ # @param entity_name [to_s] name of EntityType used by OData Service
67
+ # @return [nil]
68
+ def for_entity(entity_name)
69
+ odata_config[:entity_set_name] = odata_service.entity_sets[entity_name]
70
+ nil
71
+ end
72
+
62
73
  # Get the OData::Service
63
74
  # @return [OData::Service]
64
75
  # @api private
@@ -66,6 +77,13 @@ module OData
66
77
  odata_config[:service]
67
78
  end
68
79
 
80
+ # Returns the name of the OData::Service used.
81
+ # @return [String]
82
+ # @api private
83
+ def odata_service_name
84
+ odata_config[:service].name
85
+ end
86
+
69
87
  # Get the OData::Service's namespace
70
88
  # @return [String] OData Service's namespace
71
89
  # @api private
@@ -1,5 +1,5 @@
1
1
  module OData
2
2
  module Model
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ class Person
2
+ include OData::Model
3
+
4
+ use_service 'ODataDemo'
5
+ for_entity 'Person'
6
+
7
+ property 'ID'
8
+ property 'Name'
9
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData::Model do
4
+ describe 'EntitySet identification and configuration' do
5
+ describe 'default behavior' do
6
+ it { expect(Product.odata_entity_set_name).to eq('Products') }
7
+ end
8
+
9
+ describe 'using for_entity' do
10
+ it { expect(Person.odata_entity_set_name).to eq('Persons') }
11
+ end
12
+ end
13
+ end
@@ -10,5 +10,8 @@ describe OData::Model do
10
10
 
11
11
  it { expect(Product).to respond_to(:odata_namespace) }
12
12
  it { expect(Product.odata_namespace).to eq('ODataDemo') }
13
+
14
+ it { expect(Product).to respond_to(:odata_service_name) }
15
+ it { expect(Product.odata_service_name).to eq('ODataDemo') }
13
16
  end
14
17
  end
data/spec/spec_helper.rb CHANGED
@@ -20,6 +20,7 @@ OData::Service.open('http://services.odata.org/OData/OData.svc', name: 'ODataDem
20
20
 
21
21
  require 'example_models/bare_model'
22
22
  require 'example_models/odatademo_product'
23
+ require 'example_models/odatademo_person'
23
24
 
24
25
  RSpec::Matchers.define :be_boolean do
25
26
  match do |actual|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odata-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-22 00:00:00.000000000 Z
11
+ date: 2014-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,16 +157,19 @@ files:
157
157
  - lib/odata/model.rb
158
158
  - lib/odata/model/active_model.rb
159
159
  - lib/odata/model/attributes.rb
160
+ - lib/odata/model/cli/generator_configuration.rb
161
+ - lib/odata/model/cli/model_template.rb
160
162
  - lib/odata/model/configuration.rb
161
163
  - lib/odata/model/persistence.rb
162
164
  - lib/odata/model/query.rb
163
165
  - lib/odata/model/query_proxy.rb
164
- - lib/odata/model/templates/model.erb
165
166
  - lib/odata/model/version.rb
166
167
  - odata-model.gemspec
167
168
  - spec/example_models/bare_model.rb
169
+ - spec/example_models/odatademo_person.rb
168
170
  - spec/example_models/odatademo_product.rb
169
171
  - spec/model/active_model_lint_spec.rb
172
+ - spec/model/entity_set_identification_spec.rb
170
173
  - spec/model/property_defaults_spec.rb
171
174
  - spec/model/query_interface_spec.rb
172
175
  - spec/model/query_proxy_spec.rb
@@ -198,8 +201,10 @@ specification_version: 4
198
201
  summary: An ActiveModel mapping layer for the OData gem
199
202
  test_files:
200
203
  - spec/example_models/bare_model.rb
204
+ - spec/example_models/odatademo_person.rb
201
205
  - spec/example_models/odatademo_product.rb
202
206
  - spec/model/active_model_lint_spec.rb
207
+ - spec/model/entity_set_identification_spec.rb
203
208
  - spec/model/property_defaults_spec.rb
204
209
  - spec/model/query_interface_spec.rb
205
210
  - spec/model/query_proxy_spec.rb
File without changes